X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=cgisimple.c;h=961510f2273ad2620a231d198af81063a0293661;hb=2f70740f2b352c5d75853ef5d7e90ec75c9c6c82;hp=e465be36290363978ac7384da6c9468c74e4be3e;hpb=babd5dc0098b2c1703e1c1395c5262ec293c283e;p=privoxy.git diff --git a/cgisimple.c b/cgisimple.c index e465be36..961510f2 100644 --- a/cgisimple.c +++ b/cgisimple.c @@ -5,7 +5,7 @@ * Purpose : Simple CGIs to get information about Privoxy's * status. * - * Copyright : Written by and Copyright (C) 2001-2021 the + * Copyright : Written by and Copyright (C) 2001-2022 the * Privoxy team. https://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -870,6 +870,50 @@ jb_err cgi_send_stylesheet(struct client_state *csp, } +/********************************************************************* + * + * Function : cgi_send_wpad + * + * Description : CGI function that sends a Proxy Auto-Configuration + * (PAC) file. + * + * Parameters : + * 1 : csp = Current client state (buffers, headers, etc...) + * 2 : rsp = http_response data structure for output + * 3 : parameters = map of cgi parameters + * + * CGI Parameters : None + * + * Returns : JB_ERR_OK on success + * JB_ERR_MEMORY on out-of-memory error. + * + *********************************************************************/ +jb_err cgi_send_wpad(struct client_state *csp, + struct http_response *rsp, + const struct map *parameters) +{ + struct map *exports; + + assert(csp); + assert(rsp); + assert(parameters); + + if (NULL == (exports = default_exports(csp, NULL))) + { + return JB_ERR_MEMORY; + } + + if (enlist(rsp->headers, "Content-Type: application/x-ns-proxy-autoconfig")) + { + free_map(exports); + return JB_ERR_MEMORY; + } + + return template_fill_for_cgi(csp, "wpad.dat", exports, rsp); + +} + + /********************************************************************* * * Function : cgi_send_url_info_osd @@ -1218,9 +1262,15 @@ jb_err cgi_show_status(struct client_state *csp, char buf[BUFFER_SIZE]; #ifdef FEATURE_STATISTICS +#ifdef MUTEX_LOCKS_AVAILABLE + float percentage_blocked; + unsigned long long local_number_of_requests_received; + unsigned long long local_number_of_requests_blocked; +#else float perc_rej; /* Percentage of http requests rejected */ int local_urls_read; int local_urls_rejected; +#endif #endif /* ndef FEATURE_STATISTICS */ jb_err err = JB_ERR_OK; @@ -1258,9 +1308,15 @@ jb_err cgi_show_status(struct client_state *csp, } #ifdef FEATURE_STATISTICS +#ifdef MUTEX_LOCKS_AVAILABLE + privoxy_mutex_lock(&block_statistics_mutex); + local_number_of_requests_received = number_of_requests_received; + local_number_of_requests_blocked = number_of_requests_blocked; + privoxy_mutex_unlock(&block_statistics_mutex); +#else local_urls_read = urls_read; local_urls_rejected = urls_rejected; - +#endif /* * Need to alter the stats not to include the fetch of this * page. @@ -1271,7 +1327,11 @@ jb_err cgi_show_status(struct client_state *csp, * urls_rejected--; * This will be incremented subsequently * */ +#ifdef MUTEX_LOCKS_AVAILABLE + if (local_number_of_requests_received == 0) +#else if (local_urls_read == 0) +#endif { if (!err) err = map_block_killer(exports, "have-stats"); } @@ -1279,6 +1339,19 @@ jb_err cgi_show_status(struct client_state *csp, { if (!err) err = map_block_killer(exports, "have-no-stats"); +#ifdef MUTEX_LOCKS_AVAILABLE + percentage_blocked = (float)local_number_of_requests_blocked * 100.0F / + (float)local_number_of_requests_received; + + snprintf(buf, sizeof(buf), "%llu", local_number_of_requests_received); + if (!err) err = map(exports, "requests-received", 1, buf, 1); + + snprintf(buf, sizeof(buf), "%llu", local_number_of_requests_blocked); + if (!err) err = map(exports, "requests-blocked", 1, buf, 1); + + snprintf(buf, sizeof(buf), "%6.2f", percentage_blocked); + if (!err) err = map(exports, "percent-blocked", 1, buf, 1); +#else perc_rej = (float)local_urls_rejected * 100.0F / (float)local_urls_read; @@ -1290,6 +1363,7 @@ jb_err cgi_show_status(struct client_state *csp, snprintf(buf, sizeof(buf), "%6.2f", perc_rej); if (!err) err = map(exports, "percent-blocked", 1, buf, 1); +#endif } #else /* ndef FEATURE_STATISTICS */