X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/record-dvb/blobdiff_plain/5c2e3e4489486a30d8f14338277de093b4d94cf0..ed3679acee1dbd17f59ca487941d0bf35f9eab2a:/common.c diff --git a/common.c b/common.c index 97ec807..825b5ae 100644 --- a/common.c +++ b/common.c @@ -2,17 +2,22 @@ #include #include #include +#include +#include +#include #include "common.h" struct dvb_host *parse(char *urlpart, char *defport) { - struct dvb_host *dvbhost; + static struct dvb_host *dvbhost = NULL; 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)); @@ -62,3 +67,45 @@ struct dvb_host *parse(char *urlpart, char *defport) 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; +}