1 /*
2 $Id: dsmcc_str.c,v 1.38 2006/03/06 20:25:38 rasc Exp $
3 
4 
5  DVBSNOOP
6 
7  a dvb sniffer  and mpeg2 stream analyzer tool
8  http://dvbsnoop.sourceforge.net/
9 
10  (c) 2001-2006   Rainer.Scherg@gmx.de
11 
12 
13  -- DSM-CC -Strings
14 
15 
16 
17 $Log: dsmcc_str.c,v $
18 Revision 1.38  2006/03/06 20:25:38  rasc
19 DSM-CC Carousell, lots of Bugfixes, BIOP::Message not yet decodable (ddb has to collect Modules)
20 
21 Revision 1.37  2006/03/06 01:14:50  rasc
22 Bugfixes... DSMCC BIOPs...
23 
24 Revision 1.36  2006/03/06 00:05:03  rasc
25 More DSM-CC stuff: BIOP::FileMessage, BIOP::DirectoryMessage,
26 BIOP::Stream::BIOP::StreamEvent, BIOP::ServiceGateway, DSM-TAPs, etc.
27 this is a preparation for a patch sent in by Richard Case (DSMCC-Save).
28 Attention: Code is still untested and may considered to be buggy (some teststreams are needed)...
29 
30 Revision 1.35  2006/01/02 18:24:32  rasc
31 just update copyright and prepare for a new public tar ball
32 
33 Revision 1.34  2004/07/25 20:12:59  rasc
34  - New: content_identifier_descriptor (TS 102 323)
35  - New: TVA_id_descriptor (TS 102 323)
36  - New: related_content_descriptor (TS 102 323)
37  - New: default_authority_descriptor (TS 102 323)
38 
39 Revision 1.33  2004/07/24 11:44:45  rasc
40 EN 301 192 update
41  - New: ECM_repetition_rate_descriptor (EN 301 192 v1.4.1)
42  - New: time_slice_fec_identifier_descriptor (EN 301 192 v1.4.1)
43  - New: Section MPE_FEC  EN 301 192 v1.4
44  - Bugfixes
45 
46 Revision 1.32  2004/02/24 23:03:07  rasc
47 private data of DSMCC::DSI
48 BIOP::ServiceGatewayInformation()
49 IOP::IOR()
50 
51 Revision 1.31  2004/02/20 23:13:17  rasc
52 BIOP:  TapUse
53 
54 Revision 1.30  2004/02/20 22:18:42  rasc
55 DII complete (hopefully)
56 BIOP::ModuleInfo  (damned, who is spreading infos over several standards???)
57 maybe someone give me a hint on the selector_byte info!!!
58 some minor changes...
59 
60 Revision 1.29  2004/02/15 20:46:10  rasc
61 DSM-CC  data/object carousell continued   (DSI, DII, DDB, DCancel)
62 
63 Revision 1.28  2004/02/15 18:58:30  rasc
64 DSM-CC  data/object carousell continued   (DSI, DII, DDB, DCancel)
65 
66 Revision 1.27  2004/02/15 01:01:04  rasc
67 DSM-CC  DDB (DownloadDataBlock Message)
68 DSM-CC  U-N-Message  started
69 Carousel Descriptors completed
70 
71 Revision 1.26  2004/02/14 01:24:45  rasc
72 DSM-CC started  (DSI/DII, DDB)
73 
74 Revision 1.25  2004/02/12 21:21:22  rasc
75 MHP AIT descriptors
76 some smaller changes
77 
78 Revision 1.24  2004/02/07 01:28:07  rasc
79 MHP Application  Information Table
80 some AIT descriptors
81 
82 Revision 1.23  2004/01/25 21:37:28  rasc
83 bugfixes, minor changes & enhancments
84 
85 Revision 1.22  2004/01/17 23:06:10  rasc
86 minor stuff, some restructs in output
87 
88 Revision 1.21  2004/01/15 21:27:22  rasc
89 DSM-CC stream descriptors
90 
91 Revision 1.20  2004/01/12 22:49:53  rasc
92 get rid of stream descriptor module
93 
94 Revision 1.19  2004/01/11 21:01:33  rasc
95 PES stream directory, PES restructured
96 
97 Revision 1.18  2004/01/05 02:12:20  rasc
98 no message
99 
100 Revision 1.17  2004/01/02 22:25:39  rasc
101 DSM-CC  MODULEs descriptors complete
102 
103 Revision 1.16  2004/01/02 16:40:43  rasc
104 DSM-CC  INT/UNT descriptors complete
105 minor changes and fixes
106 
107 Revision 1.15  2004/01/02 02:18:34  rasc
108 more DSM-CC  INT/UNT descriptors
109 
110 Revision 1.14  2004/01/01 20:09:40  rasc
111 DSM-CC INT/UNT descriptors
112 PES-sync changed, TS sync changed,
113 descriptor scope
114 other changes
115 
116 Revision 1.13  2003/12/29 22:14:54  rasc
117 more dsm-cc INT UNT descriptors
118 
119 Revision 1.12  2003/12/28 22:53:41  rasc
120 some minor changes/cleanup
121 
122 Revision 1.11  2003/12/27 22:02:44  rasc
123 dsmcc INT UNT descriptors started
124 
125 Revision 1.10  2003/12/27 18:17:18  rasc
126 dsmcc PES dsmcc_program_stream_descriptorlist
127 
128 Revision 1.9  2003/12/26 23:27:40  rasc
129 DSM-CC  UNT section
130 
131 Revision 1.8  2003/12/17 23:15:05  rasc
132 PES DSM-CC  ack and control commands  according ITU H.222.0 Annex B
133 
134 Revision 1.7  2003/11/29 23:11:43  rasc
135 no message
136 
137 Revision 1.6  2003/11/26 23:54:49  rasc
138 -- bugfixes on Linkage descriptor
139 
140 Revision 1.5  2003/11/01 21:40:27  rasc
141 some broadcast/linkage descriptor stuff
142 
143 Revision 1.4  2003/10/29 20:54:57  rasc
144 more PES stuff, DSM descriptors, testdata
145 
146 Revision 1.3  2003/10/26 21:36:20  rasc
147 private DSM-CC descriptor Tags started,
148 INT-Section completed..
149 
150 Revision 1.2  2003/10/25 19:11:50  rasc
151 no message
152 
153 Revision 1.1  2003/10/16 19:02:28  rasc
154 some updates to dvbsnoop...
155 - small bugfixes
156 - tables updates from ETR 162
157 
158 
159 */
160 
161 
162 
163 #include "dvbsnoop.h"
164 #include "dsmcc_str.h"
165 #include "strtable_misc.h"
166 
167 
168 
169 
170 
171 /*
172   -- DSM-CC CAROUSEL Descriptors
173   -- Private Tag Space  (DII, DSI)
174   -- see  EN 301 192
175   -- ... shows  in DVB-descriptor lower ranges
176  */
177 
dsmccStrDSMCC_CAROUSEL_DescriptorTAG(u_int i)178 char *dsmccStrDSMCC_CAROUSEL_DescriptorTAG (u_int i)
179 {
180   STR_TABLE  Table[] = {
181      {  0x00, 0x00,  "reserved" },
182      {  0x01, 0x01,  "type_descriptor" },
183      {  0x02, 0x02,  "name_descriptor" },
184      {  0x03, 0x03,  "info_descriptor" },
185      {  0x04, 0x04,  "module_link_descriptor" },
186      {  0x05, 0x05,  "CRC32_descriptor" },
187      {  0x06, 0x06,  "location_descriptor" },
188      {  0x07, 0x07,  "estimated_download_time_descriptor" },
189      {  0x08, 0x08,  "group_link_descriptor" },
190      {  0x09, 0x09,  "compressed_module_descriptor" },
191      {  0x0A, 0x0A,  "subgroup_association_descriptor" },
192      {  0x0B, 0x6F,  "reserved for future use by DVB" },
193      {  0x70, 0x70,  "label_descriptor" },		// MHP
194      {  0x71, 0x71,  "caching_priority_descriptor" },	// MHP
195      {  0x72, 0x7F,  "reserved MHP" },
196      {  0x80, 0xFF,  "private_descriptor" },
197      {  0,0, NULL }
198   };
199 
200   return findTableID (Table, i);
201 }
202 
203 
204 
205 
206 /*
207   -- DSM-CC  INT (UNT, SSU-UNT) Descriptors
208   -- Private INT, UNT, SSU-UNT Tag Space
209   -- see  EN 301 192 // TS 102 006
210  */
211 
dsmccStrDSMCC_INT_UNT_DescriptorTAG(u_int i)212 char *dsmccStrDSMCC_INT_UNT_DescriptorTAG (u_int i)
213 {
214   STR_TABLE  Table[] = {
215      {  0x00, 0x00,  "reserved" },
216      {  0x01, 0x01,  "scheduling_descriptor" },
217      {  0x02, 0x02,  "update_descriptor" },
218      {  0x03, 0x03,  "ssu_location_descriptor" },
219      {  0x04, 0x04,  "message_descriptor" },
220      {  0x05, 0x05,  "ssu_event_name_descriptor" },
221      {  0x06, 0x06,  "target_smartcard_descriptor" },
222      {  0x07, 0x07,  "target_MAC_address_descriptor" },
223      {  0x08, 0x08,  "target_serial_number_descriptor" },
224      {  0x09, 0x09,  "target_IP_address_descriptor" },
225      {  0x0A, 0x0A,  "target_IPv6_address_descriptor" },
226      {  0x0B, 0x0B,  "ssu_subgroup_association_descriptor" },
227      {  0x0C, 0x0C,  "IP/MAC_platform_name_descriptor" },
228      {  0x0D, 0x0D,  "IP/MAC_platform_provider_name_descriptor" },
229      {  0x0E, 0x0E,  "target_MAC_address_range_descriptor" },
230      {  0x0F, 0x0F,  "target_IP_slash_descriptor" },
231      {  0x10, 0x10,  "target_IP_source_slash_descriptor" },
232      {  0x11, 0x11,  "target_IPv6_slash_descriptor" },
233      {  0x12, 0x12,  "target_IPv6_source_slash_descriptor" },
234      {  0x13, 0x13,  "IP/MAC_stream_location_descriptor" },
235      {  0x14, 0x14,  "ISP_access_mode_descriptor" },
236      {  0x15, 0x3F,  "reserved" },
237 //   {  0x40, 0x7F,  "DVB-SI scope" },  Telphone, private_data_spec, use: dvb scope
238      {  0x80, 0xFE,  "user_private_descriptor" },
239      {  0xFF, 0xFF,  "reserved" },
240      {  0,0, NULL }
241   };
242 
243   return findTableID (Table, i);
244 }
245 
246 
247 
248 
249 /*
250   -- MHP  AIT Descriptors
251   -- Private Tag Space  (AIT)
252   -- see   TS 102 812
253  */
254 
dsmccStrMHP_AIT_DescriptorTAG(u_int i)255 char *dsmccStrMHP_AIT_DescriptorTAG (u_int i)
256 {
257   STR_TABLE  Table[] = {
258      {  0x00, 0x00,  "Application descriptor" },
259      {  0x01, 0x01,  "Application name descriptor" },
260      {  0x02, 0x02,  "Transport protocol descriptor" },
261      {  0x03, 0x03,  "DVB-J application descriptor" },
262      {  0x04, 0x04,  "DVB-J application location descriptor" },
263      {  0x05, 0x05,  "External application authorisation descriptor" },
264      {  0x06, 0x06,  "Routing Descriptor IPv4" },
265      {  0x07, 0x07,  "Routing Descriptor IPv6" },
266      {  0x08, 0x08,  "DVB-HTML application descriptor" },
267      {  0x09, 0x09,  "DVB-HTML application location descriptor" },
268      {  0x0A, 0x0A,  "DVB-HTML application boundary descriptor" },
269      {  0x0B, 0x0B,  "Application icons descriptor" },
270      {  0x0C, 0x0C,  "Pre-fetch descriptor" },
271      {  0x0D, 0x0D,  "DII location descriptor" },
272      {  0x0E, 0x0E,  "delegated application descriptor" },
273      {  0x0F, 0x0F,  "Plug-in descriptor" },
274      {  0x10, 0x10,  "Application storage descriptor" },
275      {  0x11, 0x5E,  "reserved to MHP" },
276      {  0x5F, 0x5F,  "private data specifier descriptor" },
277      {  0x60, 0x7F,  "reserved to MHP" },
278      {  0x80, 0xFF,  "user defined" },
279      {  0,0, NULL }
280   };
281 
282   return findTableID (Table, i);
283 }
284 
285 
286 
287 
288 
289 
290 
291 
292 /*
293   --  MHP Organisations
294 */
295 
dsmccStrMHPOrg(u_int id)296 char *dsmccStrMHPOrg (u_int id)
297 
298 {
299   STR_TABLE  TableIDs[] = {
300 	// --{ MHP Organisation ID, MHP Organisation ID,   "Organisation Supplying MHP Applications" },
301 	{ 0x0000, 0x0000,   "Reserved" },
302 	{ 0x0001, 0x0001,   "MTV Oy" },
303 	{ 0x0002, 0x0002,   "Digita Oy" },
304 	{ 0x0003, 0x0003,   "NRK" },
305 	{ 0x0004, 0x0004,   "Premiere Medien GmbH & Co KG" },
306 	{ 0x0005, 0x0005,   "Platco Oy" },
307 	{ 0x0006, 0x0006,   "NOB" },
308 	{ 0x0007, 0x0007,   "Sofia Digital Oy" },
309 	{ 0x0008, 0x0008,   "YLE (Finnish Broadcasting Company)" },
310 	{ 0x0009, 0x0009,   "IRT (Institut f�r Rundfunktechnik GmbH)" },
311 	{ 0x000A, 0x000A,   "Cardinal Information Systems Ltd" },
312 	{ 0x000B, 0x000B,   "Mediaset s.p.a." },
313 	{ 0x000C, 0x000C,   "Ortikon Interactive Oy" },
314 	{ 0x000D, 0x000D,   "Austrian Broadcastion Corporation (ORF)" },
315 	{ 0x000E, 0x000E,   "Strategy & Technology Ltd" },
316 	{ 0x000F, 0x000F,   "Canal+ Technologies" },
317 	{ 0x0010, 0x0010,   "TV2Nord Digital" },
318 	{ 0x0011, 0x0011,   "Zweites Deutsches Fernsehen - ZDF" },
319 	{ 0x0012, 0x0012,   "SCIP AG" },
320 	{ 0x0013, 0x0013,   "ARD" },
321 	{ 0x0014, 0x0014,   "Sveng.com" },
322 	{ 0x0015, 0x0015,   "UniSoft Corporation" },
323 	{ 0x0016, 0x0016,   "Microsoft Corp" },
324 	{ 0x0017, 0x0017,   "Nokia" },
325 	{ 0x0018, 0x0018,   "SWelcom Oy" },
326 	{ 0x0019, 0x0019,   "Fraunhofer Institut Medienkommunikation - IMK" },
327 	{ 0x001A, 0x001A,   "RTL NewMedia GmbH" },
328 	{ 0x001B, 0x001B,   "Fraunhofer FOKUS" },
329 	{ 0x001C, 0x001C,   "TwonkyVision GmbH" },
330 	{ 0x001D, 0x001D,   "Gist Communications" },
331 	{ 0x001E, 0x001E,   "Televisi� de Catalunya SA" },
332      {  0,0, NULL }
333   };
334 
335 
336   return findTableID (TableIDs, id);
337 }
338 
339 
340 
341 
342 /*
343   --  Action Type (Linkage) EN 301 192 7.6.x
344   --  ETSI TS 102006  $$$ TODO (is there a conflict?)
345 */
346 
dsmccStrAction_Type(u_int id)347 char *dsmccStrAction_Type (u_int id)
348 
349 {
350   STR_TABLE  TableIDs[] = {
351 	{ 0x00, 0x00,   "reserved" },
352 	{ 0x01, 0x01,   "location of IP/MAC streams in DVB networks // System Software Update" },
353 	{ 0x02, 0xff,   "reserved" },
354       {  0,0, NULL }
355   };
356 
357 
358   return findTableID (TableIDs, id);
359 }
360 
361 
362 
363 /*
364   --  Processing Order (INT)   EN 301 192
365 */
366 
dsmccStrProcessing_order(u_int id)367 char *dsmccStrProcessing_order (u_int id)
368 
369 {
370   STR_TABLE  TableIDs[] = {
371 	{ 0x00, 0x00,   "first action" },
372 	{ 0x01, 0xfe,   "subsequent actions (ascending)" },
373 	{ 0xff, 0xff,   "no ordering implied" },
374       {  0,0, NULL }
375   };
376 
377 
378   return findTableID (TableIDs, id);
379 }
380 
381 
382 
383 /*
384   --  Payload scrambling control (INT)   EN 301 192
385   --  Address scrambling control (INT)   EN 301 192
386 */
387 
388 // $$$ TODO  according to mpeg/ scrambling control?
389 
dsmccStrPayload_scrambling_control(u_int id)390 char *dsmccStrPayload_scrambling_control (u_int id)
391 
392 {
393   STR_TABLE  TableIDs[] = {
394 	{ 0x00, 0x00,   "unscrambled" },
395 	{ 0x01, 0x03,   "defined by service" },
396       {  0,0, NULL }
397   };
398 
399 
400   return findTableID (TableIDs, id);
401 }
402 
403 
dsmccStrAddress_scrambling_control(u_int id)404 char *dsmccStrAddress_scrambling_control (u_int id)
405 
406 {
407   STR_TABLE  TableIDs[] = {
408 	{ 0x00, 0x00,   "unscrambled" },
409 	{ 0x01, 0x03,   "defined by service" },
410       {  0,0, NULL }
411   };
412 
413 
414   return findTableID (TableIDs, id);
415 }
416 
417 
418 
419 
420 /*
421  * -- LinkageDescriptor0x0C Table_type  EN301192
422  *
423  */
424 
dsmccStrLinkage0CTable_TYPE(u_int i)425 char *dsmccStrLinkage0CTable_TYPE (u_int i)
426 
427 {
428   STR_TABLE  Table[] = {
429      {  0x00, 0x00,  "not defined" },
430      {  0x01, 0x01,  "NIT" },
431      {  0x02, 0x02,  "BAT" },
432      {  0x03, 0xFF,  "reserved" },
433      {  0,0, NULL }
434   };
435 
436   return findTableID (Table, i);
437 }
438 
439 
440 
441 
442 
443 /*
444  * -- MultiProtocolEncapsulationMACAddressRangeField
445  * -- EN 301 192
446  */
447 
dsmccStrMultiProtEncapsMACAddrRangeField(u_int i)448 char *dsmccStrMultiProtEncapsMACAddrRangeField (u_int i)
449 
450 {
451   STR_TABLE  Table[] = {
452      {  0x00, 0x00,  "reserved" },
453      {  0x01, 0x01,  "6" },
454      {  0x02, 0x02,  "6,5" },
455      {  0x03, 0x03,  "6,5,4" },
456      {  0x04, 0x04,  "6,5,4,3" },
457      {  0x05, 0x05,  "6,5,4,3,2" },
458      {  0x06, 0x06,  "6,5,4,3,2,1" },
459      {  0x07, 0x07,  "reserved" },
460      {  0,0, NULL }
461   };
462 
463   return findTableID (Table, i);
464 }
465 
466 
467 
468 
469 
470 
471 
472 /*
473   --  Platform ID    ETR 162
474 */
475 
dsmccStrPlatform_ID(u_int id)476 char *dsmccStrPlatform_ID (u_int id)
477 
478 {
479   STR_TABLE  TableIDs[] = {
480 	  /* $$$ TODO   Platform ID ETR 162 ... */
481       {  0,0, NULL }
482   };
483 
484 
485   return findTableID (TableIDs, id);
486 }
487 
488 
489 
490 
491 /*
492   --  Carousel Type ID    EN 301 192
493 */
494 
dsmccStrCarouselType_ID(u_int id)495 char *dsmccStrCarouselType_ID (u_int id)
496 
497 {
498   STR_TABLE  TableIDs[] = {
499 	{ 0x00, 0x00,   "reserved" },
500 	{ 0x01, 0x01,   "one layer carousel" },
501 	{ 0x02, 0x02,   "two layer carousel" },
502 	{ 0x03, 0x03,   "reserved" },
503       	{  0,0, NULL }
504   };
505 
506 
507   return findTableID (TableIDs, id);
508 }
509 
510 
511 
512 
513 /*
514   --  Higher Protocol ID    EN 301 192
515 */
516 
dsmccStrHigherProtocol_ID(u_int id)517 char *dsmccStrHigherProtocol_ID (u_int id)
518 
519 {
520   STR_TABLE  TableIDs[] = {
521 	{ 0x00, 0x00,   "reserved" },
522 	{ 0x01, 0x01,   "dGNSS data" },
523 	{ 0x02, 0x02,   "TPEG" },
524 	{ 0x03, 0x0F,   "reserved" },
525       	{  0,0, NULL }
526   };
527 
528 
529   return findTableID (TableIDs, id);
530 }
531 
532 
533 
534 /*
535   --  Update Type Table    TR 102 006
536 */
537 
dsmccStrUpdateType_ID(u_int id)538 char *dsmccStrUpdateType_ID (u_int id)
539 
540 {
541   STR_TABLE  TableIDs[] = {
542 	{ 0x00, 0x00,   "proprietary update solution" },
543 	{ 0x01, 0x01,   "standard update carousel via broadcast" },
544 	{ 0x02, 0x02,   "system software update with notification table (UNT) via broadcast" },
545 	{ 0x03, 0x03,   "system software update using return channel with UNT" },
546 	{ 0x04, 0x0F,   "reserved" },
547       	{  0,0, NULL }
548   };
549 
550 
551   return findTableID (TableIDs, id);
552 }
553 
554 
555 
556 
557 
558 
559 
560 /*
561   --  Command_ID
562   --  also  dsmcc_discriminator
563   --  e.g. from ITU H.222.0 Annex B
564   --
565 */
566 
dsmccStr_Command_ID(u_int id)567 char *dsmccStr_Command_ID  (u_int id)
568 
569 {
570   STR_TABLE  TableIDs[] = {
571 	{ 0x00, 0x00,   "forbidden" },
572 	{ 0x01, 0x01,   "control" },
573 	{ 0x02, 0x02,   "Acknownledge" },
574 	{ 0x03, 0x7F,   "reserved" },
575 	{ 0x80, 0x80,   "DSMCC_program_stream_descriptor_list" },
576 	{ 0x81, 0xFF,   "reserved" },
577       	{  0,0, NULL }
578   };
579 
580   return findTableID (TableIDs, id);
581 }
582 
583 
584 
585 /*
586   --  Command_ID
587   --  e.g. from ITU H.222.0 Annex B
588   --
589 */
590 
dsmccStr_SelectMode_ID(u_int id)591 char *dsmccStr_SelectMode_ID  (u_int id)
592 
593 {
594   STR_TABLE  TableIDs[] = {
595 	{ 0x00, 0x00,   "forbidden" },
596 	{ 0x01, 0x01,   "storage" },
597 	{ 0x02, 0x02,   "retrieval" },
598 	{ 0x03, 0x1F,   "reserved" },
599       	{  0,0, NULL }
600   };
601 
602   return findTableID (TableIDs, id);
603 }
604 
605 
606 
607 /*
608   --  direction_indicator
609   --  e.g. from ITU H.222.0 Annex B
610   --
611 */
612 
dsmccStr_DirectionIndicator(u_int id)613 char *dsmccStr_DirectionIndicator (u_int id)
614 
615 {
616   STR_TABLE  TableIDs[] = {
617 	{ 0x00, 0x00,   "Forward" },
618 	{ 0x01, 0x01,   "Backward" },
619       	{  0,0, NULL }
620   };
621 
622   return findTableID (TableIDs, id);
623 }
624 
625 
626 
627 /*
628   -- DSM-CC (UNT) (Compatibility) Descriptor type
629   --  e.g. from ISO 13818-6 // TS 102006
630   --
631 */
632 
dsmccStr_DescriptorType(u_int id)633 char *dsmccStr_DescriptorType (u_int id)
634 
635 {
636   STR_TABLE  TableIDs[] = {
637 	{ 0x00, 0x00,   "Pad descriptor" },
638 	{ 0x01, 0x01,   "System Hardware descriptor" },
639 	{ 0x02, 0x02,   "System Software descriptor" },
640 	{ 0x03, 0x3F,   "ISO/IEC 13818-6 reserved" },
641 	{ 0x40, 0x7F,   "DVB reserved" },
642 	{ 0x80, 0xFF,   "User defined" },
643       	{  0,0, NULL }
644   };
645 
646   return findTableID (TableIDs, id);
647 }
648 
649 
650 
651 
652 /*
653   -- DSM-CC (UNT) Specifier type
654   --  e.g. from ISO 13818-6 // TS 102006
655   --
656 */
657 
dsmccStr_SpecifierType(u_int id)658 char *dsmccStr_SpecifierType (u_int id)
659 {
660   STR_TABLE  TableIDs[] = {
661 	{ 0x00, 0x00,   "ISO/IEC 13818-6 reserved" },
662 	{ 0x01, 0x01,   "IEEE OUI" },
663 	{ 0x02, 0xFF,   "ISO/IEC 13818-6 reserved" },
664       	{  0,0, NULL }
665   };
666 
667   return findTableID (TableIDs, id);
668 }
669 
670 
671 
672 
673 /*
674   -- DSM-CC (INT) AccessMode
675   --  e.g. from ISO 13818-6 // EN 301 192
676   --
677 */
678 
dsmccStr_AccessMode(u_int id)679 char *dsmccStr_AccessMode (u_int id)
680 
681 {
682   STR_TABLE  TableIDs[] = {
683 	{ 0x00, 0x00,   "not used" },
684 	{ 0x01, 0x01,   "dialup" },
685 	{ 0x02, 0xFF,   "reserved" },
686       	{  0,0, NULL }
687   };
688 
689   return findTableID (TableIDs, id);
690 }
691 
692 
693 
694 
695 /*
696   -- DSM-CC (INT) Update_flag
697   --  e.g. from ISO 13818-6 // TS 102 006
698   --
699 */
700 
dsmccStr_UpdateFlag(u_int id)701 char *dsmccStr_UpdateFlag (u_int id)
702 
703 {
704   STR_TABLE  TableIDs[] = {
705 	{ 0x00, 0x00,   "to be activated manually" },
706 	{ 0x01, 0x01,   "may be performed automatically" },
707 	{ 0x02, 0x03,   "reserved" },
708       	{  0,0, NULL }
709   };
710 
711   return findTableID (TableIDs, id);
712 }
713 
714 
715 
716 /*
717   -- DSM-CC (INT) Update_method
718   --  e.g. from ISO 13818-6 // TS 102 006
719   --
720 */
721 
dsmccStr_UpdateMethod(u_int id)722 char *dsmccStr_UpdateMethod (u_int id)
723 
724 {
725   STR_TABLE  TableIDs[] = {
726 	{ 0x00, 0x00,   "immediate update: performed whatever the IRD state" },
727 	{ 0x01, 0x01,   "IRD available: the update is available in the stream; it will be taken into account when it does not interfere with the normal user operation" },
728 	{ 0x02, 0x02,   "next restart: the update is available in the stream; it will be taken into account at the next IRD restart" },
729 	{ 0x03, 0x07,   "reserved" },
730 	{ 0x08, 0x0E,   "private use" },
731 	{ 0x0F, 0x0F,   "reserved" },
732       	{  0,0, NULL }
733   };
734 
735   return findTableID (TableIDs, id);
736 }
737 
738 
739 
740 /*
741   -- DSM-CC (INT) Time Units
742   --  e.g. from ISO 13818-6 // TS 102 006
743   --
744 */
745 
dsmccStr_TimeUnits(u_int id)746 char *dsmccStr_TimeUnits (u_int id)
747 
748 {
749   STR_TABLE  TableIDs[] = {
750 	{ 0x00, 0x00,   "second" },
751 	{ 0x01, 0x01,   "minute" },
752 	{ 0x02, 0x02,   "hour" },
753 	{ 0x03, 0x03,   "day" },
754       	{  0,0, NULL }
755   };
756 
757   return findTableID (TableIDs, id);
758 }
759 
760 
761 
762 /*
763   -- DSM-CC  Module Link Position
764   --  e.g. from ISO 13818-6 // EN 301 192
765   --
766 */
767 
dsmccStr_GroupModuleLinkPosition(u_int id)768 char *dsmccStr_GroupModuleLinkPosition (u_int id)
769 
770 {
771   STR_TABLE  TableIDs[] = {
772 	{ 0x00, 0x00,   "first in list" },
773 	{ 0x01, 0x01,   "intermediate in list" },
774 	{ 0x02, 0x02,   "last in list" },
775       	{  0,0, NULL }
776   };
777 
778   return findTableID (TableIDs, id);
779 }
780 
781 
782 /*
783   -- DSM-CC  compression_method
784   --  e.g. from ISO 13818-6 // EN 301 192
785   --
786 */
787 
dsmccStr_compression_method(u_int id)788 char *dsmccStr_compression_method (u_int id)
789 
790 {
791     return (char *) "compression method used, see: RFC 1950";
792 }
793 
794 
795 
796 
797 /*
798   -- DSM-CC  Stream Mode
799   --  ISO 13818-6  (stream desc. 8.5)
800   --
801 */
802 
dsmccStr_streamMode(u_int id)803 char *dsmccStr_streamMode (u_int id)
804 {
805   STR_TABLE  TableIDs[] = {
806 	{ 0x00, 0x00,   "Open" },
807 	{ 0x01, 0x01,   "Pause" },
808 	{ 0x02, 0x02,   "Transport" },
809 	{ 0x03, 0x03,   "Transport Pause" },
810 	{ 0x04, 0x04,   "Search Transport" },
811 	{ 0x05, 0x05,   "Search Transport Pause" },
812 	{ 0x06, 0x06,   "Pause Search Transport" },
813 	{ 0x07, 0x07,   "End of Stream" },
814 	{ 0x08, 0x08,   "Pre Search Transport" },
815 	{ 0x09, 0x09,   "Pre Search Transport Pause" },
816 	{ 0x0A, 0xFF,   "ISO/IEC 13818-6 reserved" },
817       	{  0,0, NULL }
818   };
819 
820   return findTableID (TableIDs, id);
821 }
822 
823 
824 
825 
826 
827 /*
828   -- DSM-CC  postDiscontinuityIndicator
829   --  ISO 13818-6  (stream desc. 8.5)
830   --
831 */
832 
dsmccStr_postDiscontinuityIndicator(u_int id)833 char *dsmccStr_postDiscontinuityIndicator (u_int id)
834 {
835   STR_TABLE  TableIDs[] = {
836 	{ 0x00, 0x00,   "now valid" },
837 	{ 0x01, 0x01,   "valid at the next system time base discontinuity" },
838       	{  0,0, NULL }
839   };
840 
841   return findTableID (TableIDs, id);
842 }
843 
844 
845 
846 
847 /*
848   --  OUI  Table    (e.g.: LLC-SNAP  IEEE 802)
849   --  real table is very large!!
850   --  see: http://standards.ieee.org/regauth/oui/index.shtml
851 */
852 
dsmccStrOUI(u_int id)853 char *dsmccStrOUI  (u_int id)
854 {
855   STR_TABLE  TableIDs[] = {
856 	{ 0x000000, 0x000000,   "EtherType or routed non-OSI protocol" },
857 	{ 0x000979, 0x000979,   "ATSC" },  // ATSC a_95
858 	{ 0x0080c2, 0x0080c2,   "Bridged protocol" },
859 	{ 0x000000, 0xFFFFFF,  	"http://standards.ieee.org/regauth/oui/" },
860       	{  0,0, NULL }
861   };
862 
863 	// http://standards.ieee.org/cgi-bin/ouisearch?hex-id
864   return findTableID (TableIDs, id);
865 }
866 
867 
868 
869 
870 /*
871   -- DSM-CC  LLC SNAP protocol
872 */
873 
dsmccStr_LLC_SNAP_prot(u_int id)874 char *dsmccStr_LLC_SNAP_prot (u_int id)
875 {
876   STR_TABLE  TableIDs[] = {
877 	{ 0x0800, 0x0800,   "IP protocol" },
878       	{  0,0, NULL }
879   };
880 
881   return findTableID (TableIDs, id);
882 }
883 
884 
885 
886 
887 
888 
889 
890 
891 
892 
893 /*
894   -- MHP application type
895 */
896 
dsmccStrMHP_application_type(u_int id)897 char *dsmccStrMHP_application_type (u_int id)
898 {
899   STR_TABLE  TableIDs[] = {
900 	{ 0x0000, 0x0000,   "reserved" },
901 	{ 0x0001, 0x0001,   "DVB-J application" },
902 	{ 0x0002, 0x0002,   "DVB-HTML application" },
903 	{ 0x0003, 0x7FFF,   "subject to registration with DVB" },  // $$$ TODO ??
904       	{  0,0, NULL }
905   };
906 
907   return findTableID (TableIDs, id);
908 }
909 
910 
911 
912 
913 /*
914   -- MHP application type
915 */
916 
dsmccStrMHP_application_id(u_int id)917 char *dsmccStrMHP_application_id (u_int id)
918 {
919   STR_TABLE  TableIDs[] = {
920 	{ 0x0000, 0x3FFF,   "unsigned applications" },
921 	{ 0x4000, 0x7FFF,   "signed applications" },
922 	{ 0x8000, 0xFFFD,   "reserved" },
923 	{ 0xFFFE, 0xFFFE,   "wildcard value for signed applications of an org." },
924 	{ 0xFFFF, 0xFFFF,   "wildcard value all applications of an org." },
925       	{  0,0, NULL }
926   };
927 
928   return findTableID (TableIDs, id);
929 }
930 
931 
932 
933 
934 /*
935   -- MHP application control code
936 */
937 
dsmccStrMHP_application_control_code(u_int id)938 char *dsmccStrMHP_application_control_code (u_int id)
939 {
940   STR_TABLE  TableIDs[] = {
941 	{ 0x00, 0x00,   "reserved" },
942 	{ 0x01, 0x01,   "AUTOSTART" },
943 	{ 0x02, 0x02,   "PRESENT" },
944 	{ 0x03, 0x03,   "DESTROY" },
945 	{ 0x04, 0x04,   "KILL" },
946 	{ 0x05, 0x05,   "PREFETCH" },
947 	{ 0x06, 0x06,   "REMOTE" },
948 	{ 0x07, 0xFF,   "reserved" },
949       	{  0,0, NULL }
950   };
951 
952   return findTableID (TableIDs, id);
953 }
954 
955 
956 
957 
958 /*
959   -- MHP visibility state
960 */
961 
dsmccStrMHP_visibility_state(u_int id)962 char *dsmccStrMHP_visibility_state (u_int id)
963 {
964   STR_TABLE  TableIDs[] = {
965 	{ 0x00, 0x00,   "application not visible to user and appl. listening api" },
966 	{ 0x01, 0x01,   "application not visible to user, but visible to appl. listening api" },
967 	{ 0x02, 0x02,   "reserved" },
968 	{ 0x03, 0x03,   "application visible to user and appl. listening api" },
969       	{  0,0, NULL }
970   };
971 
972   return findTableID (TableIDs, id);
973 }
974 
975 
976 
977 
978 /*
979   -- MHP protocol_id
980   -- ETR162
981 */
982 
dsmccStrMHP_protocol_id(u_int id)983 char *dsmccStrMHP_protocol_id (u_int id)
984 {
985   STR_TABLE  TableIDs[] = {
986 	{ 0x0000, 0x0000,   "reserved" },
987 	{ 0x0001, 0x0001,   "MHP Object Carousel" },
988 	{ 0x0002, 0x0002,   "IP via DVB multiprotocol encapsulation" },
989 	{ 0x0003, 0x0003,   "Transport via HTTP over the interaction channel" },
990 	{ 0x0004, 0x00FF,   "Reserved for use by DVB" },
991 	{ 0x0100, 0xFFFF,   "Subject to registration in ETSI TR 101 162" },
992       	{  0,0, NULL }
993   };
994 
995   return findTableID (TableIDs, id);
996 }
997 
998 
999 
1000 
1001 /*
1002   -- MHP storage property
1003   -- ETR162
1004 */
1005 
dsmccStrMHP_storage_property(u_int id)1006 char *dsmccStrMHP_storage_property (u_int id)
1007 {
1008   STR_TABLE  TableIDs[] = {
1009 	{ 0x00, 0x00,   "broadcast related" },
1010 	{ 0x01, 0x01,   "stand alone" },
1011 	{ 0x02, 0xFF,   "reserved" },
1012       	{  0,0, NULL }
1013   };
1014 
1015   return findTableID (TableIDs, id);
1016 }
1017 
1018 
1019 
1020 
1021 
1022 /*
1023   -- DSM-CC  MHP caching transparency level
1024   -- ISO/IEC 13816-6
1025   -- TS 102 812  v1.2.1 B.2.7
1026 */
1027 
dsmccStrMHP_caching_transparency_level(u_int id)1028 char *dsmccStrMHP_caching_transparency_level (u_int id)
1029 {
1030   STR_TABLE  TableIDs[] = {
1031 	{ 0x00, 0x00,   "reserved" },
1032 	{ 0x01, 0x01,   "transparent caching" },
1033 	{ 0x02, 0x02,   "semi-transparent caching" },
1034 	{ 0x03, 0x03,   "static caching" },
1035 	{ 0x04, 0xFF,   "reserved" },
1036       	{  0,0, NULL }
1037   };
1038 
1039   return findTableID (TableIDs, id);
1040 }
1041 
1042 
1043 
1044 
1045 
1046 
1047 
1048 
1049 /*
1050   -- DSM-CC Adaptation Type
1051   -- ISO/IEC 13816-6
1052 */
1053 
dsmccStr_adaptationType(u_int id)1054 char *dsmccStr_adaptationType (u_int id)
1055 {
1056   STR_TABLE  TableIDs[] = {
1057 	{ 0x00, 0x00,   "reserved" },
1058 	{ 0x01, 0x01,   "DSM-CC Conditional Access adaptation format" },
1059 	{ 0x02, 0x02,   "DSM-CC User ID adaptation format" },
1060 	{ 0x03, 0x7F,   "reserved" },
1061 	{ 0x80, 0xFF,   "user defined" },
1062       	{  0,0, NULL }
1063   };
1064 
1065   return findTableID (TableIDs, id);
1066 }
1067 
1068 
1069 
1070 
1071 /*
1072   -- DSM-CC dsmcc Type
1073   -- ISO/IEC 13816-6
1074 */
1075 
dsmccStr_dsmccType(u_int id)1076 char *dsmccStr_dsmccType (u_int id)
1077 {
1078   STR_TABLE  TableIDs[] = {
1079 	{ 0x00, 0x00,   "reserved" },
1080 	{ 0x01, 0x01,   "User-to-Network configuration message" },
1081 	{ 0x02, 0x02,   "User-to-Network session message" },
1082 	{ 0x03, 0x03,   "Download message" },
1083 	{ 0x04, 0x04,   "SDB Channel Change Protocol message" },
1084 	{ 0x05, 0x05,   "User-to- Network pass-thru message" },
1085 	{ 0x06, 0x7F,   "reserved" },
1086 	{ 0x80, 0xFF,   "user defined" },
1087       	{  0,0, NULL }
1088   };
1089 
1090   return findTableID (TableIDs, id);
1091 }
1092 
1093 
1094 
1095 /*
1096   -- DSM-CC Download Message ID
1097   -- ISO/IEC 13816-6
1098 */
1099 
dsmccStr_messageID(u_int id)1100 char *dsmccStr_messageID (u_int id)
1101 {
1102   STR_TABLE  TableIDs[] = {
1103 	{ 0x1001, 0x1001,   "DownloadInfoRequest" },
1104 	{ 0x1002, 0x1002,   "DownloadInfoIndication (DII)" }, // also: DownloadInfoResponse
1105 	{ 0x1003, 0x1003,   "DownloadDataBlock (DDB)" },
1106 	{ 0x1004, 0x1004,   "DownloadDataRequest" },
1107 	{ 0x1005, 0x1005,   "DownloadCancel" },
1108 	{ 0x1006, 0x1006,   "DownloadServerInitiate (DSI)" },
1109       	{  0,0, NULL }
1110   };
1111 
1112   return findTableID (TableIDs, id);
1113 }
1114 
1115 
1116 
1117 
1118 /*
1119   -- DSM-CC TransactionID originator
1120   -- ISO/IEC 13816-6
1121   -- TS 102 812  v1.2.1 B.2.7
1122 */
1123 
dsmccStr_transactionID_originator(u_int id)1124 char *dsmccStr_transactionID_originator (u_int id)
1125 {
1126   STR_TABLE  TableIDs[] = {
1127 	{ 0x00, 0x00,   "assigned by the client" },
1128 	{ 0x01, 0x01,   "assigned by the server" },
1129 	{ 0x02, 0x02,   "assigned by the network" },
1130 	{ 0x03, 0x03,   "reserved" },
1131       	{  0,0, NULL }
1132   };
1133 
1134   return findTableID (TableIDs, id);
1135 }
1136 
1137 
1138 
1139 
1140 
1141 /*
1142   -- DSM-CC  IOP ProfileID
1143   -- ISO/IEC 13816-6
1144   -- Profile Tags 0x49534F00 - 0x49534F0F (the first 3 octets spell ISO)
1145   -- TR 101 202
1146   -- TS 102 812
1147 */
1148 
dsmccStrIOP_ProfileID(u_int id)1149 char *dsmccStrIOP_ProfileID (u_int id)
1150 {
1151   STR_TABLE  TableIDs[] = {
1152 	{ 0x49534f00, 0x49534f00,   "TAG_MIN" },
1153 	{ 0x49534f01, 0x49534f01,   "TAG_CHILD" },
1154 	{ 0x49534f02, 0x49534f02,   "TAG_OPTIONS" },
1155 	{ 0x49534f03, 0x49534f03,   "TAG_LITE_MIN" },
1156 	{ 0x49534f04, 0x49534f04,   "TAG_LITE_CHILD" },
1157 	{ 0x49534f05, 0x49534f05,   "TAG_LITE_OPTIONS" },
1158 	{ 0x49534f06, 0x49534f06,   "TAG_BIOP" },
1159 	{ 0x49534f07, 0x49534f07,   "TAG_ONC" },
1160 	{ 0x49534f40, 0x49534f40,   "TAG_ConnBinder" },
1161 	{ 0x49534f41, 0x49534f41,   "TAG_IIOPAddr" },
1162 	{ 0x49534f42, 0x49534f42,   "TAG_Addr" },
1163 	{ 0x49534f43, 0x49534f43,   "TAG_NameId" },
1164 	{ 0x49534f44, 0x49534f44,   "TAG_IntfCode" },
1165 	{ 0x49534f45, 0x49534f45,   "TAG_ObjectKey" },
1166 	{ 0x49534f46, 0x49534f46,   "TAG_ServiceLocation" },
1167 	{ 0x49534f50, 0x49534f50,   "TAG_ObjectLocation" },
1168 	{ 0x49534f58, 0x49534f58,   "TAG_Intf" },
1169       	{  0,0, NULL }
1170   };
1171 
1172   return findTableID (TableIDs, id);
1173 }
1174 
1175 
1176 
1177 
1178 /*
1179   -- DSM-CC  BIOP tap use
1180   -- ISO/IEC 13816-6
1181 */
1182 
dsmccStrBIOP_TAP_Use(u_int id)1183 char *dsmccStrBIOP_TAP_Use (u_int id)
1184 {
1185   STR_TABLE  TableIDs[] = {
1186 	{ 0x0000, 0x0000,   "UNKNOWN" },
1187 	{ 0x0001, 0x0001,   "MPEG_TS_UP_USE" },
1188 	{ 0x0002, 0x0002,   "MPEG_TS_DOWN_USE" },
1189 	{ 0x0003, 0x0003,   "MPEG_ES_UP_USE" },
1190 	{ 0x0004, 0x0004,   "MPEG_ES_DOWN_USE" },
1191 	{ 0x0005, 0x0005,   "DOWNLOAD_CTRL_USE" },
1192 	{ 0x0006, 0x0006,   "DOWNLOAD_CTRL_UP_USE" },
1193 	{ 0x0007, 0x0007,   "DOWNLOAD_CTRL_DOWN_USE" },
1194 	{ 0x0008, 0x0008,   "DOWNLOAD_DATA_USE" },
1195 	{ 0x0009, 0x0009,   "DOWNLOAD_DATA_UP_USE" },
1196 	{ 0x000A, 0x000A,   "DOWNLOAD_DATA_DOWN_USE" },
1197 	{ 0x000B, 0x000B,   "STR_NPT_USE" },
1198 	{ 0x000C, 0x000C,   "STR_STATUS_AND_EVENT_USE" },
1199 	{ 0x000D, 0x000D,   "STR_EVENT_USE" },
1200 	{ 0x000E, 0x000E,   "STR_STATUS_USE" },
1201 	{ 0x000F, 0x000F,   "RPC_USE" },
1202 	{ 0x0010, 0x0010,   "IP_USE" },
1203 	{ 0x0011, 0x0011,   "SDB_CTRL_USE" },
1204 	{ 0x0012, 0x0015,   "T120_TAP reserved" },
1205 	{ 0x0016, 0x0016,   "BIOP_DELIVERY_PARA_USE" },
1206 	{ 0x0017, 0x0017,   "BIOP_OBJECT_USE" },
1207 	{ 0x0018, 0x0018,   "BIOP_ES_USE" },
1208 	{ 0x0019, 0x0019,   "BIOP_PROGRAM_USE" },
1209 	{ 0x001A, 0x001A,   "BIOP_DNL_CTRL_USE" },
1210       	{  0,0, NULL }
1211   };
1212 
1213   return findTableID (TableIDs, id);
1214 }
1215 
1216 
1217 
1218 
1219 
1220 
1221 /*
1222   -- BIOP/DSM::TAP  selector_type (MessageSelector)
1223   -- ISO/IEC 13816-6
1224   -- ATSC A95, A47
1225 */
1226 
dsmccStrBIOP_TAP_SelectorType(u_int id)1227 char *dsmccStrBIOP_TAP_SelectorType (u_int id)
1228 {
1229   STR_TABLE  TableIDs[] = {
1230 	{ 0x0000, 0x0000,   "ISO/IEC reserved" },
1231 	{ 0x0001, 0x0001,   "MessageSelector" },
1232 	{ 0x0109, 0x0109,   "TSFS_Selector" },
1233       	{  0,0, NULL }
1234   };
1235 
1236   return findTableID (TableIDs, id);
1237 }
1238 
1239 
1240 
1241 /*
1242   -- BIOP/DSM::TAP  selector_type (MessageSelector)
1243   -- ISO/IEC 13816-6
1244   -- ATSC A95, A47
1245 */
1246 
dsmccStrBIOP_EndianType(u_int id)1247 char *dsmccStrBIOP_EndianType (u_int id)
1248 {
1249   STR_TABLE  TableIDs[] = {
1250 	{ 0x00, 0x00,   "Big Endian" },
1251 	{ 0x01, 0xFF,   "Little Endian" },
1252       	{  0,0, NULL }
1253   };
1254 
1255   return findTableID (TableIDs, id);
1256 }
1257 
1258 
1259 
1260 
1261 /*
1262   -- BIOP   ObjectKind  / TypeID Aliases
1263   -- ISO/IEC 13816-6
1264 */
1265 
dsmccStrBIOP_TypeID_Alias(u_int id)1266 char *dsmccStrBIOP_TypeID_Alias (u_int id)
1267 {
1268   STR_TABLE  TableIDs[] = {
1269 	{ 0x64697200, 0x64697200,   "dir (DSM::Directory)" },
1270 	{ 0x66696c00, 0x66696c00,   "fil (DSM::File)" },
1271 	{ 0x73726700, 0x73726700,   "srg (DSM::ServiceGateway)" },
1272 	{ 0x73746500, 0x73746500,   "ste (DSM::StreamEvent)" },
1273 	{ 0x73747200, 0x73747200,   "str (BIOP::Stream)" },
1274       	{  0,0, NULL }
1275   };
1276 
1277   return findTableID (TableIDs, id);
1278 }
1279 
1280 
1281 
1282 
1283 
1284 /*
1285   -- BIOP   BindingType
1286   -- e.g. TS 102 812
1287 */
1288 
dsmccStrBIOP_BindingType(u_int id)1289 char *dsmccStrBIOP_BindingType (u_int id)
1290 {
1291   STR_TABLE  TableIDs[] = {
1292 	{ 0x01, 0x01,   "nobject" },
1293 	{ 0x02, 0x02,   "ncontext" },
1294       	{  0,0, NULL }
1295   };
1296 
1297   return findTableID (TableIDs, id);
1298 }
1299 
1300 
1301 
1302 
1303 /*
1304   -- BIOP  "Magic"  ID
1305   -- e.g. TS 102 812
1306 */
1307 
dsmccStrBIOP_MAGIC(u_int id)1308 char *dsmccStrBIOP_MAGIC (u_int id)
1309 {
1310   STR_TABLE  TableIDs[] = {
1311 	{ 0x42494F50, 0x42494F50,   "BIOP" },
1312       	{  0,0, NULL }
1313   };
1314 
1315   return findTableID (TableIDs, id);
1316 }
1317 
1318 
1319 
1320 
1321 
1322 
1323 
1324