You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by gs...@apache.org on 2012/06/20 20:02:58 UTC
svn commit: r1352242 - in /subversion/trunk/subversion/libsvn_ra_serf:
property.c ra_serf.h serf.c update.c util.c
Author: gstein
Date: Wed Jun 20 18:02:58 2012
New Revision: 1352242
URL: http://svn.apache.org/viewvc?rev=1352242&view=rev
Log:
There are a number of flags and values for communicating with the
host. These are common to the whole session, rather than
per-connection. Move/use the flags from the session.
* subversion/libsvn_ra_serf/ra_serf.h:
(svn_ra_serf__connection_t): remove HTTP10, HOSTNAME, USING_SSL,
USING_COMPRESSION, and USERAGENT members.
(svn_ra_serf__session_t): add USERAGENT and HTTP10 members
* subversion/libsvn_ra_serf/property.c:
(setup_propfind_headers): get USING_COMPRESSION flag from the
session rather than the connection
* subversion/libsvn_ra_serf/serf.c:
(svn_ra_serf__open): initialize the new HTTP10 and USERAGENT session
members. stop copying values into now-obsolete connection members.
* subversion/libsvn_ra_serf/update.c:
(headers_fetch, headers_report): get USING_COMPRESSION from the session
(open_connection_if_needed): stop copying over flags to the new
connection.
* subversion/libsvn_ra_serf/util.c:
(ssl_server_cert): get the hostname from session->session_url rather
than a copy of it in the connection structure
(conn_setup): look in the session for USING_SSL and the hostname
(connection_closed): look in the session for USING_SSL
(setup_serf_req): take a session rather than a connection, and look
there for the HTTP10 and USERAGENT values
(handle_response): disable the special HTTP/1.0 requests if we see
the server reports 1.1 (or later).
(setup_request): pass a session to setup_serf_req()
Modified:
subversion/trunk/subversion/libsvn_ra_serf/property.c
subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h
subversion/trunk/subversion/libsvn_ra_serf/serf.c
subversion/trunk/subversion/libsvn_ra_serf/update.c
subversion/trunk/subversion/libsvn_ra_serf/util.c
Modified: subversion/trunk/subversion/libsvn_ra_serf/property.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/property.c?rev=1352242&r1=1352241&r2=1352242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/property.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/property.c Wed Jun 20 18:02:58 2012
@@ -374,7 +374,7 @@ setup_propfind_headers(serf_bucket_t *he
{
propfind_context_t *ctx = setup_baton;
- if (ctx->conn->using_compression)
+ if (ctx->sess->using_compression)
{
serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
}
Modified: subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h?rev=1352242&r1=1352241&r2=1352242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/ra_serf.h Wed Jun 20 18:02:58 2012
@@ -71,22 +71,11 @@ typedef struct svn_ra_serf__connection_t
/* Our connection to a server. */
serf_connection_t *conn;
- /* The server is not Apache/mod_dav_svn (directly) and only supports
- HTTP/1.0. Thus, we cannot send chunked requests. */
- svn_boolean_t http10;
-
/* Bucket allocator for this connection. */
serf_bucket_alloc_t *bkt_alloc;
- /* Host name */
- const char *hostname;
-
- /* Are we using ssl */
- svn_boolean_t using_ssl;
- int server_cert_failures; /* Collected cert failures in chain */
-
- /* Should we ask for compressed responses? */
- svn_boolean_t using_compression;
+ /* Collected cert failures in chain. */
+ int server_cert_failures;
/* What was the last HTTP status code we got on this connection? */
int last_status_code;
@@ -98,9 +87,6 @@ typedef struct svn_ra_serf__connection_t
svn_ra_serf__session_t *session;
- /* user agent string */
- const char *useragent;
-
} svn_ra_serf__connection_t;
/** Max. number of connctions we'll open to the server. */
@@ -124,6 +110,9 @@ struct svn_ra_serf__session_t {
/* Should we ask for compressed responses? */
svn_boolean_t using_compression;
+ /* The user agent string */
+ const char *useragent;
+
/* The current connection */
svn_ra_serf__connection_t *conns[MAX_NR_OF_CONNS];
int num_conns;
@@ -137,6 +126,10 @@ struct svn_ra_serf__session_t {
apr_uri_t repos_root;
const char *repos_root_str;
+ /* The server is not Apache/mod_dav_svn (directly) and only supports
+ HTTP/1.0. Thus, we cannot send chunked requests. */
+ svn_boolean_t http10;
+
/* Our Version-Controlled-Configuration; may be NULL until we know it. */
const char *vcc_url;
Modified: subversion/trunk/subversion/libsvn_ra_serf/serf.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/serf.c?rev=1352242&r1=1352241&r2=1352242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/serf.c Wed Jun 20 18:02:58 2012
@@ -397,30 +397,27 @@ svn_ra_serf__open(svn_ra_session_t *sess
serf_sess->capabilities = apr_hash_make(serf_sess->pool);
+ serf_sess->http10 = TRUE; /* until we confirm HTTP/1.1 */
+ serf_sess->http10 = FALSE; /* ### don't change behavior yet */
+
SVN_ERR(load_config(serf_sess, config, serf_sess->pool));
serf_sess->conns[0] = apr_pcalloc(serf_sess->pool,
sizeof(*serf_sess->conns[0]));
- serf_sess->conns[0]->http10 = TRUE; /* until we confirm HTTP/1.1 */
- serf_sess->conns[0]->http10 = FALSE; /* ### don't change behavior yet */
serf_sess->conns[0]->bkt_alloc =
serf_bucket_allocator_create(serf_sess->pool, NULL, NULL);
serf_sess->conns[0]->session = serf_sess;
serf_sess->conns[0]->last_status_code = -1;
- serf_sess->conns[0]->using_ssl = serf_sess->using_ssl;
- serf_sess->conns[0]->using_compression = serf_sess->using_compression;
- serf_sess->conns[0]->hostname = url.hostname;
-
/* create the user agent string */
if (callbacks->get_client_string)
callbacks->get_client_string(callback_baton, &client_string, pool);
if (client_string)
- serf_sess->conns[0]->useragent = apr_pstrcat(pool, USER_AGENT, "/",
- client_string, (char *)NULL);
+ serf_sess->useragent = apr_pstrcat(pool, USER_AGENT, "/",
+ client_string, (char *)NULL);
else
- serf_sess->conns[0]->useragent = USER_AGENT;
+ serf_sess->useragent = USER_AGENT;
/* go ahead and tell serf about the connection. */
status =
Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/update.c?rev=1352242&r1=1352241&r2=1352242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/update.c Wed Jun 20 18:02:58 2012
@@ -730,7 +730,7 @@ headers_fetch(serf_bucket_t *headers,
serf_bucket_headers_setn(headers, "Accept-Encoding",
"svndiff1;q=0.9,svndiff;q=0.8");
}
- else if (fetch_ctx->conn->using_compression)
+ else if (fetch_ctx->sess->using_compression)
{
serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
}
@@ -2269,16 +2269,10 @@ open_connection_if_needed(svn_ra_serf__s
apr_status_t status;
sess->conns[cur] = apr_pcalloc(sess->pool, sizeof(*sess->conns[cur]));
- sess->conns[cur]->http10 = TRUE; /* until we confirm HTTP/1.1 */
- sess->conns[cur]->http10 = FALSE; /* ### don't change behavior yet */
sess->conns[cur]->bkt_alloc = serf_bucket_allocator_create(sess->pool,
NULL, NULL);
- sess->conns[cur]->hostname = sess->conns[0]->hostname;
- sess->conns[cur]->using_ssl = sess->conns[0]->using_ssl;
- sess->conns[cur]->using_compression = sess->conns[0]->using_compression;
sess->conns[cur]->last_status_code = -1;
sess->conns[cur]->session = sess;
- sess->conns[cur]->useragent = sess->conns[0]->useragent;
status = serf_connection_create2(&sess->conns[cur]->conn,
sess->context,
sess->session_url,
@@ -2321,7 +2315,7 @@ headers_report(serf_bucket_t *headers,
{
report_context_t *report = baton;
- if (report->conn->using_compression)
+ if (report->sess->using_compression)
{
serf_bucket_headers_setn(headers, "Accept-Encoding", "gzip");
}
Modified: subversion/trunk/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/util.c?rev=1352242&r1=1352241&r2=1352242&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/util.c Wed Jun 20 18:02:58 2012
@@ -257,7 +257,7 @@ ssl_server_cert(void *baton, int failure
int i;
for (i = 0; i < san->nelts; i++) {
char *s = APR_ARRAY_IDX(san, i, char*);
- if (apr_fnmatch(s, conn->hostname,
+ if (apr_fnmatch(s, conn->session->session_url.hostname,
APR_FNM_PERIOD) == APR_SUCCESS) {
found_matching_hostname = 1;
cert_info.hostname = s;
@@ -269,7 +269,7 @@ ssl_server_cert(void *baton, int failure
/* Match server certificate CN with the hostname of the server */
if (!found_matching_hostname && cert_info.hostname)
{
- if (apr_fnmatch(cert_info.hostname, conn->hostname,
+ if (apr_fnmatch(cert_info.hostname, conn->session->session_url.hostname,
APR_FNM_PERIOD) == APR_FNM_NOMATCH)
{
svn_failures |= SVN_AUTH_SSL_CNMISMATCH;
@@ -364,7 +364,7 @@ conn_setup(apr_socket_t *sock,
*read_bkt = serf_context_bucket_socket_create(conn->session->context,
sock, conn->bkt_alloc);
- if (conn->using_ssl)
+ if (conn->session->using_ssl)
{
/* input stream */
*read_bkt = serf_bucket_ssl_decrypt_create(*read_bkt, conn->ssl_context,
@@ -374,7 +374,8 @@ conn_setup(apr_socket_t *sock,
conn->ssl_context = serf_bucket_ssl_encrypt_context_get(*read_bkt);
#if SERF_VERSION_AT_LEAST(1,0,0)
- serf_ssl_set_hostname(conn->ssl_context, conn->hostname);
+ serf_ssl_set_hostname(conn->ssl_context,
+ conn->session->session_url.hostname);
#endif
serf_ssl_client_cert_provider_set(conn->ssl_context,
@@ -479,7 +480,7 @@ connection_closed(svn_ra_serf__connectio
SVN_ERR_MALFUNCTION();
}
- if (conn->using_ssl)
+ if (conn->session->using_ssl)
conn->ssl_context = NULL;
return SVN_NO_ERROR;
@@ -632,7 +633,7 @@ static svn_error_t *
setup_serf_req(serf_request_t *request,
serf_bucket_t **req_bkt,
serf_bucket_t **hdrs_bkt,
- svn_ra_serf__connection_t *conn,
+ svn_ra_serf__session_t *session,
const char *method, const char *url,
serf_bucket_t *body_bkt, const char *content_type,
apr_pool_t *request_pool,
@@ -643,7 +644,7 @@ setup_serf_req(serf_request_t *request,
#if SERF_VERSION_AT_LEAST(1, 1, 0)
svn_spillbuf_t *buf;
- if (conn->http10 && body_bkt != NULL)
+ if (session->http10 && body_bkt != NULL)
{
/* Ugh. Use HTTP/1.0 to talk to the server because we don't know if
it speaks HTTP/1.1 (and thus, chunked requests), or because the
@@ -669,7 +670,7 @@ setup_serf_req(serf_request_t *request,
/* Set the Content-Length value. This will also trigger an HTTP/1.0
request (rather than the default chunked request). */
#if SERF_VERSION_AT_LEAST(1, 1, 0)
- if (conn->http10)
+ if (session->http10)
{
if (body_bkt == NULL)
serf_bucket_request_set_CL(*req_bkt, 0);
@@ -680,10 +681,10 @@ setup_serf_req(serf_request_t *request,
*hdrs_bkt = serf_bucket_request_get_headers(*req_bkt);
- /* We use serf_bucket_headers_setn() because the string below have a
+ /* We use serf_bucket_headers_setn() because the USERAGENT has a
lifetime longer than this bucket. Thus, there is no need to copy
the header values. */
- serf_bucket_headers_setn(*hdrs_bkt, "User-Agent", conn->useragent);
+ serf_bucket_headers_setn(*hdrs_bkt, "User-Agent", session->useragent);
if (content_type)
{
@@ -1774,6 +1775,10 @@ handle_response(serf_request_t *request,
handler->sline = sl;
handler->sline.reason = apr_pstrdup(handler->handler_pool, sl.reason);
+
+ /* HTTP/1.1? (or later) */
+ if (sl.version != SERF_HTTP_10)
+ handler->session->http10 = FALSE;
}
/* Keep reading from the network until we've read all the headers. */
@@ -2030,7 +2035,7 @@ setup_request(serf_request_t *request,
}
SVN_ERR(setup_serf_req(request, req_bkt, &headers_bkt,
- handler->conn, handler->method, handler->path,
+ handler->session, handler->method, handler->path,
body_bkt, handler->body_type,
request_pool, scratch_pool));