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

📄 ndr.pl

📁 wireshark 0.99.7 最新源码
💻 PL
字号:
#!/usr/bin/perl# (C) 2007 Jelmer Vernooij <jelmer@samba.org># Published under the GNU General Public Licenseuse strict;use warnings;use Test::More tests => 34;use FindBin qw($RealBin);use lib "$RealBin";use Util;use Parse::Pidl::Util qw(MyDumper);use Parse::Pidl::NDR qw(GetElementLevelTable ParseElement align_type mapToScalar ParseType can_contain_deferred);# Case 1my $e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => {},	'POINTERS' => 0,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'STRUCT' },	'LINE' => 42 };is_deeply(GetElementLevelTable($e), [	{		'IS_DEFERRED' => 0,		'LEVEL_INDEX' => 0,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);my $ne = ParseElement($e, undef);is($ne->{ORIGINAL}, $e);is($ne->{NAME}, "v");is($ne->{ALIGN}, 1);is($ne->{TYPE}, "uint8");is_deeply($ne->{LEVELS},  [	{		'IS_DEFERRED' => 0,		'LEVEL_INDEX' => 0,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);# Case 2 : pointers#$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => {"unique" => 1},	'POINTERS' => 1,	'PARENT' => { TYPE => 'STRUCT' },	'TYPE' => 'uint8',	'LINE' => 42 };is_deeply(GetElementLevelTable($e), [	{		LEVEL_INDEX => 0,		IS_DEFERRED => 0,		TYPE => 'POINTER',		POINTER_TYPE => "unique",		POINTER_INDEX => 0,		LEVEL => 'EMBEDDED'	},	{		'IS_DEFERRED' => 1,		'LEVEL_INDEX' => 1,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);# Case 3 : double pointers#$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => {"unique" => 1},	'POINTERS' => 2,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'STRUCT' },	'LINE' => 42 };is_deeply(GetElementLevelTable($e), [	{		LEVEL_INDEX => 0,		IS_DEFERRED => 0,		TYPE => 'POINTER',		POINTER_TYPE => "unique",		POINTER_INDEX => 0,		LEVEL => 'EMBEDDED'	},	{		LEVEL_INDEX => 1,		IS_DEFERRED => 1,		TYPE => 'POINTER',		POINTER_TYPE => "unique",		POINTER_INDEX => 1,		LEVEL => 'EMBEDDED'	},	{		'IS_DEFERRED' => 1,		'LEVEL_INDEX' => 2,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);# Case 3 : ref pointers#$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => {"ref" => 1},	'POINTERS' => 1,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'STRUCT' },	'LINE' => 42 };is_deeply(GetElementLevelTable($e), [	{		LEVEL_INDEX => 0,		IS_DEFERRED => 0,		TYPE => 'POINTER',		POINTER_TYPE => "ref",		POINTER_INDEX => 0,		LEVEL => 'EMBEDDED'	},	{		'IS_DEFERRED' => 1,		'LEVEL_INDEX' => 1,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);# Case 4 : top-level ref pointers#$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => {"ref" => 1},	'POINTERS' => 1,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'FUNCTION' },	'LINE' => 42 };is_deeply(GetElementLevelTable($e), [	{		LEVEL_INDEX => 0,		IS_DEFERRED => 0,		TYPE => 'POINTER',		POINTER_TYPE => "ref",		POINTER_INDEX => 0,		LEVEL => 'TOP'	},	{		'IS_DEFERRED' => 0,		'LEVEL_INDEX' => 1,		'DATA_TYPE' => 'uint8',		'CONTAINS_DEFERRED' => 0,		'TYPE' => 'DATA',		'IS_SURROUNDING' => 0,	}]);# representation_type$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => { represent_as => "bar" },	'POINTERS' => 0,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'STRUCT' },	'LINE' => 42 };$ne = ParseElement($e, undef);is($ne->{REPRESENTATION_TYPE}, "bar");# representation_type$e = {	'FILE' => 'foo.idl',	'NAME' => 'v',	'PROPERTIES' => { },	'POINTERS' => 0,	'TYPE' => 'uint8',	'PARENT' => { TYPE => 'STRUCT' },	'LINE' => 42 };$ne = ParseElement($e, undef);is($ne->{REPRESENTATION_TYPE}, "uint8");is(align_type("hyper"), 8);is(align_type("uint32"), 4);is(align_type("uint16"), 2);is(align_type("uint8"), 1);is(align_type({ TYPE => "STRUCT", "NAME" => "bla", 			    ELEMENTS => [ { TYPE => "uint16" } ] }), 4);is(align_type({ TYPE => "STRUCT", 			    ELEMENTS => [ { TYPE => "hyper" } ] }), 8);is(align_type({ TYPE => "DECLARE", DATA => { 				TYPE => "STRUCT", 			    ELEMENTS => [ { TYPE => "hyper" } ] }}), 8);is(align_type({ TYPE => "STRUCT", "NAME" => "bla", 			    ELEMENTS => [ { TYPE => "uint8" } ] }), 4);is(mapToScalar("someverymuchnotexistingtype"), undef);is(mapToScalar("uint32"), "uint32");is(mapToScalar({TYPE => "ENUM", PARENT => { PROPERTIES => { enum8bit => 1 } } }), "uint8");is(mapToScalar({TYPE => "BITMAP", PROPERTIES => { bitmap64bit => 1 } }),	"hyper");is(mapToScalar({TYPE => "TYPEDEF", DATA => {TYPE => "ENUM", PARENT => { PROPERTIES => { enum8bit => 1 } } }}), "uint8");my $t;$t = {	TYPE => "STRUCT",	NAME => "foo",	SURROUNDING_ELEMENT => undef,	ELEMENTS => undef,	PROPERTIES => undef,	ORIGINAL => {		TYPE => "STRUCT",		NAME => "foo"	},	ALIGN => undef};is_deeply(ParseType($t->{ORIGINAL}, "ref"), $t); $t = {	TYPE => "UNION",	NAME => "foo",	SWITCH_TYPE => "uint32",	ELEMENTS => undef,	PROPERTIES => undef,	HAS_DEFAULT => 0,	ORIGINAL => {		TYPE => "UNION",		NAME => "foo"	}};is_deeply(ParseType($t->{ORIGINAL}, "ref"), $t); ok(not can_contain_deferred("uint32"));ok(can_contain_deferred("some_unknown_type"));ok(can_contain_deferred({ TYPE => "STRUCT", 		ELEMENTS => [ { TYPE => "uint32", POINTERS => 40 } ]}));ok(can_contain_deferred({ TYPE => "TYPEDEF", 			DATA => { TYPE => "STRUCT", 		ELEMENTS => [ { TYPE => "uint32", POINTERS => 40 } ]}}));ok(not can_contain_deferred({ TYPE => "STRUCT", 		ELEMENTS => [ { TYPE => "uint32" } ]}));ok(not can_contain_deferred({ TYPE => "TYPEDEF",			DATA => { TYPE => "STRUCT", 		ELEMENTS => [ { TYPE => "uint32" } ]}}));ok(can_contain_deferred({ TYPE => "STRUCT", 		ELEMENTS => [ { TYPE => "someunknowntype" } ]}));

⌨️ 快捷键说明

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