multimediacommsengine/mmcesrv/mmceserver/inc/mceclientresolver.h
changeset 0 1bce908db942
--- /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 <e32base.h>
+#include <sipclientdiscoveryobserver.h>
+
+#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<CSIPHeaderBase> 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<CSIPHeaderBase>& aAllHeaders );
+    
+
+private: // Data
+
+    CSIPClientDiscovery* iDiscovery;
+	MMceClientResolverObserver& iRequestHandler;
+    TSglQue<CMceClientResolver::CMceRoutingRequest> iList;
+
+	//definitions for unit testing
+	MCESRV_UT_DEFINITIONS
+    
+    };
+
+#endif // CMCECLIENRESOLVER_H
+
+// End of File