From db6c4e39c0257a6069aad902d8f6eac44eb6e7f1 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 8 Jun 2011 22:32:02 +0000 Subject: added trivial http parser --- src/gstdvbbackend.c | 19 +++++++++---------- src/streamer.c | 26 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/gstdvbbackend.c b/src/gstdvbbackend.c index 007b505..729c161 100644 --- a/src/gstdvbbackend.c +++ b/src/gstdvbbackend.c @@ -92,22 +92,21 @@ int main_loop(options_t* opt) return -1; } -// source = gst_element_factory_make ("dvbsrc", "dvb-source"); - source = gst_element_factory_make ("audiotestsrc", "dvb-source"); + source = gst_element_factory_make ("dvbsrc", "dvb-source"); if(!source) { log_printf(ERROR, "Error creating dvb source"); gst_object_unref(GST_OBJECT(pipeline)); gst_object_unref(GST_OBJECT(loop)); return -1; } - /* g_object_set(G_OBJECT(source), "adapter", 0, NULL); */ - /* g_object_set(G_OBJECT(source), "frontend", 0, NULL); */ - /* g_object_set(G_OBJECT(source), "frequency", 514000000, NULL); */ - /* g_object_set(G_OBJECT(source), "polarity", "H", NULL); */ - /* g_object_set(G_OBJECT(source), "pids", "5010:5011", NULL); */ - /* g_object_set(G_OBJECT(source), "modulation", 1, NULL); // QAM 16 */ - /* g_object_set(G_OBJECT(source), "trans-mode", 1, NULL); // 8k */ - /* g_object_set(G_OBJECT(source), "guard", 4, NULL); // AUTO */ + g_object_set(G_OBJECT(source), "adapter", 0, NULL); + g_object_set(G_OBJECT(source), "frontend", 0, NULL); + g_object_set(G_OBJECT(source), "frequency", 514000000, NULL); + g_object_set(G_OBJECT(source), "polarity", "H", NULL); + g_object_set(G_OBJECT(source), "pids", "5010:5011", NULL); + g_object_set(G_OBJECT(source), "modulation", 1, NULL); // QAM 16 + g_object_set(G_OBJECT(source), "trans-mode", 1, NULL); // 8k + g_object_set(G_OBJECT(source), "guard", 4, NULL); // AUTO int ret = streamer_init(&streamer, loop, NULL, "9001"); if(ret) { diff --git a/src/streamer.c b/src/streamer.c index 4130a89..ae5f356 100644 --- a/src/streamer.c +++ b/src/streamer.c @@ -147,8 +147,34 @@ struct client_struct { static gpointer client_thread_func(gpointer data) { struct client_struct *client = (struct client_struct*)data; + + char buf; + int nlcnt = 0; + for(;;) { + int len = recv(client->fd_, &buf, 1, 0); + if(len!=1) { + free(client); + return NULL; + } + + if(buf == '\n') nlcnt++; + else nlcnt = 0; + + if(nlcnt >= 2) + break; + } + + char* answer = "HTTP/1.0 200 OK\n\n"; + int written = 0; + for(;;) { + written = send(client->fd_, &answer[written], sizeof(answer) - written, 0); + if(written == sizeof(answer)) + break; + } + add_fd(client->streamer_, client->fd_); free(client); + return NULL; } static gpointer streamer_thread_func(gpointer data) -- cgit v1.2.3