realtimenetprots/sipfw/SIP/Codec/src/CSIPRequest.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPRequest.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,222 @@
+// 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          : CSIPRequest.cpp
+// Part of       : SIP Codec
+// Version       : SIP/4.0 
+//
+
+
+
+
+#include "siprequest.h"
+#include "sipuri.h"
+#include "siphostport.h"
+#include "sipcodecerr.h"
+#include "SIPSyntaxCheck.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+#include "sipcodecutils.h"
+#include "uricontainer.h"
+#include "_sipcodecdefs.h"
+
+
+_LIT8 (KSpace, " ");
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRequest* CSIPRequest::NewL (RStringF aMethod)
+	{
+	CSIPRequest* self = CSIPRequest::NewLC(aMethod);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRequest* CSIPRequest::NewLC (RStringF aMethod)
+	{
+	CSIPRequest* self = new(ELeave)CSIPRequest;
+	CleanupStack::PushL(self);
+	self->ConstructL(aMethod);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRequest* CSIPRequest::NewL ()
+	{
+	CSIPRequest* self = CSIPRequest::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRequest* CSIPRequest::NewLC()
+	{
+	CSIPRequest* self = new(ELeave) CSIPRequest;
+	CleanupStack::PushL (self);
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::CSIPRequest
+// -----------------------------------------------------------------------------
+//
+CSIPRequest::CSIPRequest()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPRequest::ConstructL(RStringF aMethod)
+	{
+	CSIPMessage::ConstructL();
+	SetMethodL(aMethod);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPRequest::ConstructL ()
+	{
+	CSIPMessage::ConstructL();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::~CSIPRequest
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPRequest::~CSIPRequest()
+	{
+	iMethod.Close();
+	delete iRequestURI;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::IsRequest
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CSIPRequest::IsRequest() const
+	{
+	return ETrue;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::SetMethodL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSIPRequest::SetMethodL (const TDesC8& aMethod)
+	{
+    RStringF tmpString = 
+        SIPCodecUtils::CheckAndCreateTokenL(aMethod, KErrSipCodecSIPMethod);
+	iMethod.Close();
+	iMethod = tmpString;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::SetMethodL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSIPRequest::SetMethodL (RStringF aMethod)
+	{
+	SetMethodL(aMethod.DesC());
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::Method
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSIPRequest::Method() const
+	{
+	return iMethod;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::SetRequestURIL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSIPRequest::SetRequestURIL (CURIContainer* aRequestURI)
+	{
+	__ASSERT_ALWAYS (aRequestURI != 0, User::Leave (KErrArgument));
+
+	delete iRequestURI; iRequestURI = 0;
+	iRequestURI = aRequestURI;
+    if(iRequestURI->IsSIPURI())
+        {
+	    iRequestURI->SIPURI()->DeleteParam(SIPStrings::StringF(SipStrConsts::EMethod));
+	    iRequestURI->SIPURI()->DeleteAllURIHeaders();
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::RequestURI
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CURIContainer* CSIPRequest::RequestURI()
+	{
+	return iRequestURI;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPRequest::ToTextFirstLineLC
+// From CSIPMessage:
+// -----------------------------------------------------------------------------
+//
+HBufC8* CSIPRequest::ToTextFirstLineLC () const
+	{
+	TPtrC8 sipVersion(SIPVersion().DesC());
+	TPtrC8 method(Method().DesC());
+	TUint requestLineLength = method.Length() + KSpace().Length() +
+							  sipVersion.Length();
+	HBufC8* requestURIAsText = 0;
+	if (iRequestURI != 0)
+		{
+		requestURIAsText = iRequestURI->ToTextL();
+		CleanupStack::PushL(requestURIAsText);
+		requestLineLength += requestURIAsText->Length() + KSpace().Length();
+		}
+	
+	HBufC8* requestLine = HBufC8::NewL(requestLineLength);
+	if (requestURIAsText != 0) 
+		{
+		CleanupStack::Pop(requestURIAsText);
+		}
+	CleanupStack::PushL(requestLine);
+	TPtr8 requestLinePtr(requestLine->Des());
+	requestLinePtr.Append(method);
+	requestLinePtr.Append(KSpace);
+	if (requestURIAsText != 0)
+		{
+		requestLinePtr.Append(*requestURIAsText);
+		requestLinePtr.Append(KSpace);
+		}
+	requestLinePtr.Append(sipVersion);
+
+	delete requestURIAsText;
+
+	return requestLine;
+	}