You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by je...@apache.org on 2010/08/21 04:28:11 UTC

svn commit: r987688 - in /subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf: ra_serf.h util.c

Author: jerenkrantz
Date: Sat Aug 21 02:28:10 2010
New Revision: 987688

URL: http://svn.apache.org/viewvc?rev=987688&view=rev
Log:
On a 1.6.x backport branch, backport r879757, r880320 from trunk.

Modified:
    subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/ra_serf.h
    subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/util.c

Modified: subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/ra_serf.h
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/ra_serf.h?rev=987688&r1=987687&r2=987688&view=diff
==============================================================================
--- subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/ra_serf.h (original)
+++ subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/ra_serf.h Sat Aug 21 02:28:10 2010
@@ -303,10 +303,19 @@ static const svn_ra_serf__dav_props_t hr
 
 /** Serf utility functions **/
 
+#if SERF_VERSION_AT_LEAST(0, 4, 0)
+apr_status_t
+svn_ra_serf__conn_setup(apr_socket_t *sock,
+                        serf_bucket_t **read_bkt,
+                        serf_bucket_t **write_bkt,
+                        void *baton,
+                        apr_pool_t *pool);
+#else
 serf_bucket_t *
 svn_ra_serf__conn_setup(apr_socket_t *sock,
                         void *baton,
                         apr_pool_t *pool);
+#endif
 
 serf_bucket_t*
 svn_ra_serf__accept_response(serf_request_t *request,

Modified: subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/util.c?rev=987688&r1=987687&r2=987688&view=diff
==============================================================================
--- subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/1.6.x-r879757/subversion/libsvn_ra_serf/util.c Sat Aug 21 02:28:10 2010
@@ -222,35 +222,56 @@ load_authorities(svn_ra_serf__connection
   return SVN_NO_ERROR;
 }
 
+
+#if SERF_VERSION_AT_LEAST(0, 4, 0)
+/* This ugly ifdef construction can be cleaned up as soon as serf >= 0.4
+   gets the minimum supported serf version! */
+
+/* svn_ra_serf__conn_setup is a callback for serf. This function 
+   creates a read bucket and will wrap the write bucket if SSL
+   is needed. */
+apr_status_t
+svn_ra_serf__conn_setup(apr_socket_t *sock,
+                        serf_bucket_t **read_bkt,
+                        serf_bucket_t **write_bkt,
+                        void *baton,
+                        apr_pool_t *pool)
+{
+  serf_bucket_t *wb = NULL;
+#else
+/* This is the old API, for compatibility with serf
+   versions <= 0.3. */
 serf_bucket_t *
 svn_ra_serf__conn_setup(apr_socket_t *sock,
                         void *baton,
                         apr_pool_t *pool)
 {
-  serf_bucket_t *bucket;
+#endif
+  serf_bucket_t *rb = NULL;
   svn_ra_serf__connection_t *conn = baton;
-
-  bucket = serf_context_bucket_socket_create(conn->session->context,
-                                             sock, conn->bkt_alloc);
-
+  
+  rb = serf_context_bucket_socket_create(conn->session->context,
+                                         sock, conn->bkt_alloc);
+  
   if (conn->using_ssl)
     {
-      bucket = serf_bucket_ssl_decrypt_create(bucket, conn->ssl_context,
-                                              conn->bkt_alloc);
+      /* input stream */
+      rb = serf_bucket_ssl_decrypt_create(rb, conn->ssl_context,
+                                          conn->bkt_alloc);
       if (!conn->ssl_context)
         {
-          conn->ssl_context = serf_bucket_ssl_decrypt_context_get(bucket);
-
+          conn->ssl_context = serf_bucket_ssl_encrypt_context_get(rb);
+  
           serf_ssl_client_cert_provider_set(conn->ssl_context,
                                             svn_ra_serf__handle_client_cert,
                                             conn, conn->session->pool);
           serf_ssl_client_cert_password_set(conn->ssl_context,
                                             svn_ra_serf__handle_client_cert_pw,
                                             conn, conn->session->pool);
-
           serf_ssl_server_cert_callback_set(conn->ssl_context,
                                             ssl_server_cert,
                                             conn);
+
           /* See if the user wants us to trust "default" openssl CAs. */
           if (conn->session->trust_default_ca)
             {
@@ -270,10 +291,22 @@ svn_ra_serf__conn_setup(apr_socket_t *so
                 }
             }
         }
+#if SERF_VERSION_AT_LEAST(0, 4, 0)
+        /* output stream */
+        *write_bkt = serf_bucket_ssl_encrypt_create(*write_bkt, conn->ssl_context,
+                                                  conn->bkt_alloc);
+#endif
     }
 
-  return bucket;
+#if SERF_VERSION_AT_LEAST(0, 4, 0)
+  *read_bkt = rb;
+
+  return APR_SUCCESS;
+}
+#else  
+  return rb;
 }
+#endif
 
 serf_bucket_t*
 svn_ra_serf__accept_response(serf_request_t *request,
@@ -481,6 +514,7 @@ svn_ra_serf__setup_serf_req(serf_request
   if (conn->session->proxy_auth_protocol)
     conn->session->proxy_auth_protocol->setup_request_func(conn, hdrs_bkt);
 
+#if ! SERF_VERSION_AT_LEAST(0, 4, 0)
   /* Set up SSL if we need to */
   if (conn->using_ssl)
     {
@@ -498,6 +532,7 @@ svn_ra_serf__setup_serf_req(serf_request
                                             conn, conn->session->pool);
         }
     }
+#endif
 
   /* Set up Proxy settings */
   if (conn->session->using_proxy)