From 315b389e2c6421c6f33996f463b4ec946e782c07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Wed, 3 Jun 2009 20:11:06 +0000 Subject: [PATCH] Make TRANSPORT_FEED_ error code -> string conversion centralized. --- src/dvr/dvr_rec.c | 4 ++++ src/htsp.c | 31 +++---------------------- src/serviceprobe.c | 36 ++++------------------------- src/subscriptions.c | 6 +++-- src/transports.c | 55 +++++++++++++++++++++++++++++---------------- src/transports.h | 2 +- src/tvhead.h | 2 +- src/webui/extjs.c | 2 +- 8 files changed, 54 insertions(+), 84 deletions(-) diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 4929a738..0c2b9534 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -31,6 +31,7 @@ #include "streaming.h" #include "dvr.h" #include "spawn.h" +#include "transports.h" typedef struct dvr_rec_stream { LIST_ENTRY(dvr_rec_stream) drs_link; @@ -431,6 +432,9 @@ dvr_thread(void *aux) break; case SMT_TRANSPORT_STATUS: + if(sm->sm_code != TRANSPORT_FEED_VALID_PACKETS) + dvr_rec_fatal_error(de, "Source problems: %s", + transport_feed_status_to_text(sm->sm_code)); break; case SMT_NOSOURCE: diff --git a/src/htsp.c b/src/htsp.c index 67903a1f..826b4f14 100644 --- a/src/htsp.c +++ b/src/htsp.c @@ -37,6 +37,7 @@ #include "access.h" #include "htsp.h" #include "streaming.h" +#include "transports.h" #include "htsmsg_binary.h" @@ -1159,35 +1160,9 @@ htsp_subscription_transport_status(htsp_subscription_t *hs, { const char *err = NULL; - switch(status) { - case TRANSPORT_FEED_UNKNOWN: - return; + if(status != TRANSPORT_FEED_VALID_PACKETS) + err = transport_feed_status_to_text(status); - case TRANSPORT_FEED_NO_INPUT: - err = "No data input from adapter detected"; - break; - - case TRANSPORT_FEED_NO_DEMUXED_INPUT: - err = "No mux packets for this service"; - break; - - case TRANSPORT_FEED_RAW_INPUT: - err = "Data received for service, " - "but no packets could be reassembled"; - break; - - case TRANSPORT_FEED_NO_DESCRAMBLER: - err = "No descrambler available for service"; - break; - - case TRANSPORT_FEED_NO_ACCESS: - err = "Access denied"; - break; - - case TRANSPORT_FEED_VALID_PACKETS: - err = NULL; - break; - } htsp_subscription_status(hs, err); } diff --git a/src/serviceprobe.c b/src/serviceprobe.c index 00674aab..199f1de7 100644 --- a/src/serviceprobe.c +++ b/src/serviceprobe.c @@ -114,40 +114,12 @@ serviceprobe_thread(void *aux) if(sm->sm_type == SMT_TRANSPORT_STATUS) { status = sm->sm_code; - switch(status) { - case TRANSPORT_FEED_UNKNOWN: - break; + run = 0; - case TRANSPORT_FEED_NO_INPUT: - err = "No data input from adapter detected"; - run = 0; - break; - - case TRANSPORT_FEED_NO_DEMUXED_INPUT: - err = "No mux packets for this service"; - run = 0; - break; - - case TRANSPORT_FEED_RAW_INPUT: - err = "Data received for service, " - "but no packets could be reassembled"; - run = 0; - break; - - case TRANSPORT_FEED_NO_DESCRAMBLER: - err = "No descrambler available for service"; - run = 0; - break; - - case TRANSPORT_FEED_NO_ACCESS: - err = "Access denied"; - run = 0; - break; - - case TRANSPORT_FEED_VALID_PACKETS: + if(status == TRANSPORT_FEED_VALID_PACKETS) { err = NULL; - run = 0; - break; + } else { + err = transport_feed_status_to_text(status); } } diff --git a/src/subscriptions.c b/src/subscriptions.c index b4e32361..5aea55f1 100644 --- a/src/subscriptions.c +++ b/src/subscriptions.c @@ -72,8 +72,10 @@ subscription_link_transport(th_subscription_t *s, th_transport_t *t) streaming_target_deliver(s->ths_output, sm); // Send a TRANSPORT_STATUS message to the subscription client - sm = streaming_msg_create_code(SMT_TRANSPORT_STATUS, t->tht_feed_status); - streaming_target_deliver(s->ths_output, sm); + if(t->tht_feed_status != TRANSPORT_FEED_UNKNOWN) { + sm = streaming_msg_create_code(SMT_TRANSPORT_STATUS, t->tht_feed_status); + streaming_target_deliver(s->ths_output, sm); + } pthread_mutex_unlock(&t->tht_stream_mutex); } diff --git a/src/transports.c b/src/transports.c index fd86e163..af2cc2c6 100644 --- a/src/transports.c +++ b/src/transports.c @@ -666,25 +666,6 @@ transport_set_feed_status(th_transport_t *t, transport_feed_status_t newstatus) newstatus)); } - -/** - * Table for status -> text conversion - */ -static struct strtab transportstatustab[] = { - { "Ok", TRANSPORT_FEED_VALID_PACKETS }, - { "No input", TRANSPORT_FEED_NO_INPUT }, - { "No descrambler", TRANSPORT_FEED_NO_DESCRAMBLER }, - { "No access", TRANSPORT_FEED_NO_ACCESS }, -}; - - -const char * -transport_status_to_text(int status) -{ - return val2str(status, transportstatustab) ?: "Unknown"; -} - - /** * Generate a message containing info about all components * @@ -720,3 +701,39 @@ transport_build_stream_start_msg(th_transport_t *t) } + + +/** + * Table for status -> text conversion + */ +static struct strtab transportstatustab[] = { + { "Unknown", + TRANSPORT_FEED_UNKNOWN }, + + { "No data input from adapter detected", + TRANSPORT_FEED_NO_INPUT}, + + {"No mux packets for this service", + TRANSPORT_FEED_NO_DEMUXED_INPUT}, + + {"Data received for service, but no packets could be reassembled", + TRANSPORT_FEED_RAW_INPUT}, + + {"No descrambler available for service", + TRANSPORT_FEED_NO_DESCRAMBLER}, + + {"Access denied", + TRANSPORT_FEED_NO_ACCESS}, + + {"OK", + TRANSPORT_FEED_VALID_PACKETS}, +}; + + +const char * +transport_feed_status_to_text(transport_feed_status_t status) +{ + return val2str(status, transportstatustab) ?: "Unknown"; +} + + diff --git a/src/transports.h b/src/transports.h index fcc321d5..d1a36250 100644 --- a/src/transports.h +++ b/src/transports.h @@ -60,7 +60,7 @@ void transport_destroy(th_transport_t *t); void transport_set_feed_status(th_transport_t *t, transport_feed_status_t newstatus); -const char *transport_status_to_text(int status); +const char *transport_feed_status_to_text(transport_feed_status_t status); void transport_remove_subscriber(th_transport_t *t, th_subscription_t *s); diff --git a/src/tvhead.h b/src/tvhead.h index 597252ec..bec38411 100644 --- a/src/tvhead.h +++ b/src/tvhead.h @@ -322,7 +322,7 @@ typedef enum { /** No status known */ TRANSPORT_FEED_UNKNOWN, - /** No input is received from source at all */ + /** No packets are received from source at all */ TRANSPORT_FEED_NO_INPUT, /** No input is received from source destined for this transport */ diff --git a/src/webui/extjs.c b/src/webui/extjs.c index cd41eec5..ddcce436 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -580,7 +580,7 @@ build_transport_msg(th_transport_t *t) htsmsg_add_str(r, "network", t->tht_networkname(t)); htsmsg_add_str(r, "source", t->tht_sourcename(t)); - htsmsg_add_str(r, "status", transport_status_to_text(t->tht_feed_status)); + htsmsg_add_str(r, "status", ""); video[0] = 0; audio[0] = 0;