Projects
Multimedia
mpfc
mpfc-getaddrinfo.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mpfc-getaddrinfo.patch of Package mpfc (Revision 4)
Currently displaying revision
4
,
Show latest
--- plugins/input/audiocd/cddb.c.orig 2011-03-13 21:10:31.000000000 +0100 +++ plugins/input/audiocd/cddb.c 2011-03-13 21:36:20.000000000 +0100 @@ -39,7 +39,7 @@ #define CDDB_MAX_LINE_LEN 256 #define CDDB_BUF_SIZE 65536 -#define CDDB_PORT 8880 +#define CDDB_PORT "8880" /* Data */ static char **cddb_data = NULL; @@ -201,10 +201,11 @@ { int sockfd = -1, i; char buf[CDDB_BUF_SIZE]; - struct hostent *he; - struct sockaddr_in their_addr; char host[MAX_FILE_NAME]; char category[80]; + struct addrinfo hints; + struct addrinfo *result, *rp; + int s; if (!cddb_server_found) return FALSE; @@ -213,23 +214,35 @@ cddb_get_host_name(host); /* Get host address */ + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = 0; + hints.ai_protocol = 0; logger_message(acd_log, 1, _("Getting address of %s"), host); - he = gethostbyname(host); - if (he == NULL) - goto close; - - /* Initialize socket and connect */ - logger_message(acd_log, 1, _("Connecting to %s"), host); - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - goto close; - their_addr.sin_family = AF_INET; - their_addr.sin_port = htons(CDDB_PORT); - their_addr.sin_addr = *((struct in_addr *)he->h_addr); - memset(&(their_addr.sin_zero), 0, 8); - if (connect(sockfd, (struct sockaddr *)&their_addr, - sizeof(struct sockaddr)) < 0) - goto close; + s = getaddrinfo(host, CDDB_PORT, &hints, &result); + if (s != 0) + { + logger_error(acd_log, 1, _("Failed to connect to %s: getaddrinfo: %s"), host, gai_strerror(s)); + goto close; + } + for (rp = result; rp != NULL; rp = rp->ai_next) + { + sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (sockfd < 0) + continue; + logger_message(acd_log, 1, _("Connecting to %s"), host); + if (connect(sockfd, rp->ai_addr, rp->ai_addrlen) >= 0) + break; + close(sockfd); + } + if (rp == NULL) + { + freeaddrinfo(result); + logger_error(acd_log, 1, _("Failed to connect to %s"), host); + goto close; + } + logger_message(acd_log, 1, _("Connected to %s"), host); /* Communicate with server */ logger_message(acd_log, 1, _("Sending query to server")); @@ -548,12 +561,13 @@ void cddb_submit( char *filename ) { char *email, *category; - int sockfd = -1, i; + int sockfd = -1; char buf[CDDB_BUF_SIZE]; - struct hostent *he; - struct sockaddr_in their_addr; char host[MAX_FILE_NAME]; char *post_str; + struct addrinfo hints; + struct addrinfo *result, *rp; + int s; /* Check data */ if (cddb_data == NULL) @@ -584,22 +598,29 @@ /* Get host address */ logger_message(acd_log, 1, _("Getting address of %s"), host); - he = gethostbyname(host); - if (he == NULL) - goto close; - - /* Initialize socket and connect */ - logger_message(acd_log, 1, _("Connecting to %s"), host); - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - goto close; - their_addr.sin_family = AF_INET; - their_addr.sin_port = htons(CDDB_PORT); - their_addr.sin_addr = *((struct in_addr *)he->h_addr); - memset(&(their_addr.sin_zero), 0, 8); - if (connect(sockfd, (struct sockaddr *)&their_addr, - sizeof(struct sockaddr)) < 0) - goto close; + s = getaddrinfo(host, CDDB_PORT, &hints, &result); + if (s != 0) + { + logger_error(acd_log, 1, _("Failed to connect to %s: getaddrinfo: %s"), host, gai_strerror(s)); + goto close; + } + for (rp = result; rp != NULL; rp = rp->ai_next) + { + sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (sockfd < 0) + continue; + logger_message(acd_log, 1, _("Connecting to %s"), host); + if (connect(sockfd, rp->ai_addr, rp->ai_addrlen) >= 0) + break; + close(sockfd); + } + if (rp == NULL) + { + freeaddrinfo(result); + logger_error(acd_log, 1, _("Failed to connect to %s"), host); + goto close; + } + logger_message(acd_log, 1, _("Connected to %s"), host); /* Communicate with server */ logger_message(acd_log, 1, _("Posting data to server")); --- libmpfc/file_http.c.orig 2011-03-13 21:21:09.000000000 +0100 +++ libmpfc/file_http.c 2011-03-13 21:33:29.000000000 +0100 @@ -43,16 +43,17 @@ /* Open a file */ file_t *fhttp_open( file_t *f, char *mode ) { - int i; file_http_data_t *data; - struct hostent *he; - struct sockaddr_in their_addr; char str[1024]; char *header = NULL, *ph = NULL; int n, end, hs, code; char *name, *host_name, *file_name; int port; int read_size; + struct addrinfo hints; + struct addrinfo *result, *rp; + int s; + char portstr[16]; /* Allocate memory for additional data */ f->m_data = (void *)malloc(sizeof(*data)); @@ -76,28 +77,37 @@ { /* Parse URL */ fhttp_parse_url(name, &host_name, &file_name, &port); + snprintf(portstr, 16, "%d", port); - /* Get host address */ + /* Get host address */ + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = 0; + hints.ai_protocol = 0; logger_message(f->m_log, 1, _("Getting address of host %s"), host_name); - he = gethostbyname(host_name); - if (he == NULL) - { - goto close; - } - logger_message(f->m_log, 1, _("OK")); - - /* Initialize socket and connect */ - data->m_sock = socket(AF_INET, SOCK_STREAM, 0); - if (data->m_sock < 0) - goto close; - their_addr.sin_family = AF_INET; - their_addr.sin_port = htons(port); - their_addr.sin_addr = *((struct in_addr *)he->h_addr); - memset(&(their_addr.sin_zero), 0, 8); - logger_message(f->m_log, 1, _("Connecting to %s"), host_name); - if (connect(data->m_sock, (struct sockaddr *)&their_addr, - sizeof(struct sockaddr)) < 0) - goto close; + s = getaddrinfo(host_name, portstr, &hints, &result); + if (s != 0) + { + logger_error(f->m_log, 1, _("Failed to connect to %s: getaddrinfo: %s"), host_name, gai_strerror(s)); + goto close; + } + for (rp = result; rp != NULL; rp = rp->ai_next) + { + data->m_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (data->m_sock < 0) + continue; + logger_message(f->m_log, 1, _("Connecting to %s"), host_name); + if (connect(data->m_sock, rp->ai_addr, rp->ai_addrlen) >= 0) + break; + close(data->m_sock); + } + if (rp == NULL) + { + freeaddrinfo(result); + logger_error(f->m_log, 1, _("Failed to connect to %s"), host_name); + goto close; + } logger_message(f->m_log, 1, _("OK")); /* Send request for file we need */
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.