Ejemplo n.º 1
0
int dsmcc_DownloadDataMessage (int v, u_char *b, u_int len)
{
   int   	x;
   int   	len_org = len;
   DSMCC_MSG_HD	dmh;




	x = dsmcc_MessageHeader (v, b, len, &dmh);
	b += x;
	len -= x;


	outBit_Sx_NL (v,"moduleId: ",		b,  0, 16);
	outBit_Sx_NL (v,"moduleVersion: ",	b, 16,  8);

	outBit_Sx_NL (v,"reserved: ",		b, 24,  8);
	outBit_Sx_NL (v,"blockNumber: ",	b, 32, 16);

	b += 6;
	len -= 6;

	print_databytes (v, "Block Data: ", b, len);

	// $$$ TODO: Save Blockdata if option set to file
	// a good Test transponder is ASTRA's MHP carousel
	// Beware of multiple BIOPs in a Module! (read below!)


	return len_org;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
0
static u_long  body_StreamMessage (int v, u_char *b)
{
  u_char   *b_org = b;
   u_int    nx,n2,n6;


   n2 = outBit_Sx_NL   (v,"objectInfo_length: ",	b,   0,  16);
   b += 2;
   nx = BIOP_DSM_Stream_Info_T (v, b);
   // $$$ Warning: Standards documents may describe wrong length calculation!
   	print_databytes  (v,"ObjectInfo_byte:",	 	b+nx, n2-nx);
   b += n2;
   

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


        outBit_Sx_NL   (v,"messageBody_length: ",	b,   0,   32);
   n6 = outBit_Sx_NL   (v,"tap_count: ",		b,  32,    8);
   b += 5;
   indent (+1);
   for (; n6 > 0; n6--) {
	int  ny;

	ny =  BIOP_TAP (v, "", b);
	b += ny;
   }
   indent (-1);


   return (u_long)  (b - b_org);
}
Ejemplo n.º 4
0
void PES_decodeDATA_private_stream_1 (u_char *b, int len)
{
  u_int     data_identifier;


  // -- Data Buffer starts at PES_DATA_BYTES...

  data_identifier		= getBits (b, 0,  0,  8);



	// -- Async Data Streaming will be done as private_stream_2 (pes_std)


  if (data_identifier >= 0x10 && data_identifier <= 0x1F) {

  	// Teletext EBU data (see EN 300 472)
	PES_decodeDATA_EBU_etc (b, len);

  } else if (data_identifier == 0x20) {

	// DVB subtitling (see EN 300 743)
	// $$$ TODO -- PES_decodeDATA_dvb_subtitles (b, len);
	print_databytes (4,"TODO  dvb subtitles:", b, len);


  } else {

  	// default sync. data streams (see EN 301 192)
	PES_decodeDATA_SYNC (b, len);

  }

}
Ejemplo n.º 5
0
int dsmcc_DownloadCancel (int v, u_char *b, u_int len)
{
   int   	len_org = len;
   int		len2;




	// already read  dsmcc_MessageHeader (v, b, len, &dmh);

	outBit_Sx_NL (v,"downloadId: ",			b,  0, 32);
	outBit_Sx_NL (v,"moduleId: ",			b, 32, 16);
	outBit_Sx_NL (v,"blockNumber: ",		b, 48, 16);
	outBit_Sx_NL (v,"downloadCancelReason: ",	b, 64,  8);
	outBit_Sx_NL (v,"reserved: ",			b, 72,  8);

	len2 = outBit_Sx_NL (v,"privateDataLength: ",	b, 80,  16);

	b += 12;
	len -= 12;

	print_databytes (v, "private data: ", b, len);

	return len_org;
}
Ejemplo n.º 6
0
int BIOP_ModuleInfo (int v, u_char *b, u_int len_org)
{
   int   	len = len_org;
   int 		n1, i;


   	// -- due to some misbehavior of some service providers
   	// -- we do a simple plausi check for tap_counts_min_bytes > len
	i = getBits (b, 0, 96, 8);	// tap_counts
	i = i * 7;

	if (i > len_org) {	// this is no ModuleInfo
		print_databytes (v,"Data Bytes (non-standard):", b, len_org);
		return len_org;
	}




	out_nl (v, "BIOP::ModuleInfo:");

	indent (+1);
	outBit_S2Tx_NL (v,"ModuleTimeOut: ",	b,  0, 32, "(ms)");
	outBit_S2Tx_NL (v,"BlockTimeOut: ",	b, 32, 32, "(ms)");
	outBit_S2Tx_NL (v,"MinBlockTime: ",	b, 64, 32, "(ms)");
	n1 = outBit_Sx_NL (v,"taps_count: ",	b, 96,  8);

	b += 13,
	len -= 13;


	indent (+1);
	while (n1-- > 0) {
		int n2;

		// BIOP_OBJECT_USE
		n2 = BIOP_TAP (v, "DSM", b);
		b += n2;
		len -= n2;

	}
	indent (-1);
	out_NL (v);


	n1 = outBit_Sx_NL (v,"userInfoLength: ",	b,   0,  8);
	// print_databytes (v,"UserInfoData:", b, n1); 

	dsmcc_CarouselDescriptor_Loop ("userInfo", b+1, n1);
	b   += 1+n1;
	len -= 1+n1;


	indent (-1);

	return len_org;
}
void descriptor_PRIVATE_default (u_char *b)
{
 int  len;

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

 print_databytes (4,"Descriptor-data:", b+2, len);
}
Ejemplo n.º 8
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);
}
Ejemplo n.º 9
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;
}
Ejemplo n.º 10
0
void descriptor_any (u_char *b)
{
 int  len;


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

 print_databytes (4,"Descriptor-data:", b+2, len);
}
Ejemplo n.º 11
0
static u_long  body_basic_Message (int v, u_char *b)
{
  u_char   *b_org = b;
   u_int    nx,n2,n3;


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

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


   n3 = outBit_Sx_NL   (v,"messageBody_length: ",	b,   0,   32);
   print_databytes  (v,"MessageBody:",	 	b+4, n3);
   b += 4 + n3;

   return (u_long)  (b - b_org);
}
Ejemplo n.º 12
0
void section_TESTDATA (u_char *b, int len)
{

 out_nl (3,"TESTDATA-decoding....");

 outBit_Sx_NL (3,"Table_ID: ",			b,  0, 6);
 outBit_Sx_NL (3,"priority_level: ",		b,  6, 2);
 outBit_Sx_NL (3,"section_syntax_indicator: ",	b,  8, 1);


 // $$$ TODO   ...
 print_databytes(5,"Data:",b,len);

}
Ejemplo n.º 13
0
void section_EMM_ECM (u_char *b, int len)
{
 /* */

 typedef struct  _EMM_ECM {
    u_int      table_id;
    u_int      section_syntax_indicator;		
    u_int      reserved_1;
    u_int      reserved_2;
    u_int      section_length;
    

 } EMM_ECM;




 EMM_ECM  e;
 //int n;


 
 e.table_id 			 = b[0];
 e.section_syntax_indicator	 = getBits (b, 0,  8, 1);
 e.reserved_1 			 = getBits (b, 0,  9, 1);
 e.reserved_2 			 = getBits (b, 0, 10, 2);
 e.section_length		 = getBits (b, 0, 12, 12);



 out_nl (3,"CAMT-decoding....");
 out_S2B_NL (3,"Table_ID: ",e.table_id, dvbstrTableID (e.table_id));

 out_SB_NL (3,"section_syntax_indicator: ",e.section_syntax_indicator);
 out_SB_NL (6,"reserved_1: ",e.reserved_1);
 out_SB_NL (6,"reserved_2: ",e.reserved_2);
 out_SW_NL (5,"Section_length: ",e.section_length);

 print_databytes(3,"CA_message_section_data:",b+3,e.section_length);

 //  !!! decoding the complete ECM/EMM stream may be illegal
 //      so we don't do this!
 //      secrets are secrets even if they are openly transmitted!
 //      you are not allowed to enhance this section!

}
Ejemplo n.º 14
0
static void  out_SkipBuffer (int v, int len)

{
  int  lmax;
  int  l;

   lmax = (sizeof(SkipBuffer)/sizeof(u_char));
   l = (len > lmax) ? lmax : len;

   print_databytes (v,"Skipped bytes:", SkipBuffer, l);
   
   if (l == lmax) {
   	out_nl (v,"...");
   	out_NL (v);
   }

}
Ejemplo n.º 15
0
static u_long  body_FileMessage (int v, u_char *b)
{
  u_char   *b_org = b;
  u_long   nx,n2,n5;


   n2 = outBit_Sx_NL   (v,"objectInfo_length: ",	b,   0,  16);
   b += 2;
   if (n2) {	// has to be >= 8
  	outBit64_Sx_NL (v,"DSM::File::ContentSize: ",	b,   0,  64);
	b  += 8;
	n2 -= 8;
	if (n2 > 0) {
	   	out_nl (v, "Descriptor_loop:");
   		indent (+1);
   		while (n2 > 0) {
			int    x;

			x   = descriptor (b,  DSMCC_CAROUSEL);
			b  += x;
			n2 -= x;
   			out_NL (v);
   		}
	} // if n2 > 0
	   indent (-1);
   } // if 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,"content_length: ",		b,  32,   32);
 	print_databytes(v,"content__byte:", 		b+8, n5);
   b += 8 + n5;


   return (u_long)  (b - b_org);
}
Ejemplo n.º 16
0
void mpeg_pack_header (int v, u_char *b, int len)
{

	/* z.B. H.222 ISO 13818-1 Table 2-33 */
	/* 	ISO 11172-1 pack header */


   int 	v1 = v+1;
   int  pack_stuffing_len;


   if (len == 0) return;

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

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

   outBit_Sx_NL (v1,"fixed '01': ",		b, 32,  2);
   print_xTS_field (v1, "system_clock_reference_base", 	b, 34) ;   // len 36b
   outBit_Sx_NL (v1,"system_clock_reference_extension: ",b, 70,  9);
   outBit_Sx_NL (v1,"marker_bit: ",		b, 79, 1);

   outBit_Sx   (v1,"program_mux_rate: ",	b, 80,22);
   	out_nl (v1,"  [=  x 50 bytes/sec]");

   outBit_Sx_NL (v1,"marker_bit: ",		b, 102, 1);
   outBit_Sx_NL (v1,"marker_bit: ",		b, 103, 1);
   outBit_Sx_NL (v1,"reserved: ",		b, 104, 5);

   pack_stuffing_len = outBit_Sx_NL (v1,"pack_stuffing_len: ",	b, 109, 3);
   print_databytes (6,"stuffing bytes 0xFF:", b+14, pack_stuffing_len);

   b += 14 + pack_stuffing_len;
   if (len >= 0) len -= 14 + pack_stuffing_len;

   if (len > 0) mpeg_system_header (v1, b, len); 	// only if len > 0 (PES packet)

   indent (-1);
}
Ejemplo n.º 17
0
static u_long  body_StreamEventMessage (int v, u_char *b)
{
  u_char   *b_org = b;
   u_int    nx,ny,n2,n8,n4;


   n2 = outBit_Sx_NL   (v,"objectInfo_length: ",	b,   0,  16);
   b += 2;
   nx = BIOP_DSM_Stream_Info_T (v, b);
   ny = BIOP_DSM_Event_EventList_T (v, b+nx);
   	print_databytes  (v,"ObjectInfo_byte:",	 	b+nx, n2-nx-ny);
   b += n2;
   

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


        outBit_Sx_NL   (v,"messageBody_length: ",	b,   0,   32);
   n8 = outBit_Sx_NL   (v,"tap_count: ",		b,  32,    8);
   b += 5;
   indent (+1);
   for (; n8 > 0; n8--) {
	int  nz;

	nz =  BIOP_TAP (v, "", b);
	b += nz;
   }
   indent (-1);


   n4 = outBit_Sx_NL   (v,"eventIds_count: ",		b,   0,    8);
   b += 1;
   indent (+1);
   for (; n4 > 0; n4--) {
   	outBit_Sx_NL   (v,"eventId: ",			b,   0,   16);
	b += 2;
   }
   indent (-1);


   return (u_long)  (b - b_org);
}
Ejemplo n.º 18
0
void section_ST (u_char *b, int len)
{

 typedef struct  _ST {
    u_int      table_id;
    u_int      section_syntax_indicator;		
    u_int      reserved_1;
    u_int      reserved_2;
    u_int      section_length;

    // N  databytes

 } ST;


 ST s;


 
 s.table_id 			 = b[0];
 s.section_syntax_indicator	 = getBits (b, 0, 8, 1);
 s.reserved_1 			 = getBits (b, 0, 9, 1);
 s.reserved_2 			 = getBits (b, 0, 10, 2);
 s.section_length		 = getBits (b, 0, 12, 12);


 out_nl (3,"ST-decoding....");
 out_S2B_NL (3,"Table_ID: ",s.table_id, dvbstrTableID (s.table_id));
 if (s.table_id != 0x72) {
   out_nl (3,"wrong Table ID");
   return;
 }

 out_SB_NL (3,"section_syntax_indicator: ",s.section_syntax_indicator);
 out_SB_NL (6,"reserved_1: ",s.reserved_1);
 out_SB_NL (6,"reserved_2: ",s.reserved_2);
 out_SW_NL (5,"Section_length: ",s.section_length);

 b += 3;
 print_databytes (3,"Section data:", b, s.section_length);

}
Ejemplo n.º 19
0
int IOP_IOR (int v, u_char *b)
{
   u_char       *b_start = b;
   int		i,x;
   u_long 	n1;



	out_nl (v, "IOP::IOR:");
	indent (+1);


	n1 = outBit_Sx_NL (v,"type_id_length: ",	b,  0, 32);
	print_text_UTF8 (v, "type_id: ", b+4, n1);
	b += 4+n1;


	// alignment gap  (CDR alignment rule), should be 0xFF
	x = n1 % 4;
	if (x) {
		print_databytes (v,"alignment_gap:", b, 4-x);
		b += 4-x;
	}


	n1 = outBit_Sx_NL (v,"taggedProfiles_count: ",	b,  0, 32);
	b += 4;
	for (i=0; i < n1; i++) {
		u_long   n2;

		//  IOP_taggedProfile 
		n2 = IOP_taggedProfile (v, b);
		b += n2;

	}


	indent (-1);

	return b - b_start;
}
Ejemplo n.º 20
0
void descriptorMHP_AIT_application_icons (u_char *b)
{
  int  len;
  int  len2;


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

  len2 = outBit_Sx_NL (4,"icon_locator_length: ",	b+2, 0, 8);
  print_text_UTF8 (4, "icon_locator: ", b+3, len2);

  b += 3 + len2;
  len -= 1 + len2;

  outBit_Sx_NL (4,"icon_flags: ",	b, 0, 16);	// $$$ TODO table
  b += 2;
  len -= 2;

  print_databytes(4,"reserved_future_use:", b, len); 
}
Ejemplo n.º 21
0
void decodeTS_NullPacket (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;


 // Null Packet may contain any data
 print_databytes (5, "Data-Bytes:", b,len); 

}
Ejemplo n.º 22
0
static int monochrome_data_field (int v, u_char *b, int len)
{
   int  v1 = v+1;
   int  n;


   out_nl (v,"Monochrome 4:2:2 sample data:");
   indent (+1);

   	outBit_Sx_NL (v1,"first_segment_flag: ",b, 0, 1);
   	outBit_Sx_NL (v1,"last_segment_flag: ", b, 1, 1);
   	outBit_Sx_NL (v1,"field_parity: ",	b, 2, 1);
   	outBit_Sx_NL (v1,"line_offset: ",	b, 3, 5);

   	outBit_Sx_NL (v1,"first_pixel_position: ",b, 8, 16);
   	n = outBit_Sx_NL (v1,"n_pixel: ",	b, 24, 8);

	print_databytes (v1,"Y_values:", b+3, n);

   indent (-1);
   return 3+n;
}
Ejemplo n.º 23
0
static u_long  do_ServiceContentList (int v, u_char *b)
{
  u_char   *b_org = b;
  int      n3;



   n3 = outBit_Sx_NL   (v,"serviceContentList_count: ",	b,   0,   8);
   b += 1;

   indent (+1);
   for (; n3 > 0; n3--) {
	int    n4;

	     outBit_Sx_NL (v,"context_id: ",		b,   0,  32);
	n4 = outBit_Sx_NL (v,"context_data_length: ",	b,  32,  16);
 	     print_databytes  (v,"context_data:", 	b+6, n4);
	b += 6 + n4;

   }
   indent (-1);

   return (u_long) (b - b_org);
}
Ejemplo n.º 24
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;
}
Ejemplo n.º 25
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);
}
Ejemplo n.º 26
0
int dsmcc_DownloadInfoIndication (int v, u_char *b, u_int len)
{
   int   	len_org = len;
   int		n_modules;
   int 		len2;
   int		i, x;



	// already read  dsmcc_MessageHeader (v, b, len, &dmh);

	outBit_Sx_NL (v,"downloadId: ",		b   ,  0, 32);
	outBit_Sx_NL (v,"blockSize: ",		b+ 4,  0, 16);
	outBit_Sx_NL (v,"windowSize: ",		b+ 6,  0,  8);
	outBit_Sx_NL (v,"ackPeriod: ",		b+ 7,  0,  8);
	outBit_Sx_NL (v,"tCDownloadWindow: ",	b+ 8,  0, 32);
	outBit_Sx_NL (v,"tCDownloadScenario: ",	b+12,  0, 32);
	b += 16;
	len -= 16;

	x = dsmcc_CompatibilityDescriptor (b);
	b += x;
	len -= x;

	n_modules = outBit_Sx_NL (v,"numberOfModules: ",	b,  0, 16);
	b += 2;
	len -= 2;

	for (i=0; i < n_modules; i++) {
		u_int    mId;

		out_NL (v);
		out_nl (v, "Module (%d):",i);
		indent (+1);

		mId = outBit_Sx (v,"moduleId: ",	b,  0, 16);
		      out_nl (4, "%s", (mId < 0xFFF0) ? "" : "  [= DAVIC application]");
		outBit_Sx_NL (v,"moduleSize: "	,	b, 16, 32);
		outBit_Sx_NL (v,"moduleVersion: ",	b, 48,  8);
		len2 = outBit_Sx_NL (v,"moduleInfoLength: ",	b, 56,  8);
		b += 8;
		len -= 8;


		// moduleInfoByte: these fields shall convey a list of descriptors
		// which each define one or more attributes of the described module,
		// except when the moduleId is within the range of 0xFFF0-0xFFFF. In
		// this case, the moduleInfoByte structure contains the ModuleInfo
		// structure as defined by DAVIC with the privateDataByte field of that
		// structure as a loop of descriptors.
		// ISO 13818-6:2000  11.3.3.2

		if (mId < 0xFFF0) {
			BIOP_ModuleInfo (v, b, len2);
		} else {
			print_databytes (v, "moduleInfoBytes: ", b, len2);  // $$$ TODO Davic
		}
		b += len2;
		len -= len2;

		indent (-1);
	}
	out_NL (v);
	indent (-1);


	len2 = outBit_Sx_NL (v,"privateDataLength: ",	b,  0, 16);
	print_databytes (v, "privat Data: ", b+2, len2);   // $$$ TODO ???
	// b += 2 + len2;
	// len -= 2 + len2;


	return len_org;
}
Ejemplo n.º 27
0
void PES_decodeDATA_SYNC (u_char *b, int len)
{

 typedef struct  _PES_DATA {
        u_int     data_identifier;
        u_int     sub_stream_id;
        u_int     PTS_extension_flag;
        u_int     output_data_rate_flag;
        u_int     reserved;
        u_int     PES_data_packet_header_length;

	// N ... optional data

 } PES_DATA;

 PES_DATA   p;
 int        len2;


   out_nl (4,"Data (synchronous/synchronized):");
   indent (+1);


   p.data_identifier			= getBits (b, 0,  0,  8);
   p.sub_stream_id			= getBits (b, 0,  8,  8);
   p.PTS_extension_flag			= getBits (b, 0, 16,  1);
   p.output_data_rate_flag		= getBits (b, 0, 17,  1);
   p.reserved                           = getBits (b, 0, 18,  2);
   p.PES_data_packet_header_length	= getBits (b, 0, 20,  4);
   b   += 3;
   len -= 3;
   len2 = p.PES_data_packet_header_length;


   out_S2B_NL  (4,"data_identifier: ", p.data_identifier,
		   dvbstrPESDataIdentifier (p.data_identifier) );
   out_SB_NL  (4,"sub_stream_id: ", p.sub_stream_id);
   out_SB_NL  (4,"PTS_extension_flag: ", p.PTS_extension_flag);
   out_SB_NL  (4,"output_data_rate_flag: ", p.output_data_rate_flag);
   out_SB_NL  (6,"reserved_1: ", p.reserved);
   out_SB_NL  (4,"PES_data_packet_header_length: ", p.PES_data_packet_header_length);

   if (p.PTS_extension_flag == 0x01) {
   	out_nl (4,"PTS_extension:");
	indent (+1);
	out_SB_NL  (6,"reserved: ", getBits (b, 0,  0,  7) );
	out_SW_NL  (4,"PTS_extension: ", getBits (b, 0,  7, 9) );
	/* $$$ TODO  PCR extension output in clear text, see ISO 13818-1*/
	b   += 2;
	len -= 2;
	len2 -= 2;
	indent (-1);
   }

   if (p.output_data_rate_flag == 0x01) {
   	out_nl (4,"output_data_rate:");
	indent (+1);
	out_SB_NL  (6,"reserved: ", getBits (b, 0,  0,  4) );
	out_SL_NL  (4,"output_data_rate: ", getBits (b, 0,  4, 28) );
	b   += 4;
	len -= 4;
	len2 -= 4;
	indent (-1);
   }


   print_databytes (4,"PES_data_private_byte:", b, len2);
   b   += len2;
   len -= len2;

   print_databytes (4,"PES_data_byte:", b, len);
   b   += len;
   len -= len;


   indent (-1);
}
Ejemplo n.º 28
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


}
Ejemplo n.º 29
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);
}
Ejemplo n.º 30
0
int dsmcc_GroupInfoIndication (int v, u_char *b, u_int len_org)
{
   int   	len = len_org;
   int		n_groups;
   int 		i;
   int		len2;



   	// -- due to some misbehavior of some service providers
   	// -- we do a simple plausi check for group_counts_min_bytes > len
	i = getBits (b, 0, 0, 16);	// group_counts
	i = i * 8  + 2;

	if (i > len_org) {	// this is no  GroupInfo
		print_databytes (v,"Data Bytes (non-standard):", b, len_org);
		return len_org;
	}



	out_nl (v,"GroupInfoIndication:");
	indent (+1);
		n_groups = outBit_Sx_NL (v,"NumberOfGroups: ",	b,  0, 16);
		b += 2;
		len -= 2;

		for (i=0; i < n_groups; i++) {
			out_NL (v);
			if (len <= 0) {
				out_nl (v, "... => strange len <= 0  and still group count > 0  (abort)");
				break;
			}

			out_nl (v, "Group (%d):",i);
			indent (+1);

			outBit_Sx_NL (v,"GroupId: ",	b,  0, 32);
			outBit_Sx_NL (v,"GroupSize: ",	b, 32, 32);
			b += 8;
			len -= 8;

			// GroupCompatibility()
			len2 = dsmcc_CompatibilityDescriptor (b);
			b += len2;
			len -= len2;

			len2 = outBit_Sx_NL (v,"GroupInfoLength: ",	b,  0, 16);
			// print_databytes (v, "GroupInfoBytes: ", b+2, len2);   // $$$ TODO 
			dsmcc_CarouselDescriptor_Loop ("GroupInfo", b+2, len2);
			b += 2+len2;
			len -= 2+len2;

			len2 = outBit_Sx_NL (v,"PrivateDataLength: ",	b,  0, 16);
			print_private_data (v, b+2, len2);   // $$$ What to do here?
			b += 2+len2;
			len -= 2+len2;

			indent (-1);
		}

	indent (-1);
	out_NL (v);

	return len_org;
}