/// <summary> /// Update the session context after receiving a request from the client. /// </summary> /// <param name="currentInterfaceType">Rpc interface type.</param> /// <param name="messageReceived">The DRSR request received</param> internal void UpdateSessionContextWithMessageReceived( DrsrRpcInterfaceType currentInterfaceType, DrsrRequestStub messageReceived) { requestReceived = messageReceived; interfaceType = currentInterfaceType; }
public static ushort[] QueryDrsrTcpEndpoint(DrsrRpcInterfaceType interfaceType, string serverName) { if (serverName == null) { throw new ArgumentNullException("serverName"); } ushort[] endpoints; if (interfaceType == DrsrRpcInterfaceType.DRSUAPI) { endpoints = RpceEndpointMapper.QueryDynamicTcpEndpointByInterface( serverName, DRSUAPI_RPC_INTERFACE_UUID, DRSUAPI_RPC_INTERFACE_MAJOR_VERSION, DRSUAPI_RPC_INTERFACE_MINOR_VERSION); } else { endpoints = RpceEndpointMapper.QueryDynamicTcpEndpointByInterface( serverName, DSAOP_RPC_INTERFACE_UUID, DSAOP_RPC_INTERFACE_MAJOR_VERSION, DSAOP_RPC_INTERFACE_MINOR_VERSION); } return(endpoints); }
public T ExpectRpcCall <T>( DrsrRpcInterfaceType interfaceType, TimeSpan timeout, out DrsrServerSessionContext sessionContext) where T : DrsrRequestStub { RpceServerSessionContext rpceSessionContext; ushort opnum; byte[] requestStub = rpceLayerServer.ExpectCall(timeout, out rpceSessionContext, out opnum); if ((interfaceType == DrsrRpcInterfaceType.DSAOP && !Enum.IsDefined(typeof(DsaopMethodOpnums), (ushort)opnum)) || (interfaceType == DrsrRpcInterfaceType.DRSUAPI && !Enum.IsDefined(typeof(DrsuapiMethodOpnums), (ushort)opnum))) { throw new InvalidOperationException("An invalid method is invoked"); } //If there isn't a corresponding Drsr session context, it's a new session if (contextManager.LookupSessionContext(rpceSessionContext, out sessionContext)) { sessionContext.RpceLayerSessionContext = rpceSessionContext; } T t; if (typeof(T) == typeof(DrsrRequestStub)) { t = (T)DrsrUtility.CreateDrsrRequestStub(interfaceType, opnum); } else { t = (T)Activator.CreateInstance(typeof(T)); if ((ushort)t.Opnum != opnum) { throw new InvalidOperationException("An unexpected method call is received"); } } //Decode the request stub t.Decode(sessionContext, requestStub); //Update the session context sessionContext.UpdateSessionContextWithMessageReceived(interfaceType, t); return(t); }
internal void UpdateSessionContextWithMessageSent( DrsrRpcInterfaceType currentInterfaceType, DrsrResponseStub messageToSend) { if (currentInterfaceType == DrsrRpcInterfaceType.DRSUAPI) { switch ((DrsuapiMethodOpnums)messageToSend.Opnum) { case DrsuapiMethodOpnums.DrsBind: DrsBindRequest bindRequest = requestReceived as DrsBindRequest; DrsBindResponse bindResponse = messageToSend as DrsBindResponse; if (bindRequest != null && bindResponse != null) { if (bindResponse.Status == 0) { drsHandles.Add(bindResponse.drsHandle); } } break; case DrsuapiMethodOpnums.DrsUnbind: DrsUnbindRequest unbindRequest = requestReceived as DrsUnbindRequest; DrsUnbindResponse unbindResponse = messageToSend as DrsUnbindResponse; if (unbindRequest != null && unbindResponse != null) { if (unbindResponse.Status == 0 && drsHandles.Contains(unbindRequest.drsHandle.Value)) { drsHandles.Remove(unbindRequest.drsHandle.Value); } } break; default: break; } } else if (currentInterfaceType == DrsrRpcInterfaceType.DSAOP) { switch ((DsaopMethodOpnums)messageToSend.Opnum) { case DsaopMethodOpnums.DsaPrepareScript: DsaPrepareScriptRequest PrepareRequest = requestReceived as DsaPrepareScriptRequest; DsaPrepareScriptResponse PrepareResponse = messageToSend as DsaPrepareScriptResponse; if (PrepareRequest != null && PrepareResponse != null) { if (PrepareResponse.Status == 0) { password = PrepareResponse.outMessage.Value.V1.pbPassword; } } break; case DsaopMethodOpnums.DsaExecuteScript: DsaExecuteScriptRequest executeRequest = requestReceived as DsaExecuteScriptRequest; DsaExecuteScriptResponse executeResponse = messageToSend as DsaExecuteScriptResponse; if (executeRequest != null && executeResponse != null) { if (executeResponse.Status == 0) { password = new byte[0]; } } break; } } }
internal static DrsrRequestStub CreateDrsrRequestStub(DrsrRpcInterfaceType interfaceType, ushort opnum) { DrsrRequestStub requestStub = null; if (interfaceType == DrsrRpcInterfaceType.DRSUAPI) { switch ((DrsuapiMethodOpnums)opnum) { case DrsuapiMethodOpnums.DrsBind: requestStub = new DrsBindRequest(); break; case DrsuapiMethodOpnums.DrsUnbind: requestStub = new DrsUnbindRequest(); break; case DrsuapiMethodOpnums.DrsReplicaSync: requestStub = new DrsReplicaSyncRequest(); break; case DrsuapiMethodOpnums.DrsGetNcChanges: requestStub = new DrsGetNcChangesRequest(); break; case DrsuapiMethodOpnums.DrsUpdateRefs: requestStub = new DrsUpdateRefsRequest(); break; case DrsuapiMethodOpnums.DrsReplicaAdd: requestStub = new DrsReplicaAddRequest(); break; case DrsuapiMethodOpnums.DrsReplicaDel: requestStub = new DrsReplicaDelRequest(); break; case DrsuapiMethodOpnums.DrsReplicaModify: requestStub = new DrsReplicaModifyRequest(); break; case DrsuapiMethodOpnums.DrsVerifyNames: requestStub = new DrsVerifyNamesRequest(); break; case DrsuapiMethodOpnums.DrsGetMemberships: requestStub = new DrsGetMembershipsRequest(); break; case DrsuapiMethodOpnums.DrsInterDomainMove: requestStub = new DrsInterDomainMoveRequest(); break; case DrsuapiMethodOpnums.DrsGetNt4ChangeLog: requestStub = new DrsGetNt4ChangeLogRequest(); break; case DrsuapiMethodOpnums.DrsCrackNames: requestStub = new DrsCrackNamesRequest(); break; case DrsuapiMethodOpnums.DrsWriteSPN: requestStub = new DrsWriteSpnRequest(); break; case DrsuapiMethodOpnums.DrsRemoveDsServer: requestStub = new DrsRemoveDsServerRequest(); break; case DrsuapiMethodOpnums.DrsRemoveDsDomain: requestStub = new DrsRemoveDsDomainRequest(); break; case DrsuapiMethodOpnums.DrsDomainControllerInfo: requestStub = new DrsDomainControllerInfoRequest(); break; case DrsuapiMethodOpnums.DrsAddEntry: requestStub = new DrsAddEntryRequest(); break; case DrsuapiMethodOpnums.DrsExecuteKcc: requestStub = new DrsExecuteKccRequest(); break; case DrsuapiMethodOpnums.DrsGetReplInfo: requestStub = new DrsGetReplInfoRequest(); break; case DrsuapiMethodOpnums.DrsAddSidHistory: requestStub = new DrsAddSidHistoryRequest(); break; case DrsuapiMethodOpnums.DrsGetMemberships2: requestStub = new DrsGetMemberships2Request(); break; case DrsuapiMethodOpnums.DrsReplicaVerifyObjects: requestStub = new DrsReplicaVerifyObjectsRequest(); break; case DrsuapiMethodOpnums.DrsGetObjectExistence: requestStub = new DrsGetObjectExistenceRequest(); break; case DrsuapiMethodOpnums.DrsQuerySitesByCost: requestStub = new DrsQuerySitesByCostRequest(); break; case DrsuapiMethodOpnums.DrsInitDemotion: requestStub = new DrsInitDemotionRequest(); break; case DrsuapiMethodOpnums.DrsReplicaDemotion: requestStub = new DrsReplicaDemotionRequest(); break; case DrsuapiMethodOpnums.DrsFinishDemotion: requestStub = new DrsFinishDemotionRequest(); break; } } else if (interfaceType == DrsrRpcInterfaceType.DSAOP) { switch ((DsaopMethodOpnums)opnum) { case DsaopMethodOpnums.DsaPrepareScript: requestStub = new DsaPrepareScriptRequest(); break; case DsaopMethodOpnums.DsaExecuteScript: requestStub = new DsaExecuteScriptRequest(); break; } } return(requestStub); }