Msrp/MsrpHeader/src/CMsrpStatusHeader.cpp
branchMSRP_FrameWork
changeset 58 cdb720e67852
child 59 b365c991829c
equal deleted inserted replaced
25:505ad3f0ce5c 58:cdb720e67852
       
     1 /*
       
     2 * =============================================================================
       
     3 *  Name          : CMsrpStatusHeader.cpp
       
     4 *  Part of       : MSRP API
       
     5 *  Version       : %version: 1 % << Don't touch! Updated by Synergy at check-out.
       
     6 *
       
     7 *  Copyright © 2007 Nokia. All rights reserved.
       
     8 *  This material, including documentation and any related
       
     9 *  computer programs, is protected by copyright controlled by
       
    10 *  Nokia Corporation. All rights are reserved. Copying,
       
    11 *  including reproducing, storing, adapting or translating, any
       
    12 *  or all of this material requires the prior written consent of
       
    13 *  Nokia Corporation. This material also contains confidential
       
    14 *  information which may not be disclosed to others without the
       
    15 *  prior written consent of Nokia Corporation.
       
    16 * =============================================================================
       
    17 */
       
    18 
       
    19 //CLASS HEADER
       
    20 #include "CMsrpStatusHeader.h"
       
    21 
       
    22 // EXTERNAL INCLUDES
       
    23 #include "msrpstrings.h"
       
    24 #include <msrpstrconsts.h>
       
    25 
       
    26 // EXTERNAL INCLUDES
       
    27 #include "MsrpCommon.h"
       
    28 #include "TMSRPHeaderUtil.h"
       
    29 #include "CMSRPResponse.h"
       
    30 
       
    31 // -----------------------------------------------------------------------------
       
    32 // CMSRPStatusHeader::NewLC
       
    33 // -----------------------------------------------------------------------------
       
    34 //
       
    35 EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::NewLC( TInt aStatusCode )
       
    36 	{
       
    37 	CMSRPStatusHeader* self = new (ELeave) CMSRPStatusHeader( aStatusCode );
       
    38     CleanupStack::PushL( self );
       
    39     self->ConstructL( );
       
    40     return self;
       
    41 	}
       
    42 
       
    43 // -----------------------------------------------------------------------------
       
    44 // CMSRPStatusHeader::NewL
       
    45 // -----------------------------------------------------------------------------
       
    46 //
       
    47 EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::NewL( TInt aStatusCode )
       
    48 	{
       
    49 	CMSRPStatusHeader* self = CMSRPStatusHeader::NewLC( aStatusCode );
       
    50 	CleanupStack::Pop( self );
       
    51 	return self;
       
    52 	}
       
    53 
       
    54 // -----------------------------------------------------------------------------
       
    55 // CMSRPStatusHeader::NewL
       
    56 // -----------------------------------------------------------------------------
       
    57 //
       
    58 CMSRPStatusHeader* CMSRPStatusHeader::NewL( )
       
    59 	{
       
    60 	CMSRPStatusHeader* self = new (ELeave) CMSRPStatusHeader( );
       
    61     CleanupStack::PushL( self );
       
    62     self->ConstructL( );
       
    63 	CleanupStack::Pop( self );
       
    64     return self;
       
    65 	}
       
    66 
       
    67 // -----------------------------------------------------------------------------
       
    68 // CMSRPStatusHeader::CMSRPStatusHeader
       
    69 // -----------------------------------------------------------------------------
       
    70 //
       
    71 CMSRPStatusHeader::CMSRPStatusHeader( TInt aStatusCode )
       
    72 	: iStatusCode( aStatusCode )
       
    73     {
       
    74 	}
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CMSRPStatusHeader::CMSRPStatusHeader
       
    78 // -----------------------------------------------------------------------------
       
    79 //
       
    80 CMSRPStatusHeader::CMSRPStatusHeader( )
       
    81     {
       
    82 	}
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CMSRPStatusHeader::ConstructL
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 void CMSRPStatusHeader::ConstructL( ) const
       
    89 	{
       
    90 	MSRPStrings::OpenL();
       
    91 	}
       
    92 
       
    93 // -----------------------------------------------------------------------------
       
    94 // CMSRPStatusHeader::~CMSRPStatusHeader
       
    95 // -----------------------------------------------------------------------------
       
    96 //
       
    97 EXPORT_C CMSRPStatusHeader::~CMSRPStatusHeader()
       
    98 	{
       
    99 	MSRPStrings::Close();
       
   100 	}
       
   101 
       
   102 // -----------------------------------------------------------------------------
       
   103 // CMSRPStatusHeader::InternalizeValueL
       
   104 // -----------------------------------------------------------------------------
       
   105 //
       
   106 EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::InternalizeValueL(
       
   107 	RReadStream& aReadStream )
       
   108 	{
       
   109 	CMSRPStatusHeader* self = CMSRPStatusHeader::NewL( );
       
   110 	CleanupStack::PushL( self );
       
   111 	self->DoInternalizeValueL( aReadStream );
       
   112 	CleanupStack::Pop( self );
       
   113 	return self;
       
   114 	}
       
   115 
       
   116 // -----------------------------------------------------------------------------
       
   117 // CMSRPStatusHeader::SetStartPosition
       
   118 // -----------------------------------------------------------------------------
       
   119 //
       
   120 EXPORT_C void CMSRPStatusHeader::SetStatusCode( TInt aStatusCode )
       
   121 	{
       
   122 	iStatusCode = aStatusCode;
       
   123 	}
       
   124 
       
   125 // -----------------------------------------------------------------------------
       
   126 // CMSRPStatusHeader::StatusCode
       
   127 // -----------------------------------------------------------------------------
       
   128 //
       
   129 EXPORT_C TInt CMSRPStatusHeader::StatusCode( ) const
       
   130 	{
       
   131 	return iStatusCode;
       
   132 	}
       
   133 
       
   134 // -----------------------------------------------------------------------------
       
   135 // CMSRPStatusHeader::DoInternalizeValueL
       
   136 // -----------------------------------------------------------------------------
       
   137 //
       
   138 void CMSRPStatusHeader::DoInternalizeValueL( RReadStream& aReadStream )
       
   139 	{
       
   140 	TUint32 valueLength = aReadStream.ReadUint32L();
       
   141     if( valueLength > 0 )
       
   142         {
       
   143 		HBufC8* tempString = HBufC8::NewLC( valueLength );
       
   144 	    TPtr8 tempValue( tempString->Des() );
       
   145 	    aReadStream.ReadL( tempValue, valueLength );
       
   146 		iStatusCode = TMSRPHeaderUtil::ConvertToNumber( tempString->Des() );
       
   147 		CleanupStack::PopAndDestroy( tempString );
       
   148 		}
       
   149 	else
       
   150 		{
       
   151 		User::Leave( KErrArgument );
       
   152 		}
       
   153 	}
       
   154 
       
   155 // -----------------------------------------------------------------------------
       
   156 // CMSRPStatusHeader::ExternalizeValueL
       
   157 // From CSIPHeaderBase:
       
   158 // -----------------------------------------------------------------------------
       
   159 //
       
   160 void CMSRPStatusHeader::ExternalizeValueL( RWriteStream& aWriteStream ) const
       
   161 	{
       
   162 	TBuf8< KMaxLengthOfStatusCode > value;
       
   163 	// status code
       
   164 	value.AppendNum( iStatusCode, EDecimal );
       
   165 	aWriteStream.WriteInt32L( value.Length() );
       
   166 	aWriteStream.WriteL( value );
       
   167 	}
       
   168 
       
   169 // -----------------------------------------------------------------------------
       
   170 // CMSRPStatusHeader::Name
       
   171 // -----------------------------------------------------------------------------
       
   172 //
       
   173 RStringF CMSRPStatusHeader::Name() const
       
   174 	{
       
   175 	return MSRPStrings::StringF( MSRPStrConsts::EStatus );
       
   176 	}
       
   177 
       
   178 // -----------------------------------------------------------------------------
       
   179 // CMSRPStatusHeader::ToTextValueL
       
   180 // -----------------------------------------------------------------------------
       
   181 //
       
   182 HBufC8* CMSRPStatusHeader::ToTextValueL() const
       
   183 	{
       
   184 	TBuf8< KMaxLengthOfStatusCodeValue > statusCodeLine;
       
   185 	TMSRPHeaderUtil::AppendStringL(
       
   186 		MSRPStrings::StringF( MSRPStrConsts::EStatusNameSpace ).DesC(), statusCodeLine );
       
   187 	TMSRPHeaderUtil::AppendStringL( KSpaceChar, statusCodeLine );
       
   188 
       
   189 	statusCodeLine.AppendNum( iStatusCode, EDecimal );
       
   190 	TMSRPHeaderUtil::AppendStringL( KSpaceChar, statusCodeLine );
       
   191 
       
   192 	// then is the reason string
       
   193 	// possible codes are defined here
       
   194 	switch( iStatusCode )
       
   195 		{
       
   196 		case EAllOk:
       
   197 			{
       
   198 			TMSRPHeaderUtil::AppendStringL(
       
   199 				MSRPStrings::StringF(
       
   200 				MSRPStrConsts::EAllOk ).DesC(), statusCodeLine );
       
   201 			break;
       
   202 			}
       
   203 		case EUnintelligibleRequest:
       
   204 			{
       
   205 			TMSRPHeaderUtil::AppendStringL(
       
   206 				MSRPStrings::StringF(
       
   207 				MSRPStrConsts::EUnintelligibleRequest ).DesC(), statusCodeLine );
       
   208 			break;
       
   209 			}
       
   210 		case EActionNotAllowed:
       
   211 			{
       
   212 			TMSRPHeaderUtil::AppendStringL(
       
   213 				MSRPStrings::StringF(
       
   214 				MSRPStrConsts::EActionNotAllowed ).DesC(), statusCodeLine );
       
   215 			break;
       
   216 			}
       
   217 		case ETimeout:
       
   218 			{
       
   219 			TMSRPHeaderUtil::AppendStringL(
       
   220 				MSRPStrings::StringF(
       
   221 				MSRPStrConsts::ETimeout ).DesC(), statusCodeLine );
       
   222 			break;
       
   223 			}
       
   224 		case EStopSending:
       
   225 			{
       
   226 			TMSRPHeaderUtil::AppendStringL(
       
   227 				MSRPStrings::StringF(
       
   228 				MSRPStrConsts::EStopSending ).DesC(), statusCodeLine );
       
   229 			break;
       
   230 			}
       
   231 		case EMimeNotUnderstood:
       
   232 			{
       
   233 			TMSRPHeaderUtil::AppendStringL(
       
   234 				MSRPStrings::StringF(
       
   235 				MSRPStrConsts::EMimeNotUnderstood ).DesC(), statusCodeLine );
       
   236 			break;
       
   237 			}
       
   238 		case EParameterOutOfBounds:
       
   239 			{
       
   240 			TMSRPHeaderUtil::AppendStringL(
       
   241 				MSRPStrings::StringF(
       
   242 				MSRPStrConsts::EParameterOutOfBounds ).DesC(), statusCodeLine );
       
   243 			break;
       
   244 			}
       
   245 		case ESessionDoesNotExist:
       
   246 			{
       
   247 			TMSRPHeaderUtil::AppendStringL(
       
   248 				MSRPStrings::StringF(
       
   249 				MSRPStrConsts::ESessionDoesNotExist ).DesC(), statusCodeLine );
       
   250 			break;
       
   251 			}
       
   252 		case EUnknownRequestMethod:
       
   253 			{
       
   254 			TMSRPHeaderUtil::AppendStringL(
       
   255 				MSRPStrings::StringF(
       
   256 				MSRPStrConsts::EUnknownRequestMethod ).DesC(), statusCodeLine );
       
   257 			break;
       
   258 			}
       
   259 		case ESessionAlreadyBound:
       
   260 			{
       
   261 			TMSRPHeaderUtil::AppendStringL(
       
   262 				MSRPStrings::StringF(
       
   263 				MSRPStrConsts::ESessionAlreadyBound ).DesC(), statusCodeLine );
       
   264 			break;
       
   265 			}
       
   266 
       
   267 		default:
       
   268 			{
       
   269 			// not a valid code
       
   270 			User::Leave( KErrArgument );
       
   271 			break;
       
   272 			}
       
   273 		}
       
   274 
       
   275 
       
   276 	HBufC8* tempString = HBufC8::NewLC( statusCodeLine.Length() );
       
   277 	*tempString = statusCodeLine;
       
   278 	CleanupStack::Pop( tempString );
       
   279 
       
   280 	return tempString;
       
   281 	}
       
   282 
       
   283 // -----------------------------------------------------------------------------
       
   284 // CMSRPStatusHeader::__DbgTestInvariant
       
   285 // -----------------------------------------------------------------------------
       
   286 //
       
   287 void CMSRPStatusHeader::__DbgTestInvariant() const
       
   288 	{
       
   289 #if defined(_DEBUG)
       
   290 	// to be defined
       
   291 #endif
       
   292 	}
       
   293 
       
   294 // End of File