diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ClientResolver/Server/inc/CSipCRServerSession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ClientResolver/Server/inc/CSipCRServerSession.h Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* Name : CSipCRServerSession.h +* Part of : SIP Client Resolver +* Version : 1.0 +* +*/ + + + + +/** + @internalComponent +*/ +#ifndef CSIPCRSERVERSESSION_H +#define CSIPCRSERVERSESSION_H + +// INCLUDES +#include +#include "_sipcodecdefs.h" +#include "TSipClient.h" + +// FORWARD DECLARATIONS +class CSIPCRServer; +class CSIPCRSessionReceiver; +class CSIPCRRequestItem; +class CSIPRequest; +class CSIPResponse; +class CSIPCRITCUtility; +class CSIPResolvedClient; +class CSIPResolvedClient2; +class CSipCrWorkerAo; + +// CLASS DEFINITIONS +class CSIPCRServerSession : public CSession2 + { +public: // Constructors and destructor + + static CSIPCRServerSession* NewL(CSIPCRServer& aCRServer); + static CSIPCRServerSession* NewLC(CSIPCRServer& aCRServer); + ~CSIPCRServerSession (); + +public: // From CSession2 + + void ServiceL(const RMessage2& aMessage); + +public: // New functions + + void WorkerAoRequestCompleted(CSipCrWorkerAo* aWorkerAo); + + void RoutingEntryAddedL(const TUid& aUid); + +private: // Second phase constructors + + CSIPCRServerSession(CSIPCRServer& aCRServer); + void ConstructL(); + +private: // Helper functions + + void DoServiceL (TInt aFunction, const RMessage2& aMessage); + + void ChannelWithResolverL(const RMessage2& aMessage); + + void ChannelL(const RMessage2& aMessage); + + void RegisterL(const TUid& aChannelUid); + + void DeregisterL(const TUid& aChannelUid); + + void SetUIDL(const RMessage2& aMessage); + + void CancelRequestL(const RMessage2& aMessage); + + void CancelAllRequests(); + + void CancelClientReceiveL(); + + void ClientReadyToReceiveL(const RMessage2& aMessage); + + void ClientReceiveSipResponseL(const RMessage2& aMessage); + + CSIPResponse* ResolveClientL(CSIPRequest& aRequest, TSipClient& aUid); + + void ChannelL(TUint32 aRequestId, + CSIPRequest& aRequest, + const TSipClient& aClientUid, + const TUid& aResolverUid); + + void ChannelImplementationL(CSipCrWorkerAo& aWorkerAo); + + void HandleNextPendingRequestL(CSipCrWorkerAo& aWorkerAo); + + void ChannelUidL( const TSipClient& aClient, + TUid& aChannelUid, + CSIPRequest* aRequest, + CSIPResolvedClient* aResolvedClient ); + + TUint32 CreateRequestId(); + + TBool FindUid(const RArray& aUids, + TSipClient& aUid, + TBool aRomBased, + TBool aConnected); + + typedef TInt (*ThreadFunctionPtr)(TAny* aPtr); + + void CreateWorkerThreadL( + CSipCrWorkerAo* aWorkerAo, + ThreadFunctionPtr aThreadFunctionPtr); + + static TInt ChannelWorkerThreadFunction(TAny* aPtr); + + static TInt ConnectWorkerThreadFunction(TAny* aPtr); + + typedef void + (CSIPCRServerSession::*WorkerFunctionPtr)(CSipCrWorkerAo& aWorkerAo); + + static TInt WorkerThreadFunctionImpl( + TAny* aPtr, + WorkerFunctionPtr aWorkerFunctionPtr); + + void CancelConnectL(CSIPCRRequestItem* aRequestItem); + + template void AddToRequestQueueL( + CSIPCRRequestItem* aRequestItem, + T& aResolvedClient); + + template TBool ConnectL( + CSIPCRRequestItem& aRequestItem, + T& aResolvedClient); + + void ProtectedAddToRequestQueueL(CSIPCRRequestItem* aRequestItem); + + void ProtectedRemoveFromRequestQueue(CSIPCRRequestItem* aRequestItem); + + static void RemoveFromRequestQueue(TAny* aCleanupData); + +private: // Data + + TUid iClientUid; + TBool iClientUidSet; + CSIPCRServer& iCRServer; + CSIPCRSessionReceiver* iReceiver; + RPointerArray iRequestQueue; + TUint32 iRequestIdCounter; + RPointerArray iWorkerAos; + RMutex iRequestQueueMutex; + +private: // For testing purposes + + UNIT_TEST(CSipCRServerSessionTest) + }; + +#endif // CSIPCRSERVERSESSION_H + +// End of File