diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/Codec/src/CSIPRequest.cpp --- /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; + }