some code changes for easier testing
This commit is contained in:
parent
c5598970d7
commit
68a60f1167
@ -9,9 +9,10 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#define NUM_THRS 8
|
#define MAX_NUM_THRS 256
|
||||||
static int g_reuse_port = 0;
|
static int g_reuse_port = 0;
|
||||||
static mio_svc_htts_t* g_htts[NUM_THRS];
|
static int g_num_thrs = 2;
|
||||||
|
static mio_svc_htts_t* g_htts[MAX_NUM_THRS];
|
||||||
static int g_htts_no = 0;
|
static int g_htts_no = 0;
|
||||||
static pthread_mutex_t g_htts_mutex = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t g_htts_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
@ -243,7 +244,7 @@ void* thr_func (void* arg)
|
|||||||
pthread_mutex_lock (&g_htts_mutex);
|
pthread_mutex_lock (&g_htts_mutex);
|
||||||
g_htts[g_htts_no] = htts;
|
g_htts[g_htts_no] = htts;
|
||||||
printf ("starting the loop for %d\n", g_htts_no);
|
printf ("starting the loop for %d\n", g_htts_no);
|
||||||
g_htts_no = (g_htts_no + 1) % MIO_COUNTOF(g_htts);
|
g_htts_no = (g_htts_no + 1) % g_num_thrs;
|
||||||
pthread_mutex_unlock (&g_htts_mutex);
|
pthread_mutex_unlock (&g_htts_mutex);
|
||||||
|
|
||||||
mio_loop (mio);
|
mio_loop (mio);
|
||||||
@ -371,7 +372,7 @@ static int try_to_accept (mio_dev_sck_t* sck, mio_dev_sck_qxmsg_t* qxmsg, int in
|
|||||||
|
|
||||||
pthread_mutex_lock (&g_htts_mutex);
|
pthread_mutex_lock (&g_htts_mutex);
|
||||||
htts = g_htts[g_htts_no];
|
htts = g_htts[g_htts_no];
|
||||||
g_htts_no = (g_htts_no + 1) % MIO_COUNTOF(g_htts);
|
g_htts_no = (g_htts_no + 1) % g_num_thrs;
|
||||||
pthread_mutex_unlock (&g_htts_mutex);
|
pthread_mutex_unlock (&g_htts_mutex);
|
||||||
|
|
||||||
if (mio_svc_htts_writetosidechan(htts, qxmsg, MIO_SIZEOF(*qxmsg)) <= -1)
|
if (mio_svc_htts_writetosidechan(htts, qxmsg, MIO_SIZEOF(*qxmsg)) <= -1)
|
||||||
@ -512,13 +513,42 @@ static int add_listener (mio_t* mio, mio_bch_t* addrstr)
|
|||||||
int main (int argc, char* argv[])
|
int main (int argc, char* argv[])
|
||||||
{
|
{
|
||||||
mio_t* mio = MIO_NULL;
|
mio_t* mio = MIO_NULL;
|
||||||
pthread_t t[NUM_THRS];
|
pthread_t t[MAX_NUM_THRS];
|
||||||
mio_oow_t i;
|
mio_oow_t i;
|
||||||
struct sigaction sigact;
|
struct sigaction sigact;
|
||||||
|
|
||||||
if (argc >= 2 && strcmp(argv[1], "-r") == 0)
|
|
||||||
|
// TODO: use getopt() or something similar
|
||||||
|
for (i = 1; i < argc; )
|
||||||
{
|
{
|
||||||
g_reuse_port = 1;
|
if (strcmp(argv[i], "-r") == 0)
|
||||||
|
{
|
||||||
|
g_reuse_port = 1;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[i], "-t") == 0)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
if (i < argc)
|
||||||
|
{
|
||||||
|
g_num_thrs = atoi(argv[i]);
|
||||||
|
if (g_num_thrs < 1 || g_num_thrs > MAX_NUM_THRS)
|
||||||
|
{
|
||||||
|
printf ("Error: %s not allowed for -t\n", argv[i]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_num_thrs = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf ("Error: invalid argument %s\n", argv[i]);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memset (&sigact, 0, MIO_SIZEOF(sigact));
|
memset (&sigact, 0, MIO_SIZEOF(sigact));
|
||||||
@ -535,7 +565,7 @@ int main (int argc, char* argv[])
|
|||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < MIO_COUNTOF(t); i++)
|
for (i = 0; i < g_num_thrs; i++)
|
||||||
pthread_create (&t[i], MIO_NULL, thr_func, mio);
|
pthread_create (&t[i], MIO_NULL, thr_func, mio);
|
||||||
|
|
||||||
sleep (1); /* TODO: use pthread_cond_wait()/pthread_cond_signal() or a varialble to see if all threads are up */
|
sleep (1); /* TODO: use pthread_cond_wait()/pthread_cond_signal() or a varialble to see if all threads are up */
|
||||||
|
@ -1147,7 +1147,7 @@ int mio_htrd_feed (mio_htrd_t* htrd, const mio_bch_t* req, mio_oow_t len, mio_oo
|
|||||||
/* reset the raw request length */
|
/* reset the raw request length */
|
||||||
htrd->fed.s.plen = 0;
|
htrd->fed.s.plen = 0;
|
||||||
|
|
||||||
if (parse_initial_line_and_headers (htrd, req, ptr - req) <= -1)
|
if (parse_initial_line_and_headers(htrd, req, ptr - req) <= -1)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -463,6 +463,13 @@ static int file_state_send_header_to_client (file_state_t* file_state, int statu
|
|||||||
|
|
||||||
if (file_state->req_method == MIO_HTTP_GET && mio_becs_fcat(cli->sbuf, "ETag: %hs\r\n", file_state->peer_etag) == (mio_oow_t)-1) return -1;
|
if (file_state->req_method == MIO_HTTP_GET && mio_becs_fcat(cli->sbuf, "ETag: %hs\r\n", file_state->peer_etag) == (mio_oow_t)-1) return -1;
|
||||||
if (status_code == 206 && mio_becs_fcat(cli->sbuf, "Content-Ranges: bytes %ju-%ju/%ju\r\n", (mio_uintmax_t)file_state->start_offset, (mio_uintmax_t)file_state->end_offset, (mio_uintmax_t)file_state->total_size) == (mio_oow_t)-1) return -1;
|
if (status_code == 206 && mio_becs_fcat(cli->sbuf, "Content-Ranges: bytes %ju-%ju/%ju\r\n", (mio_uintmax_t)file_state->start_offset, (mio_uintmax_t)file_state->end_offset, (mio_uintmax_t)file_state->total_size) == (mio_oow_t)-1) return -1;
|
||||||
|
|
||||||
|
/* ----- */
|
||||||
|
// TODO: Allow-Contents
|
||||||
|
// Allow-Headers... support custom headers...
|
||||||
|
if (mio_becs_fcat(cli->sbuf, "Access-Control-Allow-Origin: *\r\n", (mio_uintmax_t)content_length) == (mio_oow_t)-1) return -1;
|
||||||
|
/* ----- */
|
||||||
|
|
||||||
if (mio_becs_fcat(cli->sbuf, "Content-Length: %ju\r\n\r\n", (mio_uintmax_t)content_length) == (mio_oow_t)-1) return -1;
|
if (mio_becs_fcat(cli->sbuf, "Content-Length: %ju\r\n\r\n", (mio_uintmax_t)content_length) == (mio_oow_t)-1) return -1;
|
||||||
|
|
||||||
return file_state_write_to_client(file_state, MIO_BECS_PTR(cli->sbuf), MIO_BECS_LEN(cli->sbuf));
|
return file_state_write_to_client(file_state, MIO_BECS_PTR(cli->sbuf), MIO_BECS_LEN(cli->sbuf));
|
||||||
@ -548,7 +555,7 @@ static MIO_INLINE int process_range_header (file_state_t* file_state, mio_htre_t
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((st.st_mode & S_IFMT) == S_IFREG)
|
if ((st.st_mode & S_IFMT) != S_IFREG)
|
||||||
{
|
{
|
||||||
/* TODO: support directory listing if S_IFDIR? still disallow special files. */
|
/* TODO: support directory listing if S_IFDIR? still disallow special files. */
|
||||||
file_state_send_final_status_to_client (file_state, 403, 1); /* forbidden */
|
file_state_send_final_status_to_client (file_state, 403, 1); /* forbidden */
|
||||||
|
Loading…
Reference in New Issue
Block a user