realtimenetprots/sipfw/ClientResolver/Client/src/CSIPClientDiscoverySerializer.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/ClientResolver/Client/src/CSIPClientDiscoverySerializer.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,150 @@
+// Copyright (c) 2005-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          : CSIPClientDiscoverySerializer.cpp
+// Part of       : SIP Client Resolver
+// Version       : 1.0
+//
+
+
+
+// INCLUDES
+#include "CSIPClientDiscoverySerializer.h"
+#include "sipstrings.h"
+#include "sipcontenttypeheader.h"
+#include "siprequest.h"
+#include "uricontainer.h"
+#include "sipresponse.h"
+#include "sipstrconsts.h"
+
+
+// CONSTANTS
+const TInt KBufExpandSize=100;
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::NewL
+// ----------------------------------------------------------------------------
+//
+CSIPClientDiscoverySerializer* CSIPClientDiscoverySerializer::NewL()
+    {
+    CSIPClientDiscoverySerializer* self = 
+                                    CSIPClientDiscoverySerializer::NewLC ();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::NewL
+// ----------------------------------------------------------------------------
+//
+CSIPClientDiscoverySerializer* CSIPClientDiscoverySerializer::NewLC()
+    {
+    CSIPClientDiscoverySerializer* self = 
+                                    new (ELeave) CSIPClientDiscoverySerializer;
+    CleanupStack::PushL (self);
+    self->ConstructL ();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::CSIPClientDiscoverySerializer
+// ----------------------------------------------------------------------------
+//
+CSIPClientDiscoverySerializer::CSIPClientDiscoverySerializer ()
+	{
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSIPClientDiscoverySerializer::ConstructL ()
+	{
+	SIPStrings::OpenL();
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::~CSIPCSSerializer
+// ----------------------------------------------------------------------------
+//
+CSIPClientDiscoverySerializer::~CSIPClientDiscoverySerializer ()
+	{
+	SIPStrings::Close();
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::ExternalizeSIPRequestL
+// ----------------------------------------------------------------------------
+//
+CBufFlat* CSIPClientDiscoverySerializer::ExternalizeSIPRequestL(
+    CSIPRequest& aRequest)
+	{
+	CBufFlat* buf = CBufFlat::NewL(KBufExpandSize);
+	CleanupStack::PushL(buf);
+	RBufWriteStream writeStream(*buf,0);
+	writeStream.PushL();
+	ExternalizeRequestL(aRequest, writeStream);
+	writeStream.Pop();
+	writeStream.Close();
+	CleanupStack::Pop(buf);
+	return buf;
+	}
+
+// ----------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::InternalizeSIPResponseL
+// ----------------------------------------------------------------------------
+//
+CSIPResponse* CSIPClientDiscoverySerializer::InternalizeSIPResponseL(
+    const TDesC8& aResponse)
+    {
+    RDesReadStream readStream(aResponse);
+    CleanupClosePushL(readStream);
+    
+    TUint responseCode = readStream.ReadUint16L();
+    TUint32 reasonPhraseLength = readStream.ReadUint32L();
+    HBufC8* reasonPhraseBuf = HBufC8::NewLC(reasonPhraseLength);
+    TPtr8 reasonPhrasePtr(reasonPhraseBuf->Des());
+    readStream.ReadL(reasonPhrasePtr,reasonPhraseLength);
+    RStringF reasonPhrase = SIPStrings::Pool().OpenFStringL(reasonPhrasePtr);
+    CleanupStack::PopAndDestroy(reasonPhraseBuf);
+    CleanupClosePushL(reasonPhrase);
+    CSIPResponse* response = CSIPResponse::NewL(responseCode, reasonPhrase);
+    CleanupStack::PopAndDestroy(1); //reasonPhrase 
+    CleanupStack::PushL(response);
+    response->InternalizeHeadersL(readStream);
+    CleanupStack::Pop(response);
+    
+    readStream.Pop();
+    readStream.Close();
+ 
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// CSIPClientDiscoverySerializer::ExternalizeRequestL
+// ---------------------------------------------------------------------------
+//
+void CSIPClientDiscoverySerializer::ExternalizeRequestL(
+    CSIPRequest& aRequest, 
+    RWriteStream& aWriteStream)
+    {
+    aWriteStream.WriteUint16L(aRequest.Method().DesC().Length());
+    aWriteStream.WriteL (aRequest.Method().DesC());
+    CURIContainer* uriContainer = aRequest.RequestURI();
+	uriContainer->ExternalizeL(aWriteStream);
+	aRequest.ExternalizeHeadersL(aWriteStream);
+    }
+
+//  End of File