LIST_ENTRY(htsp_connection) htsp_link;
int htsp_fd;
- struct sockaddr_in *htsp_peer;
+ struct sockaddr_storage *htsp_peer;
uint32_t htsp_version;
htsmsg_add_str(out, "channelName", ch->ch_name);
if(ch->ch_icon != NULL) {
uint32_t id;
- struct sockaddr_in addr;
+ struct sockaddr_storage addr;
socklen_t addrlen;
if ((id = imagecache_get_id(ch->ch_icon))) {
size_t p = 0;
char url[256];
+ char buf[50];
if (htsp->htsp_version < 8) {
addrlen = sizeof(addr);
getsockname(htsp->htsp_fd, (struct sockaddr*)&addr, &addrlen);
+ tcp_get_ip_str((struct sockaddr*)&addr, buf, 50);
strcpy(url, "http://");
p = strlen(url);
- inet_ntop(AF_INET, &addr.sin_addr, url+p, sizeof(url)-p);
- p = strlen(url);
- p += snprintf(url+p, sizeof(url)-p, ":%hd%s",
+ p += snprintf(url+p, sizeof(url)-p, "%s%s%s:%hd%s",
+ (addr.ss_family == AF_INET6)?"[":"",
+ buf,
+ (addr.ss_family == AF_INET6)?"]":"",
tvheadend_webui_port,
tvheadend_webroot ?: "");
}
*
*/
static void
-htsp_serve(int fd, void *opaque, struct sockaddr_in *source,
- struct sockaddr_in *self)
+htsp_serve(int fd, void *opaque, struct sockaddr_storage *source,
+ struct sockaddr_storage *self)
{
htsp_connection_t htsp;
- char buf[30];
+ char buf[50];
htsp_subscription_t *s;
- snprintf(buf, sizeof(buf), "%s", inet_ntoa(source->sin_addr));
+ tcp_get_ip_str((struct sockaddr*)source, buf, 50);
memset(&htsp, 0, sizeof(htsp_connection_t));
#include "http.h"
#include "webui/webui.h"
#include "access.h"
+#include "tcp.h"
static pthread_mutex_t comet_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t comet_cond = PTHREAD_COND_INITIALIZER;
static void
comet_serverIpPort(http_connection_t *hc, comet_mailbox_t *cmb)
{
- char buf[INET_ADDRSTRLEN + 1];
+ char buf[50];
+ uint32_t port;
- inet_ntop(AF_INET, &hc->hc_self->sin_addr, buf, sizeof(buf));
+ tcp_get_ip_str((struct sockaddr*)hc->hc_self, buf, 50);
+
+ if(hc->hc_self->ss_family == AF_INET)
+ port = ((struct sockaddr_in*)hc->hc_self)->sin_port;
+ else if(hc->hc_self->ss_family == AF_INET6)
+ port = ((struct sockaddr_in6*)hc->hc_self)->sin6_port;
+ else
+ port = 0;
htsmsg_t *m = htsmsg_create_map();
htsmsg_add_str(m, "notificationClass", "setServerIpPort");
htsmsg_add_str(m, "ip", buf);
- htsmsg_add_u32(m, "port", ntohs(hc->hc_self->sin_port));
+ htsmsg_add_u32(m, "port", ntohs(port));
if(cmb->cmb_messages == NULL)
cmb->cmb_messages = htsmsg_create_list();
#include "dvb/dvb.h"
#include "dvb/dvb_support.h"
#include "imagecache.h"
+#include "tcp.h"
/**
*
const char *str;
size_t qsize;
const char *name;
+ char addrbuf[50];
mc = muxer_container_txt2type(http_arg_get(&hc->hc_req_args, "mux"));
if(mc == MC_UNKNOWN) {
flags = 0;
}
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrbuf, 50);
s = subscription_create_from_service(service, "HTTP", st, flags,
- inet_ntoa(hc->hc_peer->sin_addr),
+ addrbuf,
hc->hc_username,
http_arg_get(&hc->hc_args, "User-Agent"));
if(s) {
th_subscription_t *s;
streaming_queue_t sq;
const char *name;
+ char addrbuf[50];
streaming_queue_init(&sq, SMT_PACKET);
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrbuf, 50);
s = dvb_subscription_create_from_tdmi(tdmi, "HTTP", &sq.sq_st,
- inet_ntoa(hc->hc_peer->sin_addr),
+ addrbuf,
hc->hc_username,
http_arg_get(&hc->hc_args, "User-Agent"));
name = strdupa(tdmi->tdmi_identifier);
char *str;
size_t qsize;
const char *name;
+ char addrbuf[50];
mc = muxer_container_txt2type(http_arg_get(&hc->hc_req_args, "mux"));
if(mc == MC_UNKNOWN) {
flags = 0;
}
+ tcp_get_ip_str((struct sockaddr*)hc->hc_peer, addrbuf, 50);
s = subscription_create_from_channel(ch, priority, "HTTP", st, flags,
- inet_ntoa(hc->hc_peer->sin_addr),
+ addrbuf,
hc->hc_username,
http_arg_get(&hc->hc_args, "User-Agent"));