src/sock_gnutls.c
changeset 27 e6639132bead
parent 14 3a70e5901f17
child 28 9c1050bc8709
equal deleted inserted replaced
26:aec062af155d 27:e6639132bead
    65 }
    65 }
    66 
    66 
    67 static void sock_gnutls_event_handler (int fd, short what, void *arg)
    67 static void sock_gnutls_event_handler (int fd, short what, void *arg)
    68 {
    68 {
    69     struct sock_gnutls *sock = arg;
    69     struct sock_gnutls *sock = arg;
       
    70 
       
    71     (void) fd;
       
    72     (void) what;
    70     
    73     
    71     // gnutls might be able to proceed now, so ask user to try what didn't work before now, using the mask given to
    74     // gnutls might be able to proceed now, so ask user to try what didn't work before now, using the mask given to
    72     // event_enable().
    75     // event_enable().
    73     sock_stream_invoke_callbacks(SOCK_GNUTLS_BASE(sock), sock->ev_mask);
    76     sock_stream_invoke_callbacks(SOCK_GNUTLS_BASE(sock), sock->ev_mask);
    74 }
    77 }
   124 
   127 
   125 /*
   128 /*
   126  * Our sock_stream_Type
   129  * Our sock_stream_Type
   127  */
   130  */
   128 struct sock_stream_type sock_gnutls_type = {
   131 struct sock_stream_type sock_gnutls_type = {
   129     .methods.read           = &sock_gnutls_read,
   132     .methods                = {
   130     .methods.write          = &sock_gnutls_write,
   133         .read               = &sock_gnutls_read,
   131     .methods.event_init     = &sock_gnutls_event_init,
   134         .write              = &sock_gnutls_write,
   132     .methods.event_enable   = &sock_gnutls_event_enable,
   135         .event_init         = &sock_gnutls_event_init,
       
   136         .event_enable       = &sock_gnutls_event_enable,
       
   137     },
   133 };
   138 };
   134 
   139 
   135 /*
   140 /*
   136  * XXX: global shared sock_gnutls_ctx
   141  * XXX: global shared sock_gnutls_ctx
   137  */
   142  */
   151 }
   156 }
   152 
   157 
   153 // XXX: log func
   158 // XXX: log func
   154 void _log (int level, const char *msg)
   159 void _log (int level, const char *msg)
   155 {
   160 {
   156     printf("gnutls: %s\n", msg);
   161     printf("gnutls: %d: %s", level, msg);
   157 }
   162 }
   158 
   163 
   159 err_t sock_gnutls_global_init (struct error_info *err)
   164 err_t sock_gnutls_global_init (struct error_info *err)
   160 {
   165 {
   161     // global init
   166     // global init
   202     // TCP connect
   207     // TCP connect
   203     if (sock_tcp_init_connect(SOCK_GNUTLS_TCP(sock), host, service))
   208     if (sock_tcp_init_connect(SOCK_GNUTLS_TCP(sock), host, service))
   204         JUMP_SET_ERROR_INFO(err, SOCK_GNUTLS_ERR(sock));
   209         JUMP_SET_ERROR_INFO(err, SOCK_GNUTLS_ERR(sock));
   205 
   210 
   206     // bind default transport functions (recv/send) to use the TCP fd
   211     // bind default transport functions (recv/send) to use the TCP fd
   207     gnutls_transport_set_ptr(sock->session, (gnutls_transport_ptr_t) sock->base_tcp.fd);
   212     gnutls_transport_set_ptr(sock->session, (gnutls_transport_ptr_t) (long int) sock->base_tcp.fd);
   208 
   213 
   209     // perform the handshake
   214     // perform the handshake
   210     if ((ERROR_EXTRA(err) = gnutls_handshake(sock->session)) < 0)
   215     if ((ERROR_EXTRA(err) = gnutls_handshake(sock->session)) < 0)
   211         JUMP_SET_ERROR(err, ERR_GNUTLS_HANDSHAKE);
   216         JUMP_SET_ERROR(err, ERR_GNUTLS_HANDSHAKE);
   212 
   217