diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTCPMsgState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/ConnectionMgr/src/TTCPMsgState.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,103 @@ +// 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 : TTCPMsgState.cpp +// Part of : ConnectionMgr +// Version : SIP/4.0 +// + + + +#include "TTCPMsgState.h" +#include "MMsgAssemblerContext.h" + + +// ---------------------------------------------------------------------------- +// TTCPMsgState::TTCPMsgState +// ---------------------------------------------------------------------------- +// +TTCPMsgState::TTCPMsgState( MMsgAssemblerContext& aMsgAssembler ) + : iMsgAssembler( aMsgAssembler ) + { + } + +// ---------------------------------------------------------------------------- +// TTCPMsgState::FindHeaderStartPosition +// ---------------------------------------------------------------------------- +// +TInt TTCPMsgState::FindHeaderStartPosition( TDesC8& aData ) + { + TLex8 lex(aData); + lex.SkipSpace(); + return lex.Offset(); + } + +// ---------------------------------------------------------------------------- +// TTCPMsgState::FindHeaderEndPosition +// ---------------------------------------------------------------------------- +// +TInt TTCPMsgState::FindHeaderEndPosition( TDesC8& aData ) + { + _LIT8(KCRLFCRLF, "\r\n\r\n"); + _LIT8(KCRCRLF, "\r\r\n"); + _LIT8(KLFCRLF, "\n\r\n"); + + TInt endPosition = KErrNotFound; + TInt cRLFCRLFPosition = aData.Find(KCRLFCRLF); + TInt cRCRLFPosition = aData.Find(KCRCRLF); + TInt lFCRLFPosition = aData.Find(KLFCRLF); + + if (cRLFCRLFPosition >= 0) + { + endPosition = cRLFCRLFPosition + KCRLFCRLF().Length(); + } + + if (cRCRLFPosition >= 0) + { + GetHeaderPartEndPosition(cRCRLFPosition, + KCRCRLF().Length(), + endPosition); + } + + if (lFCRLFPosition >= 0) + { + GetHeaderPartEndPosition(lFCRLFPosition, + KLFCRLF().Length(), + endPosition); + } + + return endPosition; + } + +// ---------------------------------------------------------------------------- +// TTCPMsgState::GetHeaderPartEndPosition +// ---------------------------------------------------------------------------- +// +void TTCPMsgState::GetHeaderPartEndPosition ( TInt aEndMarkPosition, + TInt aEndMarkLength, + TInt& aHeaderEndPosition ) + { + aEndMarkPosition = aEndMarkPosition + aEndMarkLength; + + if (aHeaderEndPosition > 0) + { + if (aEndMarkPosition < aHeaderEndPosition ) + { + aHeaderEndPosition = aEndMarkPosition; + } + } + else + { + aHeaderEndPosition = aEndMarkPosition; + } + }