str_printfa(req->headers, "%s: %s\r\n", key, value);
}
+void http_client_request_remove_header(struct http_client_request *req,
+ const char *key)
+{
+ const unsigned char *data, *p;
+ size_t size, line_len, line_start_pos;
+ unsigned int key_len = strlen(key);
+
+ i_assert(req->state == HTTP_REQUEST_STATE_NEW ||
+ /* allow calling for retries */
+ req->state == HTTP_REQUEST_STATE_GOT_RESPONSE ||
+ req->state == HTTP_REQUEST_STATE_ABORTED);
+
+ data = str_data(req->headers);
+ size = str_len(req->headers);
+ while ((p = memchr(data, '\n', size)) != NULL) {
+ line_len = (p+1) - data;
+ if (size > key_len && i_memcasecmp(data, key, key_len) == 0 &&
+ data[key_len] == ':' && data[key_len+1] == ' ') {
+ /* key was found from header, replace its value */
+ line_start_pos = str_len(req->headers) - size;
+ str_delete(req->headers, line_start_pos, line_len);
+ break;
+ }
+ size -= line_len;
+ data += line_len;
+ }
+}
+
void http_client_request_set_date(struct http_client_request *req,
time_t date)
{
void http_client_request_add_header(struct http_client_request *req,
const char *key, const char *value);
+void http_client_request_remove_header(struct http_client_request *req,
+ const char *key);
void http_client_request_set_date(struct http_client_request *req,
time_t date);