Commit 38bd6bf0 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

bundles: store no/default/pipeline/multiplex

to allow code to act differently on the situation.

Also added some more info message for the connection re-use function to
make it clearer when connections are not re-used.
parent be4c8fd1
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ static CURLcode bundle_create(struct SessionHandle *data,
    return CURLE_OUT_OF_MEMORY;

  (*cb_ptr)->num_connections = 0;
  (*cb_ptr)->server_supports_pipelining = FALSE;
  (*cb_ptr)->multiuse = BUNDLE_UNKNOWN;

  (*cb_ptr)->conn_list = Curl_llist_alloc((curl_llist_dtor) conn_llist_dtor);
  if(!(*cb_ptr)->conn_list) {
@@ -205,10 +205,8 @@ CURLcode Curl_conncache_add_conn(struct conncache *connc,
      return result;

    key = hashkey(conn);
    if(!key) {
      bundle_destroy(new_bundle);
    if(!key)
      return CURLE_OUT_OF_MEMORY;
    }

    rc = conncache_add_bundle(data->state.conn_cache, key, new_bundle);
    free(key);
+6 −2
Original line number Diff line number Diff line
@@ -30,9 +30,13 @@ struct conncache {
  struct timeval last_cleanup;
};

#define BUNDLE_NO_MULTIUSE -1
#define BUNDLE_UNKNOWN     0  /* initial value */
#define BUNDLE_PIPELINING  1
#define BUNDLE_MULTIPLEX   2

struct connectbundle {
  bool server_supports_pipelining; /* TRUE if server supports pipelining,
                                      set after first response */
  int multiuse;                 /* supports multi-use */
  size_t num_connections;       /* Number of connections in the bundle */
  struct curl_llist *conn_list; /* The connectdata members of the bundle */
};
+4 −4
Original line number Diff line number Diff line
@@ -3375,7 +3375,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,

          /* HTTP/2 cannot blacklist multiplexing since it is a core
             functionality of the protocol */
          conn->bundle->server_supports_pipelining = TRUE;
          conn->bundle->multiuse = BUNDLE_MULTIPLEX;
        }
        else if(conn->httpversion >= 11 &&
                !conn->bits.close) {
@@ -3390,7 +3390,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
          cb_ptr = conn->bundle;
          if(cb_ptr) {
            if(!Curl_pipeline_site_blacklisted(data, conn))
              cb_ptr->server_supports_pipelining = TRUE;
              cb_ptr->multiuse = BUNDLE_PIPELINING;
          }
        }

@@ -3474,9 +3474,9 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
        char *server_name = Curl_copy_header_value(k->p);

        /* Turn off pipelining if the server version is blacklisted  */
        if(conn->bundle && conn->bundle->server_supports_pipelining) {
        if(conn->bundle && (conn->bundle->multiuse == BUNDLE_PIPELINING)) {
          if(Curl_pipeline_server_blacklisted(data, server_name))
            conn->bundle->server_supports_pipelining = FALSE;
            conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
        }
        free(server_name);
      }
+2 −2
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@
#include "curl_base64.h"
#include "rawstr.h"
#include "multiif.h"
#include "bundles.h"
#include "conncache.h"

/* The last #include files should be: */
#include "curl_memory.h"
@@ -1196,7 +1196,7 @@ CURLcode Curl_http2_setup(struct connectdata *conn)

  conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
  conn->httpversion = 20;
  conn->bundle->server_supports_pipelining = TRUE;
  conn->bundle->multiuse = BUNDLE_MULTIPLEX;

  return CURLE_OK;
}
+0 −5
Original line number Diff line number Diff line
@@ -2730,11 +2730,6 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi)
  return multi ? multi->max_total_connections : 0;
}

size_t Curl_multi_max_pipeline_length(struct Curl_multi *multi)
{
  return multi ? multi->max_pipeline_length : 0;
}

curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi)
{
  return multi ? multi->content_length_penalty_size : 0;
Loading