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