enable compression for gnutls, add error checks to client functions
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 17 Sep 2010 17:18:41 +0000 (17:18 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 17 Sep 2010 17:18:41 +0000 (17:18 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@52377 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_con/ecore_con_ssl.c

index a1600db..200ee3f 100644 (file)
@@ -279,6 +279,7 @@ static Ecore_Con_Ssl_Error
 _ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
 {
    const int *proto = NULL;
+   const int compress[] = { GNUTLS_COMP_DEFLATE, GNUTLS_COMP_NULL, 0 };
    int ret = 0;
    const int kx[] = { GNUTLS_KX_ANON_DH, 0 };
    const int ssl3_proto[] = { GNUTLS_SSL3, 0 };
@@ -318,20 +319,30 @@ _ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
         server_cert->count++;
      }
 
-   gnutls_init(&(svr->session), GNUTLS_CLIENT);
-   gnutls_set_default_priority(svr->session);
-   gnutls_kx_set_priority(svr->session, kx);
+   if ((ret = gnutls_init(&(svr->session), GNUTLS_CLIENT)))
+          goto error;
+   if ((ret = gnutls_set_default_priority(svr->session)))
+          goto error;
+   if ((ret = gnutls_kx_set_priority(svr->session, kx)))
+          goto error;
    if (svr->cert)
-      gnutls_credentials_set(svr->session, GNUTLS_CRD_CERTIFICATE,
-                             svr->cert);
+      if ((ret = gnutls_credentials_set(svr->session, GNUTLS_CRD_CERTIFICATE,
+                             svr->cert)))
+          goto error;
    else
      {
-        gnutls_anon_allocate_client_credentials(&svr->anoncred_c);
-        gnutls_credentials_set(svr->session, GNUTLS_CRD_ANON, svr->anoncred_c);
+        if ((ret = gnutls_anon_allocate_client_credentials(&svr->anoncred_c)))
+          goto error;
+        if ((ret = gnutls_credentials_set(svr->session, GNUTLS_CRD_ANON, svr->anoncred_c)))
+          goto error;
      }
 
-   gnutls_kx_set_priority(svr->session, kx);
-   gnutls_protocol_set_priority(svr->session, proto);
+   if ((ret = gnutls_kx_set_priority(svr->session, kx)))
+          goto error;
+   if ((ret = gnutls_protocol_set_priority(svr->session, proto)))
+          goto error;
+   if ((ret = gnutls_compression_set_priority(svr->session, compress)))
+          goto error;
    gnutls_dh_set_prime_bits(svr->session, 2048);
 
    gnutls_transport_set_ptr(svr->session, (gnutls_transport_ptr_t)svr->fd);
@@ -347,6 +358,10 @@ _ecore_con_ssl_server_init_gnutls(Ecore_Con_Server *svr)
      }
 
    return ECORE_CON_SSL_ERROR_NONE;
+   
+error:
+   ERR("gnutls returned with error: %s", gnutls_strerror(ret));
+   return ECORE_CON_SSL_ERROR_SERVER_INIT_FAILED;
 }
 
 static Eina_Bool
@@ -465,6 +480,7 @@ _ecore_con_ssl_client_init_gnutls(Ecore_Con_Client *cl)
    const int *proto = NULL;
    gnutls_dh_params_t dh_params;
    int ret;
+   const int compress[] = { GNUTLS_COMP_DEFLATE, GNUTLS_COMP_NULL, 0 };
    const int kx[] = { GNUTLS_KX_ANON_DH, 0 };
    const int ssl3_proto[] = { GNUTLS_SSL3, 0 };
    const int tls_proto[] = {
@@ -541,6 +557,8 @@ _ecore_con_ssl_client_init_gnutls(Ecore_Con_Client *cl)
 
    if ((ret = gnutls_protocol_set_priority(cl->session, proto)))
           goto error;
+   if ((ret = gnutls_compression_set_priority(cl->session, compress)))
+          goto error;
 
    gnutls_transport_set_ptr(cl->session, (gnutls_transport_ptr_t)cl->fd);