]> git.zerfleddert.de Git - record-dvb/blobdiff - record-dvb.c
better url detection
[record-dvb] / record-dvb.c
index bb69447e7b72d9a101c244d739046f7f7a9e45db..5a055b8525d9a500c255318bc1f8d2bcc26ce144 100644 (file)
@@ -6,12 +6,16 @@
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/select.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <strings.h>
+#include <netdb.h>
 
 #include "http.h"
 #include "mcast.h"
+#include "sap.h"
+#include "common.h"
 
 #define CHUNKSIZE      3000
 #define GTOD_INTERVAL  100
@@ -24,6 +28,9 @@ void record(int(*open_fn)(char *), char *url, char *outfile, int duration)
        int error_sleep = 0;
        char buffer[CHUNKSIZE];
        int in, out;
+       fd_set rfds;
+       struct timeval tv;
+       int retval;
 
        if ((in = (*open_fn)(url)) < 0) {
                fprintf(stderr,"Can't open url %s!\n",url);
@@ -59,6 +66,22 @@ void record(int(*open_fn)(char *), char *url, char *outfile, int duration)
                        }
                }
 
+               FD_ZERO(&rfds);
+               FD_SET(in, &rfds);
+
+               tv.tv_sec = 1;
+               tv.tv_usec = 0;
+
+               if ((retval = select(in + 1, &rfds, NULL, NULL, &tv)) == -1) {
+                       error_sleep = 1;
+                       continue;
+               }
+
+               if (!retval) {
+                       gettimeofday(&curr, NULL);
+                       continue;
+               }
+
                if ((recvd = recv(in, buffer, CHUNKSIZE, 0)) < 1) {
                        error_sleep = 1;
                        continue;
@@ -97,12 +120,20 @@ int main(int argc, char **argv)
                exit(EXIT_FAILURE);
        }
 
+       if (!is_url(url)) {
+               char *service_url;
+               if ((service_url = get_url_from_sap(url))) {
+                       printf("SAP says: '%s' -> %s\n", url, service_url);
+                       url = service_url;
+               }
+       }
+
        if (is_http(url)) {
                open_fn = &open_http;
        } else if (is_mcast(url)) {
                open_fn = &open_mcast;
        } else {
-               printf("URL %s not supported!\n", url);
+               printf("URL '%s' not supported!\n", url);
                exit(EXIT_FAILURE);
        }
 
Impressum, Datenschutz