imservices/ossprotocoladaptation/src/presencepublishing/cpublishownpresencerequest.cpp
branchRCL_3
changeset 14 7797b2f86d2b
parent 13 b6f2a363adf7
child 16 cfe5eb8bb9ca
equal deleted inserted replaced
13:b6f2a363adf7 14:7797b2f86d2b
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  IMplementaion for publising own presence
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <ximpprotocolconnectionhost.h>
       
    20 #include "cpublishownpresencerequest.h"
       
    21 #include "mossprotocolconnectionmanager.h"
       
    22 #include "ossprotocolpluginlogger.h"
       
    23 #include "waittimer.h"
       
    24 
       
    25 #include "cossprotocolconnectionmanager.h"
       
    26 
       
    27 #include <ximpobjectfactory.h>
       
    28 #include <ximpobjectcollection.h>
       
    29 #include <protocolpresencepublishingdatahost.h>
       
    30 
       
    31 #include <presentitygroupinfo.h>
       
    32 #include <presenceinfofieldvaluetext.h>
       
    33 #include <presenceinfofieldvalueenum.h>
       
    34 #include <presentitygroupmemberinfo.h>
       
    35 #include <ximpidentity.h>
       
    36 #include <presenceinfo.h>
       
    37 #include <personpresenceinfo.h>
       
    38 #include <servicepresenceinfo.h>
       
    39 #include <devicepresenceinfo.h>
       
    40 #include <presenceinfofield.h>
       
    41 #include <presenceinfofieldcollection.h>
       
    42 #include <presenceinfofieldvaluebinary.h>
       
    43 
       
    44 #include <stdlib.h>
       
    45 #include "stringutils.h"
       
    46 #include <string.h>
       
    47 #include "msgliterals.h"
       
    48 #include "msg_enums.h"
       
    49 #include "xmppparameters.h"
       
    50 #include "waittimer.h"
       
    51 #include <e32math.h>
       
    52 #include "ossprotocoladaptutils.h"
       
    53 #include <avabilitytext.h>
       
    54 
       
    55 // ======== MEMBER FUNCTIONS ========
       
    56 
       
    57 // ---------------------------------------------------------------------------
       
    58 // CPublishOwnPresencerequest::CPublishOwnPresencerequest
       
    59 // ---------------------------------------------------------------------------
       
    60 //
       
    61 CPublishOwnPresencerequest::CPublishOwnPresencerequest( 
       
    62 									MOSSProtocolConnectionManager& aConnMan,
       
    63 									TXIMPRequestId aRequestId ) :
       
    64     CActive( EPriorityNormal ),
       
    65     iRequestId( aRequestId ),
       
    66     iConnMan( aConnMan )
       
    67     {
       
    68     LOGGER ( TXT("::CPublishOwnPresencerequest Start") );
       
    69     CActiveScheduler::Add( this );
       
    70     
       
    71     LOGGER ( TXT("::CPublishOwnPresencerequest End") );
       
    72     }
       
    73 
       
    74 
       
    75 // ---------------------------------------------------------------------------
       
    76 // CPublishOwnPresencerequest::ConstructL
       
    77 // ---------------------------------------------------------------------------
       
    78 //
       
    79 void CPublishOwnPresencerequest::ConstructL()
       
    80     {
       
    81     LOGGER ( TXT("CPublishOwnPresencerequest::ConstructL Start-End") );
       
    82     
       
    83 	
       
    84     }
       
    85 
       
    86 
       
    87 // ---------------------------------------------------------------------------
       
    88 // CPublishOwnPresencerequest::NewL
       
    89 // ---------------------------------------------------------------------------
       
    90 //
       
    91 CPublishOwnPresencerequest* CPublishOwnPresencerequest::NewL(
       
    92     MOSSProtocolConnectionManager& aConnMan,
       
    93     TXIMPRequestId aRequestId )
       
    94     {
       
    95     LOGGER ( TXT("CPublishOwnPresencerequest::NewL Start") );
       
    96     
       
    97     CPublishOwnPresencerequest* self = new( ELeave ) 
       
    98     			CPublishOwnPresencerequest( aConnMan, aRequestId );
       
    99     CleanupStack::PushL( self );
       
   100     self->ConstructL();
       
   101     CleanupStack::Pop( self );
       
   102     
       
   103     LOGGER ( TXT("CPublishOwnPresencerequest::NewL End") );
       
   104     return self;
       
   105     }
       
   106 
       
   107 
       
   108 // ---------------------------------------------------------------------------
       
   109 // CPublishOwnPresencerequest::NewLC
       
   110 // ---------------------------------------------------------------------------
       
   111 //
       
   112 CPublishOwnPresencerequest* CPublishOwnPresencerequest::NewLC(
       
   113     MOSSProtocolConnectionManager& aConnMan,
       
   114     TXIMPRequestId aRequestId )
       
   115     {
       
   116     LOGGER ( TXT("CPublishOwnPresencerequest::NewLC Start") );
       
   117     
       
   118     CPublishOwnPresencerequest* self = 
       
   119     					CPublishOwnPresencerequest::NewL(aConnMan, aRequestId);
       
   120     CleanupStack::PushL( self );
       
   121     
       
   122     LOGGER ( TXT("CPublishOwnPresencerequest::NewLC End") );
       
   123     return self;
       
   124     }
       
   125 
       
   126 // ---------------------------------------------------------------------------
       
   127 // CPublishOwnPresencerequest::~CPublishOwnPresencerequest
       
   128 // ---------------------------------------------------------------------------
       
   129 //
       
   130 CPublishOwnPresencerequest::~CPublishOwnPresencerequest()
       
   131     {
       
   132     LOGGER ( TXT("::~CPublishOwnPresencerequest Start") );
       
   133     
       
   134 	CActive::Cancel();
       
   135     
       
   136     delete iOwnPresenceInfo;
       
   137     iOwnPresenceInfo = NULL;
       
   138     LOGGER ( TXT("::~CPublishOwnPresencerequest End") );
       
   139     }
       
   140 
       
   141 
       
   142 // ---------------------------------------------------------------------------
       
   143 // CPublishOwnPresencerequest::DoCancel()
       
   144 // ---------------------------------------------------------------------------
       
   145 //
       
   146 void CPublishOwnPresencerequest::DoCancel()
       
   147     {
       
   148     LOGGER ( TXT("CPublishOwnPresencerequest::DoCancel Start") );
       
   149     
       
   150   //  iConnMan.DataHandler().CancelSending( iSendId );
       
   151     
       
   152     LOGGER ( TXT("CPublishOwnPresencerequest::DoCancel End") );
       
   153     }
       
   154 
       
   155 
       
   156 // ---------------------------------------------------------------------------
       
   157 // CPublishOwnPresencerequest::RunL()
       
   158 // ---------------------------------------------------------------------------
       
   159 //
       
   160 void CPublishOwnPresencerequest::RunL()
       
   161     {
       
   162     LOGGER ( TXT("CPublishOwnPresencerequest::RunL Start") );
       
   163 	message_hdr_resp* msg_struct = NULL;
       
   164 	User::LeaveIfError ( iStatus.Int() );
       
   165     char* pResponse = NULL;  
       
   166 	pResponse = iConnMan.DataHandler().ResponseL ( iSendId );
       
   167 
       
   168 	msg_struct = ( message_hdr_resp* )pResponse ;
       
   169 	if( !( msg_struct->response ) )
       
   170 		{
       
   171 		switch( msg_struct->error_type )
       
   172 			{
       
   173 
       
   174 			default:  //for all other error codes like ssl related are mapped to general error
       
   175 			iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, KXIMPErrServiceGeneralError );
       
   176 			break;       
       
   177 			}	
       
   178 		}
       
   179 	else
       
   180 		{
       
   181 		if( iOwnPresenceInfo )
       
   182 			{
       
   183 			// set or clear avatar
       
   184 			MPresenceCacheWriter2* presenceCacheWriter = MPresenceCacheWriter2::CreateWriterL();
       
   185 			TInt cacheerror = presenceCacheWriter->WritePresenceL( iOwnPresenceInfo );
       
   186 			User::LeaveIfError ( cacheerror);
       
   187 			delete iOwnPresenceInfo ;
       
   188 			iOwnPresenceInfo = NULL;
       
   189 			delete presenceCacheWriter;	
       
   190 			}
       
   191 		iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, KErrNone );
       
   192 		}
       
   193 
       
   194 	free( pResponse );
       
   195 
       
   196 	delete this;
       
   197 
       
   198 	LOGGER ( TXT("CPublishOwnPresencerequest::RunL End") );
       
   199     }
       
   200 
       
   201 
       
   202 // ---------------------------------------------------------------------------
       
   203 // CPublishOwnPresencerequest::RunError
       
   204 // ---------------------------------------------------------------------------
       
   205 //
       
   206 TInt CPublishOwnPresencerequest::RunError( TInt  aError )
       
   207     {
       
   208     LOGGER ( TXT("CPublishOwnPresencerequest::RunError Start") );
       
   209     
       
   210     iConnMan.HandleToHost().HandleRequestCompleted( iRequestId, aError );
       
   211     
       
   212     delete this;
       
   213 	LOGGER ( TXT("CPublishOwnPresencerequest::RunError End") );
       
   214     return KErrNone;
       
   215     }
       
   216 
       
   217 // ---------------------------------------------------------------------------
       
   218 // CPublishOwnPresencerequest::PublishOwnPresenceL
       
   219 // ---------------------------------------------------------------------------
       
   220 //
       
   221 void CPublishOwnPresencerequest::PublishOwnPresenceL(const MPresenceInfo& aPresence)
       
   222     {   
       
   223     LOGGER ( TXT("CPublishOwnPresencerequest::PublishOwnPresenceL Start") );
       
   224 	char *smsg = NULL;
       
   225 	char *tmpmsg = NULL;
       
   226 	message_hdr_req msgHdr = {0,};
       
   227 
       
   228 	int err = 0;
       
   229 	int userLen = 0;
       
   230 	int totalLen = 0;
       
   231     const MPersonPresenceInfo* personPresence = aPresence.PersonPresence();
       
   232     const MPresenceInfoFieldCollection& presenceFields = personPresence->Fields();
       
   233     const MPresenceInfoField& presenceField = presenceFields.FieldAt( 0 );
       
   234     //updating own avtar
       
   235     if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvatar )) )
       
   236         {
       
   237         int messagelength = 0;
       
   238         const MPresenceInfoFieldValueBinary* avtarfield = 
       
   239         TXIMPGetInterface< const MPresenceInfoFieldValueBinary >::From(
       
   240                 presenceField.FieldValue(),
       
   241                 MXIMPBase::EPanicIfUnknown );
       
   242         if( !(avtarfield->MimeType().Length() ))   //clear avatar
       
   243             {
       
   244             // now manufacture the message for the clear avtar
       
   245             msgHdr.message_type = EClearOwnAvatar;
       
   246             messagelength = sizeof( message_hdr_req );
       
   247             smsg = ( char* ) User::AllocLC ( messagelength );
       
   248             memset ( smsg, '\0', messagelength );
       
   249             memcpy( smsg, &msgHdr, messagelength );//copies message header
       
   250             iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, messagelength );
       
   251             SetActive();// signal the scheduler
       
   252             CleanupStack::PopAndDestroy ( 1 ); //smsg
       
   253             }
       
   254         else     //set or update avatar
       
   255             {
       
   256             // now manufacture the message for the avtar
       
   257             msgHdr.message_type = EUpdateOwnAvtar;
       
   258             messagelength = sizeof( message_hdr_req ) + avtarfield->MimeType().Length() + avtarfield->BinaryValue().Length()+2; // 2 for '\0' 's
       
   259             smsg = ( char* ) User::AllocLC ( messagelength );
       
   260             tmpmsg = ( char* ) User::AllocLC ( messagelength );
       
   261             memset ( smsg, '\0', messagelength );
       
   262             memset ( tmpmsg, '\0', messagelength );
       
   263             if( messagelength > (MAX_MSG_SIZE - totalLen) )
       
   264                 msgHdr.continue_flag = 1;
       
   265             memcpy( smsg, &msgHdr, sizeof( message_hdr_req ) );//copies message header
       
   266             totalLen += sizeof( message_hdr_req );
       
   267             OssProtocolAdapUtils::ConvertTDesC8toChar( avtarfield->MimeType(),tmpmsg);
       
   268             userLen = avtarfield->MimeType().Length(); 
       
   269             memcpy( smsg + totalLen, tmpmsg, userLen );//copies mimetype
       
   270             totalLen += userLen + 1; // for '\0'
       
   271             memset ( tmpmsg, '\0', messagelength );
       
   272             OssProtocolAdapUtils::ConvertTDesC8toChar( avtarfield->BinaryValue(),tmpmsg);
       
   273             userLen = avtarfield->BinaryValue().Length();
       
   274             memcpy( smsg + totalLen, tmpmsg, userLen );//copies avtar
       
   275             totalLen += userLen + 1;
       
   276             iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, totalLen );
       
   277             SetActive();// signal the scheduler
       
   278             CleanupStack::PopAndDestroy ( 2 ); //tmpmsg,smsg
       
   279             }
       
   280 		iOwnPresenceInfo = MPresenceBuddyInfo2::NewL();
       
   281 		if( iOwnPresenceInfo )
       
   282 			{
       
   283 			TPtrC ownUserPtr = iConnMan.UserName(); 
       
   284 			HBufC* xspId = NULL;
       
   285 			if( ownUserPtr.Length() )
       
   286 				{
       
   287 				xspId = HBufC::NewLC( ownUserPtr.Length() + iConnMan.ServiceName().Length() + KColon().Length() );
       
   288 				TPtr xspIdPtr( xspId->Des() );
       
   289 				xspIdPtr.Zero();
       
   290 				xspIdPtr.Append(iConnMan.ServiceName() ); // prepend service name
       
   291 				xspIdPtr.Append(KColon);
       
   292 				xspIdPtr.Append( ownUserPtr );
       
   293 				iOwnPresenceInfo->SetIdentityL(xspIdPtr);
       
   294 				CleanupStack::PopAndDestroy(xspId); //xspId	
       
   295 				}
       
   296 			else
       
   297 				{
       
   298 				TPtrC xmppOwnId = iConnMan.XmppParams().UserName();
       
   299 				xspId = HBufC::NewLC( xmppOwnId.Length() + iConnMan.ServiceName().Length() + KColon().Length() );
       
   300 				TPtr xspIdPtr( xspId->Des() );
       
   301 				xspIdPtr.Zero();
       
   302 				xspIdPtr.Append(iConnMan.ServiceName() ); // prepend service name
       
   303 				xspIdPtr.Append(KColon);
       
   304 				xspIdPtr.Append( xmppOwnId );
       
   305 				iOwnPresenceInfo->SetIdentityL(xspIdPtr);
       
   306 				CleanupStack::PopAndDestroy(xspId); //xspId		
       
   307 				}
       
   308 			iOwnPresenceInfo->SetAvatarL( avtarfield->BinaryValue() );
       
   309 			
       
   310 			TInt fieldCount = presenceFields.FieldCount();  
       
   311         	for( TInt i = 1; i < fieldCount; i++ ) // zero index is for avatar 
       
   312 	            {
       
   313 	            const MPresenceInfoField& presenceField = presenceFields.FieldAt( i );
       
   314 	            TBuf8<32> temp = presenceField.FieldType();
       
   315 	            if( !( presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvailabilityEnum )) )
       
   316 	                {
       
   317 	                const MPresenceInfoFieldValueEnum* availability = 
       
   318                		TXIMPGetInterface< const MPresenceInfoFieldValueEnum >::From( 
       
   319                         presenceField.FieldValue(),
       
   320                         MXIMPBase::EPanicIfUnknown );
       
   321                     MPresenceBuddyInfo2::TAvailabilityValues availabe = MPresenceBuddyInfo2::EUnknownAvailability;
       
   322                     switch (availability->Value())
       
   323                         {
       
   324                         case NPresenceInfo::EAvailable :
       
   325                             {
       
   326                             availabe = MPresenceBuddyInfo2::EAvailable;
       
   327                             iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC );
       
   328                             break;
       
   329                             }
       
   330 
       
   331                         case NPresenceInfo::EBusy :
       
   332                             {
       
   333                             availabe = MPresenceBuddyInfo2::EBusy;
       
   334                             iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC );
       
   335                             break;
       
   336                             }
       
   337 
       
   338                         case NPresenceInfo::EHidden :
       
   339                             {
       
   340                             availabe = MPresenceBuddyInfo2::EAvailable;
       
   341                             iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC );
       
   342                             break;
       
   343                             }
       
   344 
       
   345                         case NPresenceInfo::EDoNotDisturb:
       
   346                             {
       
   347                             availabe = MPresenceBuddyInfo2::EBusy;
       
   348                             iOwnPresenceInfo->SetAvailabilityL( availabe,KDndState);
       
   349                             break;
       
   350                             }
       
   351                             
       
   352                         case NPresenceInfo::EAway:
       
   353                             {
       
   354                             availabe = MPresenceBuddyInfo2::EBusy;
       
   355                             iOwnPresenceInfo->SetAvailabilityL( availabe,KAwayState);
       
   356                             break;
       
   357                             }
       
   358                             
       
   359                         case NPresenceInfo::ENotAvailable:
       
   360                             {
       
   361                             availabe = MPresenceBuddyInfo2::ENotAvailable;
       
   362                             iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC );
       
   363                             break;
       
   364                             }
       
   365                             
       
   366                         default:
       
   367                             break;  
       
   368                         }
       
   369 	                }
       
   370 				else if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KStatusMessage )) )
       
   371 	                {
       
   372 	                const MPresenceInfoFieldValueText* statustext = 
       
   373 	                TXIMPGetInterface< const MPresenceInfoFieldValueText >::From(
       
   374 	                        presenceField.FieldValue(),
       
   375 	                        MXIMPBase::EPanicIfUnknown );
       
   376 	                // now manufacture the message for the status text
       
   377 	                if( statustext && statustext->TextValue().Length() )
       
   378 						{
       
   379 						iOwnPresenceInfo->SetStatusMessageL(  statustext->TextValue() );
       
   380 						}
       
   381 	               
       
   382 	                }        
       
   383             	}
       
   384 			
       
   385 			}
       
   386         }
       
   387     else  //for update presence
       
   388         {
       
   389         TInt fieldCount = presenceFields.FieldCount(); 
       
   390         char* availablty = ( char* ) User::AllocLC ( MAX_MSG_SIZE );
       
   391         smsg = ( char* ) User::AllocLC ( MAX_MSG_SIZE );
       
   392         tmpmsg = ( char* ) User::AllocLC ( MAX_MSG_SIZE );
       
   393         msgHdr.message_type = EUpdateOwnPresence;
       
   394         memset ( smsg, '\0', MAX_MSG_SIZE );
       
   395         memset ( tmpmsg, '\0', MAX_MSG_SIZE );
       
   396         memset ( availablty, '\0', MAX_MSG_SIZE );
       
   397         memcpy( smsg, &msgHdr, sizeof( message_hdr_req ) );
       
   398         totalLen += sizeof( message_hdr_req );
       
   399     // updating availability
       
   400     const MPersonPresenceInfo* personPresence = aPresence.PersonPresence();
       
   401     const MPresenceInfoFieldCollection& presenceFields = personPresence->Fields();
       
   402     //TInt fieldCount = presenceFields.FieldCount();   
       
   403         for( TInt i = 0; i < fieldCount; i++ )
       
   404             {
       
   405             const MPresenceInfoField& presenceField = presenceFields.FieldAt( i );
       
   406             TBuf8<32> temp = presenceField.FieldType();
       
   407             LOGGER ( TXT( "ExtractPersonPresenceAttributes:%S "),&presenceField.FieldType());
       
   408  		
       
   409               if( !( presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvailabilityEnum )) )
       
   410                 {
       
   411                 const MPresenceInfoFieldValueEnum* availability = 
       
   412                 TXIMPGetInterface< const MPresenceInfoFieldValueEnum >::From( 
       
   413                         presenceField.FieldValue(),
       
   414                         MXIMPBase::EPanicIfUnknown );
       
   415                  if ( availability->Value() == NPresenceInfo::EAvailable )
       
   416                     {
       
   417                     char* temp = "avaliable";
       
   418                     strcpy(availablty,temp); 
       
   419                     userLen = strlen( availablty );  
       
   420                     memcpy( smsg + totalLen, availablty, userLen );
       
   421                     totalLen += userLen + 1;     
       
   422                     }
       
   423                  else if ( availability->Value() == NPresenceInfo::EBusy )
       
   424                     {
       
   425                     char* temp = "dnd";
       
   426                     strcpy(availablty,temp);
       
   427                     userLen = strlen( availablty );  
       
   428                     memcpy( smsg + totalLen, availablty, userLen );
       
   429                     totalLen += userLen + 1;     
       
   430                     }   
       
   431                  else if(availability->Value() == NPresenceInfo::EAway) 
       
   432                     {		
       
   433                     char* temp = "away";
       
   434                     strcpy(availablty,temp);
       
   435                     userLen = strlen( availablty );  
       
   436                     memcpy( smsg + totalLen, availablty, userLen );
       
   437                     totalLen += userLen + 1;    
       
   438     				}
       
   439                  else if(availability->Value() == NPresenceInfo::EHidden) 
       
   440                     {       
       
   441                      char* temp = "hidden";
       
   442                      strcpy(availablty,temp);
       
   443                      userLen = strlen( availablty );  
       
   444                      memcpy( smsg + totalLen, availablty, userLen );
       
   445                      totalLen += userLen + 1;    
       
   446                     }
       
   447                  else if(availability->Value() == NPresenceInfo::ENotAvailable) 
       
   448                     {       
       
   449                      char* temp = "offline";
       
   450                      strcpy(availablty,temp);
       
   451                      userLen = strlen( availablty );  
       
   452                      memcpy( smsg + totalLen, availablty, userLen );
       
   453                      totalLen += userLen + 1;    
       
   454                     }
       
   455                  
       
   456           }
       
   457     //updating status text
       
   458     
       
   459          if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KStatusMessage )) )
       
   460                 {
       
   461                 const MPresenceInfoFieldValueText* statustext = 
       
   462                 TXIMPGetInterface< const MPresenceInfoFieldValueText >::From(
       
   463                         presenceField.FieldValue(),
       
   464                         MXIMPBase::EPanicIfUnknown );
       
   465                 // now manufacture the message for the status text
       
   466                 if( statustext && statustext->TextValue().Length() )
       
   467                     {
       
   468 		                TPtrC bufferPtr (  statustext->TextValue() );
       
   469 		                err = tbufC16tochar ( bufferPtr, tmpmsg );
       
   470 		                if( KErrNotFound == err)
       
   471 		                    {
       
   472 		                    iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, err );
       
   473 		                    }
       
   474 		                userLen = strlen ( tmpmsg ) + 1; //for '\0'
       
   475 		             }
       
   476                 memcpy( smsg + totalLen, tmpmsg, userLen );
       
   477                 totalLen += userLen + 1;
       
   478                 }        
       
   479             }
       
   480         iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, totalLen );        
       
   481         SetActive();// signal the scheduler
       
   482         CleanupStack::PopAndDestroy ( 3 ); //tmpmsg,smsg,availability
       
   483         }
       
   484     LOGGER ( TXT("CPublishOwnPresencerequest::PublishOwnPresenceL End") );
       
   485     }
       
   486     
       
   487 
       
   488 // End of file