// http_client_monitor void * http_server_monitor_main (void * arg) { int i; time_t cur_time; http_server_t * server = (http_server_t *) arg; http_client_buffer_t * clients = &server->clients; http_client_t * cur_client; // 15초가 지난 소켓은 종료하도록 while (1) { time(&cur_time); sleep (5); printf ("monitor -time: %ld \n", cur_time); for (i = 0; i < clients->bufptr; i++) { cur_client = clients->buf[i]; // http_client_check_timeout(cur_client); printf ("SOCK(%ld) in clients[%d] \n", cur_client->sock, i); if (cur_client->state == CLIENT_DEAD) { http_client_destroy(server, cur_client); } } printf ("------------------------\n\n"); } return NULL; }
void http_client_test2(void) { aio_worker_init(); pthread_t thread; bool running = true; thread_create(&thread, http_server_thread, &running); struct http_header_t headers[3]; headers[0].name = "User-Agent"; headers[0].value = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"; headers[1].name = "Accept-Language"; headers[1].value = "en-US,en;q=0.5"; headers[2].name = "Connection"; headers[2].value = "keep-alive"; // block IO void *http = http_client_create("127.0.0.1", PORT, 1); assert(0 == http_client_get(http, "/", headers, sizeof(headers)/sizeof(headers[0]), http_client_test_onreply, NULL)); assert(0 == http_client_get(http, "/img/bdlogo.png", headers, sizeof(headers)/sizeof(headers[0]), http_client_test_onreply, NULL)); assert(0 == http_client_get(http, "/", NULL, 0, http_client_test_onreply, NULL)); http_client_destroy(http); // AIO int32_t ref = 0; http = http_client_create("127.0.0.1", PORT, 0); assert(0 == http_client_get(http, "/", headers, sizeof(headers)/sizeof(headers[0]), http_client_test_onreply, &ref)); while(1 != ref) system_sleep(1000); assert(0 == http_client_get(http, "/img/bdlogo.png", headers, sizeof(headers)/sizeof(headers[0]), http_client_test_onreply, &ref)); while(2 != ref) system_sleep(1000); assert(0 == http_client_get(http, "/", NULL, 0, http_client_test_onreply, &ref)); while(3 != ref) system_sleep(1000); http_client_destroy(http); running = false; thread_destroy(thread); aio_worker_cleanup(); }
static void run_request_test (struct event_base *evbase, struct evdns_base *dns_base, TestID test_id) { OutData *out; struct evbuffer *in_buf; char c = 'x'; LOG_debug (HTTP_TEST, "===================== TEST ID : %d =======================", test_id); out = g_new0 (OutData, 1); out->evbase = evbase; out->test_id = test_id; out->evhttp = evhttp_new (evbase); evhttp_bind_socket (out->evhttp, "127.0.0.1", 8080); evhttp_set_gencb (out->evhttp, on_request_gencb, out); //out->http = http_client_create (evbase, dns_base); in_buf = evbuffer_new (); http_client_set_cb_ctx (out->http, out); http_client_set_on_chunk_cb (out->http, on_input_data_cb); http_client_set_close_cb (out->http, on_http_close); //http_client_set_output_length (out->http, 1); //http_client_add_output_data (out->http, &c, 1); http_client_start_request_to_storage_url (out->http, Method_get, "/index.html", NULL, NULL); event_base_dispatch (evbase); http_client_destroy (out->http); LOG_debug (HTTP_TEST, "Resulting buff: %zd", evbuffer_get_length (in_buf)); evbuffer_free (in_buf); g_free (out->first_line); g_free (out->header_line); evconnlistener_free (out->listener); evtimer_del (out->timeout); event_free (out->timeout); evbuffer_free (out->out_buf); evbuffer_free (out->in_file); g_free (out); LOG_debug (HTTP_TEST, "===================== END TEST ID : %d =======================", test_id); }
static void run_responce_test (struct event_base *evbase, struct evdns_base *dns_base, TestID test_id) { OutData *out; struct evbuffer *in_buf; HttpClient *http; LOG_debug (HTTP_TEST, "===================== TEST ID : %d =======================", test_id); out = g_new0 (OutData, 1); out->evbase = evbase; out->test_id = test_id; out->header_sent = FALSE; start_srv (out); //http = http_client_create (app); in_buf = evbuffer_new (); http = http_client_create (app); http_client_set_cb_ctx (http, in_buf); http_client_set_on_chunk_cb (http, on_input_data_cb); http_client_set_output_length (http, 1); http_client_start_request_to_storage_url (http, Method_get, "/index.html", NULL, NULL); event_base_dispatch (evbase); http_client_destroy (http); LOG_debug (HTTP_TEST, "Resulting buff: %zd", evbuffer_get_length (in_buf)); evbuffer_free (in_buf); g_free (out->first_line); g_free (out->header_line); evconnlistener_free (out->listener); evtimer_del (out->timeout); event_free (out->timeout); evbuffer_free (out->out_buf); evbuffer_free (out->in_file); g_free (out); LOG_debug (HTTP_TEST, "===================== END TEST ID : %d =======================", test_id); }