Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
perexg committed Sep 18, 2014
1 parent abad739 commit 651d040
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 25 deletions.
1 change: 0 additions & 1 deletion src/descrambler.h
Expand Up @@ -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;
Expand Down
10 changes: 5 additions & 5 deletions src/descrambler/descrambler.c
Expand Up @@ -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;
}
}

Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -446,12 +445,13 @@ descrambler_descramble ( service_t *t,
}
}
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;
Expand Down
25 changes: 10 additions & 15 deletions src/service.c
Expand Up @@ -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);
Expand Down
17 changes: 13 additions & 4 deletions src/service.h
Expand Up @@ -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

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 651d040

Please sign in to comment.