realtimenetprots/sipfw/SIP/ServerResolver/inc/CSIPServerResolver.h
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ServerResolver/inc/CSIPServerResolver.h	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2006-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          : CSIPServerResolver.h
+* Part of       : ServerResolver
+* Version       : SIP/5.0 
+*
+*/
+
+
+
+
+/**
+ @internalComponent
+*/
+#ifndef CSIPSERVERRESOLVER_H
+#define CSIPSERVERRESOLVER_H
+
+//INCLUDES
+#include <e32base.h>
+#include <in_sock.h>
+#include <stringpool.h>
+#include "_sipcodecdefs.h"
+
+// FORWARD DECLARATIONS
+class CURIBase;
+class CSIPViaHeader;
+class MSIPServerResolverObserver;
+class CSIPHostResolver;
+class CSIPHostPort;
+class CSIPURI;
+class MSIPResolvingResult;
+class CServerQuery;
+class CURIContainer;
+
+// CLASS DEFINITION
+/**
+ * CSIPServerResolver implements a
+ */
+class CSIPServerResolver : public CBase
+	{
+	public:// Constructors and destructor
+
+    	/**
+	 	* Creates a new CSIPServerResolver instance
+	 	* @param aServer for server session
+	 	* @param aConnection for connection
+	 	* @returns a new instance of CSIPServerResolver
+	 	*/
+		static CSIPServerResolver* NewL( RSocketServ& aServer, 
+                                		 RConnection& aConnection );
+
+    	/**
+	 	* Creates a new CSIPServerResolver instance 
+	 	* and pushes it to CleanupStack
+	 	* @param aServer for server session
+	 	* @param aConnection for connection
+	 	* @returns a new instance of CSIPServerResolver
+	 	*/
+		static CSIPServerResolver* NewLC( RSocketServ& aServer, 
+                                      	  RConnection& aConnection );
+
+		/**
+	 	* Destructor.
+	 	*/
+		~CSIPServerResolver();
+
+	public:
+		
+		/**
+	 	* Resolves a CURIBase object to 0..n MSIPResolvingResult objects
+	 	* asynchronously. MSIPServerResolverObserver is called when
+	 	* resolving completes.
+	 	*
+	 	*
+ 	 	* @param aURI The URI to be resolved. 
+	 	*        Not used after this function returns.
+	 	* @param aSkipNaptrAndSrvQueries if ETrue skip NAPTR and SRV
+	 	*        queries and perform only A/AAAA query
+	 	* @param aResult an array for the resolved results.
+	 	* @param aObserver	callback that will be used when resolving 
+	 	*    	has been completed. The ownership is not transferred.
+	 	* Function accept only one same aObserver pointer at the time,
+	 	* otherwise function leave with errorcode  KErrAlreadyExists
+	 	*/
+		void GetByURIL( const CURIContainer& aURI,
+		                TBool aSkipNaptrAndSrvQueries,
+						RPointerArray< MSIPResolvingResult >& aResult,
+		            	MSIPServerResolverObserver* aObserver ); 
+
+		/**
+	 	* Resolves a CSIPViaHeader object to 0..n MSIPResolvingResult objects
+	 	* asynchronously. MSIPServerResolverObserver is called when
+	 	* resolving completes.
+	 	*
+ 	 	* @param aVia The Via-header to be resolved. 
+	 	*        Not used after this function returns.
+	 	* @param aResult an array for the resolved results.
+	 	* @param aObserver	callback that will be used when resolving 
+	 	*        has been completed. The ownership is not transferred.
+	 	* Function accept only one same aObserver pointer at the time,
+	 	* otherwise function leave with errorcode  KErrAlreadyExists
+	 	*/
+		void GetByViaL( CSIPViaHeader& aVia,
+						RPointerArray< MSIPResolvingResult >& aResult,
+						MSIPServerResolverObserver* aObserver );
+
+		/**
+	 	* Cancels all outstanding operations for the given observer.
+	 	*
+	 	* @param aObserver	The observer.
+	 	* 
+	 	*/
+		void Cancel( MSIPServerResolverObserver* aObserver );
+	
+	private:// Constructors and destructor
+
+		CSIPServerResolver();
+	
+		void ConstructL( RSocketServ& aServer,
+					 	 RConnection& aConnection );
+					 	 
+	private:// New methods
+	
+		void ChooseQueryL( MSIPServerResolverObserver* aObserver,
+                      	   const TDesC8& aTarget,
+                      	   RPointerArray< MSIPResolvingResult >& aResult,
+                      	   TBool aSipsUri,
+                      	   TUint aPort,
+                      	   RStringF aProtocol,
+                      	   TBool aForceUDP = EFalse,
+                      	   TBool aSkipNaptrAndSrvQueries = EFalse );
+
+		void SetA_AAAAQueryL( CServerQuery* aQuery );
+		
+		void SetSRVQueryL( CServerQuery* aQuery );
+		
+		void SetNaptrQueryL( CServerQuery* aQuery );
+                    
+        RStringF TransportProtocolL( const CSIPURI& aURI,
+                                     TBool& aForceUdp ) const;
+                                     
+        RStringF DefaultTransport( TBool aSipsUri ) const; 
+        
+        TUint DefaultPort( TBool aUseTls ) const;                           
+	
+	private://data
+	
+		CSIPHostResolver* iResolver;
+		
+	private: // For testing purposes
+
+		UNIT_TEST(CSIPServerResolverTest)
+	};
+#endif // end of CSIPSERVERRESOLVER_H
+
+// End of File