diff options
Diffstat (limited to 'subversion/libsvn_ra_serf/util.c')
-rw-r--r-- | subversion/libsvn_ra_serf/util.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/subversion/libsvn_ra_serf/util.c b/subversion/libsvn_ra_serf/util.c index c7a171627e2b..ce1e31a94c8a 100644 --- a/subversion/libsvn_ra_serf/util.c +++ b/subversion/libsvn_ra_serf/util.c @@ -373,10 +373,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->session->session_url.hostname); -#endif serf_ssl_client_cert_provider_set(conn->ssl_context, svn_ra_serf__handle_client_cert, @@ -477,7 +475,7 @@ connection_closed(svn_ra_serf__connection_t *conn, { if (why) { - SVN_ERR_MALFUNCTION(); + return svn_error_wrap_apr(why, NULL); } if (conn->session->using_ssl) @@ -642,10 +640,10 @@ setup_serf_req(serf_request_t *request, { serf_bucket_alloc_t *allocator = serf_request_get_alloc(request); -#if SERF_VERSION_AT_LEAST(1, 1, 0) svn_spillbuf_t *buf; + svn_boolean_t set_CL = session->http10 || !session->using_chunked_requests; - if (session->http10 && body_bkt != NULL) + if (set_CL && 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 @@ -665,7 +663,6 @@ setup_serf_req(serf_request_t *request, request_pool, scratch_pool); } -#endif /* Create a request bucket. Note that this sucker is kind enough to add a "Host" header for us. */ @@ -674,15 +671,13 @@ 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 (session->http10) + if (set_CL) { if (body_bkt == NULL) serf_bucket_request_set_CL(*req_bkt, 0); else serf_bucket_request_set_CL(*req_bkt, svn_spillbuf__get_size(buf)); } -#endif *hdrs_bkt = serf_bucket_request_get_headers(*req_bkt); @@ -696,10 +691,10 @@ setup_serf_req(serf_request_t *request, serf_bucket_headers_setn(*hdrs_bkt, "Content-Type", content_type); } -#if SERF_VERSION_AT_LEAST(1, 1, 0) if (session->http10) + { serf_bucket_headers_setn(*hdrs_bkt, "Connection", "keep-alive"); -#endif + } if (accept_encoding) { @@ -2390,17 +2385,17 @@ svn_ra_serf__report_resource(const char **report_target, } svn_error_t * -svn_ra_serf__error_on_status(int status_code, +svn_ra_serf__error_on_status(serf_status_line sline, const char *path, const char *location) { - switch(status_code) + switch(sline.code) { case 301: case 302: case 307: return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL, - (status_code == 301) + (sline.code == 301) ? _("Repository moved permanently to '%s';" " please relocate") : _("Repository moved temporarily to '%s';" @@ -2415,8 +2410,20 @@ svn_ra_serf__error_on_status(int status_code, case 423: return svn_error_createf(SVN_ERR_FS_NO_LOCK_TOKEN, NULL, _("'%s': no lock token available"), path); + + case 411: + return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, + _("DAV request failed: 411 Content length required. The " + "server or an intermediate proxy does not accept " + "chunked encoding. Try setting 'http-chunked-requests' " + "to 'auto' or 'no' in your client configuration.")); } + if (sline.code >= 300) + return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, + _("Unexpected HTTP status %d '%s' on '%s'\n"), + sline.code, sline.reason, path); + return SVN_NO_ERROR; } |