⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsmcc_int_unt_descriptor.c

📁 dvbsnoop is a DVB/MPEG stream analyzer program. The program can be used to sniff, monitor, debug, d
💻 C
📖 第 1 页 / 共 2 页
字号:
/*$Id: dsmcc_int_unt_descriptor.c,v 1.20 2004/11/03 21:00:50 rasc Exp $  DVBSNOOP a dvb sniffer  and mpeg2 stream analyzer tool http://dvbsnoop.sourceforge.net/ (c) 2001-2004   Rainer.Scherg@gmx.de  (rasc) -- Private TAG Space  DSM-CC INT UNT -- DSM-CC Descriptors  ISO 13818-6  // EN 301 192 // TS 102 006$Log: dsmcc_int_unt_descriptor.c,v $Revision 1.20  2004/11/03 21:00:50  rasc - New: "premiere.de" private tables and descriptors (tnx to Peter.Pavlov, Premiere) - New: cmd option "-privateprovider <provider name>" - New: Private provider sections and descriptors decoding - Changed: complete restructuring of private descriptors and sectionsRevision 1.19  2004/08/06 22:21:38  rascNew: TV-Anytime (TS 102 323) RNT descriptors 0x40 - 0x42Revision 1.18  2004/08/04 21:58:41  rascBugFix: IPv6 (INT) descriptor display, got wrong valuesRevision 1.17  2004/04/15 03:38:50  rascnew: TransportStream sub-decoding (ts2PES, ts2SEC)  [-tssubdecode]checks for continuity errors, etc. and decode in TS enclosed sections/pes packetsRevision 1.16  2004/02/20 22:18:39  rascDII complete (hopefully)BIOP::ModuleInfo  (damned, who is spreading infos over several standards???)maybe someone give me a hint on the selector_byte info!!!some minor changes...Revision 1.15  2004/02/09 21:24:57  rascAIT descriptorsminor redesign on output routinesRevision 1.14  2004/01/03 00:30:06  rascDSM-CC  STREAM descriptors module (started)Revision 1.13  2004/01/02 22:59:59  rascDSM-CC  modules renaming...Revision 1.12  2004/01/02 22:25:35  rascDSM-CC  MODULEs descriptors completeRevision 1.11  2004/01/02 16:40:34  rascDSM-CC  INT/UNT descriptors completeminor changes and fixesRevision 1.10  2004/01/02 02:18:34  rascmore DSM-CC  INT/UNT descriptorsRevision 1.9  2004/01/01 20:31:22  rascPES program stream map, minor descriptor cleanupRevision 1.8  2004/01/01 20:09:19  rascDSM-CC INT/UNT descriptorsPES-sync changed, TS sync changed,descriptor scopeother changesRevision 1.7  2003/12/29 22:14:53  rascmore dsm-cc INT UNT descriptorsRevision 1.6  2003/12/28 00:01:14  rascsome minor changes/adds...Revision 1.5  2003/12/27 22:02:43  rascdsmcc INT UNT descriptors startedRevision 1.4  2003/12/27 18:17:17  rascdsmcc PES dsmcc_program_stream_descriptorlistRevision 1.3  2003/12/27 14:35:00  rascdvb-t descriptorsDSM-CC: SSU Linkage/DataBroadcast descriptorsRevision 1.2  2003/11/01 21:40:27  rascsome broadcast/linkage descriptor stuffRevision 1.1  2003/10/29 20:56:18  rascmore PES stuff, DSM descriptors, testdata*/#include "dvbsnoop.h"#include "descriptor.h"#include "dsmcc_int_unt_descriptor.h"#include "dvb_descriptor.h"#include "private/userdefs.h"#include "strings/dvb_str.h"#include "strings/dsmcc_str.h"#include "misc/hexprint.h"#include "misc/output.h"#include "misc/helper.h"#include "misc/pkt_time.h"/*  determine descriptor type and print it...  !!! DSMCC INT/UNT descriptors are in a private tag space !!!  EN 301 192:  Descriptors from the DVB SI range (0x40 - 0x7F) shall have their standard  semantics as defined in EN 300 468 [2].  Equally MPEG descriptors in the range 0x00 - 0x3F can not be used in the  INT.  Note that descriptor tags from 0x00 to 0x3F share a common descriptor  name space with UNT descriptors (see TS 102 006 [19]).  All descriptors may appear more than once in the INT sub-table at the  locations indicated above. In the case of name_descriptors multiple  occurrences require different ISO 639 language codes.  return byte length*/int  descriptorDSMCC_INT_UNT  (u_char *b){ int len; int id;  id  =  (int) b[0];  len = ((int) b[1]) + 2;  out_NL (4);  out_S2B_NL (4,"DSM_CC-INT-UNT-DescriptorTag: ",id,		  dsmccStrDSMCC_INT_UNT_DescriptorTAG(id));  out_SB_NL  (5,"Descriptor_length: ",b[1]);  // empty ??  len = ((int)b[1]) + 2;  if (b[1] == 0)	 return len;  // print hex buf of descriptor  printhex_buf (9, b,len);  switch (b[0]) {     case 0x01:  descriptorDSMCC_scheduling (b); break;     case 0x02:  descriptorDSMCC_update (b); break;     case 0x03:  descriptorDSMCC_ssu_location (b); break;     case 0x04:  descriptorDSMCC_message (b); break;     case 0x05:  descriptorDSMCC_ssu_event_name (b); break;     case 0x06:  descriptorDSMCC_target_smartcard (b); break;     case 0x07:  descriptorDSMCC_target_MAC_address (b); break;     case 0x08:  descriptorDSMCC_target_serial_number (b); break;     case 0x09:  descriptorDSMCC_target_IP_address (b); break;     case 0x0A:  descriptorDSMCC_target_IPv6_address (b); break;     case 0x0B:  descriptorDSMCC_ssu_subgroup_association (b); break;     case 0x0C:  descriptorDSMCC_IP_MAC_platform_name (b); break;     case 0x0D:  descriptorDSMCC_IP_MAC_platform_provider_name (b); break;     case 0x0E:  descriptorDSMCC_target_MAC_address_range (b); break;     case 0x0F:  descriptorDSMCC_target_IP_slash (b); break;     case 0x10:  descriptorDSMCC_target_IP_source_slash (b); break;     case 0x11:  descriptorDSMCC_target_IPv6_slash (b); break;     case 0x12:  descriptorDSMCC_target_IPv6_source_slash (b); break;     case 0x13:  descriptorDSMCC_IP_MAC_StreamLocation (b); break;     case 0x14:  descriptorDSMCC_ISP_access_mode (b); break;     // DVB SI scope...     case 0x57:  descriptorDVB_Telephone (b);  break;     case 0x5F:  descriptorDVB_PrivateDataSpecifier (b);  break;     default: 	if (b[0] < 0x80) {	    out_nl (0,"  ----> ERROR: unimplemented descriptor (DSM-CC INT/UNT context), Report!");	}	// descriptor_any (b);	descriptor_PRIVATE (b,DSMCC_INT_UNT);	break;  }   return len;   // (descriptor total length)}/* * EN 301 192  / TR 102 006 * private DSM-CC INT UNT descriptors *//*  0x01 - scheduling  ETSI TS 102 006  (ISO 13818-6)*/void descriptorDSMCC_scheduling (u_char *b){ int        len; int        x; u_long     UTC_time_MJD; u_long     UTC_time_UTC;  // descriptor_tag	= b[0];  len			= b[1];  UTC_time_MJD			 = getBits (b, 0, 16, 16);  UTC_time_UTC			 = getBits (b, 0, 32, 24);  out (4,"start_date_time: ");  print_time40 (4, UTC_time_MJD,UTC_time_UTC);  out_NL (4);  UTC_time_MJD			 = getBits (b, 0, 56, 16);  UTC_time_UTC			 = getBits (b, 0, 72, 24);  out (4,"end_date_time: ");  print_time40 (4, UTC_time_MJD,UTC_time_UTC);  out_NL (4);  x = outBit_Sx     (4,"final_availability: ",	  b,96, 1);  	if (x == 1) out_nl (4,"  [= final schedule]");	else out_NL (4);	   x = outBit_Sx     (4,"periodicity_flag: ",	  b,97, 1);  	if (x == 1) out_nl (4,"  [= only available between start/end time]");	else out_NL (4);   outBit_S2x_NL (4,"period_unit: ",	  	b, 98, 2,                        (char *(*)(u_long)) dsmccStr_TimeUnits);       outBit_S2x_NL (4,"duration_unit: ",	  	b,100, 2,                        (char *(*)(u_long)) dsmccStr_TimeUnits);       outBit_S2x_NL (4,"estimated_cycle_time_unit: ",b,102, 2,                        (char *(*)(u_long)) dsmccStr_TimeUnits);       outBit_Sx_NL (4,"period: ",			b,104, 8);  outBit_Sx_NL (4,"duration: ",	  		b,112, 8);  outBit_Sx_NL (4,"estimated_cycle_time: ",	b,120, 8);  print_private_data (4,b+16,len-14);}/*  0x02 - update  ETSI TS 102 006  (ISO 13818-6)*/void descriptorDSMCC_update (u_char *b){ int len; // descriptor_tag	= b[0]; len			= b[1]; outBit_S2x_NL (4,"update_flag: ",	  b,16, 2,                        (char *(*)(u_long)) dsmccStr_UpdateFlag );      outBit_S2x_NL (4,"update_method: ",	  b,18, 4,                        (char *(*)(u_long)) dsmccStr_UpdateMethod );      outBit_S2Tx_NL (4,"update_priority: ",	  b,22, 2, "0=highest");  print_private_data (4,b+3,len-1);}/*  0x03 - ssu_location  ETSI TS 102 006  (ISO 13818-6)*/void descriptorDSMCC_ssu_location (u_char *b){ int len; int id; // descriptor_tag	= b[0]; len			= b[1]; id = outBit_S2x_NL (4,"data_broadcast_id: ",	  b,16, 16,                        (char *(*)(u_long)) dvbstrDataBroadcast_ID ); if (id == 0x000A) { 	outBit_Sx_NL (4,"association_tag: ",	  b,32, 16);	len -= 2;	b += 2; } print_private_data (4,b+4,len-2);}/*  0x04 - message  ETSI EN 301 192  (ISO 13818-6)*/void descriptorDSMCC_message(u_char *b){  int        len;  u_char     ISO639_language_code[4];  // descriptor_tag	= b[0];  len		        = b[1];  outBit_Sx_NL (4,"descriptor_number: ",  	b,16, 4);  outBit_Sx_NL (4,"last_descriptor_number: ",  	b,20, 4);  getISO639_3 (ISO639_language_code, b+3);  out_nl (4,"  ISO639_language_code:  %3.3s", ISO639_language_code);  print_text_468A (4, "Text: ", b+6, len-4);}/*  0x05 - ssu_event_name  ETSI EN 301 192  (ISO 13818-6)*/void descriptorDSMCC_ssu_event_name (u_char *b){  int        len;  u_char     ISO639_language_code[4];  // descriptor_tag		 = b[0];  // len		       	 = b[1];  getISO639_3 (ISO639_language_code, b+2);  out_nl (4,"  ISO639_language_code:  %3.3s", ISO639_language_code);  len = outBit_Sx_NL (4,"name_length: ",	  b,40, 8);  print_std_ascii (4, "SSU_event_name: ", b+6, len);  b += 6+len;    len = outBit_Sx_NL (4,"text_length: ",	  b, 0, 8);  print_text_468A (4, "MessageText: ", b+1, len);}/*  0x06 - target_smartcard   ETSI EN 301 192  (ISO 13818-6)*/void descriptorDSMCC_target_smartcard (u_char *b){ int len; // descriptor_tag	= b[0]; len			= b[1]; outBit_Sx_NL (4,"Super_CA_system_id: ",  b,16,32);  // $$$ TODO ? TS 101 197 print_private_data (4,b+6,len-4);}/*  0x07 - MAC_address  ETSI EN 301 192  (ISO 13818-6)*/void descriptorDSMCC_target_MAC_address (u_char *b){ int  len; long mac_H, mac_L; // descriptor_tag	= b[0]; len			= b[1]; mac_H 		= getBits (b, 0,  16, 24); mac_L 		= getBits (b, 0,  40, 24);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -