]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: Add http_client_request_add_missing_header()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 27 May 2019 15:25:38 +0000 (18:25 +0300)
committerMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Tue, 11 Jun 2019 10:49:27 +0000 (13:49 +0300)
src/lib-http/http-client-request.c
src/lib-http/http-client.h

index 3b2a5c0e57d31eb09dd7340cf546d60c80dc686f..753d8949ef4f2737dd48e0ff2c9e1db9be998ee3 100644 (file)
@@ -364,8 +364,10 @@ http_client_request_lookup_header_pos(struct http_client_request *req,
        return FALSE;
 }
 
-void http_client_request_add_header(struct http_client_request *req,
-                                   const char *key, const char *value)
+static void
+http_client_request_add_header_full(struct http_client_request *req,
+                                   const char *key, const char *value,
+                                   bool replace_existing)
 {
        size_t key_pos, value_pos, next_pos;
 
@@ -418,13 +420,25 @@ void http_client_request_add_header(struct http_client_request *req,
        if (!http_client_request_lookup_header_pos(req, key, &key_pos,
                                                   &value_pos, &next_pos))
                str_printfa(req->headers, "%s: %s\r\n", key, value);
-       else {
+       else if (replace_existing) {
                /* don't delete CRLF */
                size_t old_value_len = next_pos - value_pos - 2;
                str_replace(req->headers, value_pos, old_value_len, value);
        }
 }
 
+void http_client_request_add_header(struct http_client_request *req,
+                                   const char *key, const char *value)
+{
+       http_client_request_add_header_full(req, key, value, TRUE);
+}
+
+void http_client_request_add_missing_header(struct http_client_request *req,
+                                           const char *key, const char *value)
+{
+       http_client_request_add_header_full(req, key, value, FALSE);
+}
+
 void http_client_request_remove_header(struct http_client_request *req,
                                       const char *key)
 {
index 0bd71d8b390c7d8e91711fa9a63cd931ccb09109..1f0dbba444c0b1469056e6b8d3bed12be5597bb9 100644 (file)
@@ -284,6 +284,9 @@ void http_client_request_set_preserve_exact_reason(struct http_client_request *r
    the value is replaced. */
 void http_client_request_add_header(struct http_client_request *req,
                                    const char *key, const char *value);
+/* add a custom header to the request. Do nothing if it was already added. */
+void http_client_request_add_missing_header(struct http_client_request *req,
+                                           const char *key, const char *value);
 /* remove a header added earlier. This has no influence on implicitly created
    headers. */
 void http_client_request_remove_header(struct http_client_request *req,