privoxy_mutex_t log_init_mutex;
privoxy_mutex_t connection_reuse_mutex;
-#ifdef LIMIT_MUTEX_NUMBER
-privoxy_mutex_t certificates_mutexes[32];
-#else
-privoxy_mutex_t certificates_mutexes[65536];
-#endif /* LIMIT_MUTEX_NUMBER */
+#ifdef FEATURE_HTTPS_INSPECTION
+privoxy_mutex_t certificate_mutex;
privoxy_mutex_t rng_mutex;
+#endif
#ifdef FEATURE_EXTERNAL_FILTERS
privoxy_mutex_t external_filter_mutex;
*********************************************************************/
static jb_err receive_and_send_encrypted_post_data(struct client_state *csp)
{
- unsigned char buf[BUFFER_SIZE];
- int len;
+ int content_length_known = csp->expected_client_content_length != 0;
while (is_ssl_pending(&(csp->mbedtls_client_attr.ssl)))
{
- len = ssl_recv_data(&(csp->mbedtls_client_attr.ssl), buf, sizeof(buf));
+ unsigned char buf[BUFFER_SIZE];
+ int len;
+ int max_bytes_to_read = sizeof(buf);
+
+ if (content_length_known && csp->expected_client_content_length < sizeof(buf))
+ {
+ max_bytes_to_read = (int)csp->expected_client_content_length;
+ }
+ log_error(LOG_LEVEL_CONNECT,
+ "Waiting for up to %d bytes of POST data from the client.",
+ max_bytes_to_read);
+ len = ssl_recv_data(&(csp->mbedtls_client_attr.ssl), buf,
+ (unsigned)max_bytes_to_read);
if (len == -1)
{
return 1;
{
csp->expected_client_content_length -= (unsigned)len;
}
+ if (csp->expected_client_content_length == 0)
+ {
+ log_error(LOG_LEVEL_HEADER, "Forwarded the last %d bytes", len);
+ break;
+ }
}
}
* Prepare global mutex semaphores
*/
-#ifdef LIMIT_MUTEX_NUMBER
- int i = 0;
- for (i = 0; i < 32; i++)
-#else
- int i = 0;
- for (i = 0; i < 65536; i++)
-#endif /* LIMIT_MUTEX_NUMBER */
- {
- privoxy_mutex_init(&(certificates_mutexes[i]));
- }
+#ifdef FEATURE_HTTPS_INSPECTION
+ privoxy_mutex_init(&certificate_mutex);
privoxy_mutex_init(&rng_mutex);
+#endif
privoxy_mutex_init(&log_mutex);
privoxy_mutex_init(&log_init_mutex);