blob: d4a060ec6a4dac1952b9eaf714ad8facbdacdbff [file] [log] [blame]
// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_CHROME_CLEANER_HTTP_INTERNET_HELPERS_H_
#define CHROME_CHROME_CLEANER_HTTP_INTERNET_HELPERS_H_
#include <Windows.h> // NOLINT
#include <stdint.h>
#include <map>
#include <string>
#include "base/strings/string16.h"
namespace chrome_cleaner {
// Parses the value of a Content-Type header.
// @param content_type_str The value of a Content-Type HTTP header (without the
// label or ':').
// @param mime_type Receives the specified mime-type, if any, in lower-case.
// Unmodified otherwise.
// @param charset Receives the specified charset, if any, in lower-case.
// Unmodified otherwise.
// @param boundary Optional. Receives the (quoted) value of the boundary
// parameter, if any. Unmodified otherwise.
void ParseContentType(const base::string16& content_type_str,
base::string16* mime_type,
base::string16* charset,
bool* had_charset,
base::string16* boundary);
// Parses an URL.
// @param url The URL to parse.
// @param scheme Receives the parsed scheme.
// @param host Receives the parsed host.
// @param port Receives the parsed port (or the implicit default port).
// @param path Receives the parsed path.
// @returns true if the URL is successfully parsed.
bool DecomposeUrl(const base::string16& url,
base::string16* scheme,
base::string16* host,
uint16_t* port,
base::string16* path);
// Composes an HTTP or HTTPS URL.
// @param host The URL host component.
// @param port The URL port component.
// @param path The URL path component.
// @returns The composed URL.
base::string16 ComposeUrl(const base::string16& host,
uint16_t port,
const base::string16& path,
bool secure);
// @returns A random string to be used as a multipart MIME message boundary.
base::string16 GenerateMultipartHttpRequestBoundary();
// Generates an appropriate Content-Type header (starting with "Content-Type:")
// for a multi-part HTTP message.
// @param boundary The MIME boundary to use.
// @returns An HTTP Content-Type header suitable for the multipart message
// generated by GenerateMultipartHttpRequestBody.
base::string16 GenerateMultipartHttpRequestContentTypeHeader(
const base::string16 boundary);
// Generates a multipart HTTP message body.
// @param parameters HTTP request parameters to be encoded in the body.
// @param upload_file File contents to be encoded in the body.
// @param file_part_name The parameter name to be assigned to the file part.
// @param boundary The MIME boundary to use.
// @returns A multipart HTTP message body.
std::string GenerateMultipartHttpRequestBody(
const std::map<base::string16, base::string16>& parameters,
const std::string& upload_file,
const base::string16& file_part_name,
const base::string16& boundary);
} // namespace chrome_cleaner
#endif // CHROME_CHROME_CLEANER_HTTP_INTERNET_HELPERS_H_