dvb: attempt to stop bad updates to network info.
This commit is contained in:
parent
34e7acc087
commit
ed27c4b3dd
4 changed files with 59 additions and 32 deletions
|
@ -435,7 +435,7 @@ th_dvb_mux_instance_t *dvb_mux_create(th_dvb_adapter_t *tda,
|
|||
uint16_t onid, uint16_t tsid, const char *network,
|
||||
const char *logprefix, int enabled,
|
||||
int initialscan, const char *identifier,
|
||||
dvb_satconf_t *satconf, int create);
|
||||
dvb_satconf_t *satconf, int create, th_dvb_mux_instance_t *src);
|
||||
|
||||
void dvb_mux_set_networkname(th_dvb_mux_instance_t *tdmi, const char *name);
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ th_dvb_mux_instance_t *
|
|||
dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
||||
uint16_t onid, uint16_t tsid, const char *network, const char *source,
|
||||
int enabled, int initialscan, const char *identifier,
|
||||
dvb_satconf_t *satconf, int create)
|
||||
dvb_satconf_t *satconf, int create, th_dvb_mux_instance_t *src)
|
||||
{
|
||||
th_dvb_mux_instance_t *tdmi, *c;
|
||||
char buf[200];
|
||||
|
@ -177,7 +177,35 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
int save = 0;
|
||||
char buf2[1024];
|
||||
buf2[0] = 0;
|
||||
int master = 0;
|
||||
if (!src)
|
||||
master = 1;
|
||||
else if (src->tdmi_network_id == tdmi->tdmi_network_id)
|
||||
master = 1;
|
||||
|
||||
/* Network ID */
|
||||
if(tsid != 0xFFFF && tdmi->tdmi_transport_stream_id != tsid) {
|
||||
if (tdmi->tdmi_transport_stream_id == 0xFFFF || master) {
|
||||
tdmi->tdmi_transport_stream_id = tsid;
|
||||
save = 1;
|
||||
}
|
||||
}
|
||||
if(onid && tdmi->tdmi_network_id != onid) {
|
||||
if (!tdmi->tdmi_network_id || master) {
|
||||
tdmi->tdmi_network_id = onid;
|
||||
save = 1;
|
||||
}
|
||||
}
|
||||
if(network && *network && strcmp(tdmi->tdmi_network ?: "", network)) {
|
||||
if (!tdmi->tdmi_network || master) {
|
||||
free(tdmi->tdmi_network);
|
||||
tdmi->tdmi_network = strdup(network);
|
||||
save = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tuning Info */
|
||||
// TODO: same protection here?
|
||||
if(tdmi->tdmi_adapter->tda_autodiscovery &&
|
||||
tdmi_compare_conf(tda->tda_type, &tdmi->tdmi_conf, dmc)) {
|
||||
#if DVB_API_VERSION >= 5
|
||||
|
@ -201,20 +229,6 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
save = 1;
|
||||
}
|
||||
|
||||
if(tsid != 0xFFFF && tdmi->tdmi_transport_stream_id != tsid) {
|
||||
tdmi->tdmi_transport_stream_id = tsid;
|
||||
save = 1;
|
||||
}
|
||||
if(onid && tdmi->tdmi_network_id != onid) {
|
||||
tdmi->tdmi_network_id = onid;
|
||||
save = 1;
|
||||
}
|
||||
if(network && *network && strcmp(tdmi->tdmi_network ?: "", network)) {
|
||||
free(tdmi->tdmi_network);
|
||||
tdmi->tdmi_network = strdup(network);
|
||||
save = 1;
|
||||
}
|
||||
|
||||
/* HACK - load old transports and remove old mux config */
|
||||
if(identifier) {
|
||||
save = 1;
|
||||
|
@ -803,7 +817,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier)
|
|||
tdmi = dvb_mux_create(tda, &dmc,
|
||||
onid, tsid, htsmsg_get_str(m, "network"), NULL, enabled,
|
||||
initscan,
|
||||
identifier, NULL, 1);
|
||||
identifier, NULL, 1, NULL);
|
||||
if(tdmi != NULL) {
|
||||
|
||||
if((s = htsmsg_get_str(m, "status")) != NULL)
|
||||
|
@ -1203,7 +1217,7 @@ dvb_mux_add_by_params(th_dvb_adapter_t *tda,
|
|||
}
|
||||
dmc.dmc_polarisation = polarisation;
|
||||
|
||||
tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL, 1);
|
||||
tdmi = dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, NULL, 1, 1, NULL, NULL, 1, NULL);
|
||||
|
||||
if(tdmi == NULL)
|
||||
return "Mux already exist";
|
||||
|
@ -1230,7 +1244,7 @@ dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
|
|||
tdmi_src->tdmi_transport_stream_id,
|
||||
tdmi_src->tdmi_network,
|
||||
"copy operation", tdmi_src->tdmi_enabled,
|
||||
1, NULL, satconf, 1);
|
||||
1, NULL, satconf, 1, tdmi_src);
|
||||
|
||||
if(tdmi_dst == NULL)
|
||||
return -1; // Already exist
|
||||
|
|
|
@ -98,7 +98,7 @@ dvb_mux_preconf_add(th_dvb_adapter_t *tda, const network_t *net,
|
|||
|
||||
dmc.dmc_satconf = dvb_satconf_entry_find(tda, satconf, 0);
|
||||
|
||||
dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL, 1);
|
||||
dvb_mux_create(tda, &dmc, 0, 0xffff, NULL, source, 1, 1, NULL, NULL, 1, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -448,17 +448,30 @@ dvb_sdt_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
if (chname && (strcmp(t->s_provider ?: "", provider) ||
|
||||
strcmp(t->s_svcname ?: "", chname))) {
|
||||
free(t->s_provider);
|
||||
t->s_provider = strdup(provider);
|
||||
int save2 = 0;
|
||||
int master = 0;
|
||||
if (t->s_dvb_mux_instance && t->s_dvb_mux_instance->tdmi_network_id &&
|
||||
t->s_dvb_mux_instance->tdmi_network_id == tdmi->tdmi_network_id)
|
||||
master = 1;
|
||||
|
||||
if (!t->s_provider || master) {
|
||||
free(t->s_provider);
|
||||
t->s_provider = strdup(provider);
|
||||
save2 = 1;
|
||||
}
|
||||
|
||||
free(t->s_svcname);
|
||||
t->s_svcname = strdup(chname);
|
||||
if (!t->s_svcname || master) {
|
||||
free(t->s_svcname);
|
||||
t->s_svcname = strdup(chname);
|
||||
save2 = 1;
|
||||
}
|
||||
|
||||
pthread_mutex_lock(&t->s_stream_mutex);
|
||||
service_make_nicename(t);
|
||||
pthread_mutex_unlock(&t->s_stream_mutex);
|
||||
|
||||
save = 1;
|
||||
if (save2) {
|
||||
pthread_mutex_lock(&t->s_stream_mutex);
|
||||
service_make_nicename(t);
|
||||
pthread_mutex_unlock(&t->s_stream_mutex);
|
||||
save = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (*crid && strcmp(t->s_default_authority ?: "", crid)) {
|
||||
|
@ -692,7 +705,7 @@ dvb_table_cable_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
|
||||
"automatic mux discovery", 1, 1, NULL, NULL,
|
||||
tdmi->tdmi_adapter->tda_autodiscovery);
|
||||
tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -778,7 +791,7 @@ dvb_table_sat_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
|
||||
"automatic mux discovery", 1, 1, NULL, tdmi->tdmi_conf.dmc_satconf,
|
||||
tdmi->tdmi_adapter->tda_autodiscovery);
|
||||
tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -817,7 +830,7 @@ dvb_table_terr_delivery(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
|
|||
|
||||
dvb_mux_create(tdmi->tdmi_adapter, &dmc, onid, tsid, netname,
|
||||
"automatic mux discovery", 1, 1, NULL, NULL,
|
||||
tdmi->tdmi_adapter->tda_autodiscovery);
|
||||
tdmi->tdmi_adapter->tda_autodiscovery, tdmi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue