diff options
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/socket.c b/src/socket.c index f488c531e5..be60f9458c 100644 --- a/src/socket.c +++ b/src/socket.c @@ -456,7 +456,7 @@ inline static int wrap_pull_timeout_func(gnutls_transport_ptr_t ptr, void socket_open2(socket_st * hd, const char *hostname, const char *service, - const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata, + const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata, gnutls_datum_t *edata, FILE *server_trace, FILE *client_trace) { struct addrinfo hints, *res, *ptr; @@ -479,6 +479,11 @@ socket_open2(socket_st * hd, const char *hostname, const char *service, hd->rdata.size = rdata->size; } + if (edata) { + hd->edata.data = edata->data; + hd->edata.size = edata->size; + } + ret = gnutls_idna_map(hostname, strlen(hostname), &idna, 0); if (ret < 0) { fprintf(stderr, "Cannot convert %s to IDNA: %s\n", hostname, gnutls_strerror(ret)); @@ -564,6 +569,13 @@ socket_open2(socket_st * hd, const char *hostname, const char *service, } if (hd->session) { + if (hd->edata.data) { + ret = gnutls_record_send_early_data(hd->session, hd->edata.data, hd->edata.size); + if (ret < 0) { + fprintf(stderr, "error sending early data\n"); + exit(1); + } + } if (hd->rdata.data) { gnutls_session_set_data(hd->session, hd->rdata.data, hd->rdata.size); } @@ -621,6 +633,8 @@ socket_open2(socket_st * hd, const char *hostname, const char *service, hd->addr_info = res; gnutls_free(hd->rdata.data); hd->rdata.data = NULL; + gnutls_free(hd->edata.data); + hd->edata.data = NULL; gnutls_free(idna.data); return; } |