]> git.zerfleddert.de Git - record-dvb/blobdiff - common.c
'cleanup'. it's still as ugly as before
[record-dvb] / common.c
index 97ec8073e93d681e7101abf6669f9dbb5af0a331..825b5aebebff69b73b0550110ab11fec1184d3d2 100644 (file)
--- a/common.c
+++ b/common.c
@@ -2,17 +2,22 @@
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
 
 #include "common.h"
 
 struct dvb_host *parse(char *urlpart, char *defport)
 {
 
 #include "common.h"
 
 struct dvb_host *parse(char *urlpart, char *defport)
 {
-       struct dvb_host *dvbhost;
+       static struct dvb_host *dvbhost = NULL;
        char *pos;
 
        char *pos;
 
-       if (!(dvbhost = malloc(sizeof(struct dvb_host)))) {
-               perror("malloc");
-               exit(EXIT_FAILURE);
+       if (!dvbhost) {
+               if (!(dvbhost = malloc(sizeof(struct dvb_host)))) {
+                       perror("malloc");
+                       exit(EXIT_FAILURE);
+               }
        }
 
        bzero(dvbhost, sizeof(struct dvb_host));
        }
 
        bzero(dvbhost, sizeof(struct dvb_host));
@@ -62,3 +67,45 @@ struct dvb_host *parse(char *urlpart, char *defport)
 
        return dvbhost;
 }
 
        return dvbhost;
 }
+
+int resolve(struct dvb_host *dvbhost, struct sockaddr_in *server)
+{
+       struct addrinfo *s_addrinfo, addrhints;
+       int res;
+
+       bzero(&addrhints, sizeof(struct addrinfo));
+       addrhints.ai_family = PF_INET;
+       addrhints.ai_socktype = dvbhost->socktype;
+
+       if ((res = getaddrinfo(dvbhost->hostname, dvbhost->port, &addrhints, &s_addrinfo))) {
+               fprintf(stderr,"getaddrinfo: %s\n",gai_strerror(res));
+               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;
+
+       freeaddrinfo(s_addrinfo);
+
+       return 0;
+}
+
+int is_url(char *string)
+{
+       char *pos;
+
+       if (!(strlen(string)))
+               return 0;
+
+       pos = string;
+
+       while(*pos != ':' && *pos != 0)
+               pos++;
+
+       if (!strncmp("://", pos, 3))
+               return 1;
+
+       return 0;
+}
Impressum, Datenschutz