--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingintegrationtest/Te_Msg/src/TeHttpPacket.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,137 @@
+// Copyright (c) 2003-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:
+//
+
+#include <e32base.h>
+#include "TeHttpPacket.h"
+
+const TInt KThree = 3;
+
+THTTPMessage::THTTPMessage()
+:iVers(_L8("HTTP/1.1")), iFieldsNumb(0), iCur(0)
+ {
+ }
+
+void THTTPField::Get(TDes8& aBuf)
+ {
+ aBuf.Copy(iFld);
+ aBuf.Append(_L(": "));
+ aBuf.Append(iVal);
+ aBuf.Append(_L("\r\n"));
+ }
+
+void THTTPField::Field(TDes8& aBuf)
+ {
+ aBuf.Copy(iFld);
+ }
+
+void THTTPField::Value(TDes8& aBuf)
+ {
+ aBuf.Copy(iVal);
+ }
+
+TInt THTTPMessage::ParseMessage(const TDesC8& aMes)
+ {
+ TBuf8<512> tk;
+ iCur=0;
+ NextToken(aMes,tk);
+ if(tk.Compare(iVers))
+ return -1;
+ NextToken(aMes,tk);//status
+ iStat.Copy(tk);
+ NextToken(aMes,tk);//comment
+ iPhrase.Copy(tk);
+ TBuf8<2048> val;
+ iFieldsNumb=0;
+ while(!NextMessHeader(aMes,tk,val))
+ iFlds[iFieldsNumb++].Set(tk,val);
+
+ return 0;
+ }
+
+void THTTPMessage::AddHeaderField(const TDesC8& aField,const TDesC8& aVal)
+ {
+ iFlds[iFieldsNumb++].Set(aField,aVal);
+ }
+void THTTPMessage::GetHeader(TDes8& aBuf)
+ {
+ aBuf.Copy(iMeth);
+ aBuf.Append(' ');
+ aBuf.Append(iURI);
+ aBuf.Append(' ');
+ aBuf.Append(iVers);
+ aBuf.Append(_L("\r\n"));
+ TBuf8 <256> tmp;
+ for(TInt i=0;i<iFieldsNumb;i++)
+ {
+ iFlds[i].Get(tmp);
+ aBuf.Append(tmp);
+ }
+ aBuf.Append(_L("\r\n"));
+ }
+TBool THTTPMessage::FindField(const TDesC8& aTag, TDes8& aVal)
+ {
+ TBuf8<256> tmp;
+ TBool find = EFalse;
+ for(TInt i=0;i<iFieldsNumb;i++)
+ {
+ iFlds[i].Field(tmp);
+ if(!aTag.Compare(tmp))
+ {
+ find = ETrue;
+ iFlds[i].Value(aVal);
+ break; //in the case of muliple fields same tag need special treatment
+ }
+ }
+ return find;
+ }
+
+TInt THTTPMessage::NextMessHeader(const TDesC8& aSrc,TDes8& aField,TDes8& aVal)
+ {//!!simplification won't work if not <field>: <value> forme
+ NextToken(aSrc,aField);
+ if (!aField.Length())
+ return -1;
+ aField.SetLength(aField.Length()-1);// to cut the ":"
+ Content(aSrc,aVal);
+ return 0;
+ }
+TInt THTTPMessage::NextToken(const TDesC8& aSrc, TDes8& aTok)
+ {
+ aTok.Zero();
+ if (aSrc[iCur]==' ' && aSrc.Length()>iCur) iCur++;
+ while(aSrc.Length()>(iCur+KThree) && aSrc[iCur]!=' ' && aSrc[iCur]!='\r' )
+ aTok.Append(aSrc[iCur++]);
+ if(aSrc[iCur]=='\r')
+ iCur++;
+ if(aSrc[iCur]=='\n')
+ iCur++;
+
+ return 0;
+ }
+
+TInt THTTPMessage::Content(const TDesC8& aSrc, TDes8& aCont)
+ {
+ aCont.Zero();
+ if (aSrc[iCur]==' ' && aSrc.Length()>iCur) iCur++;
+ while(aSrc[iCur]!='\r' && aSrc.Length()>(iCur+3))
+ aCont.Append(aSrc[iCur++]);
+ if(aSrc[iCur]=='\r')
+ iCur++;
+ if(aSrc[iCur]=='\n')
+ iCur++;
+ return 0;
+ }
+
+
+