http_error(http_connection_t *hc, int error)
{
const char *errtxt = http_rc2str(error);
+ char *addrstr = (char*)malloc(50);
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrstr, 50);
tvhlog(LOG_ERR, "HTTP", "%s: %s -- %d",
- inet_ntoa(hc->hc_peer->sin_addr), hc->hc_url, error);
+ addrstr, hc->hc_url, error);
+ free(addrstr);
htsbuf_queue_flush(&hc->hc_reply);
{
const char *ticket_id = http_arg_get(&hc->hc_req_args, "ticket");
- if(!access_ticket_verify(ticket_id, hc->hc_url)) {
+ if(!access_ticket_verify(ticket_id, hc->hc_url))
+ {
+ char *addrstr = (char*)malloc(50);
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrstr, 50);
tvhlog(LOG_INFO, "HTTP", "%s: using ticket %s for %s",
- inet_ntoa(hc->hc_peer->sin_addr), ticket_id,
- hc->hc_url);
+ addrstr, ticket_id, hc->hc_url);
+ free(addrstr);
return 0;
}
if(hc->hc_username != NULL) {
hc->hc_representative = strdup(hc->hc_username);
} else {
- hc->hc_representative = malloc(30);
+ hc->hc_representative = malloc(50);
/* Not threadsafe ? */
- snprintf(hc->hc_representative, 30,
- "%s", inet_ntoa(hc->hc_peer->sin_addr));
-
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, hc->hc_representative, 50);
}
switch(hc->hc_version) {
*
*/
static void
-http_serve(int fd, void *opaque, struct sockaddr_in *peer,
- struct sockaddr_in *self)
+http_serve(int fd, void *opaque, struct sockaddr_storage *peer,
+ struct sockaddr_storage *self)
{
htsbuf_queue_t spill;
http_connection_t hc;
}
+/**
+ *
+ */
+char *
+tcp_get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen)
+{
+ if(sa == NULL || s == NULL)
+ return NULL;
+
+ switch(sa->sa_family)
+ {
+ case AF_INET:
+ inet_ntop(AF_INET, &(((struct sockaddr_in*)sa)->sin_addr), s, maxlen);
+ break;
+ case AF_INET6:
+ inet_ntop(AF_INET6, &(((struct sockaddr_in6*)sa)->sin6_addr), s, maxlen);
+ break;
+ default:
+ strncpy(s, "Unknown AF", maxlen);
+ return NULL;
+ }
+
+ return s;
+}
+
/**
*
*/