add option -C to force closing of connections
This commit is contained in:
parent
49d8426cf4
commit
a9f01707ad
@ -13,6 +13,9 @@ taler\-mint\-httpd \- Run Taler mint (with RESTful API)
|
|||||||
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.B
|
.B
|
||||||
|
.IP "\-C, \-\-connection-close"
|
||||||
|
Force each HTTP connection to be closed after each request (useful in combination with \-f to avoid having to wait for nc to time out).
|
||||||
|
.B
|
||||||
.IP "\-d DIRNAME, \-\-mint-dir=DIRNAME"
|
.IP "\-d DIRNAME, \-\-mint-dir=DIRNAME"
|
||||||
Use the configuration and other resources for the mint to operate from DIRNAME.
|
Use the configuration and other resources for the mint to operate from DIRNAME.
|
||||||
.B
|
.B
|
||||||
|
@ -44,6 +44,11 @@
|
|||||||
*/
|
*/
|
||||||
char *TMH_mint_currency_string;
|
char *TMH_mint_currency_string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should we return "Connection: close" in each response?
|
||||||
|
*/
|
||||||
|
int TMH_mint_connection_close;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base directory of the mint (global)
|
* Base directory of the mint (global)
|
||||||
*/
|
*/
|
||||||
@ -543,11 +548,13 @@ run_fake_client ()
|
|||||||
"nc",
|
"nc",
|
||||||
"localhost",
|
"localhost",
|
||||||
ports,
|
ports,
|
||||||
|
"-w", "30",
|
||||||
NULL)) &&
|
NULL)) &&
|
||||||
(0 != execlp ("ncat",
|
(0 != execlp ("ncat",
|
||||||
"ncat",
|
"ncat",
|
||||||
"localhost",
|
"localhost",
|
||||||
ports,
|
ports,
|
||||||
|
"-i", "30",
|
||||||
NULL)) )
|
NULL)) )
|
||||||
{
|
{
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
@ -614,6 +621,9 @@ main (int argc,
|
|||||||
char *const *argv)
|
char *const *argv)
|
||||||
{
|
{
|
||||||
static const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
static const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
||||||
|
{'C', "connection-close", NULL,
|
||||||
|
"force HTTP connections to be closed after each request", 0,
|
||||||
|
&GNUNET_GETOPT_set_one, &TMH_mint_connection_close},
|
||||||
{'d', "mint-dir", "DIR",
|
{'d', "mint-dir", "DIR",
|
||||||
"mint directory with configuration and keys for operating the mint", 1,
|
"mint directory with configuration and keys for operating the mint", 1,
|
||||||
&GNUNET_GETOPT_set_filename, &TMH_mint_directory},
|
&GNUNET_GETOPT_set_filename, &TMH_mint_directory},
|
||||||
|
@ -32,6 +32,11 @@
|
|||||||
*/
|
*/
|
||||||
extern char *TMH_mint_currency_string;
|
extern char *TMH_mint_currency_string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should we return "Connection: close" in each response?
|
||||||
|
*/
|
||||||
|
extern int TMH_mint_connection_close;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The mint's configuration.
|
* The mint's configuration.
|
||||||
*/
|
*/
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include "taler-mint-httpd_keystate.h"
|
#include "taler-mint-httpd_keystate.h"
|
||||||
|
#include "taler-mint-httpd_responses.h"
|
||||||
#include "taler_mintdb_plugin.h"
|
#include "taler_mintdb_plugin.h"
|
||||||
|
|
||||||
|
|
||||||
@ -813,6 +814,17 @@ handle_sighup ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call #handle_signal() to pass the received signal via
|
||||||
|
* the control pipe.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
handle_sigchld ()
|
||||||
|
{
|
||||||
|
handle_signal (SIGCHLD);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read signals from a pipe in a loop, and reload keys from disk if
|
* Read signals from a pipe in a loop, and reload keys from disk if
|
||||||
* SIGUSR1 is received, terminate if SIGTERM/SIGINT is received, and
|
* SIGUSR1 is received, terminate if SIGTERM/SIGINT is received, and
|
||||||
@ -829,6 +841,7 @@ TMH_KS_loop (void)
|
|||||||
struct GNUNET_SIGNAL_Context *sigterm;
|
struct GNUNET_SIGNAL_Context *sigterm;
|
||||||
struct GNUNET_SIGNAL_Context *sigint;
|
struct GNUNET_SIGNAL_Context *sigint;
|
||||||
struct GNUNET_SIGNAL_Context *sighup;
|
struct GNUNET_SIGNAL_Context *sighup;
|
||||||
|
struct GNUNET_SIGNAL_Context *sigchld;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (0 != pipe (reload_pipe))
|
if (0 != pipe (reload_pipe))
|
||||||
@ -845,6 +858,8 @@ TMH_KS_loop (void)
|
|||||||
&handle_sigint);
|
&handle_sigint);
|
||||||
sighup = GNUNET_SIGNAL_handler_install (SIGHUP,
|
sighup = GNUNET_SIGNAL_handler_install (SIGHUP,
|
||||||
&handle_sighup);
|
&handle_sighup);
|
||||||
|
sigchld = GNUNET_SIGNAL_handler_install (SIGCHLD,
|
||||||
|
&handle_sigchld);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
while (0 == ret)
|
while (0 == ret)
|
||||||
@ -890,6 +905,12 @@ read_again:
|
|||||||
/* restart updated binary */
|
/* restart updated binary */
|
||||||
ret = GNUNET_NO;
|
ret = GNUNET_NO;
|
||||||
break;
|
break;
|
||||||
|
#if HAVE_DEVELOPER
|
||||||
|
case SIGCHLD:
|
||||||
|
/* running in test-mode, test finished, terminate */
|
||||||
|
ret = GNUNET_OK;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
/* unexpected character */
|
/* unexpected character */
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -905,6 +926,7 @@ read_again:
|
|||||||
GNUNET_SIGNAL_handler_uninstall (sigterm);
|
GNUNET_SIGNAL_handler_uninstall (sigterm);
|
||||||
GNUNET_SIGNAL_handler_uninstall (sigint);
|
GNUNET_SIGNAL_handler_uninstall (sigint);
|
||||||
GNUNET_SIGNAL_handler_uninstall (sighup);
|
GNUNET_SIGNAL_handler_uninstall (sighup);
|
||||||
|
GNUNET_SIGNAL_handler_uninstall (sigchld);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -966,6 +988,7 @@ TMH_KS_handler_keys (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
(void) MHD_add_response_header (response,
|
(void) MHD_add_response_header (response,
|
||||||
"Content-Type",
|
"Content-Type",
|
||||||
rh->mime_type);
|
rh->mime_type);
|
||||||
|
@ -65,6 +65,7 @@ TMH_MHD_handler_static_response (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
if (NULL != rh->mime_type)
|
if (NULL != rh->mime_type)
|
||||||
(void) MHD_add_response_header (response,
|
(void) MHD_add_response_header (response,
|
||||||
MHD_HTTP_HEADER_CONTENT_TYPE,
|
MHD_HTTP_HEADER_CONTENT_TYPE,
|
||||||
@ -108,6 +109,7 @@ TMH_MHD_handler_agpl_redirect (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
if (NULL != rh->mime_type)
|
if (NULL != rh->mime_type)
|
||||||
(void) MHD_add_response_header (response,
|
(void) MHD_add_response_header (response,
|
||||||
MHD_HTTP_HEADER_CONTENT_TYPE,
|
MHD_HTTP_HEADER_CONTENT_TYPE,
|
||||||
|
@ -29,6 +29,23 @@
|
|||||||
#include "taler-mint-httpd_keystate.h"
|
#include "taler-mint-httpd_keystate.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add headers we want to return in every response.
|
||||||
|
* Useful for testing, like if we want to always close
|
||||||
|
* connections.
|
||||||
|
*
|
||||||
|
* @param response response to modify
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
TMH_RESPONSE_add_global_headers (struct MHD_Response *response)
|
||||||
|
{
|
||||||
|
if (TMH_mint_connection_close)
|
||||||
|
(void) MHD_add_response_header (response,
|
||||||
|
MHD_HTTP_HEADER_CONNECTION,
|
||||||
|
"close");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send JSON object as response.
|
* Send JSON object as response.
|
||||||
*
|
*
|
||||||
@ -56,6 +73,7 @@ TMH_RESPONSE_reply_json (struct MHD_Connection *connection,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (resp);
|
||||||
(void) MHD_add_response_header (resp,
|
(void) MHD_add_response_header (resp,
|
||||||
MHD_HTTP_HEADER_CONTENT_TYPE,
|
MHD_HTTP_HEADER_CONTENT_TYPE,
|
||||||
"application/json");
|
"application/json");
|
||||||
@ -292,6 +310,7 @@ TMH_RESPONSE_reply_request_too_large (struct MHD_Connection *connection)
|
|||||||
MHD_RESPMEM_PERSISTENT);
|
MHD_RESPMEM_PERSISTENT);
|
||||||
if (NULL == resp)
|
if (NULL == resp)
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
|
TMH_RESPONSE_add_global_headers (resp);
|
||||||
ret = MHD_queue_response (connection,
|
ret = MHD_queue_response (connection,
|
||||||
MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
|
MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
|
||||||
resp);
|
resp);
|
||||||
|
@ -32,6 +32,16 @@
|
|||||||
#include "taler-mint-httpd.h"
|
#include "taler-mint-httpd.h"
|
||||||
#include "taler-mint-httpd_db.h"
|
#include "taler-mint-httpd_db.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add headers we want to return in every response.
|
||||||
|
* Useful for testing, like if we want to always close
|
||||||
|
* connections.
|
||||||
|
*
|
||||||
|
* @param response response to modify
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
TMH_RESPONSE_add_global_headers (struct MHD_Response *response);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send JSON object as response.
|
* Send JSON object as response.
|
||||||
|
@ -106,6 +106,7 @@ TMH_WIRE_handler_wire_test (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
for (i=0;NULL != TMH_expected_wire_formats[i];i++)
|
for (i=0;NULL != TMH_expected_wire_formats[i];i++)
|
||||||
if (0 == strcasecmp ("test",
|
if (0 == strcasecmp ("test",
|
||||||
TMH_expected_wire_formats[i]))
|
TMH_expected_wire_formats[i]))
|
||||||
@ -179,6 +180,7 @@ TMH_WIRE_handler_wire_sepa (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
ret = MHD_queue_response (connection,
|
ret = MHD_queue_response (connection,
|
||||||
MHD_HTTP_NOT_IMPLEMENTED,
|
MHD_HTTP_NOT_IMPLEMENTED,
|
||||||
response);
|
response);
|
||||||
@ -225,6 +227,7 @@ TMH_WIRE_handler_wire_sepa (struct TMH_RequestHandler *rh,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
|
TMH_RESPONSE_add_global_headers (response);
|
||||||
if (NULL != rh->mime_type)
|
if (NULL != rh->mime_type)
|
||||||
(void) MHD_add_response_header (response,
|
(void) MHD_add_response_header (response,
|
||||||
MHD_HTTP_HEADER_CONTENT_TYPE,
|
MHD_HTTP_HEADER_CONTENT_TYPE,
|
||||||
|
Loading…
Reference in New Issue
Block a user