X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=ssl.c;h=852a9ce5304256a56700b8f9291736269a19c2bc;hp=da456e6adcaa81a0c7d72badd2471b8fb9df3bfd;hb=30c327078f448691a723d6d09734dc096f41b329;hpb=792f1ac29229f719b18f76043ac11d78d1434a12 diff --git a/ssl.c b/ssl.c index da456e6a..852a9ce5 100644 --- a/ssl.c +++ b/ssl.c @@ -260,6 +260,69 @@ extern int ssl_send_data(mbedtls_ssl_context *ssl, const unsigned char *buf, siz } +/********************************************************************* + * + * Function : ssl_send_data_delayed + * + * Description : Sends the contents of buf (for n bytes) to given SSL + * connection, optionally delaying the operation. + * + * Parameters : + * 1 : ssl = SSL context to send data to + * 2 : buf = Pointer to data to be sent + * 3 : len = Length of data to be sent to the SSL context + * 4 : delay = Delay in milliseconds. + * + * Returns : 0 on success (entire buffer sent). + * nonzero on error. + * + *********************************************************************/ +extern int ssl_send_data_delayed(mbedtls_ssl_context *ssl, + const unsigned char *buf, size_t len, + unsigned int delay) +{ + size_t i = 0; + + if (delay == 0) + { + if (ssl_send_data(ssl, buf, len) < 0) + { + return -1; + } + else + { + return 0; + } + } + + while (i < len) + { + size_t write_length; + enum { MAX_WRITE_LENGTH = 10 }; + + if ((i + MAX_WRITE_LENGTH) > len) + { + write_length = len - i; + } + else + { + write_length = MAX_WRITE_LENGTH; + } + + privoxy_millisleep(delay); + + if (ssl_send_data(ssl, buf + i, write_length) < 0) + { + return -1; + } + i += write_length; + } + + return 0; + +} + + /********************************************************************* * * Function : ssl_recv_data @@ -2022,7 +2085,7 @@ extern void ssl_send_certificate_error(struct client_state *csp) { size_t base64_len = 4 * ((strlen(cert->file_buf) + 2) / 3) + 1; - message_len += strlen(cert->text_buf) + strlen("
\n")
+      message_len += strlen(cert->info_buf) + strlen("
\n")
                      +  base64_len + strlen("Download certificate");
       cert = cert->next;
@@ -2057,7 +2120,7 @@ extern void ssl_send_certificate_error(struct client_state *csp)
       }
 
       strlcat(message, "
",        message_len);
-      strlcat(message, cert->text_buf, message_len);
+      strlcat(message, cert->info_buf, message_len);
       strlcat(message, "
\n", message_len); if (ret == 0) @@ -2122,7 +2185,7 @@ static int ssl_verify_callback(void *csp_void, mbedtls_x509_crt *crt, */ last->next = malloc_or_die(sizeof(struct certs_chain)); last->next->next = NULL; - memset(last->next->text_buf, 0, sizeof(last->next->text_buf)); + memset(last->next->info_buf, 0, sizeof(last->next->info_buf)); memset(last->next->file_buf, 0, sizeof(last->next->file_buf)); /* @@ -2150,7 +2213,7 @@ static int ssl_verify_callback(void *csp_void, mbedtls_x509_crt *crt, mbedtls_x509_crt_info(buf, sizeof(buf), CERT_INFO_PREFIX, crt); encoded_text = html_encode(buf); - strlcpy(last->text_buf, encoded_text, sizeof(last->text_buf)); + strlcpy(last->info_buf, encoded_text, sizeof(last->info_buf)); freez(encoded_text); } @@ -2177,8 +2240,8 @@ static void free_certificate_chain(struct client_state *csp) struct certs_chain *cert = csp->server_certs_chain.next; /* Cleaning buffers */ - memset(csp->server_certs_chain.text_buf, 0, - sizeof(csp->server_certs_chain.text_buf)); + memset(csp->server_certs_chain.info_buf, 0, + sizeof(csp->server_certs_chain.info_buf)); memset(csp->server_certs_chain.file_buf, 0, sizeof(csp->server_certs_chain.file_buf)); csp->server_certs_chain.next = NULL;