realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSIPMsgAssembler.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/CSIPMsgAssembler.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,267 @@
+// Copyright (c) 2002-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          : CSIPMsgAssembler.cpp
+// Part of       : ConnectionMgr
+// Version       : SIP/4.0 
+//
+
+
+
+
+#include "SipLogs.h"
+#include "SipAssert.h"
+#include "sipmessage.h"
+
+#include "TTCPMsgInit.h"
+#include "TTCPMsgHeaderStart.h"
+#include "TTCPMsgHeaderEnd.h"
+#include "TTCPMsgContentStart.h"
+#include "TTCPMsgContentEnd.h"
+#include "TTCPCompMsgStart.h"
+#include "TTCPCompMsgEnd.h"
+#include "TTCPMsgComplete.h"
+
+#include "CSIPMsgAssembler.h"
+#include "MSIPMsgAssemblerOwner.h"
+#include "MSigCompController.h"
+
+
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::NewL
+// -----------------------------------------------------------------------------
+//
+CSIPMsgAssembler* CSIPMsgAssembler::NewL ( MSIPMsgAssemblerOwner& aMsgOwner,
+		                                   MSigCompController&    aSigComp )
+	{
+	CSIPMsgAssembler* self = CSIPMsgAssembler::NewLC(aMsgOwner, aSigComp);
+	CleanupStack::Pop();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::NewLC
+// -----------------------------------------------------------------------------
+//
+CSIPMsgAssembler* CSIPMsgAssembler::NewLC ( MSIPMsgAssemblerOwner& aMsgOwner,
+		                                    MSigCompController&    aSigComp )
+	{
+	CSIPMsgAssembler* self = new (ELeave) CSIPMsgAssembler(aMsgOwner, aSigComp);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::~CSIPMsgAssembler
+// -----------------------------------------------------------------------------
+//
+CSIPMsgAssembler::~CSIPMsgAssembler ()
+	{
+	delete iMsgBuf;
+	delete iMessage;	
+	}
+  
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::CSIPMsgAssembler
+// -----------------------------------------------------------------------------
+//  
+CSIPMsgAssembler::CSIPMsgAssembler(MSIPMsgAssemblerOwner& aMsgOwner,
+		                           MSigCompController&    aSigComp)
+ : iMsgOwner  ( aMsgOwner ),
+   iSigComp   ( aSigComp ),
+   iStates    ( EMsgMaxStates ),
+   iStateValue( MMsgAssemblerContext::EMsgInit ),
+   iIsSigComp ( EFalse ),
+   iUnConsumedBytes( 0 )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPMsgAssembler::ConstructL ()
+	{
+	iMsgBuf = CBufFlat::NewL(100);
+		
+	iStates.AppendL( TTCPMsgInit( *this ),
+					 sizeof( TTCPMsgInit ) );
+	iStates.AppendL( TTCPMsgHeaderStart( *this ),
+					 sizeof( TTCPMsgHeaderStart ) );
+	iStates.AppendL( TTCPMsgHeaderEnd( *this ),
+					 sizeof( TTCPMsgHeaderEnd ) );
+	iStates.AppendL( TTCPMsgContentStart( *this ),
+					 sizeof( TTCPMsgContentStart ) );
+	iStates.AppendL( TTCPMsgContentEnd( *this ),
+					 sizeof( TTCPMsgContentEnd ) );
+	iStates.AppendL( TTCPCompMsgStart( *this ),
+					 sizeof( TTCPCompMsgStart ) );
+	iStates.AppendL( TTCPCompMsgEnd( *this ),
+					 sizeof( TTCPCompMsgEnd ) );
+	iStates.AppendL( TTCPMsgComplete( *this ),
+					 sizeof( TTCPMsgComplete ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::InputL
+// -----------------------------------------------------------------------------
+//
+void CSIPMsgAssembler::InputL ( HBufC8* aData, TUint& aNextLength )
+	{
+	__ASSERT_DEBUG(aData != 0,
+		User::Panic(_L("CSIPMsgAssembler::InputL, aData == 0"),
+		KErrArgument));
+
+	__ASSERT_DEBUG(aData->Length() != 0,
+		User::Panic(_L("CSIPMsgAssembler::InputL, aData->Length() == 0"),
+		KErrArgument));
+
+	
+	aNextLength = CSIPMsgAssembler::EMsgBufferSize;
+	
+	TCleanupItem cleanupItem( ResetState, this );
+	CleanupStack::PushL( cleanupItem );
+
+    TPtr8 dataPtr = aData->Des();
+	CurrentState().DataReceivedL( dataPtr, aNextLength );
+	
+	CleanupStack::Pop(); // cleanupItem
+	
+	delete aData;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::MsgOwner
+// -----------------------------------------------------------------------------
+//
+MSIPMsgAssemblerOwner& CSIPMsgAssembler::MsgOwner()
+	{
+	return iMsgOwner;
+	}
+	
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::SigComp
+// -----------------------------------------------------------------------------
+//	
+MSigCompController& CSIPMsgAssembler::SigComp()
+	{
+	return iSigComp;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::MsgBuffer
+// -----------------------------------------------------------------------------
+//		
+CBufFlat& CSIPMsgAssembler::MsgBuffer()
+	{
+	return *iMsgBuf;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::Message
+// -----------------------------------------------------------------------------
+//	
+CSIPMessage* CSIPMsgAssembler::Message() 
+	{
+	return iMessage;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::SetMessage
+// -----------------------------------------------------------------------------
+//	
+void CSIPMsgAssembler::SetMessage( CSIPMessage* aMessage )
+	{
+	delete iMessage;
+	iMessage = aMessage;
+	}
+  
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::DetachMsg
+// -----------------------------------------------------------------------------
+//      
+void CSIPMsgAssembler::DetachMsg()
+	{
+	iMessage = NULL;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::ChangeState
+// -----------------------------------------------------------------------------
+//   	
+void CSIPMsgAssembler::ChangeState( 
+	MMsgAssemblerContext::TTCPMsgStateValue aStateValue )
+	{
+	iStateValue = aStateValue;
+	}
+     
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::CurrentState
+// -----------------------------------------------------------------------------
+//    
+TTCPMsgState& CSIPMsgAssembler::CurrentState()
+	{
+	return const_cast< TTCPMsgState& >( iStates.At( iStateValue ) );
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::SetIsSigComp
+// -----------------------------------------------------------------------------
+// 	
+void CSIPMsgAssembler::SetIsSigComp( TBool aIsSigComp )
+    {
+    iIsSigComp = aIsSigComp;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::IsSigComp
+// -----------------------------------------------------------------------------
+//     
+TBool CSIPMsgAssembler::IsSigComp() const
+    {
+    return iIsSigComp;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::SetUnConsumedBytes
+// -----------------------------------------------------------------------------
+//     
+void CSIPMsgAssembler::SetUnConsumedBytes( TInt aUnConsumedBytes )
+    {
+    iUnConsumedBytes = aUnConsumedBytes;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::UnConsumedBytes
+// -----------------------------------------------------------------------------
+//     
+TInt CSIPMsgAssembler::UnConsumedBytes() const
+    {
+    return iUnConsumedBytes;
+    }
+	
+// -----------------------------------------------------------------------------
+// CSIPMsgAssembler::ResetState
+// -----------------------------------------------------------------------------
+//
+void CSIPMsgAssembler::ResetState ( TAny* aMsgAssembler )
+	{
+	__SIP_ASSERT_RETURN( aMsgAssembler, KErrGeneral );
+
+	CSIPMsgAssembler* msgAssembler = 
+		reinterpret_cast<CSIPMsgAssembler*>( aMsgAssembler );
+
+	msgAssembler->ChangeState( MMsgAssemblerContext::EMsgInit );	
+	}