realtimenetprots/sipfw/SIP/ServerResolver/src/CSIPQueryData.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ServerResolver/src/CSIPQueryData.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,273 @@
+// 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          : CSIPQueryData.cpp
+// Part of       : ServerResolver
+// Version       : SIP/4.0 
+//
+
+
+
+#include <utf.h>
+#include "CSIPQueryData.h"
+#include "CSIPQueryBase.h"
+#include "CSIPQueryA_AAAA.h"
+#include "MSIPHostResolver.h"
+#include "MSIPResolvingResult.h"
+#include "CSIPResolvingResult.h"
+#include "MSIPServerResolverObserver.h"
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::CSIPQueryData
+// ----------------------------------------------------------------------------
+//
+CSIPQueryData::CSIPQueryData( MSIPHostResolver& aResolver,
+							  RPointerArray< MSIPResolvingResult >& aResult,
+							  TBool aSipsUri,
+							  TBool aForceUDP ) :
+	iResolver ( aResolver ),
+	iResultArray ( aResult ),
+	iSipsUri ( aSipsUri ),
+	iForceUDP ( aForceUDP )
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSIPQueryData::ConstructL( MSIPServerResolverObserver* aObserver,
+                                TUint aPort,
+                                RStringF aProtocol,
+                                const TDesC8& aOriginalTarget )
+	{
+	iPort = aPort;
+	iProtocol = aProtocol;
+	iTarget = aOriginalTarget.AllocL();
+	iOriginalTarget = aOriginalTarget.AllocL();
+	iObserver = aObserver;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::NewL
+// ----------------------------------------------------------------------------
+//
+CSIPQueryData* CSIPQueryData::NewL( MSIPServerResolverObserver* aObserver,
+                               TUint aPort,
+                               RStringF aProtocol,
+                               const TDesC8& aOriginalTarget,
+							   MSIPHostResolver& aResolver,
+							   RPointerArray< MSIPResolvingResult >& aResult,
+							   TBool aSipsUri,
+							   TBool aForceUDP )
+	{
+	CSIPQueryData* self =
+		new ( ELeave ) CSIPQueryData( aResolver, aResult, aSipsUri, aForceUDP );
+	CleanupStack::PushL( self );
+	self->ConstructL( aObserver, aPort, aProtocol, aOriginalTarget );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::~CSIPQueryData
+// ----------------------------------------------------------------------------
+//
+CSIPQueryData::~CSIPQueryData()
+	{	
+	delete iTarget;
+	delete iOriginalTarget;
+	iProtocol.Close();
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::ResultArray
+// ----------------------------------------------------------------------------
+//	
+RPointerArray<MSIPResolvingResult>& CSIPQueryData::ResultArray() 
+	{
+	return iResultArray;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::Observer
+// ----------------------------------------------------------------------------
+//	
+MSIPServerResolverObserver* CSIPQueryData::Observer() 
+	{
+	return iObserver;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::Port
+// ----------------------------------------------------------------------------
+//	
+TUint CSIPQueryData::Port() 
+	{
+	return iPort;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::Protocol
+// ----------------------------------------------------------------------------
+//	
+RStringF CSIPQueryData::Protocol() 
+	{
+	return iProtocol;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::Target
+// ----------------------------------------------------------------------------
+//	
+const TDesC8& CSIPQueryData::Target() const
+	{
+	return *iTarget;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::OriginalTarget
+// ----------------------------------------------------------------------------
+//	
+const TDesC8& CSIPQueryData::OriginalTarget() const
+	{
+	return *iOriginalTarget;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::Resolver
+// ----------------------------------------------------------------------------
+//	
+MSIPHostResolver& CSIPQueryData::Resolver()
+	{
+	return iResolver;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::SetPort
+// ----------------------------------------------------------------------------
+//	
+void CSIPQueryData::SetPort( TUint aPort )
+	{
+	iPort = aPort;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::SetProtocol
+// ----------------------------------------------------------------------------
+//	
+void CSIPQueryData::SetProtocol( RStringF aProtocol )
+	{	
+	iProtocol.Close();
+	iProtocol = aProtocol.Copy();	
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::SetTargetL
+// ----------------------------------------------------------------------------
+//	
+void CSIPQueryData::SetTargetL( const TDesC8& aTarget )
+	{
+	HBufC8* temp = aTarget.AllocL();
+	delete iTarget;
+	iTarget = temp;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::SetOriginalTargetL
+// ----------------------------------------------------------------------------
+//	
+void CSIPQueryData::SetOriginalTargetL( const TDesC8& aOriginalTarget )
+	{
+	HBufC8* temp = aOriginalTarget.AllocLC();
+	delete iOriginalTarget;
+	iOriginalTarget = temp;
+	CleanupStack::Pop( temp );
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::CreateResultL
+// ----------------------------------------------------------------------------
+//
+TBool CSIPQueryData::CreateResultL( CSIPQueryA_AAAA& aQuery )
+	{
+	TBool result = EFalse;
+	iQuery = &aQuery;
+	if ( AddResultToArrayL() )
+		{
+		result = ETrue;
+		}
+	while ( iQuery->QueryNext( iResolver ) )
+		{
+		if ( AddResultToArrayL() )
+			{
+			result = ETrue;
+			}
+		}
+	return result;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::AddResultToArrayL
+// ----------------------------------------------------------------------------
+//
+TBool CSIPQueryData::AddResultToArrayL()
+    {
+    if ( iQuery->DnsNoRoute() )
+    	{
+    	return EFalse;
+    	}
+	TInetAddr addr( iQuery->QueryResultBuf() );
+	addr.SetPort( iPort );
+	for ( TInt i=0;i < ResultArray().Count();i++ )
+		{
+		if ( ResultArray()[i]->Address().CmpAddr( addr ) 
+				&& ResultArray()[i]->Protocol() == iProtocol )
+			{
+			return EFalse;
+			}
+		}
+
+	CSIPResolvingResult* result =
+		CSIPResolvingResult::NewLC( addr, iProtocol, iForceUDP );
+	User::LeaveIfError( ResultArray().Append( result ) );
+	CleanupStack::Pop( result );
+	return ETrue;
+    }
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::IsSipsUri
+// ----------------------------------------------------------------------------
+//
+TBool CSIPQueryData::IsSipsUri()
+    {
+    return iSipsUri;
+    }
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::SetForceUDP
+// ----------------------------------------------------------------------------
+//
+void CSIPQueryData::SetForceUDP()
+	{
+	iForceUDP = ETrue;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPQueryData::CompleteQueryL
+// ----------------------------------------------------------------------------
+//
+void CSIPQueryData::CompleteQueryL()
+    {
+	iObserver->CompletedL();
+    }