Пример #1
0
void PES_decodeDATA_EBU_etc (u_char *b, int len)
{
	
   // -- PES_DATA_bytes EBU
   // -- Data Buffer starts at PES_DATA_BYTES...
   // --> see parent

   int  data_identifier;

   out_nl (4,"EBU data:");
   indent (+1);

   data_identifier = outBit_S2x_NL (4,"data_identifier: ",	b, 0, 8,
			(char *(*)(u_long)) dvbstrPESDataIdentifier);
   b++;
   len--;

   while (len > 0) {
	int len2;
	int dui;
	int n=0;


	out_NL (4);
   	dui  = outBit_S2x_NL (4,"data_unit_id: ",	b, 0, 8,
			(char *(*)(u_long)) dvbstrPES_EBUDataUnitID);

   	len2 = outBit_Sx_NL (4,"data_unit_length: ",	b, 8, 8);
	b += 2;
	len -= 2;

	if (dui==0x02 || dui==0x03 || dui==0xC0 || dui==0xC1) {
		n = teletext_data_field (4, b, len2);
	} else if (dui==0xC3) {
		n = vps_data_field(4, b,len2);
	} else if (dui==0xC4) {
		n = wss_data_field (4, b,len2);
	} else if (dui==0xC5) {
		n = closed_caption_data_field (4, b,len2);
	} else if (dui==0xC6) {
		n = monochrome_data_field (4, b,len2);
	} else if (dui==0xFF) {
		/* No data field */
		n = 0;
	}

	if ( (len2-n) > 0 ) {
		print_databytes (4,"stuffing bytes:", b+n, len2-n);
	}

	b += len2;
	len -= len2;
   }


   indent (-1);
}
Пример #2
0
void section_TDT (u_char *b, int len)
{

   u_int      table_id;
   u_long     UTC_time_MJD;
   u_long     UTC_time_UTC;



   out_nl (3,"TDT-decoding....");
   table_id = outBit_S2x_NL (3,"Table_ID: ",  b,  0, 8,
		  (char *(*)(u_long)) dvbstrTableID );     
   if (table_id != 0x70) {
	out_nl (3,"wrong Table ID");
	return;
   }



  outBit_Sx_NL (3,"section_syntax_indicator: ",		b,  8,  1);
  outBit_Sx_NL (6,"reserved_1: ",			b,  9,  1);
  outBit_Sx_NL (6,"reserved_2: ",			b, 10,  2);
  outBit_Sx_NL (3,"Section_length: ",			b, 12, 12);


  out (3,"UTC_time: ");
  UTC_time_MJD		 = getBits (b, 0, 24, 16);
  UTC_time_UTC		 = getBits (b, 0, 40, 24);
  print_time40 (3, UTC_time_MJD,UTC_time_UTC);
  out_NL (3);

}
Пример #3
0
static int teletext_data_field (int v, u_char *b, int len)
{
   int  v1 = v+1;
   int  len2;


   out_nl (v,"Teletext data:");
   indent (+1);

   	ebu_rfl_out (v1,b);
   	outBit_S2x_NL (v1,"frame_coding: ", b, 8, 8,
			(char *(*)(u_long)) dvbstrTELETEXT_framingcode );
	b += 2;
	len -= 2;


	print_databytes (8,"data_block:", b, 42);
	out_nl (v1," => decoded:");
		indent (+1);

		invertBuffer (b, 42);
		len2 = print_teletext_control_decode (v1, b, 42);
		b += len2;
		len -= len2;

		indent (-1);


   indent (-1);
   return 44;
}
Пример #4
0
void mpeg_system_header (int v, u_char *b, int len)
{

	/* z.B. H.222 ISO 13818-1 Table 2-34 */
	/* 	ISO 11172-1 system header */


   if (len == 0) return;

   out_nl (v,"System_header: ");
   indent (+1);

   if (len > 0) {
	// -- within PES packet, not PS!
	outBit_Sx_NL (v,"system_header_start_code: ",	b,  0, 32);
   }



   // -- get real length from system_header data
   len = outBit_Sx_NL (v,"header_length: ",	b,  32, 16);

   outBit_Sx_NL (v,"marker_bit: ",		b,  48,  1);
   outBit_Sx_NL (v,"rate_bound: ",		b,  49,  22);
   outBit_Sx_NL (v,"marker_bit: ",		b,  71,  1);
   outBit_Sx_NL (v,"audio_bound: ",		b,  72,  6);
   outBit_Sx_NL (v,"fixed_flag: ",		b,  78,  1);
   outBit_Sx_NL (v,"CSPS_flag: ",		b,  79,  1);
   outBit_Sx_NL (v,"system_audio_lock_flag: ",	b,  80,  1);
   outBit_Sx_NL (v,"system_video_lock_flag: ",	b,  81,  1);
   outBit_Sx_NL (v,"marker_bit: ",		b,  82,  1);
   outBit_Sx_NL (v,"video_bound: ",		b,  83,  5);
   outBit_Sx_NL (v,"packet_rate_restriction_flag: ",	b,  88,  1);
   outBit_Sx_NL (v,"reserved_byte: ",		b,  89,  7);

   b += 12;
   len -= 12;


   // while (nextbits () == '1') {	
   // while  ((bit = getBits (b, 0,0,1)) == 0x01) {
   while  ( (*b & 0x80) ) {
	if (len <= 0)  break;

	out_NL (v);
	outBit_S2x_NL(v,"Stream_id: ",			b,  0,  8,
		 	(char *(*)(u_long))dvbstrPESstream_ID );
   	outBit_Sx_NL (v,"fixed (0x02): ",		b,  8,  2);
   	outBit_Sx_NL (v,"P-STD_buffer_bound_scale: ",	b, 10,  1);
   	outBit_Sx_NL (v,"P-STD_buffer_size_bound: ",	b, 11, 13);

	b   += 3;
	len -= 3;
	if (len < 0)  out_nl (1, "$$$ something wrong here (length<0)");
   }


   indent (-1);
}
Пример #5
0
void descriptorMHP_AIT_ip_signalling (u_char *b)
{
  // descriptor_tag	= b[0];
  // len	        = b[1];
  b +=2;

  outBit_S2x_NL (4,"platform_id: ",	b,  0, 24,
		  	(char *(*)(u_long)) dsmccStrPlatform_ID);
}
Пример #6
0
int  descriptorMHP_AIT (u_char *b)

{
 int len;
 int tag;



  out_NL (4);
  tag = outBit_S2x_NL (4,"MHP_AIT-DescriptorTag: ",		b,   0,  8,
		(char *(*)(u_long))dsmccStrMHP_AIT_DescriptorTAG); 
  len = outBit_Sx_NL  (4,"descriptor_length: ",	 	b,   8,  8);


  // empty ??
  if (len == 0) return len;

  // print hex buf of descriptor
  printhex_buf (9, b,len+2);



  switch (tag) {

     case 0x00:  descriptorMHP_AIT_application (b); break;
     case 0x01:  descriptorMHP_AIT_application_name (b); break;
     case 0x02:  descriptorMHP_AIT_transport_protocol (b); break;
     case 0x03:  descriptorMHP_AIT_dvb_j_application (b); break;
     case 0x04:  descriptorMHP_AIT_dvb_j_application_location (b); break;
     case 0x05:  descriptorMHP_AIT_external_application_authorisation (b); break;
     // case 0x06: reserved
     // case 0x07: reserved
     case 0x08:  descriptorMHP_AIT_dvb_html_application (b); break;
     case 0x09:  descriptorMHP_AIT_dvb_html_application_location (b); break;
     case 0x0A:  descriptorMHP_AIT_dvb_html_application_boundary (b); break;
     case 0x0B:  descriptorMHP_AIT_application_icons (b); break;
     case 0x0C:  descriptorMHP_AIT_pre_fetch (b); break;
     case 0x0D:  descriptorMHP_AIT_DII_location (b); break;
     case 0x0E:  descriptorMHP_AIT_delegated_application (b); break;
     case 0x0F:  descriptorMHP_AIT_plug_in (b); break;
     case 0x10:  descriptorMHP_AIT_application_storage (b); break;
     case 0x11:  descriptorMHP_AIT_ip_signalling (b); break;

     case 0x5F:  descriptorDVB_PrivateDataSpecifier (b); break;

     default: 
	if (tag < 0x80) {
	    out_nl (0,"  ----> ERROR: unimplemented descriptor (MHP_AIT context), Report!");
	}
	descriptor_PRIVATE (b,MHP_AIT);
	break;
  } 


  return len+2;   // (descriptor total length)
}
Пример #7
0
u_long  BIOP_TAG_dispatch (int v, u_char *b)
{
  u_long   id_tag;
  u_long   len;


	id_tag = getBits (b, 0, 0, 32);		// ID_tag  prefetch

	switch (id_tag) {

	    case 0x42494F50:		// "BIOP"
		    // BIOP::FileMessage
		    // BIOP::DirectoryMessage
		    // BIOP::StreamMessage
		    // BIOP::StreamEventMessage
		    len = BIOP_Message (v, b);
		    break;

	    case 0x49534f05:		// TAG_LITE_OPTIONS
		    len = BIOP_LiteOptionsProfileBody (v, b);
		    break;

	    case 0x49534f06:		// TAG_BIOP
		    // BIOPProfileBody
		    len = BIOP_BIOPProfileBody (v, b);
		    break;

	    case 0x49534f40:		// TAG_ConnBinder
		    // DSM::ConnBinder
		    len = BIOP_DSM_ConnBinder (v, b);
		    break;

	    case 0x49534f46:		// TAG_SERVICE_LOCATION
		    len = BIOP_DSM_ServiceLocation (v, b);
		    break;

	    case 0x49534f50:		// TAG_ObjectLocation
		    // DSM::ConnBinder
		    len = BIOP_ObjectLocation (v, b);
		    break;

	    default:			// unknown !!!
		    // $$$ TODO:  we wildly guess, that there is a 32b length field!
		    // $$$ TODO:  this may break the decoding process, if not true
		    outBit_S2x_NL (v,"profileId_tag: ",			b,   0, 32,
 			(char *(*)(u_long)) dsmccStrIOP_ProfileID );
		    len = outBit_Sx_NL (v,"profile_data_length: ",	b,  32, 32);
		    print_databytes (v,"unkown profile_data:", b+8, len); 
		    len += 8;
		    break;

	}
		
  out_NL (v);
  return len;
}
Пример #8
0
void descriptorMHP_AIT_application_storage (u_char *b)
{
  // descriptor_tag	= b[0];
  // len	        = b[1];
  b +=2;

  outBit_S2x_NL(4,"storage_property: ",			b,  0,  8,
		  	(char *(*)(u_long)) dsmccStrMHP_storage_property);
  outBit_Sx_NL (4,"not_launchable_from_broadcast: ",	b,  8,  1);
  outBit_Sx_NL (4,"reserved: ",				b,  9,  7);
  outBit_Sx_NL (4,"version: ",				b, 16, 32);
  outBit_Sx_NL (4,"priority: ",				b, 48,  8);
}
void descriptor_PRIVATE_PremiereDE_ContentTransmission (u_char *b)
{
  int  len, str_tim_len;
  u_int time_MJD, time_UTC;

 
  // tag	 = b[0];
  len       	 = b[1];


  out_nl (4,"--> Premiere Content Transmission descriptor ");


  outBit_Sx_NL  (4,"transport_stream_ID: ",	b,  16, 16);
  outBit_S2x_NL (4,"original_network_id: ",	b,  32, 16,
			(char *(*)(u_long)) dvbstrOriginalNetwork_ID);
  outBit_S2Tx_NL(4,"service_ID: ",		b,  48, 16,
			" --> refers to PMT program_number"); 
 
 
  b += 8;
  len -= 6;

  out_NL(4);
  while (len>0) {

	out (4,"Start_date: ");
  	time_MJD = getBits (b, 0, 0, 16);
	print_time_mjd (4, time_MJD);
	out_NL (4);

  	str_tim_len = outBit_Sx_NL (5,"start_time_loop_length: ", b,  16, 8);

	b += 3;
 	len -= 3;

	indent (+1);
 	for(; str_tim_len>0; str_tim_len-=3) {
  		out (4,"Start_time: ");
  		time_UTC = getBits (b, 0, 0, 24);
  		print_time_utc (4, time_UTC);
  		out_NL (4);

		b   += 3;
		len -= 3;
 	}
	out_NL (4);
	indent (-1);
  }

}
Пример #10
0
int  llc_snap (int v, u_char *b)

{
  int dsap, ssap, ctrl;
  int oui, prot;

  out_nl (v,"LLC/SNAP:");
  indent (+1);

  out_nl (v,"LLC:");
  dsap = outBit_Sx_NL (v," DSAP: ",  		b, 0, 8);
  ssap = outBit_Sx_NL (v," SSAP: ",  		b, 8, 8);
  ctrl = outBit_Sx_NL (v," Control: ",	 	b,16, 8);
  
  out_nl (v,"SNAP:");
  oui   = outBit_S2x_NL (v," Org. Unique ID: ", 	b,24,24,
	  	(char *(*)(u_long))dsmccStrOUI );
  prot  = outBit_S2x_NL (v," Protocol Identifier: ", 	b,48,16,
	  	(char *(*)(u_long))dsmccStr_LLC_SNAP_prot );

  indent (-1);
  return 8;

}
Пример #11
0
void descriptorMHP_AIT_application (u_char *b)
{
  int        len;
  int        len2;

  // descriptor_tag	= b[0];
  len		        = b[1];


 len2 = outBit_Sx_NL (4,"application_profile_length: ",	b, 16, 8);
 b += 3;
 len -= 1;

 indent (+1);
 while (len2 > 0) {
	int x;

	out_NL(4);
	x =   mhp_application_profile_version (4, b);

	b += x;
	len -= x;
	len2 -= x;
 }
 out_NL(4);
 indent (-1);


 outBit_Sx_NL (4,"service_bound_flag: ",	b,   0,  1);
 outBit_S2x_NL(4,"visibility: ",		b,   1,  2,
	 	(char *(*)(u_long)) dsmccStrMHP_visibility_state );
 outBit_Sx_NL (4,"reserved: ",			b,   3,  5);
 outBit_Sx_NL (4,"application_priority: ",	b,   8,  8);
 b += 2;
 len -= 2;

 while (len > 0) {
 	outBit_Sx_NL (4,"transport_protocol_label: ",	b,   0, 8);
	b++;
	len--;
 }

}
Пример #12
0
int  print_vps_decode (int v, u_char *b, int len)
{
	// warning!  Nipples e.g. _2_7 may not be msb...lsb order!
	//           see: ETSI EN 300 231  for this notation!
   u_int  pcs;
   u_int  cni_1_4;
   u_int  pil;
   u_int  pty;

   u_int  day, month, hour, minute;
   u_int  country_5_8;
   u_int  npp, npp_0_1, npp_2_7;



	out_nl (v,"VPS data:");
	print_databytes (8,"Data:", b, len);


	indent (+1);

	// -- starts at EN 300 231 8.2.2 Fig.9 Table 
	// -- Byte 3..15 , so byte 3 => [0]
	// -- vps_data_block:

	// -- Byte 3+4: not relevant to PDC
	// -- Info from datasheet SAA4700 (Philips)
   	outBit_Sx_NL (v,"(program source identification (binary coded)): ",  b,   0,  8);
   	outBit_Sx_NL (v,"(program source identification (ASCII seq)): ",     b+1, 0,  8); 

	// -- PCS
   	pcs = outBit_S2x_NL (v,"PCS audio: ",		b+2,  0,  2,
			(char *(*)(u_long)) dvbstrVPS_pcs_audio );
   	pcs = outBit_Sx_NL  (v,"PCS reserved: ",	b+2,  2,  2);


   	cni_1_4  = outBit_Sx (v,"CNI reserved: ", 	b+2,  4,  4);
	if (cni_1_4 == 0x0F) 	out_nl (4, "  [= Unenhanced VPS]");
	else			out_nl (4, "  [= Enhanced VPS]");


	// -- Byte 6..10: not relevant to PDC
	// -- Info from datasheet SAA4700 (Philips)
   	outBit_Sx_NL (v,"(program/test picture identification): ",        b+3,   0,  8);
   	outBit_Sx_NL (v,"(internal information exchange): ",              b+4,   0,  8);
   	outBit_Sx_NL (v,"(address assignment of signal distribution): ",  b+5,   0, 16);
   	outBit_Sx_NL (v,"(messages/commands): ",                          b+7,   0,  8);


	pil 		=  getBits (b,  8,  2, 20);

	npp_0_1		=  getBits (b,  8,  0,  2);
	day 		=  getBits (b,  8,  2,  5);
	month 		=  getBits (b,  8,  7,  4);
	hour 		=  getBits (b,  8, 11,  5);
	minute 		=  getBits (b,  8, 16,  6);

	country_5_8	=  getBits (b,  8, 22,  4);
	npp_2_7		=  getBits (b,  8, 26,  6);
	pty	 	=  getBits (b,  8, 32,  8);			// byte 15


	out_SB_NL  (v,"NPP_1: ", npp_0_1);


	out_ST  (v,"Program Identificaion Label (PIL): ", pil);
	if (day != 0x00) {
		out_nl     (v,"  [= month=%d  day=%d   hour=%d  min=%d]",
				month, day, hour, minute);
	} else {
		char *s;

		switch (pil) {
			case 0x07FFF: s = "Timer-control code (TC)"; break;
			case 0x07FBF: s = "Record inhibit/Terminate (RI/T)"; break;
			case 0x07F7F: s = "Interrruption code (INT)"; break;
			case 0x07F3F: s = "Continuation code"; break;
			case 0xFFFFF: s = "Program selected by PTY"; break;
			default:      s = "UNKOWN code"; break;
		}

		out_nl (v,"  [= %s]",s);
	}


	out_S2B_NL (v,"Country: ", country_5_8,
			dvbstrVPS_cni_countrycode(1+(country_5_8 << 4)) );

	out_SB_NL  (v,"NPP_2: ", npp_2_7);
	npp = (npp_0_1 << 6) + (npp_2_7);	// msb ... lsb
	out_S2B_NL (v,"  ==> Network/Program Provider (NPP): ", npp, dvbstrVPS_npp(npp) );
	out_S2B_NL (v,"Program Type (PTY): ", pty, dvbstrVPS_pty(pty) );



	indent (-1);
	return len;
}
Пример #13
0
int BIOP_TAP (int v, const char *str, u_char *b)
{
  u_char       *b_org = b;
  int          use;
  int          n;


   out_nl (v, "%s::TAP:");
   indent (+1);

         outBit_Sx_NL (v,"id: ",			b,  0, 16);
   use = outBit_S2x_NL(v,"use: ",			b, 16, 16,
			(char *(*)(u_long))dsmccStrBIOP_TAP_Use );

         outBit_Sx_NL (v,"association_tag: ",		b, 32, 16);



   n   = outBit_Sx_NL (v,"selector_length: ",		b, 48,  8);
   b += 7;


   // -- a TAP may have a Selector()
   if (n >= 2) {
	int stype;
	
	stype = outBit_S2x_NL(v,"selector_type: ",	b,  0, 16,
			(char *(*)(u_long))dsmccStrBIOP_TAP_SelectorType );
	indent (+1);
	switch (stype) {

		case 0x0001:			// MessageSelector
			dsmcc_print_transactionID_32 (v, b+2);
   			outBit_S2Tx_NL (v,"timeout: ",	b, 48,  32, "usec.");
			break;

		case 0x0109:			// ATSC A95: TSFS_selector
   			outBit_Sx_NL   (v,"carouselId: ",  b, 16,  32);
   			outBit_S2Tx_NL (v,"DSI_timeout: ", b, 48,  32, "usec.");
			if (n > 10) {
	 		   print_databytes (v,"URI_byte:",   b+10, n-10); 
			}
			break;

		case 0x0000:			// ISO/IEC reserved
		default:			// unknown, default
	 		print_databytes (v,"selector_data:", 	b+2, n-2); 
			break;

	}
	indent (-1);

   } else {
	if (n > 0) {
		print_databytes (v,"selector_data:", 	b, n); 
	}
   }


   b += n;


   indent (-1);
   out_NL (v);
   return (int) (b - b_org);
}
Пример #14
0
void section_TVA_RNT (u_char *b, int len)
{
 /* TS 102 323  */

 u_int      len1,len2;
 u_int      table_id;
 u_int      section_length;



  out_nl (3,"RNT-decoding....");
  table_id = outBit_S2x_NL (3,"Table_ID: ",	b, 0, 8,
				(char *(*)(u_long))dvbstrTableID );
  if (table_id != 0x79) {
    out_nl (3,"wrong Table ID");
    return;
  }


  outBit_Sx_NL (3,"Section_syntax_indicator: ",	b, 8,  1);
  outBit_Sx_NL (6,"reserved: ",			b, 9,  1);
  outBit_Sx_NL (6,"reserved: ",			b,10,  2);
  section_length = outBit_Sx_NL (5,"section_length: ",	b,12,12);

  outBit_Sx_NL (3,"context_id: ",		b,24, 16);
  outBit_Sx_NL (6,"reserved_3: ",		b,40,  2);
  outBit_Sx_NL (3,"version_number: ",		b,42,  5);

  outBit_S2x_NL(3,"Current_next_indicator: ",	b,47,  1,
			(char *(*)(u_long))dvbstrCurrentNextIndicator );
  outBit_Sx_NL (3,"Section_number: ",		b,48,  8);
  outBit_Sx_NL (3,"Last_section_number: ",	b,56,  8);


  outBit_S2x_NL(3,"context_id_type: ",		b,64,  8,
			(char *(*)(u_long))dvbstrTVA_content_id_type );



  len2 = outBit_Sx_NL (3,"common_descriptor_length: ",	b,72, 12);
  outBit_Sx_NL (6,"reserved: ",				b,84,  4);

  b += 11;
  len1 = section_length - 8;


  // common descriptor loop 

  out_nl (3,"Common_descriptor_loop:");
  indent (+1);
  while (len2 > 0) {
	 int i;
	 i   = descriptor (b, TVA_RNT);
	 b    += i;
	 len1 -= i;
	 len2 -= i;
	 out_NL (4);
  }
  indent (-1);


  // resolution provider info loop

  out_nl (3,"resolution_provider_info_loop:");
  indent (+1);
  while (len1 > 0) {
	int len2, len3;

  	len2 = outBit_Sx_NL (3,"resolution_provider_info_length: ",	b,  0, 12);
  	outBit_Sx_NL (6,"reserved: ",					b, 12,  4);

  	len3 = outBit_Sx_NL (3,"resolution_provider_name_length: ",	b, 16,  8);
	print_std_ascii     (3,"resolution_provider_name: ", 		b+3, len3);
	b    += len3 + 3;
	len1 -= len3 + 3;
	len2 -= len3 + 3;


  	// resolution_provider_descriptors loop 

  	len3 = outBit_Sx_NL (3,"resolution_provider_descriptor_length: ", 	b, 0, 12);
  	outBit_Sx_NL (6,"reserved: ",						b, 12, 4);
	b    += 2;
	len1 -= 2;
	len2 -= 2;

	out_nl (3,"resolution_provider_descriptor_loop:");
	indent (+1);
	while (len3 > 0) {
		int i;
		i   = descriptor (b, TVA_RNT);
		b    += i;
		len1 -= i;
		len2 -= i;
		len3 -= i;
	 	out_NL (4);
	}
	indent (-1);


	// CRID_authority loop

	out_nl (3,"CRID_authority_loop:");
	indent (+1);
	while (len2 > 0) {

		len3 = outBit_Sx_NL (3,"CRID_authority_name_length: ",	b,  0,  8);
		print_std_ascii     (3,"CRID_authority_name: ", 	b+1, len3);
		b    += len3 + 1;
		len1 -= len3 + 1;
		len2 -= len3 + 1;


	 	// CRID_authority_descriptors loop 

  		len3 = outBit_Sx_NL (3,"CRID_authority_descriptors_length: ", 	b, 0, 12);
	  	outBit_Sx_NL (6,"reserved: ",					b, 12,  4);
		b    += 2;
		len1 -= 2;
		len2 -= 2;

		out_nl (3,"CRID_authority_descriptor_loop:");
		indent (+1);
		while (len3 > 0) {
			int i;
			i   = descriptor (b, TVA_RNT);
			b    += i;
			len1 -= i;
			len2 -= i;
			len3 -= i;
	 		out_NL (4);
		}
		indent (-1);

	}
	indent (-1);

  }
  indent (-1);



  outBit_Sx_NL (5,"CRC: ",	b,0,32);
}
Пример #15
0
static u_long  body_DirectoryMessage (int v, u_char *b)
{
  u_char   *b_org = b;
  int      i;
  u_int    nx,n2,n5,n7,n9;


   n2 = outBit_Sx_NL   (v,"objectInfo_length: ",	b,   0,  16);
 	print_databytes(v,"objectInfo_data:", 		b+2, n2);
   b += 2 + n2;
   out_NL (v);


   nx = do_ServiceContentList (v, b);
   b += nx;


        outBit_Sx_NL   (v,"messageBody_length: ",	b,   0,   32);
   n5 = outBit_Sx_NL   (v,"bindings_count: ",		b,  32,   16);
   b += 6;

   indent (+1);
   for (i=0; i < n5; i++) {
	int    n6;
	u_long kinddata;

	n6 = BIOP_Name (v, b, &kinddata);
	b += n6;


	outBit_S2x_NL  (v,"BindingType: ",		b,   0,    8,
			(char *(*)(u_long)) dsmccStrBIOP_BindingType);
	b += 1;


	n7 = IOP_IOR (v, b);
	b += n7;


	n9 = outBit_Sx_NL   (v,"objectInfo_length: ",	b,   0,  16);
	b += 2;

	if (n9) {
		if (kinddata == 0x66696c00) {		// "fil"
	  		outBit64_Sx_NL (v,"DSM::File::ContentSize: ",	b,  16,  64);
			b  += 8;
			n9 -= 8;
		}


		if (n9 > 0) {
			print_databytes  (v,"descriptor_bytes (PLEASE REPORT!!!):", 	b, n9);
			b += n9;

// 			$$$ TODO: to be checked...!!! (instead of print_databytes)
//
// 			out_nl (v, "Descriptor_loop:");
// 			indent (+1);
//			while (n9 > 0) {
//				int    x;
//
//				x   = descriptor (b,  DSMCC_CAROUSEL);
//				b  += x;
//				n9 -= x;
//				out_NL (v);
//			}
//	 		indent (-1);

 		}  // if n9 > 0

	} // if n9

   } // loop n5
   indent (-1);


   return (u_long)  (b - b_org);
}
Пример #16
0
void decodeTS_iso13818 (u_char *b, int len)
{
 /* ISO 13818-1  2.4.3.2  */

 int            n;
 TSPHD		h;


 //
 // -- decode packet header (32 bit)
 //

 n =  decodeTS_PacketHeader (b, &h);
 len -= n;
 b   += n;


 if (h.afc & 0x2) {
    indent (+1);
    out_nl (3,"Adaptation_field: ");
    	indent (+1);
    	n = ts_adaptation_field (b);
    	b   += n;
    	len -= n;
    	indent (-1);
    indent (-1);
 }

 
 if (h.afc & 0x1) {

    indent (+1);
    out_nl (3,"Payload: (len: %d)",len);

	// -- if payload_start, check PES/SECTION
	if (h.pusi && ! (h.tsc || h.tei) ) {
	    indent (+1);
	    if (b[0]==0x00 && b[1]==0x00 && b[2]==0x01) {
		// -- PES
		outBit_S2x_NL (4,"==> PES-stream: ",	b+3, 0,8,
			(char *(*)(u_long))dvbstrPESstream_ID );
	    } else {
		// -- section (eval pointer field)
		int pointer = b[0]+1;
		outBit_Sx_NL  (4,"==> pointer_field: ",	b, 0,8);
		outBit_S2x_NL (4,"==> Section table: ",	b+pointer, 0,8,
			(char *(*)(u_long))dvbstrTableID );
	    }
	    indent (-1);
	}

    	print_databytes (5, "Data-Bytes:", b,len); 

    indent (-1);

 }


 if (h.afc == 0x00) {
    // -- ISO/IEC reserved...
    print_databytes (5, "Data-Bytes:", b,len); 
 }

}
Пример #17
0
void section_PRIVATE_PremiereDE_CPT (u_char *b, int len)
{
 u_int      table_id;
 u_int      section_syntax_indicator;
 u_int      section_length;
 u_int      time_MJD, time_UTC;
 u_int 	    i, content_list_length;



 out_nl (3,"User_Defined-decoding....");
 table_id = outBit_S2Tx_NL (3,"Table_ID: ",	b, 0, 8,
		 "Premiere Content Presentation Table");

 if (table_id != 0xa1) {
   out_nl (3,"wrong Table ID");
   return;
 }


 section_syntax_indicator = 
 	outBit_Sx_NL (3,"Section_syntax_indicator: ",	b, 8, 1);	// == 1
 	outBit_Sx_NL (3,"private_indicator: ",		b, 9, 1);
 	outBit_Sx_NL (6,"reserved: ",			b,10, 2);
 section_length =
	outBit_Sx_NL (5,"private_section_length: ",	b,12,12);




 	outBit_Sx_NL (3,"table_id_extension: ",		b, 24,16);
 	outBit_Sx_NL (6,"reserved: ",			b, 40, 2);
 	outBit_Sx_NL (3,"Version_number: ",		b, 42, 5);
	outBit_S2x_NL(3,"Current_next_indicator: ",	b, 47, 1,
			(char *(*)(u_long))dvbstrCurrentNextIndicator );
	outBit_Sx_NL (3,"Section_number: ",		b, 48, 8);
	outBit_Sx_NL (3,"Last_section_number: ",	b, 56, 8);

	b += 8;
	section_length -= 5;


   //
   // -- Premiere Content Presentation Table CIT
   // -- provided by  Peter.Pavlov (Premiere.de)
   //


	outBit_Sx_NL (4,"Transport_stream_ID: ",b, 0, 16);
 	outBit_Sx_NL (4,"Original_network_ID: ",b, 16, 16);
 	outBit_Sx_NL (4,"virtual_channel_id: ",b, 32, 32);
 	outBit_Sx_NL (4,"virtual_channel_name_length: ",b, 64, 8);
	b+=8;
	print_text_468A (4, "virtual_channel_name: ", b+1, *b);
	section_length -= 9+*b;
	b += *b+1;
	outBit_Sx_NL  (4,"reserved: ",b, 0, 4);
	outBit_Sx_NL  (4,"virtual_channel_info_length: ",b, 4, 12);
	b+=2;
	section_length -= 2;

	while (section_length > 4) {

 		time_MJD = getBits (b, 0, 0, 16);
 		time_UTC = getBits (b, 0, 16, 24);
 		out (4,"start_time: ");
 		print_time40 (4, time_MJD, time_UTC);
 		out_NL (4);
    		out_nl (4,"duration: %02x:%02x:%02x",
			*(b+5), *(b+6), *(b+7));
		b+=8;
		outBit_Sx_NL  (4,"virtual_event_name_length: ",b, 0, 8);
		print_text_468A (4, "virtual_event_name: ", b+1, *b);

		section_length -= *b+9;
		b += *b+1;

		outBit_Sx_NL  (4,"virtual_event_info_length: ",b, 0, 8);
		print_text_468A (4, "virtual_event_info: ", b+1, *b);

		section_length -= *b+1;
		b += *b+1;

		outBit_Sx_NL  (4,"reserved: ",b, 0, 4);
		outBit_Sx_NL  (4,"content_list_length: ",b, 4, 12);
		content_list_length = ((b[0]&15)<<8)+b[1];
		for(i=0, b+=2; i<content_list_length; i+=4, b+=4)
			{
 			outBit_Sx_NL (4,"content_id: ",b, 0, 32);
			}
		section_length -= content_list_length+2;
	}


 	outBit_Sx_NL (5,"CRC: ",		b, 0, 32);

}
Пример #18
0
void section_PRIVATE_PremiereDE_CIT (u_char *b, int len)
{
 u_int      table_id;
 u_int      section_syntax_indicator;
 u_int      section_length;


 out_nl (3,"User_Defined-decoding....");
 table_id = outBit_S2Tx_NL (3,"Table_ID: ",	b, 0, 8,
		 "Premiere Content Information Table");
 if (table_id != 0xa0) {
   out_nl (3,"wrong Table ID");
   return;
 }


 section_syntax_indicator = 
 	outBit_Sx_NL (3,"Section_syntax_indicator: ",	b, 8, 1);	// ==1 
 	outBit_Sx_NL (3,"private_indicator: ",		b, 9, 1);
 	outBit_Sx_NL (6,"reserved: ",			b,10, 2);
 section_length =
	outBit_Sx_NL (5,"private_section_length: ",	b,12,12);



 	outBit_Sx_NL (3,"table_id_extension: ",		b, 24,16);
 	outBit_Sx_NL (6,"reserved: ",			b, 40, 2);
 	outBit_Sx_NL (3,"Version_number: ",		b, 42, 5);
	outBit_S2x_NL(3,"Current_next_indicator: ",	b, 47, 1,
			(char *(*)(u_long))dvbstrCurrentNextIndicator );
	outBit_Sx_NL (3,"Section_number: ",		b, 48, 8);
	outBit_Sx_NL (3,"Last_section_number: ",	b, 56, 8);

	b += 8;
	section_length -= 5;




   //
   // -- Premiere Content Information Table CIT
   // -- provided by  Peter.Pavlov (Premiere.de)
   //


   out_NL (3);
   outBit_Sx_NL (3,"Content id: ",		b, 0, 32);
   outBit_Sx_NL (3,"Duration: ",			b, 32,24);
   outBit_Sx_NL (3,"Reserved: ",			b, 56, 4);
   outBit_Sx_NL (5,"descriptor_section_length: ",	b, 60,12);

   b += 9;
   section_length -=9;

   while (section_length > 4 ) {
	int x;

      	x = descriptor (b, DVB_SI);
      	if (section_length < x) break;
      	b    += x;
      	section_length -= x;
   }




   outBit_Sx_NL (5,"CRC: ",		b, 0, 32);

}
Пример #19
0
void section_DSMCC (u_char *b, int len)
{
 /* TR 101 202 */

 int        len1;
 u_int      table_id;
 u_int      section_length;
 u_int      section_syntax_indicator;
 u_int      private_indicator;
 u_int	    sect_nr;
 u_int      last_sect_nr;



 out_nl (3,"DSM-CC-decoding....");
 table_id = outBit_S2x_NL (3,"Table_ID: ",	b, 0, 8,
				(char *(*)(u_long))dvbstrTableID );
 if (table_id < 0x3a || table_id > 0x3e) {
   out_nl (3,"wrong Table ID");
   return;
 }


 section_syntax_indicator =
	 outBit_Sx_NL (4,"Section_syntax_indicator: ",	b, 8, 1);
 private_indicator = 
	 outBit_Sx_NL (4,"private_indicator: ",		b, 9, 1);
 outBit_Sx_NL (6,"reserved_1: ",			b,10, 2);
 section_length =
	 outBit_Sx_NL (5,"dsmcc_section_length: ",	b,12,12);


 outBit_Sx_NL (3,"table_id_extension: ",		b,24,16);
 outBit_Sx_NL (6,"reserved_3: ",		b,40, 2);

 outBit_Sx_NL (3,"Version_number: ",		b,42, 5);
 outBit_S2x_NL(3,"Current_next_indicator: ",	b,47, 1,
			(char *(*)(u_long))dvbstrCurrentNextIndicator );

 sect_nr      = outBit_Sx_NL (3,"Section_number: ",		b,48, 8);
 last_sect_nr = outBit_Sx_NL (3,"Last_section_number: ",	b,56, 8);


 b += 8;
 len1 = section_length - 5 - 4;	    	// -4 == CRC/Checksum



 if (table_id == 0x3A) {

	llc_snap (3,b);		 	//  ISO/IEC 8802-2 

 } else if (table_id == 0x3B) {

	dsmcc_UserNetworkMessage (4, b, len1);

 } else if (table_id == 0x3C) {

	dsmcc_DownloadDataMessage (4, b, len1);

 } else if (table_id == 0x3D) {

	DSMCC_descriptor_list (b,len1);

 } else if (table_id == 0x3E) {	 	// $$$ Remark: DVB defines 0x3E as datagram!!

	 print_private_data (4, b, len1);

 }

 b += len1;



 outBit_Sx_NL (5, (section_syntax_indicator)
		   ?"CRC: " :"Checksum: ",	b,0,32);
}
Пример #20
0
void descriptorMHP_AIT_transport_protocol (u_char *b)
{
  int  len;
  int  p_id;	


  // descriptor_tag	= b[0];
  len		        = b[1];

  p_id = outBit_S2x_NL (4,"protocol_id: ",	b, 16, 16,
	 	(char *(*)(u_long)) dsmccStrMHP_protocol_id);
  outBit_Sx_NL (4,"transport_protocol_label: ",	b, 32, 8);
  b += 5;
  len -= 3;


  // -- 0x0001 = Transport via OC
  // -- 0x0002 = Transport via IP
  // -- 0x0003 = Transport via interaction channel
  if (p_id == 0x0001 || p_id == 0x0002) {

	int   remote_conn;


  	remote_conn = outBit_Sx_NL (4,"remote_connection: ",	b,  0, 1);
  	              outBit_Sx_NL (6,"reserved: ",		b,  1, 7);
	b++;
	len--;

	if (remote_conn == 0x01) {
		// $$$ TODO reminder: this code part is used several time
		outBit_S2x_NL (4,"Original_network_id: ",	b,  0, 16,
			(char *(*)(u_long)) dvbstrOriginalNetwork_ID);
		outBit_Sx_NL  (4,"transport_stream_ID: ",	b, 16, 16);
		outBit_S2Tx_NL(4,"service_ID: ",		b, 32, 16,
			" --> refers to PMT program_number"); 
		b += 6;
		len -= 6;
	}


	if (p_id == 0x0001) {
  		// --  Transport via OC
		outBit_Sx_NL  (4,"component_tag: ",		b,  0,  8);
		b++;
		len--;
	} else {
  		// --  Transport via IP
		outBit_Sx_NL  (4,"alignment_indicator: ",	b,  0,  1);
		outBit_Sx_NL  (6,"reserved: ",			b,  1,  7);
		b++;
		len--;

		while (len > 0) {
			int len2;

			out_NL (4);
			len2 = outBit_Sx_NL (4,"URL_length: ",	b,  0,  8);
	 		print_text_UTF8 (4, "URL: ", b+1, len2);
			b += 1+len2;
			len -= 1+len2;
		}

	}


  } if (p_id == 0x0003) {

	int len2;


	out_NL (4);
	len2 = outBit_Sx_NL (4,"URL_base_length: ",	b,  0,  8);
	print_text_UTF8 (4, "URL_base: ", b+1, len2);
	b += 1+len2;
	len -= 1+len2;


	while (len > 0) {
		int len2;

		out_NL (4);
		len2 = outBit_Sx_NL (4,"URL_extension_length: ", b,  0,  8);
		print_text_UTF8 (4, "URL_extension: ", b+1, len2);
		b += 1+len2;
		len -= 1+len2;
	}

  } else {
	// -- all other
  	print_databytes(4,"selector_bytes:", b, len); 

  }


}
Пример #21
0
void   net_IP_data (int v, u_char *b, int len)
{

    int ip_version;
    int protocol = -1;


//  print_databytes (v, "IP_datagram_bytes", b, len);

    out_NL (v);
    out_nl (v,"IP_datagram_bytes:");

    indent (+1);

    ip_version = outBit_Sx_NL (v, "Version: ", b, 0, 4);

    if (ip_version == 4) {
        // -- RFC 791 IPv4

        int header_len;
        int ip;

        header_len = outBit_Sx_NL (v, "IP header length: ", b, 4, 4);
        outBit_Sx_NL (v, "Type of service: ", b, 8, 8);
        outBit_Sx_NL (v, "Total length: ", b, 16, 16);
        outBit_Sx_NL (v, "Identification: ", b, 32, 16);
        outBit_Sx_NL (v, "Reserved: ", b, 48, 1);
        outBit_Sx_NL (v, "DF: ", b, 49, 1);
        outBit_Sx_NL (v, "MF: ", b, 50, 1);
        outBit_Sx_NL (v, "Fragment offset: ", b, 51, 13);
        outBit_Sx_NL (v, "Time to live: ", b, 64, 8);
        protocol = outBit_S2x_NL(v, "Protocol: ", b, 72, 8,
                                 (char *(*)(u_long))netStr_RFC790_protocol_nr );

        outBit_Sx_NL (v, "Header checksum: ", b, 80, 16);

        ip = getBits (b, 0, 96, 32);
        out (v,"Source address: %08lx [= ", ip);
        displ_IPv4_addr (v, ip);
        out_nl (v,"]");

        ip = getBits (b, 0, 128, 32);
        out (v,"Destination address: %08lx [= ", ip);
        displ_IPv4_addr (v, ip);
        out_nl (v,"]");

        b   += (5*4);		// 5*4 = header length
        len -= (5*4);


        // -- IPv4 Options & Padding
        // ---  n = number of options
        // ---  Total bit length: ( ( 5+n ) * 32 ), 5 is minimum header

        if (header_len > 5) {
            // --  TODO Options & Padding
            print_databytes (v, "Options & Padding ", b, len);
            b   += (header_len-5)*4;
            len -= (header_len-5)*4;
        }


    } else if (ip_version == 6) {
        // -- RFC 2460 for IPv6
        struct IPv6ADDR x;

        outBit_Sx_NL (v, "Traffic class: ", b, 4, 8);
        outBit_Sx_NL (v, "Flow label: ", b, 12, 20);
        outBit_Sx_NL (v, "Payload length: ", b, 32, 16);
        protocol = outBit_Sx_NL (v, "Next header: ", b, 48, 16);
        outBit_Sx_NL (v, "Hop limit: ", b, 64, 16);

        getIPv6Addr (b+8, &x);
        out (v, "Source address: %08lx%08lx%08lx%08lx [= ",
             x.ip[0], x.ip[1], x.ip[2], x.ip[3] );
        displ_IPv6_addr (4, &x);
        out_nl (v,"]");

        getIPv6Addr (b+24, &x);
        out (v, "Destination address: %08lx%08lx%08lx%08lx [= ",
             x.ip[0], x.ip[1], x.ip[2], x.ip[3] );
        displ_IPv6_addr (4, &x);
        out_nl (v,"]");

        b   += 40;
        len -= 40;
    }


    // -- ICMP,  RFC 792
    if (protocol == 1) {
        out_NL (v);
        out_nl (v,"ICMP_data: ");

        indent (+1);

        print_databytes (v, "Data", b, len);	// $$$ TODO
        b   += len;
        len  = 0;

        indent (-1);
    }

    // -- TCP,  RFC 793
    if (protocol == 6) {
        out_NL (v);
        out_nl (v,"TCP_data: ");

        indent (+1);

        print_databytes (v, "Data", b, len);	// $$$ TODO
        b   += len;
        len  = 0;

        indent (-1);
    }

    // -- UDP datagram,  RFC 768
    if (protocol == 17) {
        int udp_header_len;

        out_NL (v);
        out_nl (v,"UDP_datagram: ");

        indent (+1);

        outBit_Sx_NL (v, "Source port: ", b,  0, 16);
        outBit_Sx_NL (v, "Destination port: ",	b, 16, 16);
        udp_header_len = outBit_Sx_NL (v, "Length: ", b, 32, 16);
        outBit_Sx_NL (v, "Checksum: ",	b, 48, 16);

        print_databytes (v, "Data", b+8, udp_header_len-8);

        b   += udp_header_len;	// -- length is complete header + data
        len -= udp_header_len;

        indent (-1);
    }



    if (len > 0) {
        print_databytes (v, "Unknown Data / Padding", b, len);
        b   += len;
        len -= len;
    }

    out_NL (v);
    indent (-1);

}
Пример #22
0
void decodePS_PES_packet (u_char *b, u_int len, int pid)
{
 /* IS13818-1  2.4.3.6  */

  u_long    packet_start_code_prefix;		// 24 bit
  u_int     stream_id;
  u_int     PES_packet_length;
  u_int     stream_type;




 // -- Get/check packet header prefix (sync bits)

 packet_start_code_prefix		 = getBits (b, 0,  0, 24);
 if (packet_start_code_prefix != 0x000001) {
	out_nl (3," !!! Packet_Start_CODE [%06lx] is wrong (= no PES/PS [0x000001])!!!\n",
		packet_start_code_prefix);
	print_databytes (4,"Unknown packet data:", b, len);
	return;
 }
 out_nl (3,"Packet_start_code_prefix: 0x%06lx",packet_start_code_prefix);

 stream_id = b[3];

 // -- decode PES packet header
 if ((stream_id >= 0xC0 && stream_id <= 0xDF) // audio PES
     || (stream_id >= 0xE0 && stream_id <= 0xEF)) { // video PES

   PES_packet_length = outBit_Sx_NL (3, "PES_packet_length: ", b, 32, 16);

   b   += 6;
   len -= 6;

   if ((PES_packet_length==0) && ((stream_id & 0xF0)==0xE0)) {
       out_nl (3," ==> unbound video elementary stream... \n");
   }
   if (len > 0) {
       indent (+1);
       PES_decode_std (b, len, stream_id);
       indent (-1);
   }

   return;
 }


   stream_type = get_StreamFromMem(pid)->stream_type;

   //fprintf (stdout, "-># decodePS_PES_packet: len=%u; pid=%d stream_type=%u\n", len, pid, stream_type);

   if (stream_type == 0) {
      out_nl (3, "!!! Can not find stream type for PID = %d (0x%x) (PMT was not received yet)!!!\n", pid, pid);
      return;
   }

   // -- H.264 NALU
   if (stream_type == 0x1B) {

     u_char nal_ref_idc = getBits(b, 0, 25, 2);
     out_SB_NL(3, "nal_ref_idc: ", nal_ref_idc);

     stream_id = outBit_S2x_NL(3,"H.264 NALU: ", b, 27, 5,
         (char *(*)(u_long))dvbstrPESH264_NALU_ID );

     //b += 4;
     //len -= 4;

     indent (+1);

     switch(stream_id) {
     case NAL_IDR:
     case NAL_NONIDR:
       H264_decodeSlice(4, b, len);
       break;
     
     case NAL_AUD:
       H264_decodeAUD(4, b, len);
       break;

     case NAL_SPS:
       H264_decodeSPS(4, b, len);
       break;

     case NAL_PPS:
       H264_decodePPS(4, b, len);
       break;

     case NAL_SEI:
       H264_decodeSEI(4, b, len);
       break;
     }

     print_databytes (5, "Bytes (incl. sync + id):", b, len);

     indent (-1);

     return; 
   }

   // -- PS/PES stream ID

   stream_id = outBit_S2x_NL(3,"Stream_id: ", b, 24, 8,
         (char *(*)(u_long))dvbstrPESstream_ID ); 

   //
   // -- PES Stream ID 0x00 - 0xB8
   // -- ISO 13818-2
   //

   if (stream_id <= 0xB8) {

   		// $$$ TODO  PES Stream ID 0x00 - 0xB8
		//    reserved	B0
		//    reserved	B1
		//    sequence_error_code	B4  (not for streams)
		//    reserved	B6

	indent (+1);
	switch (stream_id) {

	  case 0x00:			// picture_start_code   00
		MPEG2_decodePictureHeader (4, b, len);
		break;

	  case 0xB2:			// user_data_start_code B2
		MPEG2_decodeUserData (4, b, len);
		break;

	  case 0xB3:			// sequence_header_code B3
		MPEG2_decodeSequenceHeader (4, b, len);
		break;

	  case 0xB5:			// extension_data       B5
		MPEG2_decodeExtension (4, b, len);
		break;

	  case 0xB7:			// sequence_end_code	B7
		MPEG2_decodeSequenceEnd (4, b, len);
		return;

	  case 0xB8:			//    group_start_code	B8
		MPEG2_decodeGroupOfPictures (4, b, len);
		break;

	  default:
					//    slice_start_code	01 through AF
		if (stream_id >= 0x01 && stream_id <= 0xAF) {

			MPEG2_decodeSlice (4, b, len);

		} else {
					//    unkown
		   if (len > 4) {		// sync + stream_id = 4 bytes
			print_databytes (4,"MPEG2 Data (incl. sync + id):", b, len);
		   }

		}
		break;
	}
	indent (-1);

	return;

   }





   //
   // -- PES Stream ID 0xB9 - 0xBB
   // -- check PS decoding (ProgramStream)
   //

   switch (stream_id) {
	case 0xB9:	// MPEG_program_end
			// stream ID already printed, nothing else to do
		return;

	case 0xBA:	// MPEG_pack_header_start
		mpeg_pack_header (3, b, -1);		// startcode & ID already printed
		return;

	case 0xBB:	// MPEG_system_header_start
		mpeg_system_header (3, b, -1);	// startcode & ID already printed
		return;
   }






   // 
   // -- PES decoding ...
   // -- StreamID 0xBC..0xFF
   //

   PES_packet_length = outBit_Sx_NL (3,"PES_packet_length: ",	b,32, 16);
   b   += 6;
   len -= 6;


   switch (stream_id) {

	case 0xBC:		// program_stream_map
		PES_decodePSM (b, PES_packet_length);
		break;

	case 0xBE:		// padding stream!
		print_databytes (3,"Padding_bytes:", b, PES_packet_length);
		break;

	case 0xF2:		// DSMCC stream
		PES_decodeDSMCC (b, PES_packet_length);
		break;

	case 0xFF:		// program_stream_directory
		PES_decodePSDIR (b, PES_packet_length);
		break;


	case 0xBF:		// private_stream_2  (EN301192-1.3.1 S.10)
	case 0xF0:		// ECM
	case 0xF1:		// EMM
	case 0xF8:		// ITU-T Rec. H.222.1 type E
		print_databytes (3,"PES_packet_data_bytes:", b, PES_packet_length);
		break;

	// case 0xFC:		// metadata stream	(see: H.222.0 AMD1)
	// $$$ TODO 

	// case 0xBD:		// Data Stream, privat_stream_1 (EN301192-1.3.1 S.11)
	// case 0xC0-0xDF	// ISO/IEC 13818-3 or 11172-3 or 13818-7 or 14496-3 audio stream 
	// case 0xE0-0xEF	// ITU-T Rec. H.262 | ISO/IEC 13818-2 or 11172-2 or 14496-2 video stream
	// case 0xF3		// ISO/IEC_13522_stream
	// case 0xF4		// ITU-T Rec. H.222.1 type A
	// case 0xF5		// ITU-T Rec. H.222.1 type B
	// case 0xF6		// ITU-T Rec. H.222.1 type C
	// case 0xF7		// ITU-T Rec. H.222.1 type D
	// case 0xF9		// ancillary_stream
	// case 0xFA		// ISO/IEC14496-1_SL-packetized_stream
	// case 0xFB		// ISO/IEC14496-1_FlexMux_stream
	// case 0xFD		// extended_stream_id
	// case 0xFE		// reserved data stream
	
	//default:
	//	{
	//	   int xlen = PES_packet_length;

 	//	   if ((PES_packet_length==0) && ((stream_id & 0xF0)==0xE0)) {
	//		 out_nl (3," ==> unbound video elementary stream... \n");
	//		 xlen = len;	// PES len field == 0, use read packet len
 	//	   }
	//	   if (xlen > 0) {
	//		indent (+1);
	//		PES_decode_std (b, xlen, stream_id);
	//		indent (-1);
	//	   }

	//	}
	//	break;

   } // switch


}
Пример #23
0
void section_MHP_AIT (u_char *b, int len)
{
 /* TS 102 812  */

 int        len2;
 u_int      table_id;



 out_nl (3,"AIT-decoding....");
 table_id = outBit_S2x_NL (3,"Table_ID: ",	b, 0, 8,
				(char *(*)(u_long))dvbstrTableID );
 if (table_id != 0x74) {
   out_nl (3,"wrong Table ID");
   return;
 }


 outBit_Sx_NL (4,"Section_syntax_indicator: ",	b, 8, 1);
 outBit_Sx_NL (6,"reserved_1: ",		b, 9, 1);
 outBit_Sx_NL (6,"reserved_2: ",		b,10, 2);
 outBit_Sx_NL (5,"section_length: ",		b,12,12);
 outBit_Sx_NL (3,"test_application_flag: ",	b,24, 1);
 outBit_S2x_NL(3,"application_type: ",		b,25, 15,
			(char *(*)(u_long))dsmccStrMHP_application_type );
 outBit_Sx_NL (6,"reserved_3: ",		b,40, 2);
 outBit_Sx_NL (3,"Version_number: ",		b,42, 5);
 outBit_S2x_NL(3,"Current_next_indicator: ",	b,47, 1,
			(char *(*)(u_long))dvbstrCurrentNextIndicator );
 outBit_Sx_NL (3,"Section_number: ",		b,48, 8);
 outBit_Sx_NL (3,"Last_section_number: ",	b,56, 8);


 outBit_Sx_NL (6,"reserved_4: ",		b,64, 4);
 len2 = outBit_Sx_NL (3,"common_descriptors_length: ",	b,68,12);
 b += 10;

 indent (+1);
 while (len2 > 0) {
	int x;

 	x = descriptor (b, MHP_AIT);
	b += x;
	len2 -= x;
 }
 indent (-1);
 out_NL (4);


 outBit_Sx_NL (6,"reserved_5: ",			b, 0, 4);
 len2 = outBit_Sx_NL (3,"application_loop_length: ",	b, 4,12);
 b += 2;

 indent (+1);
 while (len2 > 0) {
	int x;
	int len3;


	x = mhp_application_identifier (3, b);
	b += x;
	len2 -= x;

 	outBit_S2x_NL (3,"application_control_code: ",	b, 0, 8,
			(char *(*)(u_long))dsmccStrMHP_application_control_code);
 	outBit_Sx_NL (6,"reserved: ",			b, 8, 4);
	len3 = outBit_Sx_NL (3,"application_descriptor_loop_length: ",	b, 12,12);
	b += 3;
	len2 -= 3;

 	while (len3 > 0) {
		int x;

 		x = descriptor (b, MHP_AIT);
		b += x;
		len2 -= x;
		len3 -= x;
	}
 	indent (-1);
 	out_NL (4);


 }
 indent (-1);


 outBit_Sx_NL (5,"CRC: ",	b,0,32);
}
Пример #24
0
u_long  BIOP_Message (int v, u_char *b)
{
  u_char   *b_org = b;
  u_long   len;
  int      bo;
  int      n1,n2;
  u_long   kind;


  out_nl (v, "BIOP::Message");
  indent (+1);

   	outBit_S2x_NL(v,"magic: ",			b,   0, 32,
			(char *(*)(u_long)) dsmccStrBIOP_MAGIC);
	outBit_Sx_NL (v,"biop_version.major: ",		b,  32,  8);
	outBit_Sx_NL (v,"biop_version.minor: ",		b,  40,  8);

   bo = outBit_S2x_NL (v,"byte_order: ",		b,  48,  8,
			(char *(*)(u_long)) dsmccStrBIOP_EndianType );
   if (bo != 0x00) {
	   out_nl (v, "==> Error: unsupported byte endian order");
   }


	outBit_Sx_NL (v,"message_type: ",		b,  56,  8);  //$$$ TODO ??
	outBit_Sx_NL (v,"message_size: ",		b,  64, 32);
  b += 12;


  n1  = outBit_Sx_NL (v,"objectKey_length: ",		b,  0,  8);
	print_databytes (v,"objectKey_data:",		b+1, n1); 
  b += 1 + n1;


  n2  = outBit_Sx_NL (v,"objectKind_length: ",		b,  0,  32);
  b += 4;
  kind = 0x00;
  if (n2 != 4) {
	print_databytes (v,"objectKind_data:",		b, n2); 
  } else {
	// -- ISO 13818-6: length == 4 bytes, use type_id aliases
 	kind = outBit_S2x_NL (v,"objectKind_data: ",	b, 0, 32,
			(char *(*)(u_long)) dsmccStrBIOP_TypeID_Alias );
  }
  b += n2;



  out_NL (v);

  // -- select message processing,
  // -- due to "kind" aka type_id aliases
  // --  --> 3 character abbrev. terminated with \0
  switch (kind) {

	  case 0x64697200:		// "dir"   (DSM::Directory)
		len = body_DirectoryMessage (v, b);
		break;

	  case 0x66696c00:		// "fil"   (DSM:File)
		len = body_FileMessage (v, b);
		break;

	  case 0x73746500:		// "ste"   (DSM:StreamEvent)
		len = body_StreamEventMessage (v, b);
		break;

	  case 0x73726700:		// "srg"   (DSM:ServiceGateway)
		len = body_DirectoryMessage (v, b);
		break;

	  case 0x73747200:		// "str"   (BIOP::Stream)
		len = body_StreamMessage (v, b);
		break;

	  default:			// unsported BIOP (????)
		out_nl (v, "unsopported BIOP  (please report!!):");
		len = body_basic_Message (v, b);
		break;
  }
  b += len;


  out_NL (v);
  indent (-1);
  return  (u_long) (b - b_org);
}