implement (probably working) multicast
[record-dvb] / http.c
diff --git a/http.c b/http.c
index 65c12382c09e49341cbbe887e5772ef7f3502d6e..ca756bd5a56cfa57897d047db6d4d934b2e28dec 100644 (file)
--- a/http.c
+++ b/http.c
@@ -6,7 +6,6 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#include <netdb.h>
 
 #include "common.h"
 #include "http.h"
@@ -28,22 +27,19 @@ int open_http(char *url)
 {
        int fd;
        struct sockaddr_in server;
-       struct dvb_host *dvbhost;
-       struct addrinfo *s_addrinfo, addrhints;
+       static struct dvb_host *dvbhost = NULL;
        char buffer[BUFFSIZE];
        int i;
 
        if(!is_http(url))
                return -1;
 
-       dvbhost = parse(&(url[7]), "80");
-
-       bzero(&addrhints, sizeof(struct addrinfo));
-       addrhints.ai_family = PF_INET;
-       addrhints.ai_socktype = SOCK_STREAM;
+       if (!dvbhost) {
+               dvbhost = parse(&(url[7]), "80");
+               dvbhost->socktype = SOCK_STREAM;
+       }
 
-       if ((i = getaddrinfo(dvbhost->hostname, dvbhost->port, &addrhints, &s_addrinfo))) {
-               fprintf(stderr,"getaddrinfo: %s\n",gai_strerror(i));
+       if (resolve(dvbhost, &server) < 0) {
                return -1;
        }
 
@@ -52,19 +48,11 @@ int open_http(char *url)
                return -1;
        }
 
-       bzero(&server, sizeof(struct sockaddr_in));
-       server.sin_family = AF_INET;
-       server.sin_addr.s_addr = ((struct sockaddr_in*)(s_addrinfo->ai_addr))->sin_addr.s_addr;
-       server.sin_port = ((struct sockaddr_in*)(s_addrinfo->ai_addr))->sin_port;
-
        if (connect(fd, (struct sockaddr*) &server, sizeof(server)) < 0) {
                perror("connect");
                return -1;
        }
 
-       freeaddrinfo(s_addrinfo);
-
-
        snprintf(buffer, BUFFSIZE-1, "GET /%s HTTP/1.0\n\n",dvbhost->location);
        buffer[BUFFSIZE-1] = 0;
        send(fd, buffer, strlen(buffer), 0);
Impressum, Datenschutz