diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcesrv/mmceserver/inc/mceclientresolver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcesrv/mmceserver/inc/mceclientresolver.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2005 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: +* +*/ + + + + +#ifndef CMCECLIENRESOLVER_H +#define CMCECLIENRESOLVER_H + +#include +#include + +#include "mcesrv.h" + + +class CSIPClientDiscovery; +class CSIPServerTransaction; +class CMceSipConnection; +class CSIPRequestElements; +class CSIPHeaderBase; + +/** +* Client resolver observer +* +* @lib +*/ +class MMceClientResolverObserver + { +public: + + /** + * Called when client discovery subsystem has resolved + * the client the transaction should go to + * + * @param aClientUid Client's uid + * @param aConnection the connection used + * @param aRequest the transaction + */ + virtual void IncomingResolvedRequest( TUid aClientUid, + CMceSipConnection& aConnection, + CSIPServerTransaction* aRequest ) = 0; + + + }; + + + +/** +* Client resolver class +* +* @lib +*/ +class CMceClientResolver : public CBase, + public MSIPClientDiscoveryObserver + { + + + /** + * Routing request class + * + * @lib + */ + class CMceRoutingRequest : public CBase + { + + public: // Constructors and destructor + + /** + * Constructor + * + * @param aResolverRequestId request id given by the client discovery + * @param aConnection the connection + * @param aRequest the request whose information has been given to CD + */ + CMceRoutingRequest( TUint32 aResolverRequestId, + CMceSipConnection& aConnection, + CSIPServerTransaction* aRequest ); + + /** + * Destructor + */ + ~CMceRoutingRequest (); + + public: // New functions + + /** + * Link offset + */ + static TInt LinkOffset(); + + /** + * Returns request id given by the client discovery + * @return request id given by the client discovery + */ + TUint32 ResolverRequestId() const; + + /** + * Returns request. Ownership is transferred + * @return the request + */ + CSIPServerTransaction* Request(); + + /** + * Returns connection. + * @return the connection + */ + CMceSipConnection& Connection() const; + + private: // Data + + TSglQueLink iLink; + TUint32 iResolverRequestId; + CSIPServerTransaction* iRequest; + CMceSipConnection& iConnection; + + //definitions for unit testing + MCESRV_UT_DEFINITIONS + + }; + + +public: // Contstructors and destructor + + /** + * Constructor + * + * @param aRequestHandler who is handling the resolved request + */ + static CMceClientResolver* NewL( MMceClientResolverObserver& aRequestHandler ); + + /** + * Constructor + * + * @param aRequestHandler who is handling the resolved request + */ + static CMceClientResolver* NewLC( MMceClientResolverObserver& aRequestHandler ); + + /** + * Destructor + */ + ~CMceClientResolver (); + +public: // New functions + + /** + * Registers client + * + * @param aClientUid the client's uid + */ + void RegisterClientL( TUid aClientUid ); + + /** + * De-registers client + * + * @param aClientUid the client's uid + */ + void DeregisterClient( TUid aClientUid ); + + /** + * Starts client resolving process for a transaction + * + * @param aRequest the transaction. Ownership is transferred + * @param aConnection the connection + */ + void RegisterIncomingRequestL( CSIPServerTransaction* aRequest, + CMceSipConnection& aConnection ); + + +public: // from MSIPClientDiscoveryObserver + + /** + * Channel UID was resolved for the SIP request + * @param aChannel a channel UID to which the SIP request + * must be routed + * @param aRequest a request ID + */ + void ChannelResolvedL(TUid aChannel, TUint32 aRequestId); + + /** + * The client channel UID was not found. + * The implementation of this callback should generate + * a SIP response with the provided elements and send it to network. + * @param aRequest a request ID + * @param aStatusCode contains a SIP response status code + * for the SIP response that should be generated. + * @param aReasonPhrase contains a SIP response reason phrase + * for the SIP response that should be generated. + * @param aHeaders contains well-formed optional SIP headers + * that include additional information why the client + * could not be found. For example Accept-headers that describe + * the content-types currently supported. + * The ownership is transferred. + * @param aContent the body of the response. NULL if not present. + * The ownership is transferred. + */ + void ClientNotFoundL(TUint32 aRequestId, + TUint aStatusCode, + RStringF aReasonPhrase, + RPointerArray aHeaders, + HBufC8* aContent); + + /** + * Error occurred during resolution of the client's channel UID. + * This callback will also be called if one of the callbacks + * ChannelResolvedL or ClientNotFoundL leaves using the leave code. + * @param aError error code. + */ + void ErrorOccurred(TInt aError, TUint32 aRequestId); + + + +private: // Second phase constructors + + /** + * Constructor + * + * @param aRequestHandler who is handling the resolved request + */ + CMceClientResolver ( MMceClientResolverObserver& aRequestHandler ); + + /** + * Second phase constructor + * + */ + void ConstructL (); + + CMceClientResolver::CMceRoutingRequest* Find( TUint32 aRequestId ); + void RemoveAndDelete( CMceClientResolver::CMceRoutingRequest* aRequest ); + + void AllHeadersL( const CSIPRequestElements& aRequestElements, + RPointerArray& aAllHeaders ); + + +private: // Data + + CSIPClientDiscovery* iDiscovery; + MMceClientResolverObserver& iRequestHandler; + TSglQue iList; + + //definitions for unit testing + MCESRV_UT_DEFINITIONS + + }; + +#endif // CMCECLIENRESOLVER_H + +// End of File