smsprotocols/smsstack/wapprot/Src/wapdgrm.cpp
branchRCL_3
changeset 66 07a122eea281
parent 65 630d2f34d719
equal deleted inserted replaced
65:630d2f34d719 66:07a122eea281
     1 // Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    10 //
    10 //
    11 // Contributors:
    11 // Contributors:
    12 //
    12 //
    13 // Description:
    13 // Description:
    14 //
    14 //
    15 
       
    16 
       
    17 #include "OstTraceDefinitions.h"
       
    18 #ifdef OST_TRACE_COMPILER_IN_USE
       
    19 #include "wapdgrmTraces.h"
       
    20 #endif
       
    21 
    15 
    22 #include "gsmubuf.h"
    16 #include "gsmubuf.h"
    23 #include "gsmuset.h"
    17 #include "gsmuset.h"
    24 #include "Gsmuelem.h"
    18 #include "Gsmuelem.h"
    25 #include "Gsmumsg.h"
    19 #include "Gsmumsg.h"
    32 //
    26 //
    33 // For incoming short message
    27 // For incoming short message
    34 //
    28 //
    35 CWapDatagram* CWapDatagram::NewL(const CSmsMessage& aSms)
    29 CWapDatagram* CWapDatagram::NewL(const CSmsMessage& aSms)
    36     {
    30     {
    37     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_1, "CWapDatagram::NewL(): aSms=0x%08x", (TInt) &aSms);
    31     LOGWAPPROT2("CWapDatagram::NewL(): aSms=0x%08x", (TInt) &aSms);
    38 
    32 
    39     CWapDatagram* datagram = new (ELeave)CWapDatagram();
    33     CWapDatagram* datagram = new (ELeave)CWapDatagram();
    40 
    34 
    41     CleanupStack::PushL(datagram);
    35     CleanupStack::PushL(datagram);
    42     datagram->ConstructL(aSms);
    36     datagram->ConstructL(aSms);
    43     CleanupStack::Pop();
    37     CleanupStack::Pop();
    44 
    38 
    45     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_2, "CWapDatagram::NewL(): iFromPort: %d", datagram->iFromPort);
    39     LOGWAPPROT2("CWapDatagram::NewL(): iFromPort: %d", datagram->iFromPort);
    46     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_3, "CWapDatagram::NewL(): iToPort: %d", datagram->iToPort);
    40     LOGWAPPROT2("CWapDatagram::NewL(): iToPort: %d", datagram->iToPort);
    47     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_4, "CWapDatagram::NewL(): iReference: %d", datagram->iReference);
    41     LOGWAPPROT2("CWapDatagram::NewL(): iReference: %d", datagram->iReference);
    48     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_5, "CWapDatagram::NewL(): iTotalSegments: %d", datagram->iTotalSegments);
    42     LOGWAPPROT2("CWapDatagram::NewL(): iTotalSegments: %d", datagram->iTotalSegments);
    49     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_6, "CWapDatagram::NewL(): iSegmentNumber: %d", datagram->iSegmentNumber);
    43     LOGWAPPROT2("CWapDatagram::NewL(): iSegmentNumber: %d", datagram->iSegmentNumber);
    50     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_7, "CWapDatagram::NewL(): iIsComplete: %d", datagram->iIsComplete);
    44     LOGWAPPROT2("CWapDatagram::NewL(): iIsComplete: %d", datagram->iIsComplete);
    51     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_8, "CWapDatagram::NewL(): iReference: %d", datagram->iReference);
    45     LOGWAPPROT2("CWapDatagram::NewL(): iReference: %d", datagram->iReference);
    52     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_9, "CWapDatagram::NewL(): iIsTextHeader: %d", datagram->iIsTextHeader);
    46     LOGWAPPROT2("CWapDatagram::NewL(): iIsTextHeader: %d", datagram->iIsTextHeader);
    53     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_10, "CWapDatagram::NewL(): iLogServerId: %d", datagram->iLogServerId);
    47     LOGWAPPROT2("CWapDatagram::NewL(): iLogServerId: %d", datagram->iLogServerId);
    54     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_11, "CWapDatagram::NewL(): i16BitPorts: %d", datagram->i16BitPorts);
    48     LOGWAPPROT2("CWapDatagram::NewL(): i16BitPorts: %d", datagram->i16BitPorts);
    55 
    49 
    56     // assert destination port
    50     // assert destination port
    57 	if (datagram->i16BitPorts)
    51 	if (datagram->i16BitPorts)
    58 		{
    52 		{
    59 		if (datagram->iToPort>=0  &&  datagram->iToPort<=65535)
    53 		if (datagram->iToPort>=0  &&  datagram->iToPort<=65535)
    60 			{
    54 			{
    61 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_12, "iToPort OK");
    55 			LOGWAPPROT1("iToPort OK");
    62 			}
    56 			}
    63 		else
    57 		else
    64 			{
    58 			{
    65 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_13, "iToPort FAILED");
    59 			LOGWAPPROT1("iToPort FAILED");
    66 			}
    60 			}
    67 		}
    61 		}
    68     else
    62     else
    69 		{
    63 		{
    70         if (datagram->iToPort>=0  &&  datagram->iToPort<=255)
    64         if (datagram->iToPort>=0  &&  datagram->iToPort<=255)
    71 			{
    65 			{
    72 		    OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_14, "iToPort OK");
    66 		    LOGWAPPROT1("iToPort OK");
    73 			}
    67 			}
    74 		else
    68 		else
    75 			{
    69 			{
    76 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_15, "iToPort FAILED");
    70 			LOGWAPPROT1("iToPort FAILED");
    77 			}
    71 			}
    78 		}
    72 		}
    79 
    73 
    80 	if (datagram->i16BitPorts)
    74 	if (datagram->i16BitPorts)
    81 		{
    75 		{
    82 		if (datagram->iFromPort>=0  &&  datagram->iFromPort<=65535)
    76 		if (datagram->iFromPort>=0  &&  datagram->iFromPort<=65535)
    83 			{
    77 			{
    84 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_16, "iFromPort OK");
    78 			LOGWAPPROT1("iFromPort OK");
    85 			}
    79 			}
    86 		else
    80 		else
    87 			{
    81 			{
    88 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_17, "iFromPort FAILED");
    82 			LOGWAPPROT1("iFromPort FAILED");
    89 			}
    83 			}
    90 		}
    84 		}
    91     else
    85     else
    92 		{
    86 		{
    93         if (datagram->iFromPort>=0  &&  datagram->iFromPort<=255)
    87         if (datagram->iFromPort>=0  &&  datagram->iFromPort<=255)
    94 			{
    88 			{
    95 		    OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_18, "iFromPort OK");
    89 		    LOGWAPPROT1("iFromPort OK");
    96 			}
    90 			}
    97 		else
    91 		else
    98 			{
    92 			{
    99 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL_19, "iFromPort FAILED");
    93 			LOGWAPPROT1("iFromPort FAILED");
   100 			}
    94 			}
   101 		}
    95 		}
   102 
    96 
   103     return datagram;
    97     return datagram;
   104     } // CWapDatagram::NewL
    98     } // CWapDatagram::NewL
   107 //
   101 //
   108 // For outgoing short messages
   102 // For outgoing short messages
   109 //
   103 //
   110 CWapDatagram* CWapDatagram::NewL(const TDesC8& aSendBuffer)
   104 CWapDatagram* CWapDatagram::NewL(const TDesC8& aSendBuffer)
   111     {
   105     {
   112     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_NEWL1_1, "CWapDatagram::NewL(): aSendBuffer=0x%08x", (TInt) &aSendBuffer);
   106     LOGWAPPROT2("CWapDatagram::NewL(): aSendBuffer=0x%08x", (TInt) &aSendBuffer);
   113 
   107 
   114     CWapDatagram* datagram = new (ELeave)CWapDatagram();
   108     CWapDatagram* datagram = new (ELeave)CWapDatagram();
   115 
   109 
   116     CleanupStack::PushL(datagram);
   110     CleanupStack::PushL(datagram);
   117     datagram->Construct(aSendBuffer);
   111     datagram->Construct(aSendBuffer);
   121     } // CWapDatagram::NewL
   115     } // CWapDatagram::NewL
   122 
   116 
   123 
   117 
   124 CWapDatagram::~CWapDatagram()
   118 CWapDatagram::~CWapDatagram()
   125     {
   119     {
   126     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_DTOR_1, "CWapDatagram::~CWapDatagram()");
   120     LOGWAPPROT1("CWapDatagram::~CWapDatagram()");
   127 
   121 
   128 	delete iRecvbuf;
   122 	delete iRecvbuf;
   129     delete iBuffer;
   123     delete iBuffer;
   130     delete iSegment;
   124     delete iSegment;
   131     } // CWapDatagram::~CWapDatagram
   125     } // CWapDatagram::~CWapDatagram
   135 // What about service centre address ?
   129 // What about service centre address ?
   136 // aSmsMessageArray contains CSmsMessage objects
   130 // aSmsMessageArray contains CSmsMessage objects
   137 //
   131 //
   138 void CWapDatagram::EncodeConcatenatedMessagesL(RFs& aFs, CArrayPtr<CSmsMessage>& aSmsMessageArray)
   132 void CWapDatagram::EncodeConcatenatedMessagesL(RFs& aFs, CArrayPtr<CSmsMessage>& aSmsMessageArray)
   139     {
   133     {
   140     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_ENCODECONCATENATEDMESSAGESL_1, "CWapDatagram::EncodeConcatenatedMessagesL(): %d messages", aSmsMessageArray.Count());
   134     LOGWAPPROT2("CWapDatagram::EncodeConcatenatedMessagesL(): %d messages", aSmsMessageArray.Count());
   141 
   135 
   142     // Couple of checkings makes sense
   136     // Couple of checkings makes sense
   143     __ASSERT_DEBUG(iToPort >=0 && iToAddress.Length()>=0
   137     __ASSERT_DEBUG(iToPort >=0 && iToAddress.Length()>=0
   144             && (iUserDataSettings.Alphabet()==TSmsDataCodingScheme::ESmsAlphabet8Bit
   138             && (iUserDataSettings.Alphabet()==TSmsDataCodingScheme::ESmsAlphabet8Bit
   145                  || iUserDataSettings.Alphabet()==TSmsDataCodingScheme::ESmsAlphabet7Bit),
   139                  || iUserDataSettings.Alphabet()==TSmsDataCodingScheme::ESmsAlphabet7Bit),
   199         }
   193         }
   200     } // CWapDatagram::EncodeConcatenatedMessagesL
   194     } // CWapDatagram::EncodeConcatenatedMessagesL
   201 
   195 
   202 void CWapDatagram::DecodeConcatenatedMessagesL(CArrayPtr<TSegmentData>& aSmsMessageArray)
   196 void CWapDatagram::DecodeConcatenatedMessagesL(CArrayPtr<TSegmentData>& aSmsMessageArray)
   203     {
   197     {
   204     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_DECODECONCATENATEDMESSAGESL_1, "CWapDatagram::DecodeConcatenatedMessagesL()");
   198     LOGWAPPROT1("CWapDatagram::DecodeConcatenatedMessagesL()");
   205 
   199 
   206     // The TSegmentData elements are in the random order in the array
   200     // The TSegmentData elements are in the random order in the array
   207     TInt Count = aSmsMessageArray.Count();
   201     TInt Count = aSmsMessageArray.Count();
   208     TInt i=0;
   202     TInt i=0;
   209 
   203 
   365 //
   359 //
   366 // Outgoing
   360 // Outgoing
   367 //
   361 //
   368 void CWapDatagram::Construct(const TDesC8& aSendBuffer)
   362 void CWapDatagram::Construct(const TDesC8& aSendBuffer)
   369     {
   363     {
   370     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_CONSTRUCT_1, "CWapDatagram::Construct()");
   364     LOGWAPPROT1("CWapDatagram::Construct()");
   371 	
   365 	
   372 	// Set version number to 1, as we have had to make 
   366 	// Set version number to 1, as we have had to make 
   373 	// changes to CWapDatagram for CR0929
   367 	// changes to CWapDatagram for CR0929
   374 	iVersionNumber = EFirstVersion;
   368 	iVersionNumber = EFirstVersion;
   375 	
   369 	
   383 // encoded in information elements (IE) although it is not
   377 // encoded in information elements (IE) although it is not
   384 // a requirement
   378 // a requirement
   385 //
   379 //
   386 void CWapDatagram::ConstructL(const CSmsMessage& aSms)
   380 void CWapDatagram::ConstructL(const CSmsMessage& aSms)
   387     {
   381     {
   388     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_CONSTRUCTL_1, "CWapDatagram::ConstructL()");
   382     LOGWAPPROT1("CWapDatagram::ConstructL()");
   389 
   383 
   390 	// Set version number to 1, as we have had to make 
   384 	// Set version number to 1, as we have had to make 
   391 	// changes to CWapDatagram for CR0929
   385 	// changes to CWapDatagram for CR0929
   392 	iVersionNumber = EFirstVersion;
   386 	iVersionNumber = EFirstVersion;
   393 
   387 
   450 // Copies contents of iBuffer to iSmsBuffer
   444 // Copies contents of iBuffer to iSmsBuffer
   451 // Allocates iSegment object
   445 // Allocates iSegment object
   452 //
   446 //
   453 void CWapDatagram::GetDatagramSettingsL()
   447 void CWapDatagram::GetDatagramSettingsL()
   454     {
   448     {
   455     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_GETDATAGRAMSETTINGSL_1, "CWapDatagram::GetDatagramSettingsL()");
   449     LOGWAPPROT1("CWapDatagram::GetDatagramSettingsL()");
   456 
   450 
   457 	/* The WAP stack always receives 8 bit WAP datagrams from the SMS Stack as a single CSmsMessage.
   451 	/* The WAP stack always receives 8 bit WAP datagrams from the SMS Stack as a single CSmsMessage.
   458 	This is because 8 bit WAP messages which cannot be encoded into a single PDU are sent in a segmented SMS
   452 	This is because 8 bit WAP messages which cannot be encoded into a single PDU are sent in a segmented SMS
   459 	message which is reassembled inside the SMS Stack; the SMS Stack always passes the WAP stack
   453 	message which is reassembled inside the SMS Stack; the SMS Stack always passes the WAP stack
   460 	a single CSmsMessage containing a single WAP message regardless of the message length.
   454 	a single CSmsMessage containing a single WAP message regardless of the message length.
   495 //
   489 //
   496 // Set WAP datagram private members from information element structures
   490 // Set WAP datagram private members from information element structures
   497 //
   491 //
   498 void CWapDatagram::GetDatagramSettings(const CSmsMessage& aSms)
   492 void CWapDatagram::GetDatagramSettings(const CSmsMessage& aSms)
   499     {
   493     {
   500     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_GETDATAGRAMSETTINGS_1, "CWapDatagram::GetDatagramSettings()");
   494     LOGWAPPROT1("CWapDatagram::GetDatagramSettings()");
   501 
   495 
   502     const CSmsPDU& Pdu = aSms.SmsPDU();
   496     const CSmsPDU& Pdu = aSms.SmsPDU();
   503 
   497 
   504     __ASSERT_DEBUG(Pdu.Type()==CSmsPDU::ESmsDeliver || Pdu.Type()==CSmsPDU::ESmsSubmit, // this line is testing purposes only
   498     __ASSERT_DEBUG(Pdu.Type()==CSmsPDU::ESmsDeliver || Pdu.Type()==CSmsPDU::ESmsSubmit, // this line is testing purposes only
   505 			Panic(KPanicUsageError));
   499 			Panic(KPanicUsageError));
   528 // Set Alphabet information of iUserDataSettings before calling the method
   522 // Set Alphabet information of iUserDataSettings before calling the method
   529 // Converts from 7/8-bit to UNICODE
   523 // Converts from 7/8-bit to UNICODE
   530 //
   524 //
   531 void CWapDatagram::ConvertL(const TDesC8& aNarrowChars,CSmsBufferBase& aSmsBuffer) const
   525 void CWapDatagram::ConvertL(const TDesC8& aNarrowChars,CSmsBufferBase& aSmsBuffer) const
   532     {
   526     {
   533     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_CONVERTL_1, "CWapDatagram::ConvertL()");
   527     LOGWAPPROT1("CWapDatagram::ConvertL()");
   534 
   528 
   535 	// Convert the data in segments of specified max size
   529 	// Convert the data in segments of specified max size
   536 	const TInt KMaxSegmentSize=CSmsBufferBase::EMaxBufLength;
   530 	const TInt KMaxSegmentSize=CSmsBufferBase::EMaxBufLength;
   537 
   531 
   538 	// Create converter and reassembler
   532 	// Create converter and reassembler
   559 //
   553 //
   560 // Converts from UNICODE to 7/8-bit
   554 // Converts from UNICODE to 7/8-bit
   561 //
   555 //
   562 void CWapDatagram::ConvertL(const CSmsBufferBase& aSmsBuffer,HBufC8** aNarrowChars) const
   556 void CWapDatagram::ConvertL(const CSmsBufferBase& aSmsBuffer,HBufC8** aNarrowChars) const
   563     {
   557     {
   564     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_CONVERTL1_1, "CWapDatagram::ConvertL()");
   558     LOGWAPPROT1("CWapDatagram::ConvertL()");
   565 
   559 
   566 	// Convert the data in segments of specified max size
   560 	// Convert the data in segments of specified max size
   567 	const TInt KMaxSegmentSize=CSmsBufferBase::EMaxBufLength;
   561 	const TInt KMaxSegmentSize=CSmsBufferBase::EMaxBufLength;
   568 
   562 
   569 	// Delete the existing buffer
   563 	// Delete the existing buffer
   604     } // CWapDatagram::ConvertL
   598     } // CWapDatagram::ConvertL
   605 
   599 
   606 
   600 
   607 void CWapDatagram::SetSmsMessageSettingsL(CSmsMessage& aSmsMessage, TBool aSetPorts)
   601 void CWapDatagram::SetSmsMessageSettingsL(CSmsMessage& aSmsMessage, TBool aSetPorts)
   608     {
   602     {
   609     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_SETSMSMESSAGESETTINGSL_1, "CWapDatagram::SetSmsMessageSettingsL()");
   603     LOGWAPPROT1("CWapDatagram::SetSmsMessageSettingsL()");
   610 
   604 
   611     CSmsPDU& Pdu = aSmsMessage.SmsPDU();
   605     CSmsPDU& Pdu = aSmsMessage.SmsPDU();
   612 
   606 
   613     aSmsMessage.SetToFromAddressL(iToAddress);
   607     aSmsMessage.SetToFromAddressL(iToAddress);
   614     aSmsMessage.SetUserDataSettingsL(iUserDataSettings);
   608     aSmsMessage.SetUserDataSettingsL(iUserDataSettings);
   675 //
   669 //
   676 // Return the location of the link
   670 // Return the location of the link
   677 //
   671 //
   678 TInt CWapDatagram::LinkOffset()
   672 TInt CWapDatagram::LinkOffset()
   679 	{
   673 	{
   680 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_LINKOFFSET_1, "CWapDatagram::LinkOffset()");
   674 	LOGWAPPROT1("CWapDatagram::LinkOffset()");
   681 
   675 
   682 
   676 
   683 	return _FOFF(CWapDatagram,iLink);
   677 	return _FOFF(CWapDatagram,iLink);
   684 	} // CWapDatagram::LinkOffset
   678 	} // CWapDatagram::LinkOffset
   685 
   679 
   686 
   680 
   687 TBool CWapDatagram::SetUTCOffset(const TTimeIntervalSeconds& aUTCOffset)
   681 TBool CWapDatagram::SetUTCOffset(const TTimeIntervalSeconds& aUTCOffset)
   688     {
   682     {
   689     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_SETUTCOFFSET_1, "CWapDatagram::SetUTCOffset()");
   683     LOGWAPPROT1("CWapDatagram::SetUTCOffset()");
   690 
   684 
   691     TBool rc = ETrue;
   685     TBool rc = ETrue;
   692     TInt utcOffset = aUTCOffset.Int();
   686     TInt utcOffset = aUTCOffset.Int();
   693 
   687 
   694     if ((utcOffset <=  CSmsMessage::EMaximumSeconds) &&
   688     if ((utcOffset <=  CSmsMessage::EMaximumSeconds) &&
   696        {
   690        {
   697        iUTCOffset = utcOffset;
   691        iUTCOffset = utcOffset;
   698        }
   692        }
   699     else
   693     else
   700        {
   694        {
   701        OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CWAPDATAGRAM_SETUTCOFFSET_2, "CWapDatagram:SetUTCOffset offset [out of range] = %d",utcOffset);
   695        LOGWAPPROT2("CWapDatagram:SetUTCOffset offset [out of range] = %d",utcOffset);
   702        rc = EFalse;
   696        rc = EFalse;
   703        }
   697        }
   704 
   698 
   705     return rc;
   699     return rc;
   706     } // CWapDatagram::SetUTCOffset
   700     } // CWapDatagram::SetUTCOffset