applayerpluginsandutils/httpprotocolplugins/httpheadercodec/chttpgeneralheaderwriter.cpp
branchRCL_3
changeset 11 8f055b80aa5b
parent 0 b16258d2340f
child 19 c0c2f28ace9c
equal deleted inserted replaced
9:9015645363c8 11:8f055b80aa5b
    20 #include <httperr.h>
    20 #include <httperr.h>
    21 
    21 
    22 #include "CHeaderField.h"
    22 #include "CHeaderField.h"
    23 
    23 
    24 _LIT8(KSemiSpaceSep,"; ");
    24 _LIT8(KSemiSpaceSep,"; ");
       
    25 _LIT8(KCommaSpaceSep,", ");
    25 
    26 
    26 CHttpGeneralHeaderWriter* CHttpGeneralHeaderWriter::NewL(RStringPool aStringPool)
    27 CHttpGeneralHeaderWriter* CHttpGeneralHeaderWriter::NewL(RStringPool aStringPool)
    27 /** 
    28 /** 
    28 	Factory constructor.
    29 	Factory constructor.
    29 	@internalComponent
    30 	@internalComponent
    89 	@leave		CHttpWriter::DoTokenCsvListHeaderL
    90 	@leave		CHttpWriter::DoTokenCsvListHeaderL
    90 	@todo		Is there any point in this? Why not call DoTokenCsvListHeaderL()
    91 	@todo		Is there any point in this? Why not call DoTokenCsvListHeaderL()
    91 				directly
    92 				directly
    92 */
    93 */
    93 	{
    94 	{
    94 	DoTokenCsvListHeaderL(aHeader, KErrHttpEncodeCacheControl);
    95 	THeaderFieldPartIter iter = aHeader.PartsL();
       
    96     iter.First();
       
    97 	if (iter.AtEnd())
       
    98 	   User::Leave(KErrHttpEncodeCacheControl);
       
    99 	
       
   100 	aHeader.BeginRawDataL();
       
   101 	do
       
   102 	    {
       
   103 	    const CHeaderFieldPart* part = iter();
       
   104 	    if(part == NULL)
       
   105 	        User::Leave(KErrHttpEncodeCacheControl);	    
       
   106 	    THTTPHdrVal ptVal = part->Value();
       
   107 	    if (ptVal.Type() != THTTPHdrVal::KStrFVal)
       
   108 	        User::Leave(KErrHttpEncodeCacheControl);
       
   109 	    const TDesC8& val = ptVal.StrF().DesC(); 
       
   110 	    if(val.Length() > 0)
       
   111 	        {
       
   112 	        aHeader.WriteRawDataL(val);
       
   113 	        }
       
   114 	    else
       
   115 	        {
       
   116 	        // Now we must have part as the strF value is KNulLDesC8
       
   117 	        THeaderFieldParamIter iter2 = part->Parameters();
       
   118 	        if(!iter2.AtEnd())
       
   119 	            {
       
   120 	            const CHeaderFieldParam* param = iter2();
       
   121 	            aHeader.WriteRawDataL(param->Name().DesC());
       
   122 	            aHeader.WriteRawDataL('=');
       
   123 	            THTTPHdrVal val2 = param->Value();
       
   124 	            if(val2.Type() == THTTPHdrVal::KTIntVal)
       
   125 	                {
       
   126 	                TBuf8<32> desc;
       
   127 	                desc.AppendNum(val2.Int());
       
   128 	                aHeader.WriteRawDataL(desc);
       
   129 	                }
       
   130 	            else if(val2.Type() == THTTPHdrVal::KStrFVal)
       
   131 	                {
       
   132 	                aHeader.WriteRawDataL(param->Name().DesC());
       
   133 	                }	            
       
   134 	            }
       
   135 	        }
       
   136 	    ++iter;
       
   137 	    if(!iter.AtEnd())
       
   138 	        aHeader.WriteRawDataL(KCommaSpaceSep());
       
   139 	    
       
   140 	    }while(!iter.AtEnd());
       
   141 	aHeader.CommitRawData();
    95 	}
   142 	}
    96 
   143 
    97 void CHttpGeneralHeaderWriter::EncodeConnectionL(RHeaderField& aHeader) const
   144 void CHttpGeneralHeaderWriter::EncodeConnectionL(RHeaderField& aHeader) const
    98 /**
   145 /**
    99 	Decodes the Connection header. RFC2616 section 14.10 - 
   146 	Decodes the Connection header. RFC2616 section 14.10 -