Esempio n. 1
0
        /// <summary>
        /// Sends RPC response to the client
        /// </summary>
        /// <param name="sessionContext">The session context of the RPC response to send</param>
        /// <param name="messageToSend">The RPC response to send</param>
        /// <exception cref="ArgumentNullException">
        /// Thrown when sessionContext or messageToSend is null.
        /// </exception>
        public void SendRpcCallResponse(DrsrServerSessionContext sessionContext, DrsrResponseStub messageToSend)
        {
            CheckIfSessionContextIsNull(sessionContext);

            if (messageToSend == null)
            {
                throw new ArgumentNullException("messageToSend");
            }

            sessionContext.UpdateSessionContextWithMessageSent(sessionContext.InterfaceType, messageToSend);
            rpceLayerServer.SendResponse(
                sessionContext.RpceLayerSessionContext,
                messageToSend.Encode(sessionContext));
        }
        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;
                }
            }
        }