]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
htsp server: pass uuid information in the sourceinfo / subscriptionStart
authorJaroslav Kysela <perex@perex.cz>
Thu, 14 Jan 2016 07:38:40 +0000 (08:38 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 14 Jan 2016 07:38:40 +0000 (08:38 +0100)
src/htsp_server.c
src/input/mpegts/mpegts_service.c
src/service.c
src/service.h
src/uuid.c
src/uuid.h

index 259e37ac8dcc63e7ad51f78e42ebf3807bf994a1..d33200278025be0b6c92337d328f2f88d559d254 100644 (file)
@@ -3787,6 +3787,7 @@ htsp_subscription_start(htsp_subscription_t *hs, const streaming_start_t *ss)
 {
   htsmsg_t *m,*streams, *c, *sourceinfo;
   const char *type;
+  tvh_uuid_t hex;
   int i;
   const source_info_t *si;
 
@@ -3860,6 +3861,18 @@ htsp_subscription_start(htsp_subscription_t *hs, const streaming_start_t *ss)
   htsmsg_add_msg(m, "streams", streams);
 
   si = &ss->ss_si;
+  if(!uuid_empty(&si->si_adapter_uuid)) {
+    uuid_bin2hex(&si->si_adapter_uuid, &hex);
+    htsmsg_add_str(sourceinfo, "adapter_uuid", hex.hex);
+  }
+  if(!uuid_empty(&si->si_mux_uuid)) {
+    uuid_bin2hex(&si->si_mux_uuid, &hex);
+    htsmsg_add_str(sourceinfo, "mux_uuid", hex.hex);
+  }
+  if(!uuid_empty(&si->si_network_uuid)) {
+    uuid_bin2hex(&si->si_network_uuid, &hex);
+    htsmsg_add_str(sourceinfo, "network_uuid", hex.hex);
+  }
   if(si->si_adapter ) htsmsg_add_str(sourceinfo, "adapter",  si->si_adapter );
   if(si->si_mux     ) htsmsg_add_str(sourceinfo, "mux"    ,  si->si_mux     );
   if(si->si_network ) htsmsg_add_str(sourceinfo, "network",  si->si_network );
index 4f650f49a9c269cd0040db711b0589624b44743e..d18e69cb93ee50885899fcfc05e65cd7aba2dd14 100644 (file)
@@ -429,6 +429,9 @@ mpegts_service_setsourceinfo(service_t *t, source_info_t *si)
   memset(si, 0, sizeof(struct source_info));
   si->si_type = S_MPEG_TS;
 
+  uuid_copy(&si->si_network_uuid, &m->mm_network->mn_id.in_uuid);
+  uuid_copy(&si->si_mux_uuid, &m->mm_id.in_uuid);
+
   if(m->mm_network->mn_network_name != NULL)
     si->si_network = strdup(m->mm_network->mn_network_name);
 
@@ -437,6 +440,7 @@ mpegts_service_setsourceinfo(service_t *t, source_info_t *si)
 
   if(s->s_dvb_active_input) {
     mpegts_input_t *mi = s->s_dvb_active_input;
+    uuid_copy(&si->si_adapter_uuid, &mi->ti_id.in_uuid);
     mi->mi_display_name(mi, buf, sizeof(buf));
     si->si_adapter = strdup(buf);
   }
index f364440bd06be09407bc1c3103bab34314fe3f4a..215cbfaa69a20882f6d414b36492f76e64eeedaa 100644 (file)
@@ -1480,7 +1480,8 @@ service_source_info_free(struct source_info *si)
 void
 service_source_info_copy(source_info_t *dst, const source_info_t *src)
 {
-#define COPY(x) dst->si_##x = src->si_##x ? strdup(src->si_##x) : NULL
+  *dst = *src;
+#define COPY(x) if (src->si_##x) dst->si_##x = strdup(src->si_##x)
   COPY(adapter);
   COPY(network);
   COPY(mux);
index 6a24543362671e7d373b90cc0499eba032a49f95..7a6e3d90cf39626dfbb8df160099c8944f718ad1 100644 (file)
@@ -39,6 +39,9 @@ struct mpegts_apids;
  * Source information
  */
 typedef struct source_info {
+  tvh_uuid_t si_adapter_uuid;
+  tvh_uuid_t si_network_uuid;
+  tvh_uuid_t si_mux_uuid;
   char *si_adapter;
   char *si_network;
   char *si_satpos;
index a91b690a04542ca6ecd54e371e80255434d0b574..e4597b582291b9eb736e48524b90ccf3ff045fc9 100644 (file)
@@ -27,6 +27,8 @@
 
 #define RANDOM_PATH "/dev/urandom"
 
+uint8_t ___uuid_empty[UUID_BIN_SIZE] = { 0 };
+
 static int fd = -1;
 
 /* **************************************************************************
index ebe8df6a1dc43c2e86986caefc35f15d2c842814..e8c6c0cb0142eba6423ba4d7b5df17f59755b26c 100644 (file)
@@ -25,6 +25,8 @@
 #define UUID_BIN_SIZE   (16)
 #define UUID_HEX_SIZE   (33) // inc NUL
 
+extern uint8_t ___uuid_empty[UUID_BIN_SIZE];
+
 /* Structure to hold UUID */
 typedef struct uuid {
   union {
@@ -75,6 +77,14 @@ static inline int uuid_cmp ( const tvh_uuid_t *a, const tvh_uuid_t *b )
   return memcmp(a->bin, b->bin, UUID_BIN_SIZE);
 }
 
+/**
+ * Empty
+ */
+static inline int uuid_empty ( const tvh_uuid_t *a )
+{
+  return memcmp(a->bin, ___uuid_empty, UUID_BIN_SIZE) == 0;
+}
+
 /**
  * Valid hex uuid
  */