static void client_thread(void *arg) { List *reqh; unsigned long i; long succeeded, failed; HTTPCaller *caller; char buf[1024]; long in_queue; Counter *counter = NULL; caller = arg; succeeded = 0; failed = 0; reqh = gwlist_create(); sprintf(buf, "%ld", (long) gwthread_self()); http_header_add(reqh, "X-Thread", buf); if (auth_username != NULL && auth_password != NULL) http_add_basic_auth(reqh, auth_username, auth_password); in_queue = 0; counter = counter_create(); for (;;) { i = counter_increase(counter); if (i >= max_requests) goto receive_rest; start_request(caller, reqh, i); if (interval > 0) gwthread_sleep(interval); ++in_queue; if (receive_reply(caller) == -1) ++failed; else ++succeeded; --in_queue; } receive_rest: while (in_queue > 0) { if (receive_reply(caller) == -1) ++failed; else ++succeeded; --in_queue; } counter_destroy(counter); http_destroy_headers(reqh); http_caller_destroy(caller); info(0, "This thread: %ld succeeded, %ld failed.", succeeded, failed); }
void mbuni_mm1_queue_runner(int *rstop) { httpcaller = http_caller_create(); if (gwthread_create((gwthread_func_t *)receive_push_reply, httpcaller) < 0) { /* Listener thread. */ error(0, "Mobile sender: Failed to create push reply thread: %d: %s!", errno, strerror(errno)); return; } settings->qfs->mms_queue_run(octstr_get_cstr(settings->mm1_queuedir), sendNotify, settings->queue_interval, settings->maxthreads, rstop); sleep(2); /* Wait for it to die. */ http_caller_signal_shutdown(httpcaller); sleep(2); http_caller_destroy(httpcaller); return; }
static void push_thread(void *arg) { HTTPCaller *caller; long succeeded, failed, in_queue; unsigned long i; caller = arg; succeeded = 0; failed = 0; in_queue = 0; i = 0; for (;;) { while (in_queue < MAX_IN_QUEUE) { i = counter_increase(counter); if (i >= max_pushes) goto receive_rest; start_push(caller, i); if (wait_seconds > 0) gwthread_sleep(wait_seconds); ++in_queue; } while (in_queue >= MAX_IN_QUEUE) { if (receive_push_reply(caller) == -1) ++failed; else ++succeeded; --in_queue; } } receive_rest: while (in_queue > 0) { if (receive_push_reply(caller) == -1) ++failed; else ++succeeded; --in_queue; } http_caller_destroy(caller); info(0, "TEST_PPG: In thread %ld %ld succeeded, %ld failed", (long) gwthread_self(), succeeded, failed); }
static void conndata_destroy(ConnData *conndata) { if (conndata == NULL) return; if (conndata->http_ref) http_caller_destroy(conndata->http_ref); octstr_destroy(conndata->allow_ip); octstr_destroy(conndata->send_url); octstr_destroy(conndata->dlr_url); octstr_destroy(conndata->username); octstr_destroy(conndata->password); octstr_destroy(conndata->proxy); octstr_destroy(conndata->system_id); octstr_destroy(conndata->alt_charset); counter_destroy(conndata->open_sends); gwlist_destroy(conndata->msg_to_send, NULL); if (conndata->max_pending_sends) semaphore_destroy(conndata->max_pending_sends); gw_free(conndata); }