// 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 : CSIPResponseElements.cpp
// Part of : SIPClient
// Version : SIP/4.0
//
#include "sipresponseelements.h"
#include "sipmessageelements.h"
#include "sipstrings.h"
#include "sipstrconsts.h"
#include "_sipcodecdefs.h"
// -----------------------------------------------------------------------------
// CSIPResponseElements::NewL
// -----------------------------------------------------------------------------
//
EXPORT_C CSIPResponseElements*
CSIPResponseElements::NewL (TUint aStatusCode, RStringF aReasonPhrase)
{
CSIPResponseElements* self =
CSIPResponseElements::NewLC(aStatusCode,aReasonPhrase);
CleanupStack::Pop (self);
return self;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::NewLC
// -----------------------------------------------------------------------------
//
EXPORT_C CSIPResponseElements*
CSIPResponseElements::NewLC (TUint aStatusCode, RStringF aReasonPhrase)
{
CSIPResponseElements* self = new(ELeave)CSIPResponseElements;
CleanupStack::PushL (self);
self->ConstructL (aStatusCode,aReasonPhrase);
return self;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::CSIPResponseElements
// -----------------------------------------------------------------------------
//
CSIPResponseElements::CSIPResponseElements ()
{
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::ConstructL
// -----------------------------------------------------------------------------
//
void CSIPResponseElements::ConstructL (TUint aStatusCode,
RStringF aReasonPhrase)
{
SetStatusCodeL (aStatusCode);
iReasonPhrase = aReasonPhrase.Copy();
iMessageElements = CSIPMessageElements::NewL();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::~CSIPResponseElements
// -----------------------------------------------------------------------------
//
EXPORT_C CSIPResponseElements::~CSIPResponseElements ()
{
delete iMessageElements;
iReasonPhrase.Close();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::SetStatusCodeL
// -----------------------------------------------------------------------------
//
EXPORT_C void CSIPResponseElements::SetStatusCodeL (TUint aStatusCode)
{
const TUint KMinStatusCode = 101;
const TUint KMaxStatusCode = 699;
__ASSERT_ALWAYS (aStatusCode >= KMinStatusCode &&
aStatusCode <= KMaxStatusCode,
User::Leave(KErrArgument));
iStatusCode = aStatusCode;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::StatusCode
// -----------------------------------------------------------------------------
//
EXPORT_C TUint CSIPResponseElements::StatusCode() const
{
return iStatusCode;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::SetReasonPhraseL
// -----------------------------------------------------------------------------
//
EXPORT_C void
CSIPResponseElements::SetReasonPhraseL (RStringF aReasonPhrase)
{
iReasonPhrase.Close();
iReasonPhrase = aReasonPhrase.Copy();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::ReasonPhrase
// -----------------------------------------------------------------------------
//
EXPORT_C RStringF CSIPResponseElements::ReasonPhrase () const
{
return iReasonPhrase;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::FromHeader
// -----------------------------------------------------------------------------
//
EXPORT_C const CSIPFromHeader* CSIPResponseElements::FromHeader () const
{
return iMessageElements->From();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::ToHeader
// -----------------------------------------------------------------------------
//
EXPORT_C const CSIPToHeader* CSIPResponseElements::ToHeader () const
{
return iMessageElements->To();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::CSeqHeader
// -----------------------------------------------------------------------------
//
EXPORT_C const CSIPCSeqHeader* CSIPResponseElements::CSeqHeader() const
{
return iMessageElements->CSeq();
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::MessageElements
// -----------------------------------------------------------------------------
//
EXPORT_C const CSIPMessageElements&
CSIPResponseElements::MessageElements () const
{
return *iMessageElements;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::MessageElements
// -----------------------------------------------------------------------------
//
EXPORT_C CSIPMessageElements& CSIPResponseElements::MessageElements ()
{
return *iMessageElements;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::InternalizeL
// -----------------------------------------------------------------------------
//
CSIPResponseElements* CSIPResponseElements::InternalizeL(
RReadStream& aReadStream)
{
CSIPResponseElements* self =
CSIPResponseElements::InternalizeLC(aReadStream);
CleanupStack::Pop(self);
return self;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::InternalizeLC
// -----------------------------------------------------------------------------
//
CSIPResponseElements*
CSIPResponseElements::InternalizeLC (RReadStream& aReadStream)
{
CSIPResponseElements* self = new(ELeave)CSIPResponseElements;
CleanupStack::PushL (self);
self->DoInternalizeL(aReadStream);
return self;
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::DoInternalizeL
// -----------------------------------------------------------------------------
//
void CSIPResponseElements::DoInternalizeL (RReadStream& aReadStream)
{
iStatusCode = aReadStream.ReadUint16L();
TUint32 reasonPhraseLength = aReadStream.ReadUint32L();
HBufC8* reasonPhraseBuf = HBufC8::NewLC(reasonPhraseLength);
TPtr8 reasonPhrasePtr(reasonPhraseBuf->Des());
aReadStream.ReadL(reasonPhrasePtr,reasonPhraseLength);
iReasonPhrase = SIPStrings::Pool().OpenFStringL(reasonPhrasePtr);
CleanupStack::PopAndDestroy(reasonPhraseBuf);
iMessageElements = CSIPMessageElements::InternalizeL(aReadStream);
}
// -----------------------------------------------------------------------------
// CSIPResponseElements::ExternalizeL
// -----------------------------------------------------------------------------
//
void CSIPResponseElements::ExternalizeL (RWriteStream& aWriteStream) const
{
aWriteStream.WriteUint16L(iStatusCode);
TPtrC8 reasonPhrase(iReasonPhrase.DesC());
aWriteStream.WriteUint32L(reasonPhrase.Length());
aWriteStream.WriteL(reasonPhrase);
iMessageElements->ExternalizeL(aWriteStream);
}