stuff...
authorvolpol <volpol@packet-gain.de>
Sun, 22 Sep 2013 16:48:39 +0000 (16:48 +0000)
committervolpol <volpol@packet-gain.de>
Sun, 22 Sep 2013 16:48:39 +0000 (16:48 +0000)
CMakeLists.txt
config.h [new file with mode: 0644]
curly.c
curly.h
itemq.c
m3u8.c
memfile.c
memfile.h

index 4e4b15538102e529229fc792b4131c45c8ec5741..e3cbfbe28bb7f47ab9259fe863c70be7d600fe9c 100644 (file)
@@ -2,9 +2,6 @@ cmake_minimum_required(VERSION 2.6)
 project(HLS)
 set( CMAKE_C_FLAGS "-W -Wall -Wextra" )
 include_directories(${HLS_SOURCE_DIR})
-add_definitions(-DUSE_TCP)
-#add_definitions(-DDEBUG)
-add_definitions(-DUSE_TC7200_WORKAROUND)
 add_executable(hls curly.c itemq.c m3u8.c memfile.c)
 include(FindPkgConfig)
 pkg_check_modules(CURL REQUIRED libcurl)
diff --git a/config.h b/config.h
new file mode 100644 (file)
index 0000000..219402a
--- /dev/null
+++ b/config.h
@@ -0,0 +1,4 @@
+#define USE_TCP
+//#define USE_MEMFILE
+#define DEBUG
+//#define USE_TC7200_WORKAROUND
diff --git a/curly.c b/curly.c
index a7850aafb94da6ac5b6f75789ed84df49312b2bf..80789ae01e6702bf37991fa10962ceb3dc1568f7 100644 (file)
--- a/curly.c
+++ b/curly.c
@@ -5,9 +5,12 @@
 #include <unistd.h>
 
 #include <time.h>
-#include "log.h"
+#include "config.h"
+
 
+#include "log.h"
 #include "memfile.h"
+
 #ifdef USE_TCP
 
 #include <sys/types.h>
@@ -278,37 +281,32 @@ OUT:
 }
 
 
-#ifdef USE_STREAM
-
-int curly_refresh_m3u8(const char *from_url, const char *to_file) {
-
-#else
-
+#ifdef USE_MEMFILE
 size_t mwrite_wrapper(void *ptr, size_t size, size_t nmemb, void *stream){
     WHOAMI;
     return (mwrite(ptr, size, nmemb, (MFILE*)stream) * size);
 }
+#endif
 
-int curly_refresh_m3u8(const char *from_url, MFILE *f) {
+int curly_refresh_m3u8(const char *from_url, void *src) {
 
-#endif
 
     CURL *ch = NULL;
     CURLcode cc;
 
-#ifdef USE_STREAM
+#ifdef USE_MEMFILE
+    MFILE *f;
+#else
     FILE *f;
 #endif
 
     int err = -1;
     WHOAMI;
 
-#ifdef USE_STREAM
-    f = fopen(to_file, "w");
-
+    f = src;
     if (!f)
         goto OUT;
-#endif
+
 
     /*
      if (sch)
@@ -332,7 +330,7 @@ int curly_refresh_m3u8(const char *from_url, MFILE *f) {
         goto OUT;
 
 
-#ifndef USE_STREAM
+#ifdef USE_MEMFILE
     WHOAMI;
     cc = curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, mwrite_wrapper);
     if (CURLE_OK != cc)
@@ -353,10 +351,6 @@ int curly_refresh_m3u8(const char *from_url, MFILE *f) {
 
 OUT:
 
-#ifdef USE_STREAM
-    if (f)
-        fclose(f);
-#endif
     //if (ch && ch!=sch)       curl_easy_cleanup(ch);
 
     if (ch)
diff --git a/curly.h b/curly.h
index de3a7ac153ade837ac86c859d619ba1beec4fa34..568a9d645ac2a405f71f0eed01099839308d0768 100644 (file)
--- a/curly.h
+++ b/curly.h
 #include "memfile.h"
 int curly_init(void);
 void curly_cleanup(void);
-#ifdef USE_STREAM
-int curly_refresh_m3u8(const char *from_url, const char *to_file);
-#else
-int curly_refresh_m3u8(const char *from_url, MFILE *f);
-#endif
+int curly_refresh_m3u8(const char *from_url, void *src);
 int curly_stream(const char *from_url, unsigned long duration);
 int curly_stream_init(const char *ip, unsigned short port);
 void curly_stream_cleanup(void);
diff --git a/itemq.c b/itemq.c
index e00f83b8fb0628a286c6d22ead6e910360392427..4754b3949df7f12f6cc234ba9a049fd922341740 100644 (file)
--- a/itemq.c
+++ b/itemq.c
@@ -6,6 +6,8 @@
 #include <sys/types.h>
 #include <time.h>
 #include <signal.h>
+
+#include "config.h"
 #include "curly.h"
 #include "m3u8.h"
 #include "log.h"
@@ -183,15 +185,15 @@ void emulate_stream(void) {
     curr->done = 1;
 
 }
-#ifdef USE_STREAM
-int reload_m3u8(const char *from_file, const char *urlbase) {
-#else
-int reload_m3u8(MFILE *f, const char *urlbase) {
-#endif
 
-#ifdef USE_STREAM
+int reload_m3u8(void *src, const char *urlbase) {
+
+#ifdef USE_MEMFILE
+    MFILE *f;
+#else
     FILE *f;
 #endif
+
     char buf[1024];
     struct item *n;
     struct item *p;
@@ -207,20 +209,19 @@ int reload_m3u8(MFILE *f, const char *urlbase) {
 
     WHOAMI;
 
-
+    f = src;
     plist = pid = bw = 0;
 
     DPRINT("Reloading M3U8\n");
-#ifdef USE_STREAM
-    f = fopen(from_file, "r");
-#endif
     if (!f)
         return -1;
-#ifdef USE_STREAM
-    while (fgets(buf, sizeof buf, f)) {
-#else
+
+#ifdef USE_MEMFILE
     while (mgets(buf, sizeof buf, f)) {
+#else
+    while (fgets(buf, sizeof buf, f)) {
 #endif
+
         if (buf[strlen(buf) - 1] == '\n')
             buf[strlen(buf) - 1] = 0;
         if (buf[strlen(buf) - 1] == '\r')
@@ -291,9 +292,7 @@ int reload_m3u8(MFILE *f, const char *urlbase) {
             }
         }
     }
-#ifdef USE_STREAM
-    fclose(f);
-#endif
+
     return 0;
 }
 
@@ -326,6 +325,7 @@ static void reset_base(char *base, char *url){
     //TODO risky dice
     *(strrchr(base, '/')+1) = 0;
 }
+
 int main(int argc, char *argv[]) {
 
     time_t last, now;
@@ -359,21 +359,26 @@ int main(int argc, char *argv[]) {
         now = time(NULL);
         if (live && now-last>=refresh_period) {
             DPRINT("Refreshing M3U8 after %d real seconds\n",(int)(last?now-last:0));
-#ifdef USE_STREAM
-            refreshed = (0 == curly_refresh_m3u8(url, PLS));
-#else
+#ifdef USE_MEMFILE
             MFILE *f = mopen(NULL, 0, "w+");
-
             refreshed = (0 == curly_refresh_m3u8(url, f));
+            //memfile actually doesn't reposition rpos in mwrite calls
+            //but it should at some point so let's stay future-fool
+            mrewind(f);
+#else
+            FILE *f = fopen(PLS, "w+");
+            refreshed = (0 == curly_refresh_m3u8(url, f));
+            rewind(f);
 #endif
             if (refreshed) {
                 last = now = time(NULL);
                 purge_prepare();
-#ifdef USE_STREAM
-                if (0 == reload_m3u8(PLS, base)) {
-#else
                 if (0 == reload_m3u8(f, base)) {
+
+#ifdef USE_MEMFILE
                     mclose(f);
+#else
+                    fclose(f);
 #endif
                     refreshed = 0;
                     purge_run(0);
diff --git a/m3u8.c b/m3u8.c
index 53219694f084899927bfa660965e054b146e6007..2a196e506b6dbafca15ad5d51d7b5ade606fc9f8 100644 (file)
--- a/m3u8.c
+++ b/m3u8.c
@@ -11,6 +11,7 @@
 
 #include <ctype.h>
 
+#include "config.h"
 #include "m3u8.h"
 #include "log.h"
 
index 5cb505544ba672f35087e81582b6eae576db1dd3..1b998ff9a107e649a734efd4d875207dfe4d5593 100644 (file)
--- a/memfile.c
+++ b/memfile.c
@@ -2,6 +2,7 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "config.h"
 #include "memfile.h"
 #include "log.h"
 
@@ -121,6 +122,10 @@ no_mem:
     return tot;
 }
 
+void mrewind(MFILE *m){
+    m->rpos = 0;
+}
+
 void mdump(MFILE *m){
     WHOAMI;
     write(1, m->pm, m->length);
index 28bdfb1fdfacc068bfef6dbaf5939dde7a9fb4a1..2290204d2bb9fa55a6b897b41e0b6323478feab9 100644 (file)
--- a/memfile.h
+++ b/memfile.h
@@ -17,6 +17,9 @@ int mputc(int c, MFILE *mf);
 size_t mread(void *ptr, size_t size, size_t nmemb, MFILE *mf);
 size_t mwrite(const void *ptr, size_t size, size_t nmemb, MFILE *mf);
 
+void mrewind(MFILE *m);
+
 void mdump(MFILE *m);
 
+
 #endif /* MEMFILE_H_ */