static uint32_t session_number;
static uint16_t stream_id;
static char *rtsp_ip = NULL;
+static char *rtsp_nat_ip = NULL;
static int rtsp_port = -1;
static int rtsp_descramble = 1;
static int rtsp_rewrite_pmt = 0;
#endif
}
if (strcmp(u, rtsp_ip))
- return NULL;
+ if (rtsp_nat_ip == NULL || rtsp_nat_ip[0] == '\0' || strcmp(u, rtsp_nat_ip))
+ return NULL;
return p ? p + 1 : u + strlen(u);
}
*
*/
void satip_server_rtsp_init
- (const char *bindaddr, int port, int descramble, int rewrite_pmt, int muxcnf)
+ (const char *bindaddr, int port, int descramble, int rewrite_pmt, int muxcnf,
+ const char *nat_ip)
{
static tcp_server_ops_t ops = {
.start = rtsp_serve,
};
int reg = 0;
uint8_t rnd[4];
+ char *s;
if (!rtsp_server) {
uuid_random(rnd, sizeof(rnd));
session_number = *(uint32_t *)rnd;
rtsp_server = NULL;
reg = 1;
}
- free(rtsp_ip);
- rtsp_ip = strdup(bindaddr);
+ if ((s = rtsp_ip) != NULL)
+ rtsp_ip = strdup(bindaddr);
+ free(s);
rtsp_port = port;
rtsp_descramble = descramble;
rtsp_rewrite_pmt = rewrite_pmt;
rtsp_muxcnf = muxcnf;
+ if ((s = rtsp_nat_ip) != NULL)
+ rtsp_nat_ip = nat_ip ? strdup(nat_ip) : NULL;
+ free(s);
if (!rtsp_server)
rtsp_server = tcp_server_create(bindaddr, port, &ops, NULL);
if (reg)
rtsp_server = NULL;
rtsp_port = -1;
free(rtsp_ip);
+ free(rtsp_nat_ip);
rtsp_ip = NULL;
satip_rtp_done();
pthread_mutex_unlock(&global_lock);
.list = satip_server_class_muxcfg_list,
.group = 1,
},
+ {
+ .type = PT_STR,
+ .id = "satip_nat_ip",
+ .name = N_("External IP (NAT)"),
+ .off = offsetof(struct satip_server_conf, satip_nat_ip),
+ .group = 1,
+ },
{
.type = PT_INT,
.id = "satip_dvbs",
static void satip_server_save(void)
{
int descramble, rewrite_pmt, muxcnf;
+ char *nat_ip;
config_save();
if (!satip_server_rtsp_port_locked) {
descramble = satip_server_conf.satip_descramble;
rewrite_pmt = satip_server_conf.satip_rewrite_pmt;
muxcnf = satip_server_conf.satip_muxcnf;
+ nat_ip = satip_server_conf.satip_nat_ip ? strdup(satip_server_conf.satip_nat_ip) : NULL;
pthread_mutex_unlock(&global_lock);
- satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, rewrite_pmt, muxcnf);
+ satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, rewrite_pmt, muxcnf, nat_ip);
satip_server_info("re", descramble, muxcnf);
satips_upnp_send_announce();
pthread_mutex_lock(&global_lock);
+ free(nat_ip);
} else {
pthread_mutex_unlock(&global_lock);
tvhinfo("satips", "SAT>IP Server shutdown");
struct sockaddr_storage http;
char http_ip[128];
int descramble, rewrite_pmt, muxcnf;
+ char *nat_ip;
http_server_ip = NULL;
satip_server_bootid = time(NULL);
descramble = satip_server_conf.satip_descramble;
rewrite_pmt = satip_server_conf.satip_rewrite_pmt;
muxcnf = satip_server_conf.satip_muxcnf;
+ nat_ip = satip_server_conf.satip_nat_ip;
- satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, rewrite_pmt, muxcnf);
+ satip_server_rtsp_init(http_server_ip, satip_server_rtsp_port, descramble, rewrite_pmt, muxcnf, nat_ip);
satip_server_info("", descramble, muxcnf);
}
int satip_dvbc2;
int satip_atsc;
int satip_dvbcb;
+ char *satip_nat_ip;
};
extern struct satip_server_conf satip_server_conf;
void satip_rtp_done(void);
void satip_server_rtsp_init(const char *bindaddr, int port,
- int descramble, int rewrite_pmt, int muxcnf);
+ int descramble, int rewrite_pmt, int muxcnf,
+ const char *nat_ip);
void satip_server_rtsp_register(void);
void satip_server_rtsp_done(void);