- ServerAlive2()
- Bind to ISystemActivator
+with dcom, there is a new attribute for interfaces, 'object'. these
+object-oriented interfaces support inheritance. Everything that has the
+attribute 'object' has ([in] ORPCTHIS *this, [out] ORPCTHAT *that) as first
+arguments.
+
+OXID = Object Exporter ID
+
Everything based on IDispatch implements:
/*****************/
HRESULT QueryInterface(
[in] ORPCTHIS *this,
[out] ORPCTHAT *that,
- [in] REFIID riid,
+ [in] IID *riid,
[out] /* [iid_is] */ void **ppvObject);
/*****************/
HRESULT GetIDsOfNames(
[in] ORPCTHIS *this,
[out] ORPCTHAT *that,
- [in] REFIID riid,
+ [in] IID *riid,
[size_is][in] LPOLESTR *rgszNames,
[in] UINT cNames,
[in] LCID lcid,
[in] ORPCTHIS *this,
[out] ORPCTHAT *that,
[in] DISPID dispIdMember,
- [in] REFIID riid,
+ [in] IID *riid,
[in] LCID lcid,
[in] WORD wFlags,
[out][in] DISPPARAMS *pDispParams,
[out] VARIANT *pVarResult,
[out] EXCEPINFO *pExcepInfo,
[out] UINT *puArgErr);
-
+all: idl.pm
+
idl.pm: idl.yp
yapp -s idl.yp
#####################################################################
# dump a module header
-sub DumpModuleHeader($)
+sub DumpInterfaceProperties($)
{
my($header) = shift;
my($data) = $header->{DATA};
my($data) = $interface->{DATA};
my($res);
+ $res .= DumpInterfaceProperties($interface->{PROPERTIES});
+
$res .= "interface $interface->{NAME}\n{\n";
foreach my $d (@{$data}) {
($d->{TYPE} eq "TYPEDEF") &&
$res = "/* Dumped by pidl */\n\n";
foreach my $x (@{$idl}) {
- ($x->{TYPE} eq "MODULEHEADER") &&
- ($res .= DumpModuleHeader($x));
($x->{TYPE} eq "INTERFACE") &&
($res .= DumpInterface($x));
}
my %structs;
my $module;
-my $if_uuid;
-my $if_version;
-my $if_endpoints;
sub pidl($)
{
}
}
-#####################################################################
-# parse the interface definitions
-sub ModuleHeader($)
-{
- my($h) = shift;
-
- $if_uuid = $h->{PROPERTIES}->{uuid};
- $if_version = $h->{PROPERTIES}->{version};
- $if_endpoints = $h->{PROPERTIES}->{endpoints};
-}
-
sub ParseHeader($$)
{
my($idl) = shift;
open(OUT, ">$filename") || die "can't open $filename";
foreach my $x (@{$idl}) {
- ($x->{TYPE} eq "MODULEHEADER") &&
- ModuleHeader($x);
-
if ($x->{TYPE} eq "INTERFACE") {
$module = $x->{NAME};
BuildNeeded($x);
pidl "/* parser auto-generated by pidl */\n\n";
pidl "#ifdef HAVE_CONFIG_H\n";
pidl "#include \"config.h\"\n";
- pidl "#endif\n\n";
+ pidl "#endif\n\n";
- pidl "#include \"packet-dcerpc.h\"\n";
- pidl "#include \"packet-dcerpc-nt.h\"\n\n";
- pidl "#include \"packet-dcerpc-eparser.h\"\n\n";
+ pidl "#include \"packet-dcerpc.h\"\n";
+ pidl "#include \"packet-dcerpc-nt.h\"\n\n";
+ pidl "#include \"packet-dcerpc-eparser.h\"\n\n";
pidl "extern const value_string NT_errors[];\n\n";
- pidl "static int proto_dcerpc_$module = -1;\n\n";
-
pidl "static gint ett_dcerpc_$module = -1;\n\n";
pidl "static int hf_opnum = -1;\n";
# Declarations for ett variables
foreach my $y (keys(%needed)) {
+
pidl "static gint $y = -1;\n", if $y =~ /^ett_/;
}
}
# Only perform module initialisation if we found a uuid
-
- if (defined($if_uuid)) {
-
- pidl "static e_uuid_t uuid_dcerpc_$module = {\n";
- pidl "\t0x" . substr($if_uuid, 0, 8);
- pidl ", 0x" . substr($if_uuid, 9, 4);
- pidl ", 0x" . substr($if_uuid, 14, 4) . ",\n";
- pidl "\t{ 0x" . substr($if_uuid, 19, 2);
- pidl ", 0x" . substr($if_uuid, 21, 2);
- pidl ", 0x" . substr($if_uuid, 24, 2);
- pidl ", 0x" . substr($if_uuid, 26, 2);
- pidl ", 0x" . substr($if_uuid, 28, 2);
- pidl ", 0x" . substr($if_uuid, 30, 2);
- pidl ", 0x" . substr($if_uuid, 32, 2);
- pidl ", 0x" . substr($if_uuid, 34, 2) . " }\n";
- pidl "};\n\n";
-
- pidl "static guint16 ver_dcerpc_$module = " . $if_version . ";\n\n";
+
+ for my $x (@{$idl}) {
+ pidl "static int proto_dcerpc_" . $x->{NAME} ." = -1;\n\n";
+ if ((my $if_uuid = $x->{PROPERTIES}->{uuid})) {
+ pidl "static e_uuid_t uuid_dcerpc_" . $x->{NAME} ." = {\n";
+ pidl "\t0x" . substr($if_uuid, 0, 8);
+ pidl ", 0x" . substr($if_uuid, 9, 4);
+ pidl ", 0x" . substr($if_uuid, 14, 4) . ",\n";
+ pidl "\t{ 0x" . substr($if_uuid, 19, 2);
+ pidl ", 0x" . substr($if_uuid, 21, 2);
+ pidl ", 0x" . substr($if_uuid, 24, 2);
+ pidl ", 0x" . substr($if_uuid, 26, 2);
+ pidl ", 0x" . substr($if_uuid, 28, 2);
+ pidl ", 0x" . substr($if_uuid, 30, 2);
+ pidl ", 0x" . substr($if_uuid, 32, 2);
+ pidl ", 0x" . substr($if_uuid, 34, 2) . " }\n";
+ pidl "};\n\n";
+
+ pidl "static guint16 ver_dcerpc_" . $x->{NAME} . " = " . $x->{PROPERTIES}->{version}. ";\n\n";
+ }
}
pidl "void proto_register_dcerpc_$module(void)\n";
}
pidl "\t};\n\n";
- if (defined($if_uuid)) {
-
- pidl "\tproto_dcerpc_$module = proto_register_protocol(\"$module\", \"$module\", \"$module\");\n\n";
+ for my $x (@{$idl}) {
+ if (defined($x->{PROPERTIES}->{uuid})) {
+ $module = $x->{NAME};
- pidl "\tproto_register_field_array(proto_dcerpc_$module, hf, array_length (hf));\n";
- pidl "\tproto_register_subtree_array(ett, array_length(ett));\n";
+ pidl "\tproto_dcerpc_$module = proto_register_protocol(\"$module\", \"$module\", \"$module\");\n\n";
- pidl "}\n\n";
+ pidl "\tproto_register_field_array(proto_dcerpc_$module, hf, array_length (hf));\n";
+ pidl "\tproto_register_subtree_array(ett, array_length(ett));\n";
- pidl "void proto_reg_handoff_dcerpc_$module(void)\n";
- pidl "{\n";
- pidl "\tdcerpc_init_uuid(proto_dcerpc_$module, ett_dcerpc_$module, \n";
- pidl "\t\t&uuid_dcerpc_$module, ver_dcerpc_$module, \n";
- pidl "\t\tdcerpc_" . $module . "_dissectors, hf_opnum);\n";
- pidl "}\n";
+ pidl "}\n\n";
- } else {
+ pidl "void proto_reg_handoff_dcerpc_$module(void)\n";
+ pidl "{\n";
+ pidl "\tdcerpc_init_uuid(proto_dcerpc_$module, ett_dcerpc_$module, \n";
+ pidl "\t\t&uuid_dcerpc_$module, ver_dcerpc_$module, \n";
+ pidl "\t\tdcerpc_" . $module . "_dissectors, hf_opnum);\n";
+ pidl "}\n";
- pidl "\tint proto_dcerpc;\n\n";
- pidl "\tproto_dcerpc = proto_get_id_by_filter_name(\"dcerpc\");\n";
- pidl "\tproto_register_field_array(proto_dcerpc, hf, array_length(hf));\n";
- pidl "\tproto_register_subtree_array(ett, array_length(ett));\n";
+ } else {
- pidl "}\n";
+ pidl "\tint proto_dcerpc;\n\n";
+ pidl "\tproto_dcerpc = proto_get_id_by_filter_name(\"dcerpc\");\n";
+ pidl "\tproto_register_field_array(proto_dcerpc, hf, array_length(hf));\n";
+ pidl "\tproto_register_subtree_array(ett, array_length(ett));\n";
+ pidl "}\n";
+ }
}
close(OUT);
my($res);
my($tab_depth);
-my $if_uuid;
-my $if_version;
sub tabs()
{
{
my($fn) = shift;
my($prop) = shift;
+
foreach my $e (@{$fn->{DATA}}) {
if (util::has_property($e, $prop)) {
HeaderElement($e);
sub HeaderFunction($)
{
my($fn) = shift;
+
$res .= "\nstruct $fn->{NAME} {\n";
$tab_depth++;
my $needed = 0;
$res .= "#ifndef _HEADER_NDR_$interface->{NAME}\n";
$res .= "#define _HEADER_NDR_$interface->{NAME}\n\n";
- if (defined $if_uuid) {
+ if (defined $interface->{PROPERTIES}->{uuid}) {
my $name = uc $interface->{NAME};
- $res .= "#define DCERPC_$name\_UUID \"$if_uuid\"\n";
+ $res .= "#define DCERPC_$name\_UUID \"$interface->{PROPERTIES}->{uuid}\"\n";
- if(!defined $if_version) { $if_version = "0.0"; }
- $res .= "#define DCERPC_$name\_VERSION $if_version\n";
+ if(!defined $interface->{PROPERTIES}->{version}) { $interface->{PROPERTIES}->{version} = "0.0"; }
+ $res .= "#define DCERPC_$name\_VERSION $interface->{PROPERTIES}->{version}\n";
$res .= "#define DCERPC_$name\_NAME \"$interface->{NAME}\"\n\n";
$res .= "extern const struct dcerpc_interface_table dcerpc_table_$interface->{NAME};\n";
$res .= "NTSTATUS dcerpc_$interface->{NAME}_init(void);\n\n";
$res .= "#endif /* _HEADER_NDR_$interface->{NAME} */\n";
}
-#####################################################################
-# parse the interface definitions
-sub ModuleHeader($)
-{
- my($h) = shift;
-
- $if_uuid = $h->{PROPERTIES}->{uuid};
- $if_version = $h->{PROPERTIES}->{version};
-}
-
-
#####################################################################
# parse a parsed IDL into a C header
sub Parse($)
$res = "/* header auto-generated by pidl */\n\n";
foreach my $x (@{$idl}) {
- ($x->{TYPE} eq "MODULEHEADER") &&
- ModuleHeader($x);
-
($x->{TYPE} eq "INTERFACE") &&
HeaderInterface($x);
}
yystates =>
[
{#State 0
- ACTIONS => {
- "[" => 2
- },
+ DEFAULT => -1,
GOTOS => {
- 'idl_interface' => 1,
- 'idl' => 3,
- 'module_header' => 4
+ 'idl' => 1
}
},
{#State 1
- DEFAULT => -1
- },
- {#State 2
ACTIONS => {
- 'IDENTIFIER' => 5
+ '' => 2
},
- DEFAULT => -5,
+ DEFAULT => -44,
GOTOS => {
- 'module_params' => 7,
- 'identifier' => 6,
- 'module_param' => 8
+ 'interface' => 3,
+ 'property_list' => 4
}
},
+ {#State 2
+ DEFAULT => 0
+ },
{#State 3
+ DEFAULT => -2
+ },
+ {#State 4
ACTIONS => {
- '' => 9,
- "[" => 2
- },
- GOTOS => {
- 'idl_interface' => 10,
- 'module_header' => 4
+ "interface" => 6,
+ "[" => 5
}
},
- {#State 4
+ {#State 5
ACTIONS => {
- "interface" => 12
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'interface' => 11
+ 'identifier' => 8,
+ 'properties' => 10,
+ 'property' => 9
}
},
- {#State 5
- DEFAULT => -69
- },
{#State 6
ACTIONS => {
- "(" => 13
+ 'IDENTIFIER' => 7
+ },
+ GOTOS => {
+ 'identifier' => 11
}
},
{#State 7
- ACTIONS => {
- "," => 14,
- "]" => 15
- }
+ DEFAULT => -65
},
{#State 8
- DEFAULT => -6
+ ACTIONS => {
+ "(" => 12
+ },
+ DEFAULT => -48
},
{#State 9
- DEFAULT => 0
+ DEFAULT => -46
},
{#State 10
- DEFAULT => -2
+ ACTIONS => {
+ "," => 13,
+ "]" => 14
+ }
},
{#State 11
- DEFAULT => -3
- },
- {#State 12
ACTIONS => {
- 'IDENTIFIER' => 5
+ ":" => 15
},
+ DEFAULT => -4,
GOTOS => {
- 'identifier' => 16
+ 'base_interface' => 16
}
},
- {#State 13
+ {#State 12
ACTIONS => {
- 'IDENTIFIER' => 5,
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
'TEXT' => 17
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'listtext' => 21,
'constant' => 22
}
},
- {#State 14
+ {#State 13
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'identifier' => 6,
- 'module_param' => 24
+ 'identifier' => 8,
+ 'property' => 24
}
},
+ {#State 14
+ DEFAULT => -45
+ },
{#State 15
- DEFAULT => -4
+ ACTIONS => {
+ 'IDENTIFIER' => 7
+ },
+ GOTOS => {
+ 'identifier' => 25
+ }
},
{#State 16
ACTIONS => {
- "{" => 25
+ "{" => 26
}
},
{#State 17
- DEFAULT => -71
+ DEFAULT => -67
},
{#State 18
- DEFAULT => -57
+ DEFAULT => -53
},
{#State 19
- DEFAULT => -59
+ DEFAULT => -55
},
{#State 20
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "|" => 30,
- "(" => 31,
- "*" => 32,
- "." => 33,
- ">" => 34
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "|" => 31,
+ "(" => 32,
+ "*" => 33,
+ "." => 34,
+ ">" => 35
},
- DEFAULT => -54
+ DEFAULT => -50
},
{#State 21
ACTIONS => {
- "," => 35,
- ")" => 36
+ "," => 36,
+ ")" => 37
}
},
{#State 22
- DEFAULT => -58
+ DEFAULT => -54
},
{#State 23
- DEFAULT => -70
+ DEFAULT => -66
},
{#State 24
- DEFAULT => -7
+ DEFAULT => -47
},
{#State 25
- ACTIONS => {
- "typedef" => 37,
- "const" => 43
- },
- DEFAULT => -48,
- GOTOS => {
- 'const' => 42,
- 'function' => 38,
- 'typedef' => 44,
- 'definitions' => 39,
- 'definition' => 41,
- 'property_list' => 40
- }
+ DEFAULT => -5
},
{#State 26
ACTIONS => {
- 'CONSTANT' => 23,
- 'TEXT' => 17,
- 'IDENTIFIER' => 5
+ "typedef" => 38,
+ "const" => 44
},
- DEFAULT => -56,
+ DEFAULT => -44,
GOTOS => {
- 'identifier' => 18,
- 'text' => 19,
- 'anytext' => 45,
- 'constant' => 22
+ 'const' => 43,
+ 'function' => 39,
+ 'typedef' => 45,
+ 'definitions' => 40,
+ 'definition' => 42,
+ 'property_list' => 41
}
},
{#State 27
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
},
{#State 31
ACTIONS => {
- 'IDENTIFIER' => 5,
'CONSTANT' => 23,
- 'TEXT' => 17
+ 'TEXT' => 17,
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
},
{#State 32
ACTIONS => {
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
- 'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'TEXT' => 17
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
},
{#State 35
ACTIONS => {
- 'IDENTIFIER' => 5,
'CONSTANT' => 23,
- 'TEXT' => 17
+ 'TEXT' => 17,
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
}
},
{#State 36
- DEFAULT => -8
- },
- {#State 37
ACTIONS => {
- 'IDENTIFIER' => 5,
- "enum" => 55,
- 'void' => 56
+ 'IDENTIFIER' => 7,
+ 'CONSTANT' => 23,
+ 'TEXT' => 17
},
- DEFAULT => -48,
+ DEFAULT => -52,
GOTOS => {
- 'identifier' => 58,
- 'struct' => 59,
- 'enum' => 60,
- 'type' => 61,
- 'union' => 62,
- 'property_list' => 57
+ 'identifier' => 18,
+ 'text' => 19,
+ 'anytext' => 55,
+ 'constant' => 22
}
},
- {#State 38
- DEFAULT => -12
+ {#State 37
+ DEFAULT => -49
},
- {#State 39
+ {#State 38
ACTIONS => {
- "}" => 63,
- "typedef" => 37,
- "const" => 43
+ 'IDENTIFIER' => 7,
+ "enum" => 56,
+ 'void' => 57
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'const' => 42,
- 'function' => 38,
- 'typedef' => 44,
- 'definition' => 64,
- 'property_list' => 40
+ 'identifier' => 59,
+ 'struct' => 60,
+ 'enum' => 61,
+ 'type' => 62,
+ 'union' => 63,
+ 'property_list' => 58
}
},
+ {#State 39
+ DEFAULT => -8
+ },
{#State 40
ACTIONS => {
- 'IDENTIFIER' => 5,
- "enum" => 55,
- "[" => 65,
- 'void' => 56
+ "}" => 64,
+ "typedef" => 38,
+ "const" => 44
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'identifier' => 58,
- 'struct' => 59,
- 'enum' => 60,
- 'type' => 66,
- 'union' => 62,
- 'property_list' => 57
+ 'const' => 43,
+ 'function' => 39,
+ 'typedef' => 45,
+ 'definition' => 65,
+ 'property_list' => 41
}
},
{#State 41
- DEFAULT => -10
+ ACTIONS => {
+ 'IDENTIFIER' => 7,
+ "enum" => 56,
+ "[" => 5,
+ 'void' => 57
+ },
+ DEFAULT => -44,
+ GOTOS => {
+ 'identifier' => 59,
+ 'struct' => 60,
+ 'enum' => 61,
+ 'type' => 66,
+ 'union' => 63,
+ 'property_list' => 58
+ }
},
{#State 42
- DEFAULT => -13
+ DEFAULT => -6
},
{#State 43
+ DEFAULT => -9
+ },
+ {#State 44
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
'identifier' => 67
}
},
- {#State 44
- DEFAULT => -14
- },
{#State 45
- DEFAULT => -60
+ DEFAULT => -10
},
{#State 46
- DEFAULT => -67
+ DEFAULT => -56
},
{#State 47
- DEFAULT => -65
+ DEFAULT => -63
},
{#State 48
- DEFAULT => -66
+ DEFAULT => -61
},
{#State 49
- DEFAULT => -64
+ DEFAULT => -62
},
{#State 50
+ DEFAULT => -60
+ },
+ {#State 51
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "(" => 32,
+ "|" => 31,
+ "*" => 33,
+ "." => 34,
")" => 68,
- ">" => 34
+ ">" => 35
}
},
- {#State 51
- DEFAULT => -62
- },
{#State 52
- DEFAULT => -61
+ DEFAULT => -58
},
{#State 53
- DEFAULT => -63
+ DEFAULT => -57
},
{#State 54
+ DEFAULT => -59
+ },
+ {#State 55
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
- ">" => 34
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "(" => 32,
+ "|" => 31,
+ "*" => 33,
+ "." => 34,
+ ">" => 35
},
- DEFAULT => -55
+ DEFAULT => -51
},
- {#State 55
+ {#State 56
ACTIONS => {
"{" => 69
}
},
- {#State 56
- DEFAULT => -22
- },
{#State 57
+ DEFAULT => -18
+ },
+ {#State 58
ACTIONS => {
"union" => 70,
- "[" => 65,
+ "[" => 5,
"struct" => 71
}
},
- {#State 58
- DEFAULT => -21
- },
{#State 59
- DEFAULT => -18
+ DEFAULT => -17
},
{#State 60
- DEFAULT => -20
+ DEFAULT => -14
},
{#State 61
+ DEFAULT => -16
+ },
+ {#State 62
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
'identifier' => 72
}
},
- {#State 62
- DEFAULT => -19
- },
{#State 63
- DEFAULT => -9
+ DEFAULT => -15
},
{#State 64
- DEFAULT => -11
+ DEFAULT => -3
},
{#State 65
- ACTIONS => {
- 'IDENTIFIER' => 5
- },
- GOTOS => {
- 'identifier' => 74,
- 'property' => 75,
- 'properties' => 73
- }
+ DEFAULT => -7
},
{#State 66
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'identifier' => 76
+ 'identifier' => 73
}
},
{#State 67
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'identifier' => 77
+ 'identifier' => 74
}
},
{#State 68
ACTIONS => {
'CONSTANT' => 23,
'TEXT' => 17,
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
- 'anytext' => 78,
+ 'anytext' => 75,
'constant' => 22
}
},
{#State 69
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'identifier' => 79,
- 'enum_element' => 80,
- 'enum_elements' => 81
+ 'identifier' => 76,
+ 'enum_element' => 77,
+ 'enum_elements' => 78
}
},
{#State 70
ACTIONS => {
- "{" => 82
+ "{" => 79
}
},
{#State 71
ACTIONS => {
- "{" => 83
+ "{" => 80
}
},
{#State 72
ACTIONS => {
- "[" => 85
+ "[" => 82
},
- DEFAULT => -45,
+ DEFAULT => -41,
GOTOS => {
- 'array_len' => 84
+ 'array_len' => 81
}
},
{#State 73
ACTIONS => {
- "," => 86,
- "]" => 87
+ "(" => 83
}
},
{#State 74
ACTIONS => {
- "(" => 88
- },
- DEFAULT => -52
+ "=" => 84
+ }
},
{#State 75
- DEFAULT => -50
+ DEFAULT => -64
},
{#State 76
ACTIONS => {
- "(" => 89
- }
+ "=" => 85
+ },
+ DEFAULT => -22
},
{#State 77
- ACTIONS => {
- "=" => 90
- }
+ DEFAULT => -20
},
{#State 78
- DEFAULT => -68
- },
- {#State 79
- ACTIONS => {
- "=" => 91
- },
- DEFAULT => -26
- },
- {#State 80
- DEFAULT => -24
- },
- {#State 81
ACTIONS => {
- "}" => 92,
- "," => 93
+ "}" => 86,
+ "," => 87
}
},
- {#State 82
+ {#State 79
ACTIONS => {
- "[" => 96
+ "[" => 90
},
GOTOS => {
- 'union_elements' => 94,
- 'union_element' => 95
+ 'union_elements' => 88,
+ 'union_element' => 89
}
},
- {#State 83
- DEFAULT => -39,
+ {#State 80
+ DEFAULT => -35,
GOTOS => {
- 'element_list1' => 97
+ 'element_list1' => 91
}
},
- {#State 84
+ {#State 81
ACTIONS => {
- ";" => 98
+ ";" => 92
}
},
- {#State 85
+ {#State 82
ACTIONS => {
- 'IDENTIFIER' => 5,
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
'TEXT' => 17,
- "]" => 100
+ "]" => 94
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
- 'anytext' => 99,
+ 'anytext' => 93,
'constant' => 22
}
},
- {#State 86
- ACTIONS => {
- 'IDENTIFIER' => 5
- },
- GOTOS => {
- 'identifier' => 74,
- 'property' => 101
- }
- },
- {#State 87
- DEFAULT => -49
- },
- {#State 88
- ACTIONS => {
- 'IDENTIFIER' => 5,
- 'CONSTANT' => 23,
- 'TEXT' => 17
- },
- DEFAULT => -56,
- GOTOS => {
- 'identifier' => 18,
- 'text' => 19,
- 'anytext' => 102,
- 'constant' => 22
- }
- },
- {#State 89
+ {#State 83
ACTIONS => {
- "void" => 105,
- "," => -41,
- ")" => -41
+ "void" => 97,
+ "," => -37,
+ ")" => -37
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'base_element' => 103,
- 'element_list2' => 106,
- 'property_list' => 104
+ 'base_element' => 95,
+ 'element_list2' => 98,
+ 'property_list' => 96
}
},
- {#State 90
+ {#State 84
ACTIONS => {
- 'IDENTIFIER' => 5,
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
'TEXT' => 17
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
- 'anytext' => 107,
+ 'anytext' => 99,
'constant' => 22
}
},
- {#State 91
+ {#State 85
ACTIONS => {
- 'IDENTIFIER' => 5,
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
'TEXT' => 17
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
- 'anytext' => 108,
+ 'anytext' => 100,
'constant' => 22
}
},
- {#State 92
- DEFAULT => -23
+ {#State 86
+ DEFAULT => -19
},
- {#State 93
+ {#State 87
ACTIONS => {
- 'IDENTIFIER' => 5
+ 'IDENTIFIER' => 7
},
GOTOS => {
- 'identifier' => 79,
- 'enum_element' => 109
+ 'identifier' => 76,
+ 'enum_element' => 101
}
},
- {#State 94
+ {#State 88
ACTIONS => {
- "}" => 110,
- "[" => 96
+ "}" => 102,
+ "[" => 90
},
GOTOS => {
- 'union_element' => 111
+ 'union_element' => 103
}
},
- {#State 95
- DEFAULT => -30
+ {#State 89
+ DEFAULT => -26
},
- {#State 96
+ {#State 90
ACTIONS => {
- "case" => 112,
- "default" => 113
+ "case" => 104,
+ "default" => 105
}
},
- {#State 97
+ {#State 91
ACTIONS => {
- "}" => 114
+ "}" => 106
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'base_element' => 115,
- 'property_list' => 104
+ 'base_element' => 107,
+ 'property_list' => 96
}
},
- {#State 98
- DEFAULT => -17
+ {#State 92
+ DEFAULT => -13
},
- {#State 99
+ {#State 93
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
- "]" => 116,
- ">" => 34
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "(" => 32,
+ "|" => 31,
+ "*" => 33,
+ "." => 34,
+ "]" => 108,
+ ">" => 35
}
},
- {#State 100
- DEFAULT => -46
- },
- {#State 101
- DEFAULT => -51
- },
- {#State 102
- ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
- ")" => 117,
- ">" => 34
- }
+ {#State 94
+ DEFAULT => -42
},
- {#State 103
- DEFAULT => -43
+ {#State 95
+ DEFAULT => -39
},
- {#State 104
+ {#State 96
ACTIONS => {
- 'IDENTIFIER' => 5,
- "enum" => 55,
- "[" => 65,
- 'void' => 56
+ 'IDENTIFIER' => 7,
+ "enum" => 56,
+ "[" => 5,
+ 'void' => 57
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'identifier' => 58,
- 'struct' => 59,
- 'enum' => 60,
- 'type' => 118,
- 'union' => 62,
- 'property_list' => 57
+ 'identifier' => 59,
+ 'struct' => 60,
+ 'enum' => 61,
+ 'type' => 109,
+ 'union' => 63,
+ 'property_list' => 58
}
},
- {#State 105
- DEFAULT => -42
+ {#State 97
+ DEFAULT => -38
},
- {#State 106
+ {#State 98
ACTIONS => {
- "," => 119,
- ")" => 120
+ "," => 110,
+ ")" => 111
}
},
- {#State 107
+ {#State 99
ACTIONS => {
- "-" => 26,
- "|" => 30,
- "(" => 31,
- "*" => 32,
- ";" => 121,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "." => 33,
- ">" => 34
+ "-" => 27,
+ "|" => 31,
+ "(" => 32,
+ "*" => 33,
+ ";" => 112,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "." => 34,
+ ">" => 35
}
},
- {#State 108
+ {#State 100
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
- ">" => 34
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "(" => 32,
+ "|" => 31,
+ "*" => 33,
+ "." => 34,
+ ">" => 35
},
- DEFAULT => -27
+ DEFAULT => -23
},
- {#State 109
- DEFAULT => -25
+ {#State 101
+ DEFAULT => -21
},
- {#State 110
- DEFAULT => -29
+ {#State 102
+ DEFAULT => -25
},
- {#State 111
- DEFAULT => -31
+ {#State 103
+ DEFAULT => -27
},
- {#State 112
+ {#State 104
ACTIONS => {
- "(" => 122
+ "(" => 113
}
},
- {#State 113
+ {#State 105
ACTIONS => {
- "]" => 123
+ "]" => 114
}
},
- {#State 114
- DEFAULT => -28
+ {#State 106
+ DEFAULT => -24
},
- {#State 115
+ {#State 107
ACTIONS => {
- ";" => 124
+ ";" => 115
}
},
- {#State 116
- DEFAULT => -47
- },
- {#State 117
- DEFAULT => -53
+ {#State 108
+ DEFAULT => -43
},
- {#State 118
- DEFAULT => -37,
+ {#State 109
+ DEFAULT => -33,
GOTOS => {
- 'pointers' => 125
+ 'pointers' => 116
}
},
- {#State 119
- DEFAULT => -48,
+ {#State 110
+ DEFAULT => -44,
GOTOS => {
- 'base_element' => 126,
- 'property_list' => 104
+ 'base_element' => 117,
+ 'property_list' => 96
}
},
- {#State 120
+ {#State 111
ACTIONS => {
- ";" => 127
+ ";" => 118
}
},
- {#State 121
- DEFAULT => -15
+ {#State 112
+ DEFAULT => -11
},
- {#State 122
+ {#State 113
ACTIONS => {
- 'IDENTIFIER' => 5,
+ 'IDENTIFIER' => 7,
'CONSTANT' => 23,
'TEXT' => 17
},
- DEFAULT => -56,
+ DEFAULT => -52,
GOTOS => {
'identifier' => 18,
'text' => 19,
- 'anytext' => 128,
+ 'anytext' => 119,
'constant' => 22
}
},
- {#State 123
+ {#State 114
ACTIONS => {
- ";" => 129
+ ";" => 120
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'base_element' => 130,
- 'property_list' => 104
+ 'base_element' => 121,
+ 'property_list' => 96
}
},
- {#State 124
- DEFAULT => -40
+ {#State 115
+ DEFAULT => -36
},
- {#State 125
+ {#State 116
ACTIONS => {
- 'IDENTIFIER' => 5,
- "*" => 132
+ 'IDENTIFIER' => 7,
+ "*" => 123
},
GOTOS => {
- 'identifier' => 131
+ 'identifier' => 122
}
},
- {#State 126
- DEFAULT => -44
+ {#State 117
+ DEFAULT => -40
},
- {#State 127
- DEFAULT => -16
+ {#State 118
+ DEFAULT => -12
},
- {#State 128
+ {#State 119
ACTIONS => {
- "-" => 26,
- "+" => 27,
- "&" => 28,
- "/" => 29,
- "(" => 31,
- "|" => 30,
- "*" => 32,
- "." => 33,
- ")" => 133,
- ">" => 34
+ "-" => 27,
+ "+" => 28,
+ "&" => 29,
+ "/" => 30,
+ "(" => 32,
+ "|" => 31,
+ "*" => 33,
+ "." => 34,
+ ")" => 124,
+ ">" => 35
}
},
- {#State 129
- DEFAULT => -35
+ {#State 120
+ DEFAULT => -31
},
- {#State 130
+ {#State 121
ACTIONS => {
- ";" => 134
+ ";" => 125
}
},
- {#State 131
+ {#State 122
ACTIONS => {
- "[" => 85
+ "[" => 82
},
- DEFAULT => -45,
+ DEFAULT => -41,
GOTOS => {
- 'array_len' => 135
+ 'array_len' => 126
}
},
- {#State 132
- DEFAULT => -38
+ {#State 123
+ DEFAULT => -34
},
- {#State 133
+ {#State 124
ACTIONS => {
- "]" => 136
+ "]" => 127
}
},
- {#State 134
- DEFAULT => -34
+ {#State 125
+ DEFAULT => -30
},
- {#State 135
- DEFAULT => -36
+ {#State 126
+ DEFAULT => -32
},
- {#State 136
+ {#State 127
ACTIONS => {
- ";" => 137
+ ";" => 128
},
- DEFAULT => -48,
+ DEFAULT => -44,
GOTOS => {
- 'base_element' => 138,
- 'property_list' => 104
+ 'base_element' => 129,
+ 'property_list' => 96
}
},
- {#State 137
- DEFAULT => -33
+ {#State 128
+ DEFAULT => -29
},
- {#State 138
+ {#State 129
ACTIONS => {
- ";" => 139
+ ";" => 130
}
},
- {#State 139
- DEFAULT => -32
+ {#State 130
+ DEFAULT => -28
}
],
yyrules =>
'$start', 2, undef
],
[#Rule 1
- 'idl', 1, undef
+ 'idl', 0, undef
],
[#Rule 2
'idl', 2,
sub
-#line 18 "build/pidl/idl.yp"
-{ util::FlattenArray([$_[1],$_[2]]) }
+#line 19 "build/pidl/idl.yp"
+{
+ push(@{$_[1]}, $_[2]); $_[1]
+ }
],
[#Rule 3
- 'idl_interface', 2,
-sub
-#line 21 "build/pidl/idl.yp"
-{ [ $_[1], $_[2] ] }
- ],
- [#Rule 4
- 'module_header', 3,
+ 'interface', 7,
sub
#line 25 "build/pidl/idl.yp"
-{{
- "TYPE" => "MODULEHEADER",
- "PROPERTIES" => util::FlattenHash($_[2])
+{$_[3] => {
+ "TYPE" => "INTERFACE",
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "BASE" => $_[4],
+ "DATA" => $_[6],
}}
],
- [#Rule 5
- 'module_params', 0, undef
- ],
- [#Rule 6
- 'module_params', 1,
-sub
-#line 33 "build/pidl/idl.yp"
-{ [ $_[1] ] }
- ],
- [#Rule 7
- 'module_params', 3,
-sub
-#line 34 "build/pidl/idl.yp"
-{ push(@{$_[1]}, $_[3]); $_[1] }
- ],
- [#Rule 8
- 'module_param', 4,
-sub
-#line 38 "build/pidl/idl.yp"
-{ { "$_[1]" => "$_[3]" } }
+ [#Rule 4
+ 'base_interface', 0, undef
],
- [#Rule 9
- 'interface', 5,
+ [#Rule 5
+ 'base_interface', 2,
sub
-#line 42 "build/pidl/idl.yp"
-{{
- "TYPE" => "INTERFACE",
- "NAME" => $_[2],
- "DATA" => $_[4]
- }}
+#line 36 "build/pidl/idl.yp"
+{ $_[2] }
],
- [#Rule 10
+ [#Rule 6
'definitions', 1,
sub
-#line 50 "build/pidl/idl.yp"
+#line 40 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 11
+ [#Rule 7
'definitions', 2,
sub
-#line 51 "build/pidl/idl.yp"
+#line 41 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
- [#Rule 12
+ [#Rule 8
'definition', 1, undef
],
- [#Rule 13
+ [#Rule 9
'definition', 1, undef
],
- [#Rule 14
+ [#Rule 10
'definition', 1, undef
],
- [#Rule 15
+ [#Rule 11
'const', 6,
sub
-#line 59 "build/pidl/idl.yp"
+#line 49 "build/pidl/idl.yp"
{{
"TYPE" => "CONST",
"DTYPE" => $_[2],
"VALUE" => $_[5]
}}
],
- [#Rule 16
+ [#Rule 12
'function', 7,
sub
-#line 69 "build/pidl/idl.yp"
+#line 59 "build/pidl/idl.yp"
{{
"TYPE" => "FUNCTION",
"NAME" => $_[3],
"DATA" => $_[5]
}}
],
- [#Rule 17
+ [#Rule 13
'typedef', 5,
sub
-#line 79 "build/pidl/idl.yp"
+#line 69 "build/pidl/idl.yp"
{{
"TYPE" => "TYPEDEF",
"NAME" => $_[3],
"ARRAY_LEN" => $_[4]
}}
],
- [#Rule 18
+ [#Rule 14
'type', 1, undef
],
- [#Rule 19
+ [#Rule 15
'type', 1, undef
],
- [#Rule 20
+ [#Rule 16
'type', 1, undef
],
- [#Rule 21
+ [#Rule 17
'type', 1, undef
],
- [#Rule 22
+ [#Rule 18
'type', 1,
sub
-#line 88 "build/pidl/idl.yp"
+#line 78 "build/pidl/idl.yp"
{ "void" }
],
- [#Rule 23
+ [#Rule 19
'enum', 4,
sub
-#line 93 "build/pidl/idl.yp"
+#line 83 "build/pidl/idl.yp"
{{
"TYPE" => "ENUM",
"ELEMENTS" => $_[3]
}}
],
- [#Rule 24
+ [#Rule 20
'enum_elements', 1,
sub
-#line 100 "build/pidl/idl.yp"
+#line 90 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 25
+ [#Rule 21
'enum_elements', 3,
sub
-#line 101 "build/pidl/idl.yp"
+#line 91 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
- [#Rule 26
+ [#Rule 22
'enum_element', 1, undef
],
- [#Rule 27
+ [#Rule 23
'enum_element', 3,
sub
-#line 105 "build/pidl/idl.yp"
+#line 95 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 28
+ [#Rule 24
'struct', 5,
sub
-#line 109 "build/pidl/idl.yp"
+#line 99 "build/pidl/idl.yp"
{{
"TYPE" => "STRUCT",
"PROPERTIES" => $_[1],
"ELEMENTS" => $_[4]
}}
],
- [#Rule 29
+ [#Rule 25
'union', 5,
sub
-#line 117 "build/pidl/idl.yp"
+#line 107 "build/pidl/idl.yp"
{{
"TYPE" => "UNION",
"PROPERTIES" => $_[1],
"DATA" => $_[4]
}}
],
- [#Rule 30
+ [#Rule 26
'union_elements', 1,
sub
-#line 125 "build/pidl/idl.yp"
+#line 115 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 31
+ [#Rule 27
'union_elements', 2,
sub
-#line 126 "build/pidl/idl.yp"
+#line 116 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
- [#Rule 32
+ [#Rule 28
'union_element', 8,
sub
-#line 131 "build/pidl/idl.yp"
+#line 121 "build/pidl/idl.yp"
{{
"TYPE" => "UNION_ELEMENT",
"CASE" => $_[4],
"DATA" => $_[7]
}}
],
- [#Rule 33
+ [#Rule 29
'union_element', 7,
sub
-#line 137 "build/pidl/idl.yp"
+#line 127 "build/pidl/idl.yp"
{{
"TYPE" => "EMPTY",
"CASE" => $_[4],
}}
],
- [#Rule 34
+ [#Rule 30
'union_element', 5,
sub
-#line 142 "build/pidl/idl.yp"
+#line 132 "build/pidl/idl.yp"
{{
"TYPE" => "UNION_ELEMENT",
"CASE" => "default",
"DATA" => $_[4]
}}
],
- [#Rule 35
+ [#Rule 31
'union_element', 4,
sub
-#line 148 "build/pidl/idl.yp"
+#line 138 "build/pidl/idl.yp"
{{
"TYPE" => "EMPTY",
"CASE" => "default",
}}
],
- [#Rule 36
+ [#Rule 32
'base_element', 5,
sub
-#line 155 "build/pidl/idl.yp"
+#line 145 "build/pidl/idl.yp"
{{
"NAME" => $_[4],
"TYPE" => $_[2],
"ARRAY_LEN" => $_[5]
}}
],
- [#Rule 37
+ [#Rule 33
'pointers', 0,
sub
-#line 167 "build/pidl/idl.yp"
+#line 157 "build/pidl/idl.yp"
{ 0 }
],
- [#Rule 38
+ [#Rule 34
'pointers', 2,
sub
-#line 168 "build/pidl/idl.yp"
+#line 158 "build/pidl/idl.yp"
{ $_[1]+1 }
],
- [#Rule 39
+ [#Rule 35
'element_list1', 0, undef
],
- [#Rule 40
+ [#Rule 36
'element_list1', 3,
sub
-#line 175 "build/pidl/idl.yp"
+#line 165 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[2]); $_[1] }
],
- [#Rule 41
+ [#Rule 37
'element_list2', 0, undef
],
- [#Rule 42
+ [#Rule 38
'element_list2', 1, undef
],
- [#Rule 43
+ [#Rule 39
'element_list2', 1,
sub
-#line 181 "build/pidl/idl.yp"
+#line 171 "build/pidl/idl.yp"
{ [ $_[1] ] }
],
- [#Rule 44
+ [#Rule 40
'element_list2', 3,
sub
-#line 182 "build/pidl/idl.yp"
+#line 172 "build/pidl/idl.yp"
{ push(@{$_[1]}, $_[3]); $_[1] }
],
- [#Rule 45
+ [#Rule 41
'array_len', 0, undef
],
- [#Rule 46
+ [#Rule 42
'array_len', 2,
sub
-#line 187 "build/pidl/idl.yp"
+#line 177 "build/pidl/idl.yp"
{ "*" }
],
- [#Rule 47
+ [#Rule 43
'array_len', 3,
sub
-#line 188 "build/pidl/idl.yp"
+#line 178 "build/pidl/idl.yp"
{ "$_[2]" }
],
- [#Rule 48
+ [#Rule 44
'property_list', 0, undef
],
- [#Rule 49
+ [#Rule 45
'property_list', 4,
sub
-#line 194 "build/pidl/idl.yp"
+#line 184 "build/pidl/idl.yp"
{ util::FlattenHash([$_[1],$_[3]]); }
],
- [#Rule 50
+ [#Rule 46
'properties', 1,
sub
-#line 197 "build/pidl/idl.yp"
+#line 187 "build/pidl/idl.yp"
{ $_[1] }
],
- [#Rule 51
+ [#Rule 47
'properties', 3,
sub
-#line 198 "build/pidl/idl.yp"
+#line 188 "build/pidl/idl.yp"
{ util::FlattenHash([$_[1], $_[3]]); }
],
- [#Rule 52
+ [#Rule 48
'property', 1,
sub
-#line 201 "build/pidl/idl.yp"
+#line 191 "build/pidl/idl.yp"
{{ "$_[1]" => "1" }}
],
- [#Rule 53
+ [#Rule 49
'property', 4,
sub
-#line 202 "build/pidl/idl.yp"
+#line 192 "build/pidl/idl.yp"
{{ "$_[1]" => "$_[3]" }}
],
- [#Rule 54
+ [#Rule 50
'listtext', 1, undef
],
- [#Rule 55
+ [#Rule 51
'listtext', 3,
sub
-#line 207 "build/pidl/idl.yp"
+#line 197 "build/pidl/idl.yp"
{ "$_[1] $_[3]" }
],
- [#Rule 56
+ [#Rule 52
'anytext', 0,
sub
-#line 211 "build/pidl/idl.yp"
+#line 201 "build/pidl/idl.yp"
{ "" }
],
- [#Rule 57
+ [#Rule 53
'anytext', 1, undef
],
- [#Rule 58
+ [#Rule 54
'anytext', 1, undef
],
- [#Rule 59
+ [#Rule 55
'anytext', 1, undef
],
- [#Rule 60
+ [#Rule 56
'anytext', 3,
sub
-#line 213 "build/pidl/idl.yp"
+#line 203 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 61
+ [#Rule 57
'anytext', 3,
sub
-#line 214 "build/pidl/idl.yp"
+#line 204 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 62
+ [#Rule 58
'anytext', 3,
sub
-#line 215 "build/pidl/idl.yp"
+#line 205 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 63
+ [#Rule 59
'anytext', 3,
sub
-#line 216 "build/pidl/idl.yp"
+#line 206 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 64
+ [#Rule 60
'anytext', 3,
sub
-#line 217 "build/pidl/idl.yp"
+#line 207 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 65
+ [#Rule 61
'anytext', 3,
sub
-#line 218 "build/pidl/idl.yp"
+#line 208 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 66
+ [#Rule 62
'anytext', 3,
sub
-#line 219 "build/pidl/idl.yp"
+#line 209 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 67
+ [#Rule 63
'anytext', 3,
sub
-#line 220 "build/pidl/idl.yp"
+#line 210 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]" }
],
- [#Rule 68
+ [#Rule 64
'anytext', 5,
sub
-#line 221 "build/pidl/idl.yp"
+#line 211 "build/pidl/idl.yp"
{ "$_[1]$_[2]$_[3]$_[4]$_[5]" }
],
- [#Rule 69
+ [#Rule 65
'identifier', 1, undef
],
- [#Rule 70
+ [#Rule 66
'constant', 1, undef
],
- [#Rule 71
+ [#Rule 67
'text', 1,
sub
-#line 230 "build/pidl/idl.yp"
+#line 220 "build/pidl/idl.yp"
{ "\"$_[1]\"" }
]
],
bless($self,$class);
}
-#line 236 "build/pidl/idl.yp"
+#line 226 "build/pidl/idl.yp"
use util;
my $data = `$cpp -xc $filename`;
$/ = $saved_delim;
- $self->YYData->{INPUT} = $data;
- $self->YYData->{LINE} = 0;
- $self->YYData->{LAST_TOKEN} = "NONE";
- return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
+ $self->YYData->{INPUT} = $data;
+ $self->YYData->{LINE} = 0;
+ $self->YYData->{LAST_TOKEN} = "NONE";
+
+ my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
+
+ foreach my $x (@{$idl}) {
+ # Add [in] ORPCTHIS *this, [out] ORPCTHAT *that
+ # for 'object' interfaces
+ if (defined($x->{PROPERTIES}->{object})) {
+ foreach my $e (@{$x->{DATA}}) {
+ if($e->{TYPE} eq "FUNCTION") {
+ unshift(@{$e->{DATA}},
+ { 'NAME' => 'ORPCthis',
+ 'POINTERS' => 1,
+ 'PROPERTIES' => { 'in' => '1' },
+ 'TYPE' => 'ORPCTHIS'
+ });
+ unshift(@{$e->{DATA}},
+ { 'NAME' => 'ORPCthat',
+ 'POINTERS' => 1,
+ 'PROPERTIES' => { 'out' => '1' },
+ 'TYPE' => 'ORPCTHAT'
+ });
+ }
+ }
+ }
+
+ # Do the inheritance
+ if (defined($x->{BASE}) and $x->{BASE} ne "") {
+ my $parent = util::get_interface($idl, $x->{BASE});
+
+ if(not defined($parent)) {
+ die("No such parent interface " . $x->{BASE});
+ }
+
+ @{$x->{INHERITED_DATA}} = (@{$parent->{INHERITED_DATA}}, @{$x->{DATA}});
+ } else {
+ $x->{INHERITED_DATA} = $x->{DATA};
+ }
+ }
+
+ return $idl;
}
1;
################
# grammer
%%
-idl: idl_interface
- | idl idl_interface { util::FlattenArray([$_[1],$_[2]]) }
-;
-
-idl_interface: module_header interface { [ $_[1], $_[2] ] }
+idl:
+ #empty { {} }
+ | idl interface {
+ push(@{$_[1]}, $_[2]); $_[1]
+ }
;
-module_header: '[' module_params ']'
- {{
- "TYPE" => "MODULEHEADER",
- "PROPERTIES" => util::FlattenHash($_[2])
+interface: property_list 'interface' identifier base_interface '{' definitions '}'
+ {$_[3] => {
+ "TYPE" => "INTERFACE",
+ "PROPERTIES" => $_[1],
+ "NAME" => $_[3],
+ "BASE" => $_[4],
+ "DATA" => $_[6],
}}
;
-module_params:
- #empty
- | module_param { [ $_[1] ] }
- | module_params ',' module_param { push(@{$_[1]}, $_[3]); $_[1] }
-;
-
-module_param: identifier '(' listtext ')'
-{ { "$_[1]" => "$_[3]" } }
-;
-
-interface: 'interface' identifier '{' definitions '}'
- {{
- "TYPE" => "INTERFACE",
- "NAME" => $_[2],
- "DATA" => $_[4]
- }}
+base_interface:
+ #empty
+ | ':' identifier { $_[2] }
;
definitions:
;
property: identifier {{ "$_[1]" => "1" }}
- | identifier '(' anytext ')' {{ "$_[1]" => "$_[3]" }}
+ | identifier '(' listtext ')' {{ "$_[1]" => "$_[3]" }}
;
listtext:
my $data = `$cpp -xc $filename`;
$/ = $saved_delim;
- $self->YYData->{INPUT} = $data;
- $self->YYData->{LINE} = 0;
- $self->YYData->{LAST_TOKEN} = "NONE";
- return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
+ $self->YYData->{INPUT} = $data;
+ $self->YYData->{LINE} = 0;
+ $self->YYData->{LAST_TOKEN} = "NONE";
+
+ my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
+
+ foreach my $x (@{$idl}) {
+ # Add [in] ORPCTHIS *this, [out] ORPCTHAT *that
+ # for 'object' interfaces
+ if (defined($x->{PROPERTIES}->{object})) {
+ foreach my $e (@{$x->{DATA}}) {
+ if($e->{TYPE} eq "FUNCTION") {
+ unshift(@{$e->{DATA}},
+ { 'NAME' => 'ORPCthis',
+ 'POINTERS' => 1,
+ 'PROPERTIES' => { 'in' => '1' },
+ 'TYPE' => 'ORPCTHIS'
+ });
+ unshift(@{$e->{DATA}},
+ { 'NAME' => 'ORPCthat',
+ 'POINTERS' => 1,
+ 'PROPERTIES' => { 'out' => '1' },
+ 'TYPE' => 'ORPCTHAT'
+ });
+ }
+ }
+ }
+
+ # Do the inheritance
+ if (defined($x->{BASE}) and $x->{BASE} ne "") {
+ my $parent = util::get_interface($idl, $x->{BASE});
+
+ if(not defined($parent)) {
+ die("No such parent interface " . $x->{BASE});
+ }
+
+ @{$x->{INHERITED_DATA}} = (@{$parent->{INHERITED_DATA}}, @{$x->{DATA}});
+ } else {
+ $x->{INHERITED_DATA} = $x->{DATA};
+ }
+ }
+
+ return $idl;
}
my %needed;
my %structs;
-my $if_uuid;
-my $if_version;
-my $if_endpoints;
-
sub pidl($)
{
print OUT shift;
}
if (util::array_size($e)) {
- ParseArrayPrint($e, $var_prefix);
+ ParseArrayPrint($e, $var_prefix)
} elsif (my $switch = util::has_property($e, "switch_is")) {
ParseElementPrintSwitch($e, $var_prefix, $switch);
} else {
sub FunctionTable($)
{
my($interface) = shift;
- my($data) = $interface->{DATA};
+ my($data) = $interface->{INHERITED_DATA};
my $count = 0;
my $uname = uc $interface->{NAME};
my $endpoints;
- if (! defined $if_endpoints) {
- $if_endpoints = $interface->{NAME};
+ if (! defined $interface->{PROPERTIES}->{endpoints}) {
+ $interface->{PROPERTIES}->{endpoints} = $interface->{NAME};
}
- my @e = split / /, $if_endpoints;
+ my @e = split / /, $interface->{PROPERTIES}->{endpoints};
my $endpoint_count = $#e + 1;
pidl "static const char * const $interface->{NAME}\_endpoint_strings[] = {\n\t";
}
}
-#####################################################################
-# parse the interface definitions
-sub ModuleHeader($)
-{
- my($h) = shift;
-
- $if_uuid = $h->{PROPERTIES}->{uuid};
- $if_version = $h->{PROPERTIES}->{version};
- $if_endpoints = $h->{PROPERTIES}->{endpoints};
-}
-
#####################################################################
# parse a parsed IDL structure back into an IDL file
sub Parse($$)
pidl "/* parser auto-generated by pidl */\n\n";
pidl "#include \"includes.h\"\n\n";
foreach my $x (@{$idl}) {
- ($x->{TYPE} eq "MODULEHEADER") &&
- ModuleHeader($x);
-
if ($x->{TYPE} eq "INTERFACE") {
BuildNeeded($x);
ParseInterface($x);
if ($opt_parse) {
$pidl = IdlParse($idl_file);
defined $pidl || die "Failed to parse $idl_file";
- IdlValidator::Validate($pidl);
+# IdlValidator::Validate($pidl);
if ($opt_keep && !util::SaveStructure($pidl_file, $pidl)) {
die "Failed to save $pidl_file\n";
}
FileSave($filename, MyDumper($v));
}
+#####################################################################
+# find an interface in an array of interfaces
+sub get_interface($$)
+{
+ my($if) = shift;
+ my($n) = shift;
+
+ foreach(@{$if}) {
+ if($_->{NAME} eq $n) { return $_; }
+ }
+
+ return 0;
+}
+
#####################################################################
# see if a pidl property list contains a give property
sub has_property($$)
see http://www.opengroup.org/onlinepubs/9629399/chap12.htm for packet
layouts
*/
-[]
interface dcerpc
{
typedef [public] struct {
{
WERROR stub();
- typedef [public] struct {
- uint32 upper;
- uint32 lower;
- } hyper;
-
//////////////////////////////////////////////////////////////
// Identifier Definitions
////////////////////////////////////////////////////////////
// Machine Identifier
-#define MID hyper
+#define MID HYPER_T
// Object Exporter Identifier
-#define OXID hyper
+#define OXID HYPER_T
// Object Identifer
-#define OID hyper
+#define OID HYPER_T
// Ping Set Identifier
-#define SETID hyper
+#define SETID HYPER_T
// Interface Pointer Identifier
#define IPID GUID
const uint32 SORF_NULL = 0x0; // convenient for initializing SORF
const uint32 SORF_NOPING = 0x1000;// Pinging is not required
// standard object reference
- typedef struct
+ typedef [public] struct
{
uint32 flags; // STDOBJREF flags (see above)
uint32 cPublicRefs; // count of references passed
} MInterfacePointer;
}
+
+[
+ object,
+ uuid(00000000-0000-0000-C000-000000000046)
+]
+interface IUnknown
+{
+ /*****************/
+ /* Function 0x00 */
+ HRESULT QueryInterface();
+
+ /*****************/
+ /* Function 0x01 */
+ uint32 AddRef();
+
+ /*****************/
+ /* Function 0x02 */
+ uint32 Release();
+}
+
//////////////////////////////////////////////////////////////////
// The remote version of Iunknown. This interface exists on every
//
[
uuid(00000131-0000-0000-C000-000000000046),
+ object,
version(0.0)
]
-interface IRemUnknown // : IUnknown
+interface IRemUnknown : IUnknown
{
typedef struct
{
STDOBJREF std; // data for returned interface
}
REMQIRESULT;
-
+
HRESULT RemQueryInterface (
[in] IPID *ripid, // interface to QI on
[in] uint32 cRefs, // count of AddRefs requested
);
}
+
+
// Derived from IRemUnknown, this interface supports Remote Query interface
// for objects that supply additional data beyond the STDOBJREF in their
// marshaled interface packets.
[
+object,
uuid(00000143-0000-0000-C000-000000000046),
version(0.0)
]
-interface IRemUnknown2 //: IRemUnknown
+interface IRemUnknown2 : IRemUnknown
{
HRESULT RemQueryInterface2 (
[in] IPID *ripid,
[out, size_is(cIids)] HRESULT *phr
//FIXME [out, size_is(cIids)] MInterfacePointer **ppMIF
);
-
}
[ uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
// Returns S_TRUE if the SetId is known by the object exporter,
// S_FALSE if not.
[idempotent] WERROR SimplePing (
- [in] policy_handle hRpc,
+ [in,ref] policy_handle *hRpc,
[in] SETID *pSetId // Must not be zero
);
// can be used to validate the binding
// from the client.
[idempotent] WERROR ServerAlive (
- [in] policy_handle hRpc
+ [in,ref] policy_handle *hRpc
);
// Method to get the protocol sequences, string bindings,
// RemoteUnknown IPID and COM version for an object server
// given its OXID. Supported by DCOM
// version 5.2 and above.
- [idempotent] error_status_t ResolveOxid2 (
+ [idempotent] WERROR ResolveOxid2 (
[in] policy_handle hRpc,
[in] OXID *pOxid,
[in] uint16 cRequestedProtseqs,
/* Function 0x03 */
NTSTATUS isa_Unknown3();
-
// Binding strings and the OBJREF_SIGNATURE in this call
/*****************/
/* Function 0x04 */
NTSTATUS isa_Unknown4();
-
-
}
[
miscellaneous IDL structures
*/
-[]
interface misc
{
/* a NULL sid */
schannel structures
*/
-[]
interface schannel
{
/*
return NT_STATUS_OK;
}
+/*
+ pull a const array of HYPER_T
+*/
+NTSTATUS ndr_pull_array_HYPER_T(struct ndr_pull *ndr, int ndr_flags, HYPER_T *data, uint32_t n)
+{
+ uint32_t i;
+ if (!(ndr_flags & NDR_SCALARS)) {
+ return NT_STATUS_OK;
+ }
+ for (i=0;i<n;i++) {
+ NDR_CHECK(ndr_pull_HYPER_T(ndr, &data[i]));
+ }
+ return NT_STATUS_OK;
+}
+
/*
push a uint8
*/
return NT_STATUS_OK;
}
+/*
+ push an array of HYPER_T
+*/
+NTSTATUS ndr_push_array_HYPER_T(struct ndr_push *ndr, int ndr_flags, const HYPER_T *data, uint32_t n)
+{
+ int i;
+ if (!(ndr_flags & NDR_SCALARS)) {
+ return NT_STATUS_OK;
+ }
+ for (i=0;i<n;i++) {
+ NDR_CHECK(ndr_push_HYPER_T(ndr, data[i]));
+ }
+ return NT_STATUS_OK;
+}
+
/*
save the current position
*/
ndr->print(ndr, "UNKNOWN LEVEL %u", level);
}
+void ndr_print_array_HYPER_T(struct ndr_print *ndr, const char *name,
+ const HYPER_T *data, uint32_t count)
+{
+ int i;
+
+ ndr->print(ndr, "%s: ARRAY(%d)", name, count);
+ ndr->depth++;
+ for (i=0;i<count;i++) {
+ char *idx=NULL;
+ asprintf(&idx, "[%d]", i);
+ if (idx) {
+ ndr_print_HYPER_T(ndr, idx, data[i]);
+ free(idx);
+ }
+ }
+ ndr->depth--;
+}
+
void ndr_print_array_uint32(struct ndr_print *ndr, const char *name,
const uint32_t *data, uint32_t count)
{
ADD_OBJ_FILES = \
torture/rpc/lsa.o \
torture/rpc/echo.o \
+ torture/rpc/dcom.o \
torture/rpc/dfs.o \
torture/rpc/drsuapi.o \
torture/rpc/spoolss.o \
--- /dev/null
+/*
+ Unix SMB/CIFS implementation.
+ test suite for dcom rpc operations
+
+ Copyright (C) Jelmer Vernooij 2004
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+BOOL torture_rpc_dcom(int dummy)
+{
+ NTSTATUS status;
+ struct dcerpc_pipe *p;
+ TALLOC_CTX *mem_ctx;
+ BOOL ret = True;
+
+ mem_ctx = talloc_init("torture_rpc_dcom");
+
+ status = torture_rpc_connection(&p,
+ DCERPC_IOXIDRESOLVER_NAME,
+ DCERPC_IOXIDRESOLVER_UUID,
+ DCERPC_IOXIDRESOLVER_VERSION);
+ if (!NT_STATUS_IS_OK(status)) {
+ return False;
+ }
+
+ printf("\n");
+
+ talloc_destroy(mem_ctx);
+
+ torture_rpc_close(p);
+ return ret;
+}