subscription: Move TSS_NO_ACCESS outside of the fatal errors

... but keep to report it as the first reason for which the streaming
was canceled ...

Remove also the 25-seconds descrambler check. There is a global
streaming timeout which takes care now.
This commit is contained in:
Jaroslav Kysela 2014-09-18 15:22:02 +02:00
parent abad73972d
commit 651d0404bd
4 changed files with 28 additions and 25 deletions

View file

@ -60,7 +60,6 @@ typedef struct th_descrambler {
} th_descrambler_t;
typedef struct th_descrambler_runtime {
time_t dr_last_descramble;
uint32_t dr_key:1;
uint32_t dr_key_first:1;
uint8_t dr_key_index;

View file

@ -133,7 +133,6 @@ descrambler_service_start ( service_t *t )
t->s_descramble = dr = calloc(1, sizeof(th_descrambler_runtime_t));
sbuf_init(&dr->dr_buf);
dr->dr_key_index = 0xff;
dr->dr_last_descramble = dispatch_clock;
}
}
@ -362,8 +361,8 @@ descrambler_descramble ( service_t *t,
td->td_csa->csa_descramble(td->td_csa,
(mpegts_service_t *)td->td_service,
tsb2);
dr->dr_last_descramble = dispatch_clock;
}
service_reset_streaming_status_flags(t, TSS_NO_ACCESS);
sbuf_free(&dr->dr_buf);
}
ki = tsb[3];
@ -396,7 +395,7 @@ descrambler_descramble ( service_t *t,
td->td_csa->csa_descramble(td->td_csa,
(mpegts_service_t *)td->td_service,
tsb);
dr->dr_last_descramble = dispatch_clock;
service_reset_streaming_status_flags(t, TSS_NO_ACCESS);
return 1;
next:
flush_data = 1;
@ -446,12 +445,13 @@ next2:
}
}
sbuf_append(&dr->dr_buf, tsb, 188);
service_set_streaming_status_flags(t, TSS_NO_ACCESS);
}
} else {
service_set_streaming_status_flags(t, TSS_NO_ACCESS);
}
if (flush_data)
descrambler_flush_table_data(t);
if (dr->dr_last_descramble + 25 < dispatch_clock)
return -1;
if (count && count == failed)
return -1;
return count;

View file

@ -1120,29 +1120,24 @@ service_servicetype_txt ( service_t *s )
void
service_set_streaming_status_flags_(service_t *t, int set)
{
int n;
streaming_message_t *sm;
lock_assert(&t->s_stream_mutex);
n = t->s_streaming_status;
n |= set;
if(n == t->s_streaming_status)
if(set == t->s_streaming_status)
return; // Already set
t->s_streaming_status = n;
t->s_streaming_status = set;
tvhlog(LOG_DEBUG, "service", "%s: Status changed to %s%s%s%s%s%s%s%s",
service_nicename(t),
n & TSS_INPUT_HARDWARE ? "[Hardware input] " : "",
n & TSS_INPUT_SERVICE ? "[Input on service] " : "",
n & TSS_MUX_PACKETS ? "[Demuxed packets] " : "",
n & TSS_PACKETS ? "[Reassembled packets] " : "",
n & TSS_NO_DESCRAMBLER ? "[No available descrambler] " : "",
n & TSS_NO_ACCESS ? "[No access] " : "",
n & TSS_GRACEPERIOD ? "[Graceperiod expired] " : "",
n & TSS_TIMEOUT ? "[Data timeout] " : "");
set & TSS_INPUT_HARDWARE ? "[Hardware input] " : "",
set & TSS_INPUT_SERVICE ? "[Input on service] " : "",
set & TSS_MUX_PACKETS ? "[Demuxed packets] " : "",
set & TSS_PACKETS ? "[Reassembled packets] " : "",
set & TSS_NO_DESCRAMBLER ? "[No available descrambler] " : "",
set & TSS_NO_ACCESS ? "[No access] " : "",
set & TSS_GRACEPERIOD ? "[Graceperiod expired] " : "",
set & TSS_TIMEOUT ? "[Data timeout] " : "");
sm = streaming_msg_create_code(SMT_SERVICE_STATUS,
t->s_streaming_status);

View file

@ -379,13 +379,13 @@ typedef struct service {
#define TSS_INPUT_SERVICE 0x2
#define TSS_MUX_PACKETS 0x4
#define TSS_PACKETS 0x8
#define TSS_NO_ACCESS 0x10
#define TSS_GRACEPERIOD 0x8000
// Errors
#define TSS_NO_DESCRAMBLER 0x10000
#define TSS_NO_ACCESS 0x20000
#define TSS_TIMEOUT 0x40000
#define TSS_TIMEOUT 0x20000
#define TSS_ERRORS 0xffff0000
@ -506,8 +506,17 @@ void service_set_streaming_status_flags_(service_t *t, int flag);
static inline void
service_set_streaming_status_flags(service_t *t, int flag)
{
if ((t->s_streaming_status & flag) != flag)
service_set_streaming_status_flags_(t, flag);
int n = t->s_streaming_status;
if ((n & flag) != flag)
service_set_streaming_status_flags_(t, n | flag);
}
static inline void
service_reset_streaming_status_flags(service_t *t, int flag)
{
int n = t->s_streaming_status;
if ((n & flag) != 0)
service_set_streaming_status_flags_(t, n & ~flag);
}
struct streaming_start;