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

📄 helper.c

📁 dvbsnoop is a DVB/MPEG stream analyzer program. The program can be used to sniff, monitor, debug, d
💻 C
📖 第 1 页 / 共 2 页
字号:
/*$Id: helper.c,v 1.37 2005/07/11 23:06:47 rasc Exp $ DVBSNOOP a dvb sniffer  and mpeg2 stream analyzer tool http://dvbsnoop.sourceforge.net/ (c) 2001-2004   Rainer.Scherg@gmx.de (rasc)$Log: helper.c,v $Revision 1.37  2005/07/11 23:06:47  rascMultibyte section filter redesign:  -f 0x4F.22.33.44.55.66 -m 0x.FF.FF.FF etc.Manpage updateRevision 1.36  2004/11/04 19:21:11  rascFixes and changes on "premiere.de" private sectionsCleaning up "premiere.de" private descriptors (should be final now)Revision 1.35  2004/11/03 21:00:59  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.34  2004/10/12 20:37:48  rasc - Changed: TS pid filtering from file, behavior changed - New: new cmdline option -maxdmx <n>  (replaces -f using pidscan) - misc. changesRevision 1.33  2004/08/12 22:57:18  rasc - New: MPEG Content Labeling descriptor  (H.222.0 AMD1) - New: PES update ITU-T H.222.0 AMD2H.222.0 AMD3 updates startedRevision 1.32  2004/08/08 17:00:25  rascBugfix: Cell List descriptor (tnx to Karsten Siebert)Revision 1.31  2004/08/06 22:21:38  rascNew: TV-Anytime (TS 102 323) RNT descriptors 0x40 - 0x42Revision 1.30  2004/04/19 22:09:33  rascminor changeRevision 1.29  2004/03/13 23:22:14  obihelper.c: In function `str_bit32':helper.c:784: warning: initialization from incompatible pointer typehelper.c:797: warning: return from incompatible pointer typeRevision 1.28  2004/03/09 20:59:23  rascVPS decoding (someone check the NPP & PTY code output please...)Revision 1.27  2004/02/28 12:13:03  rascminor stuffRevision 1.26  2004/02/20 22:18:40  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.25  2004/02/12 21:21:20  rascMHP AIT descriptorssome smaller changesRevision 1.24  2004/02/09 21:25:00  rascAIT descriptorsminor redesign on output routinesRevision 1.23  2004/01/17 23:06:09  rascminor stuff, some restructs in outputRevision 1.22  2004/01/13 23:23:38  rascnew getBits routine (hopfully more optimized)Revision 1.21  2004/01/13 21:04:21  rascBUGFIX: getbits overflow fixed...Revision 1.20  2004/01/02 22:25:38  rascDSM-CC  MODULEs descriptors completeRevision 1.19  2004/01/02 16:40:37  rascDSM-CC  INT/UNT descriptors completeminor changes and fixesRevision 1.18  2004/01/01 20:09:26  rascDSM-CC INT/UNT descriptorsPES-sync changed, TS sync changed,descriptor scopeother changesRevision 1.17  2003/12/30 14:05:37  rascjust some annotations, so I do not forget these over Sylvester party...(some alkohol may reformat parts of /devbrain/0 ... )cheers!Revision 1.16  2003/12/29 22:14:53  rascmore dsm-cc INT UNT descriptorsRevision 1.15  2003/12/27 22:02:44  rascdsmcc INT UNT descriptors startedRevision 1.14  2003/12/27 14:35:01  rascdvb-t descriptorsDSM-CC: SSU Linkage/DataBroadcast descriptorsRevision 1.13  2003/11/26 23:54:48  rasc-- bugfixes on Linkage descriptorRevision 1.12  2003/11/26 16:27:46  rasc- mpeg4 descriptors- simplified bit decoding and output functionRevision 1.11  2003/10/24 22:17:19  rasccode reorg...Revision 1.10  2003/10/16 19:02:29  rascsome updates to dvbsnoop...- small bugfixes- tables updates from ETR 162Revision 1.9  2003/06/24 23:51:03  rascbugfixes and enhancementsRevision 1.8  2003/02/26 16:45:16  obi- make dvbsnoop work on little endian machines again- fixed mask in getBits for bitlen >= 32Revision 1.7  2003/02/09 23:11:07  rascno messageRevision 1.6  2003/02/09 23:02:47  rasc-- endian check (bug fix)Revision 1.5  2003/02/09 23:01:10  rasc-- endian check (bug fix)Revision 1.4  2003/02/09 22:59:33  rasc-- endian check (bug fix)Revision 1.3  2002/08/17 20:36:12  obino more compiler warningsRevision 1.2  2001/10/06 18:19:18  ToerliSteuerzeichen entfernt. rasc wuerdest du mal bitte nen gescheiten unix-konformen Editor verwenden... windows editoren sind ungeeignetRevision 1.1  2001/09/30 13:05:20  rascdvbsnoop v0.7  -- Commit to CVS*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <assert.h>#include "helper.h"#include "hexprint.h"#include "output.h"#include "strings/dvb_str.h"/*  -- output bits  -- get bits and print decode  -- return: (unsigned long) value */// out text and values without CR/LFu_long outBit_Sx (int verbosity, const char *text, u_char *buf, int startbit, int bitlen){   u_long value;   value =  getBits(buf,0,startbit,bitlen);   if (bitlen <= 8) {	 out_SB (verbosity,text,(int)value);   } else if (bitlen <= 16) {	 out_SW (verbosity,text,(int)value);   } else if (bitlen <= 24) {	 out_ST (verbosity,text,(int)value);   } else {	 out_SL (verbosity,text,value);   }   return value;}// out text and valuesu_long outBit_Sx_NL (int verbosity, const char *text, u_char *buf, int startbit, int bitlen){  u_long value;  value = outBit_Sx (verbosity,text,buf,startbit,bitlen);  out_NL (verbosity);  return value;}// out text, values and string related to value (string table function)u_long outBit_S2x_NL (int verbosity, const char *text, u_char *buf, int startbit, int bitlen, char *(*f)(u_long) ){   u_long value;   value =  getBits(buf,0,startbit,bitlen);   if (bitlen <= 8) {	 out_S2B_NL (verbosity,text,(int)value, (*f)(value));   } else if (bitlen <= 16) {	 out_S2W_NL (verbosity,text,(int)value, (*f)(value));   } else if (bitlen <= 24) {	 out_S2T_NL (verbosity,text,(int)value, (*f)(value));   } else {	 out_S2L_NL (verbosity,text,     value, (*f)(value));   }   return value;}// out text, values and text2u_long outBit_S2Tx_NL (int verbosity, const char *text, u_char *buf, int startbit, int bitlen, const char *text2 ){   u_long value;   value =  getBits(buf,0,startbit,bitlen);   if (bitlen <= 8) {	 out_S2B_NL (verbosity,text,(int)value, text2);   } else if (bitlen <= 16) {	 out_S2W_NL (verbosity,text,(int)value, text2);   } else if (bitlen <= 24) {	 out_S2T_NL (verbosity,text,(int)value, text2);   } else {	 out_S2L_NL (verbosity,text,     value, text2);   }   return value;}/*  -- same for bitlen > 32  -- return unsigned long long */unsigned long long outBit64_Sx (int verbosity, const char *text, u_char *buf, int startbit, int bitlen){   unsigned long long value;   if (bitlen <= 48) {   	value =  getBits48 (buf,0,startbit,bitlen);	out_SLL (verbosity,text,(int)value);   } else {   	value =  getBits64 (buf,0,startbit,bitlen);	out_SLL (verbosity,text,value);   }   return value;}unsigned long long outBit64_Sx_NL (int verbosity, const char *text, u_char *buf, int startbit, int bitlen){  unsigned long long value;  value = outBit64_Sx (verbosity,text,buf,startbit,bitlen);  out_NL (verbosity);  return value;}/*  ----------------------------------------------------------------------------------- *//*   -- get bits out of buffer (max 32 bit!!!)  -- return: value  $$$ TODO  to be performance optimized!!*///unsigned long XXgetBits (u_char *buf, int byte_offset, int startbit, int bitlen)//{// u_char *b;// unsigned long  v;// unsigned long mask;// unsigned long tmp_long;////// b = &buf[byte_offset + (startbit / 8)];// startbit %= 8;//// if (bitlen > 24) {//	 // -- 24..32 bit//   return (unsigned long) getBits48 (b, 0, startbit, bitlen);// }//// // -- safe is 24 bitlen// tmp_long = (unsigned long)(//		 (*(b  )<<24) + (*(b+1)<<16) +//		 (*(b+2)<< 8) +  *(b+3) );//// startbit = 32 - startbit - bitlen;//// tmp_long = tmp_long >> startbit;// mask     = (1ULL << bitlen) - 1;  // 1ULL !!!// v        = tmp_long & mask;//// return v;//}/*   -- get bits out of buffer (max 32 bit!!!)  -- return: value*/unsigned long getBits (u_char *buf, int byte_offset, int startbit, int bitlen){ u_char *b; unsigned long  v; unsigned long mask; unsigned long tmp_long; int           bitHigh; b = &buf[byte_offset + (startbit >> 3)]; startbit %= 8; switch ((bitlen-1) >> 3) {	 case -1:	// -- <=0 bits: always 0		return 0L;		break;	case 0:		// -- 1..8 bit 		tmp_long = (unsigned long)(			(*(b  )<< 8) +  *(b+1) );		bitHigh = 16;		break;	case 1:		// -- 9..16 bit 		tmp_long = (unsigned long)(		 	(*(b  )<<16) + (*(b+1)<< 8) +  *(b+2) );		bitHigh = 24;		break;	case 2:		// -- 17..24 bit 		tmp_long = (unsigned long)(		 	(*(b  )<<24) + (*(b+1)<<16) +			(*(b+2)<< 8) +  *(b+3) );		bitHigh = 32;		break;	case 3:		// -- 25..32 bit			// -- to be safe, we need 32+8 bit as shift range 		return (unsigned long) getBits48 (b, 0, startbit, bitlen);		break;	default:	// -- 33.. bits: fail, deliver constant fail value		out_nl (1," Error: getBits() request out of bound!!!! (report!!) \n");		return (unsigned long) 0xFEFEFEFE;		break; } startbit = bitHigh - startbit - bitlen; tmp_long = tmp_long >> startbit; mask     = (1ULL << bitlen) - 1;  // 1ULL !!! v        = tmp_long & mask; return v;}

⌨️ 快捷键说明

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