예제 #1
0
    void ClientStub::assign(const ClientStub & rhs)
    {
        if (&rhs != this)
        {
            mInterfaceName                  = rhs.mInterfaceName;
            mToken                          = rhs.mToken;
            mDefaultCallingSemantics        = rhs.mDefaultCallingSemantics;
            mProtocol                       = rhs.mProtocol;
            mMarshalingProtocol             = rhs.mMarshalingProtocol;
            mEndpointName                   = rhs.mEndpointName;
            mObjectName                     = rhs.mObjectName;
            mRemoteCallTimeoutMs            = rhs.mRemoteCallTimeoutMs;
            mConnectTimeoutMs               = rhs.mConnectTimeoutMs;
            mAutoReconnect                  = rhs.mAutoReconnect;
            mConnected                      = false;
            mAutoVersioning                 = rhs.mAutoVersioning;
            mRuntimeVersion                 = rhs.mRuntimeVersion;
            mArchiveVersion                 = rhs.mArchiveVersion;
            mUseNativeWstringSerialization  = rhs.mUseNativeWstringSerialization;
            mEnableSfPointerTracking        = rhs.mEnableSfPointerTracking;
            mUserData                       = rhs.mUserData;
            mPingBackIntervalMs             = rhs.mPingBackIntervalMs;
            mSignalled                      = false;

            setEndpoint(rhs.getEndpoint());

            mClientProgressPtr              = rhs.mClientProgressPtr;

#if RCF_FEATURE_FILETRANSFER==1
            mFileProgressCb                 = rhs.mFileProgressCb;
            mTransferWindowS                = rhs.mTransferWindowS;
#endif

            mHttpProxy                      = rhs.mHttpProxy;
            mHttpProxyPort                  = rhs.mHttpProxyPort;
            mTransportProtocol              = rhs.mTransportProtocol;
            mUsername                       = rhs.mUsername;
            mPassword                       = rhs.mPassword;
            mKerberosSpn                    = rhs.mKerberosSpn;
            mEnableCompression              = rhs.mEnableCompression;

            mCertificatePtr                 = rhs.mCertificatePtr;
            mCaCertificatePtr               = rhs.mCaCertificatePtr;
            mCertificateValidationCb        = rhs.mCertificateValidationCb;
            mSchannelCertificateValidation  = rhs.mSchannelCertificateValidation;
            mOpenSslCipherSuite             = rhs.mOpenSslCipherSuite;

            mSslImplementation              = rhs.mSslImplementation;
        }
    }
예제 #2
0
    ClientStub::ClientStub(const ClientStub &rhs) :
        mToken(rhs.mToken),
        mDefaultCallingSemantics(rhs.mDefaultCallingSemantics),
        mProtocol(rhs.mProtocol),
        mMarshalingProtocol(DefaultMarshalingProtocol),
        mEndpointName(rhs.mEndpointName),
        mObjectName(rhs.mObjectName),
        mInterfaceName(rhs.mInterfaceName),
        mRemoteCallTimeoutMs(rhs.mRemoteCallTimeoutMs),
        mConnectTimeoutMs(rhs.mConnectTimeoutMs),
        mAutoReconnect(rhs.mAutoReconnect),
        mConnected(),
        mTries(),
        mAutoVersioning(rhs.mAutoVersioning),
        mRuntimeVersion(rhs.mRuntimeVersion),
        mArchiveVersion(rhs.mArchiveVersion),
        mUseNativeWstringSerialization(rhs.mUseNativeWstringSerialization),
        mEnableSfPointerTracking(rhs.mEnableSfPointerTracking),
        mUserData(rhs.mUserData),
        
        mAsync(),
        mAsyncOpType(None),
        mEndTimeMs(),
        mRetry(),
        mRcs(Twoway),
        mEncodedByteBuffer(),
        mEncodedByteBuffers(),
        mpParameters(),
        mPingBackIntervalMs(rhs.mPingBackIntervalMs),
        mPingBackTimeStamp(),
        mPingBackCount(),
        mNextTimerCallbackMs(),
        mNextPingBackCheckMs(),
        mPingBackCheckIntervalMs(),
        mTimerIntervalMs(),

        mSignalled(),

        mBatchMode(false),
        mBatchMaxMessageLength(DefaultBatchMaxMessageLimit),
        mBatchCount(0),
        mBatchMessageCount(0),
        mSetTransportProtocol(false),        

#if RCF_FEATURE_FILETRANSFER==1
        mFileProgressCb(rhs.mFileProgressCb),
#endif
        mTransferWindowS(rhs.mTransferWindowS),
        mCallInProgress(false),

        mHttpProxy(rhs.mHttpProxy),
        mHttpProxyPort(rhs.mHttpProxyPort),
        mTransportProtocol(rhs.mTransportProtocol),
        mUsername(rhs.mUsername),
        mPassword(rhs.mPassword),
        mKerberosSpn(rhs.mKerberosSpn),
        mEnableCompression(rhs.mEnableCompression),

        mSslImplementation(rhs.mSslImplementation)
    {
        setEndpoint( rhs.getEndpoint() );
        if (rhs.mClientProgressPtr)
        {
            mClientProgressPtr.reset(
                new ClientProgress(*rhs.mClientProgressPtr));
        }
    }
예제 #3
0
    SubscriptionPtr SubscriptionService::onRequestSubscriptionCompleted(
        boost::int32_t                      ret,
        const std::string &                 publisherName,
        ClientStub &                        clientStub,
        RcfClientPtr                        rcfClientPtr,
        OnSubscriptionDisconnect            onDisconnect,
        boost::uint32_t                     pubToSubPingIntervalMs,
        bool                                pingsEnabled)
    {
        if (ret != RcfError_Ok)
        {
            RCF_THROW( Exception( Error(ret) ) );
        }

        ClientTransportAutoPtr clientTransportAutoPtr( 
                clientStub.releaseTransport() );

        ServerTransport * pTransport = NULL;
        ServerTransportEx * pTransportEx = NULL;

        pTransport = & mpServer->findTransportCompatibleWith(
            *clientTransportAutoPtr);

        pTransportEx = dynamic_cast<ServerTransportEx *>(pTransport);

        ServerTransportEx & serverTransportEx = * pTransportEx; 

        SessionPtr sessionPtr = serverTransportEx.createServerSession(
            clientTransportAutoPtr,
            StubEntryPtr(new StubEntry(rcfClientPtr)),
            true);

        RCF_ASSERT( sessionPtr );

        RcfSessionPtr rcfSessionPtr = sessionPtr;

        rcfSessionPtr->setUserData(clientStub.getUserData());
        rcfSessionPtr->setPingTimestamp();

        std::string publisherUrl;
        EndpointPtr epPtr = clientStub.getEndpoint();
        if (epPtr)
        {
            publisherUrl = epPtr->asString();
        }

        //if (!clientTransportAutoPtr->isAssociatedWithIoService())
        //{
        //    AsioServerTransport & asioTransport = dynamic_cast<AsioServerTransport &>(
        //        mpServer->getServerTransport());

        //    clientTransportAutoPtr->associateWithIoService(asioTransport.getIoService());
        //}

        SubscriptionPtr subscriptionPtr( new Subscription(
            *this,
            clientTransportAutoPtr, 
            rcfSessionPtr, 
            pubToSubPingIntervalMs, 
            publisherUrl,
            publisherName,
            onDisconnect));

        rcfSessionPtr->setOnDestroyCallback( boost::bind(
            &Subscription::onDisconnect,
            SubscriptionWeakPtr(subscriptionPtr),
            _1));

        subscriptionPtr->setWeakThisPtr(subscriptionPtr);

        subscriptionPtr->mPingsEnabled = pingsEnabled;

        Lock lock(mSubscriptionsMutex);
        mSubscriptions.insert(subscriptionPtr);

        return subscriptionPtr;                
    }