#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-#include <netdb.h>
#include "common.h"
#include "http.h"
{
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;
}
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);