r3689: Large number of COM updates:
[samba.git] / source4 / rpc_server / dcom / remact.c
index 0ec1ea5a5122f197314bc73a1c491ff0c028ef5b..ce7c9c0c23944ee84d5fe8bb2ed1ff00f20560c2 100644 (file)
@@ -25,7 +25,6 @@
 #include "rpc_server/common/common.h"
 #include "librpc/gen_ndr/ndr_remact.h"
 #include "librpc/gen_ndr/ndr_oxidresolver.h"
-#include "rpc_server/dcom/dcom.h"
 
 struct dcom_interface_pointer *dcom_interface_pointer_by_ipid(struct GUID *ipid)
 {
@@ -38,11 +37,14 @@ struct dcom_interface_pointer *dcom_interface_pointer_by_ipid(struct GUID *ipid)
 */
 static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct RemoteActivation *r)
 {
+       struct CreateInstance *cr;
+       struct Release *ur;
+       struct dcom_interface_p *o;
        int i;
+
        /* FIXME: CoGetClassObject() */
        /* FIXME: IClassFactory::CreateInstance() */
-       /* FIXME: Register newly created object with dcerpc subsystem */
-       /* FIXME: IClassFactory::Release() */
+       /* FIXME: IUnknown::Release() */
        
        ZERO_STRUCT(r->out);
        r->out.ServerVersion.MajorVersion = COM_MAJOR_VERSION;
@@ -55,17 +57,21 @@ static WERROR RemoteActivation(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
         * r->out.interfaces */
        r->out.ifaces = talloc_array_p(mem_ctx, struct pMInterfacePointer, r->in.Interfaces);
        r->out.results = talloc_array_p(mem_ctx, WERROR, r->in.Interfaces);
+       r->out.hr = cr->out.result;
+
        for (i = 0; i < r->in.Interfaces; i++) {
-                       ZERO_STRUCT(r->out.ifaces[i]);  
-                       r->out.results[i] = WERR_NOT_SUPPORTED;
+               struct QueryInterface rr;
+               rr.in.iid = &r->in.pIIDs[i];
+               dcom_IUnknown_QueryInterface(o, mem_ctx, &rr);
+               ZERO_STRUCT(r->out.ifaces[i]);  
+               r->out.results[i] = rr.out.result;
        }
 
        /* FIXME: */
        r->out.pOxid = 0;
        ZERO_STRUCT(r->out.ipidRemUnknown);
-       r->out.hr = WERR_NOT_SUPPORTED;
        
-       return WERR_NOT_SUPPORTED;
+       return WERR_OK;
 }