realtimenetprots/sipfw/SIP/Codec/src/CSIPResponse.cpp
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Name          : CSIPResponse.cpp
       
    15 // Part of       : SIP Codec
       
    16 // Version       : SIP/4.0 
       
    17 //
       
    18 
       
    19 
       
    20 
       
    21 #include "sipresponse.h"
       
    22 #include "sipcodecerr.h"
       
    23 #include "SIPSyntaxCheck.h"
       
    24 #include "sipstrings.h"
       
    25 #include "sipstrconsts.h"
       
    26 #include "_sipcodecdefs.h"
       
    27 
       
    28 _LIT8 (KSpace, " ");
       
    29 _LIT8 (KTUintFormat, "%u");
       
    30 const TUint KMinimumResponseCode = 100;
       
    31 const TUint K200ResponseCode = 200;
       
    32 const TUint K300ResponseCode = 300;
       
    33 const TUint K400ResponseCode = 400;
       
    34 const TUint K500ResponseCode = 500;
       
    35 const TUint K600ResponseCode = 600;
       
    36 const TUint KMaximumResponseCode = 699;
       
    37 
       
    38 // -----------------------------------------------------------------------------
       
    39 // CSIPResponse::NewL
       
    40 // -----------------------------------------------------------------------------
       
    41 //
       
    42 EXPORT_C CSIPResponse* CSIPResponse::NewL(TUint aResponseCode,
       
    43 										  RStringF aReasonPhrase)
       
    44 	{
       
    45 	CSIPResponse* self = CSIPResponse::NewLC (aResponseCode, aReasonPhrase);
       
    46 	CleanupStack::Pop(self);
       
    47 	return self;
       
    48 	}
       
    49 
       
    50 // -----------------------------------------------------------------------------
       
    51 // CSIPResponse::NewLC
       
    52 // -----------------------------------------------------------------------------
       
    53 //
       
    54 EXPORT_C CSIPResponse* CSIPResponse::NewLC(TUint aResponseCode,
       
    55 										   RStringF aReasonPhrase)
       
    56 	{
       
    57 	CSIPResponse* self = new(ELeave)CSIPResponse;
       
    58 	CleanupStack::PushL(self);
       
    59 	self->ConstructL(aResponseCode, aReasonPhrase);
       
    60 	return self;
       
    61 	}
       
    62 
       
    63 // -----------------------------------------------------------------------------
       
    64 // CSIPResponse::NewL
       
    65 // -----------------------------------------------------------------------------
       
    66 //
       
    67 CSIPResponse* CSIPResponse::NewL()
       
    68 	{
       
    69 	CSIPResponse* self = CSIPResponse::NewLC();
       
    70 	CleanupStack::Pop(self);
       
    71 	return self;
       
    72 	}
       
    73 
       
    74 // -----------------------------------------------------------------------------
       
    75 // CSIPResponse::NewLC
       
    76 // -----------------------------------------------------------------------------
       
    77 //
       
    78 CSIPResponse* CSIPResponse::NewLC()
       
    79 	{
       
    80 	CSIPResponse* self = new(ELeave)CSIPResponse;
       
    81 	CleanupStack::PushL(self);
       
    82 	self->ConstructL();
       
    83 	return self;
       
    84 	}
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CSIPResponse::CSIPResponse
       
    88 // -----------------------------------------------------------------------------
       
    89 //
       
    90 CSIPResponse::CSIPResponse()
       
    91 	{
       
    92 	}
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // CSIPResponse::ConstructL
       
    96 // -----------------------------------------------------------------------------
       
    97 //
       
    98 void CSIPResponse::ConstructL(TUint aResponseCode, RStringF aReasonPhrase)
       
    99 	{
       
   100 	CSIPMessage::ConstructL();
       
   101 	SetResponseCodeL(aResponseCode);
       
   102 	SetReasonPhraseL(aReasonPhrase);
       
   103 	}
       
   104 
       
   105 // -----------------------------------------------------------------------------
       
   106 // CSIPResponse::ConstructL
       
   107 // -----------------------------------------------------------------------------
       
   108 //
       
   109 void CSIPResponse::ConstructL()
       
   110 	{
       
   111 	CSIPMessage::ConstructL ();
       
   112 	}
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // CSIPResponse::~CSIPResponse
       
   116 // -----------------------------------------------------------------------------
       
   117 //
       
   118 EXPORT_C CSIPResponse::~CSIPResponse()
       
   119 	{
       
   120 	iReasonPhrase.Close();
       
   121 	}
       
   122 
       
   123 // -----------------------------------------------------------------------------
       
   124 // CSIPResponse::IsRequest
       
   125 // -----------------------------------------------------------------------------
       
   126 //
       
   127 EXPORT_C TBool CSIPResponse::IsRequest() const
       
   128 	{
       
   129 	return EFalse;
       
   130 	}
       
   131 
       
   132 // -----------------------------------------------------------------------------
       
   133 // CSIPResponse::SetReasonPhraseL
       
   134 // -----------------------------------------------------------------------------
       
   135 //
       
   136 EXPORT_C void CSIPResponse::SetReasonPhraseL (RStringF aReasonPhrase)
       
   137 	{
       
   138 	SetReasonPhraseL(aReasonPhrase.DesC());
       
   139 	}
       
   140 
       
   141 // -----------------------------------------------------------------------------
       
   142 // CSIPResponse::ReasonPhrase
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 EXPORT_C RStringF CSIPResponse::ReasonPhrase() const
       
   146 	{
       
   147 	return iReasonPhrase;
       
   148 	}
       
   149 
       
   150 // -----------------------------------------------------------------------------
       
   151 // CSIPResponse::SetResponseCodeL
       
   152 // -----------------------------------------------------------------------------
       
   153 //
       
   154 EXPORT_C void CSIPResponse::SetResponseCodeL (TUint aResponseCode)
       
   155 	{
       
   156 	__ASSERT_ALWAYS (aResponseCode >= KMinimumResponseCode && 
       
   157 	                 aResponseCode <= KMaximumResponseCode,
       
   158 					 User::Leave(KErrSipCodecResponseCode));
       
   159 
       
   160 	iResponseCode = aResponseCode;
       
   161 	}
       
   162 
       
   163 // -----------------------------------------------------------------------------
       
   164 // CSIPResponse::ResponseCode
       
   165 // -----------------------------------------------------------------------------
       
   166 //
       
   167 EXPORT_C TUint CSIPResponse::ResponseCode() const
       
   168 	{
       
   169 	return iResponseCode;
       
   170 	}
       
   171 
       
   172 // -----------------------------------------------------------------------------
       
   173 // CSIPResponse::Type
       
   174 // -----------------------------------------------------------------------------
       
   175 //	
       
   176 EXPORT_C CSIPResponse::TType CSIPResponse::Type () const
       
   177     {
       
   178     TType type;
       
   179     if (iResponseCode < K200ResponseCode)
       
   180         {
       
   181         type = E1XX;
       
   182         }
       
   183     else if (iResponseCode < K300ResponseCode)
       
   184         {
       
   185         type = E2XX;
       
   186         }
       
   187     else if (iResponseCode < K400ResponseCode)
       
   188         {
       
   189         type = E3XX;
       
   190         }
       
   191     else if (iResponseCode < K500ResponseCode)
       
   192         {
       
   193         type = E4XX;
       
   194         }
       
   195     else if (iResponseCode < K600ResponseCode)
       
   196         {
       
   197         type = E5XX;
       
   198         }
       
   199     else
       
   200         {
       
   201         type = E6XX;
       
   202         }
       
   203     return type;
       
   204     }
       
   205 
       
   206 // -----------------------------------------------------------------------------
       
   207 // CSIPResponse::IsErrorResponse
       
   208 // -----------------------------------------------------------------------------
       
   209 //	
       
   210 EXPORT_C TBool CSIPResponse::IsErrorResponse () const
       
   211     {
       
   212     return (iResponseCode >= K300ResponseCode);
       
   213     }
       
   214 
       
   215 // -----------------------------------------------------------------------------
       
   216 // CSIPResponse::ToTextFirstLineLC
       
   217 // From CSIPMessage:
       
   218 // -----------------------------------------------------------------------------
       
   219 //
       
   220 HBufC8* CSIPResponse::ToTextFirstLineLC () const
       
   221 	{
       
   222 	TPtrC8 sipVersion(SIPVersion().DesC());
       
   223 	TPtrC8 reasonPhrase(ReasonPhrase().DesC());
       
   224 	const TInt KMaxResponseAsTextLength = 3;
       
   225 	TBuf8<KMaxResponseAsTextLength> responseCodeAsText;
       
   226 	responseCodeAsText.Format(KTUintFormat, iResponseCode);
       
   227 
       
   228 	TUint statusLineLength = sipVersion.Length() + KSpace().Length() +
       
   229 							 responseCodeAsText.Length() + KSpace().Length() +
       
   230 							 reasonPhrase.Length();
       
   231 
       
   232 	HBufC8* statusLine = HBufC8::NewLC(statusLineLength);
       
   233 	TPtr8 statusLinePtr(statusLine->Des());
       
   234 	statusLinePtr.Append(sipVersion);
       
   235 	statusLinePtr.Append(KSpace);
       
   236 	statusLinePtr.Append(responseCodeAsText);
       
   237 	statusLinePtr.Append(KSpace);
       
   238 	statusLinePtr.Append(reasonPhrase);
       
   239 
       
   240 	return statusLine;
       
   241 	}
       
   242 	
       
   243 // -----------------------------------------------------------------------------
       
   244 // CSIPResponse::SetReasonPhraseL
       
   245 // -----------------------------------------------------------------------------
       
   246 //
       
   247 void CSIPResponse::SetReasonPhraseL (const TDesC8& aReasonPhrase)
       
   248 	{
       
   249 	if (!SIPSyntaxCheck::ReasonPhrase(aReasonPhrase))
       
   250 		{
       
   251 		User::Leave(KErrSipCodecReasonPhrase);
       
   252 		}
       
   253 	RStringF tmpString = SIPStrings::Pool().OpenFStringL(aReasonPhrase);
       
   254 	iReasonPhrase.Close();
       
   255 	iReasonPhrase = tmpString;
       
   256 	}