/*
* Copyright (c) 2004 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:
*
*/
#include "SipResponseElements.h"
#include "SipMessageElements.h"
#include "sipstrings.h"
#include "SipStrConsts.h"
#include "musunittesting.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)
{
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);
}