diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2004-11-01 20:00:02 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:11 -0500 |
commit | dde06904576dfe01e9710721209650dcff228593 (patch) | |
tree | a625c2c36d1d7dcba666e7772917808b97f54d3f | |
parent | b206afaf00ab9fd16a6e62fc9ff07078bd03b989 (diff) | |
download | samba-dde06904576dfe01e9710721209650dcff228593.tar.gz samba-dde06904576dfe01e9710721209650dcff228593.tar.bz2 samba-dde06904576dfe01e9710721209650dcff228593.zip |
r3440: Add support for "coclass" to the pidl parser - the idl keyword that
describes a COM class. A coclass is the implementation of one or more
interfaces. It has a UUID referred to as it's CLSID (Class ID).
Also adding an example coclass called "CoffeeMachine". You can give
it a string (or a cup, whatever you like ;-) and it will fill it with
"COFFEE" (kind of the like the echo pipe is for regular RPC). CoffeeMachine's
Windows implementation already works, a torture test for Samba will follow
soon.
(This used to be commit 05dd840b6ffba0d38d98e2e80d856e2f2b5d877c)
-rw-r--r-- | source4/build/pidl/idl.yp | 21 | ||||
-rw-r--r-- | source4/librpc/idl/dcom.idl | 18 |
2 files changed, 35 insertions, 4 deletions
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp index a98dbd9104..f512985ea0 100644 --- a/source4/build/pidl/idl.yp +++ b/source4/build/pidl/idl.yp @@ -16,9 +16,22 @@ %% idl: #empty { {} } - | idl interface { - push(@{$_[1]}, $_[2]); $_[1] - } + | idl interface { push(@{$_[1]}, $_[2]); $_[1] } + | idl coclass { push(@{$_[1]}, $_[2]); $_[1] } +; + +coclass: property_list 'coclass' identifier '{' interfaces '}' optional_semicolon + {$_[3] => { + "TYPE" => "COCLASS", + "PROPERTIES" => $_[1], + "NAME" => $_[3], + "DATA" => $_[5], + }} +; + +interfaces: + #empty { {} } + | interfaces interface { push(@{$_[1]}, $_[2]); $_[1] } ; interface: property_list 'interface' identifier base_interface '{' definitions '}' optional_semicolon @@ -291,7 +304,7 @@ again: if (s/^([\w_]+)//) { $parser->YYData->{LAST_TOKEN} = $1; if ($1 =~ - /^(interface|const|typedef|union + /^(coclass|interface|const|typedef|union |struct|enum|void|case|default)$/x) { return $1; } diff --git a/source4/librpc/idl/dcom.idl b/source4/librpc/idl/dcom.idl index 1d32d723c6..eb470b6908 100644 --- a/source4/librpc/idl/dcom.idl +++ b/source4/librpc/idl/dcom.idl @@ -486,3 +486,21 @@ object, WERROR MarshalInterface(); WERROR UnMarshalInterface(); } + + +[ +uuid(DB7C21F8-FE33-4C11-AEA5-CEB56F076FBB), + helpstring("CoffeeMachine Class") +] coclass CoffeeMachine +{ + [ + uuid(DA23F6DB-6F45-466C-9EED-0B65286F2D78), + helpstring("ICoffeeMachine Interface"), + pointer_default(unique) + ] + + interface ICoffeeMachine : IUnknown + { + [helpstring("method MakeCoffee")] HRESULT MakeCoffee(BSTR *flavor); + } +} |