diff -r b6f2a363adf7 -r 7797b2f86d2b imservices/ossprotocoladaptation/src/presencepublishing/cpublishownpresencerequest.cpp --- a/imservices/ossprotocoladaptation/src/presencepublishing/cpublishownpresencerequest.cpp Wed Apr 14 16:17:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,488 +0,0 @@ -/* -* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: IMplementaion for publising own presence -* -*/ - - -#include -#include "cpublishownpresencerequest.h" -#include "mossprotocolconnectionmanager.h" -#include "ossprotocolpluginlogger.h" -#include "waittimer.h" - -#include "cossprotocolconnectionmanager.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "stringutils.h" -#include -#include "msgliterals.h" -#include "msg_enums.h" -#include "xmppparameters.h" -#include "waittimer.h" -#include -#include "ossprotocoladaptutils.h" -#include - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::CPublishOwnPresencerequest -// --------------------------------------------------------------------------- -// -CPublishOwnPresencerequest::CPublishOwnPresencerequest( - MOSSProtocolConnectionManager& aConnMan, - TXIMPRequestId aRequestId ) : - CActive( EPriorityNormal ), - iRequestId( aRequestId ), - iConnMan( aConnMan ) - { - LOGGER ( TXT("::CPublishOwnPresencerequest Start") ); - CActiveScheduler::Add( this ); - - LOGGER ( TXT("::CPublishOwnPresencerequest End") ); - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::ConstructL -// --------------------------------------------------------------------------- -// -void CPublishOwnPresencerequest::ConstructL() - { - LOGGER ( TXT("CPublishOwnPresencerequest::ConstructL Start-End") ); - - - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::NewL -// --------------------------------------------------------------------------- -// -CPublishOwnPresencerequest* CPublishOwnPresencerequest::NewL( - MOSSProtocolConnectionManager& aConnMan, - TXIMPRequestId aRequestId ) - { - LOGGER ( TXT("CPublishOwnPresencerequest::NewL Start") ); - - CPublishOwnPresencerequest* self = new( ELeave ) - CPublishOwnPresencerequest( aConnMan, aRequestId ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - LOGGER ( TXT("CPublishOwnPresencerequest::NewL End") ); - return self; - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::NewLC -// --------------------------------------------------------------------------- -// -CPublishOwnPresencerequest* CPublishOwnPresencerequest::NewLC( - MOSSProtocolConnectionManager& aConnMan, - TXIMPRequestId aRequestId ) - { - LOGGER ( TXT("CPublishOwnPresencerequest::NewLC Start") ); - - CPublishOwnPresencerequest* self = - CPublishOwnPresencerequest::NewL(aConnMan, aRequestId); - CleanupStack::PushL( self ); - - LOGGER ( TXT("CPublishOwnPresencerequest::NewLC End") ); - return self; - } - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::~CPublishOwnPresencerequest -// --------------------------------------------------------------------------- -// -CPublishOwnPresencerequest::~CPublishOwnPresencerequest() - { - LOGGER ( TXT("::~CPublishOwnPresencerequest Start") ); - - CActive::Cancel(); - - delete iOwnPresenceInfo; - iOwnPresenceInfo = NULL; - LOGGER ( TXT("::~CPublishOwnPresencerequest End") ); - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::DoCancel() -// --------------------------------------------------------------------------- -// -void CPublishOwnPresencerequest::DoCancel() - { - LOGGER ( TXT("CPublishOwnPresencerequest::DoCancel Start") ); - - // iConnMan.DataHandler().CancelSending( iSendId ); - - LOGGER ( TXT("CPublishOwnPresencerequest::DoCancel End") ); - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::RunL() -// --------------------------------------------------------------------------- -// -void CPublishOwnPresencerequest::RunL() - { - LOGGER ( TXT("CPublishOwnPresencerequest::RunL Start") ); - message_hdr_resp* msg_struct = NULL; - User::LeaveIfError ( iStatus.Int() ); - char* pResponse = NULL; - pResponse = iConnMan.DataHandler().ResponseL ( iSendId ); - - msg_struct = ( message_hdr_resp* )pResponse ; - if( !( msg_struct->response ) ) - { - switch( msg_struct->error_type ) - { - - default: //for all other error codes like ssl related are mapped to general error - iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, KXIMPErrServiceGeneralError ); - break; - } - } - else - { - if( iOwnPresenceInfo ) - { - // set or clear avatar - MPresenceCacheWriter2* presenceCacheWriter = MPresenceCacheWriter2::CreateWriterL(); - TInt cacheerror = presenceCacheWriter->WritePresenceL( iOwnPresenceInfo ); - User::LeaveIfError ( cacheerror); - delete iOwnPresenceInfo ; - iOwnPresenceInfo = NULL; - delete presenceCacheWriter; - } - iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, KErrNone ); - } - - free( pResponse ); - - delete this; - - LOGGER ( TXT("CPublishOwnPresencerequest::RunL End") ); - } - - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::RunError -// --------------------------------------------------------------------------- -// -TInt CPublishOwnPresencerequest::RunError( TInt aError ) - { - LOGGER ( TXT("CPublishOwnPresencerequest::RunError Start") ); - - iConnMan.HandleToHost().HandleRequestCompleted( iRequestId, aError ); - - delete this; - LOGGER ( TXT("CPublishOwnPresencerequest::RunError End") ); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// CPublishOwnPresencerequest::PublishOwnPresenceL -// --------------------------------------------------------------------------- -// -void CPublishOwnPresencerequest::PublishOwnPresenceL(const MPresenceInfo& aPresence) - { - LOGGER ( TXT("CPublishOwnPresencerequest::PublishOwnPresenceL Start") ); - char *smsg = NULL; - char *tmpmsg = NULL; - message_hdr_req msgHdr = {0,}; - - int err = 0; - int userLen = 0; - int totalLen = 0; - const MPersonPresenceInfo* personPresence = aPresence.PersonPresence(); - const MPresenceInfoFieldCollection& presenceFields = personPresence->Fields(); - const MPresenceInfoField& presenceField = presenceFields.FieldAt( 0 ); - //updating own avtar - if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvatar )) ) - { - int messagelength = 0; - const MPresenceInfoFieldValueBinary* avtarfield = - TXIMPGetInterface< const MPresenceInfoFieldValueBinary >::From( - presenceField.FieldValue(), - MXIMPBase::EPanicIfUnknown ); - if( !(avtarfield->MimeType().Length() )) //clear avatar - { - // now manufacture the message for the clear avtar - msgHdr.message_type = EClearOwnAvatar; - messagelength = sizeof( message_hdr_req ); - smsg = ( char* ) User::AllocLC ( messagelength ); - memset ( smsg, '\0', messagelength ); - memcpy( smsg, &msgHdr, messagelength );//copies message header - iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, messagelength ); - SetActive();// signal the scheduler - CleanupStack::PopAndDestroy ( 1 ); //smsg - } - else //set or update avatar - { - // now manufacture the message for the avtar - msgHdr.message_type = EUpdateOwnAvtar; - messagelength = sizeof( message_hdr_req ) + avtarfield->MimeType().Length() + avtarfield->BinaryValue().Length()+2; // 2 for '\0' 's - smsg = ( char* ) User::AllocLC ( messagelength ); - tmpmsg = ( char* ) User::AllocLC ( messagelength ); - memset ( smsg, '\0', messagelength ); - memset ( tmpmsg, '\0', messagelength ); - if( messagelength > (MAX_MSG_SIZE - totalLen) ) - msgHdr.continue_flag = 1; - memcpy( smsg, &msgHdr, sizeof( message_hdr_req ) );//copies message header - totalLen += sizeof( message_hdr_req ); - OssProtocolAdapUtils::ConvertTDesC8toChar( avtarfield->MimeType(),tmpmsg); - userLen = avtarfield->MimeType().Length(); - memcpy( smsg + totalLen, tmpmsg, userLen );//copies mimetype - totalLen += userLen + 1; // for '\0' - memset ( tmpmsg, '\0', messagelength ); - OssProtocolAdapUtils::ConvertTDesC8toChar( avtarfield->BinaryValue(),tmpmsg); - userLen = avtarfield->BinaryValue().Length(); - memcpy( smsg + totalLen, tmpmsg, userLen );//copies avtar - totalLen += userLen + 1; - iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, totalLen ); - SetActive();// signal the scheduler - CleanupStack::PopAndDestroy ( 2 ); //tmpmsg,smsg - } - iOwnPresenceInfo = MPresenceBuddyInfo2::NewL(); - if( iOwnPresenceInfo ) - { - TPtrC ownUserPtr = iConnMan.UserName(); - HBufC* xspId = NULL; - if( ownUserPtr.Length() ) - { - xspId = HBufC::NewLC( ownUserPtr.Length() + iConnMan.ServiceName().Length() + KColon().Length() ); - TPtr xspIdPtr( xspId->Des() ); - xspIdPtr.Zero(); - xspIdPtr.Append(iConnMan.ServiceName() ); // prepend service name - xspIdPtr.Append(KColon); - xspIdPtr.Append( ownUserPtr ); - iOwnPresenceInfo->SetIdentityL(xspIdPtr); - CleanupStack::PopAndDestroy(xspId); //xspId - } - else - { - TPtrC xmppOwnId = iConnMan.XmppParams().UserName(); - xspId = HBufC::NewLC( xmppOwnId.Length() + iConnMan.ServiceName().Length() + KColon().Length() ); - TPtr xspIdPtr( xspId->Des() ); - xspIdPtr.Zero(); - xspIdPtr.Append(iConnMan.ServiceName() ); // prepend service name - xspIdPtr.Append(KColon); - xspIdPtr.Append( xmppOwnId ); - iOwnPresenceInfo->SetIdentityL(xspIdPtr); - CleanupStack::PopAndDestroy(xspId); //xspId - } - iOwnPresenceInfo->SetAvatarL( avtarfield->BinaryValue() ); - - TInt fieldCount = presenceFields.FieldCount(); - for( TInt i = 1; i < fieldCount; i++ ) // zero index is for avatar - { - const MPresenceInfoField& presenceField = presenceFields.FieldAt( i ); - TBuf8<32> temp = presenceField.FieldType(); - if( !( presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvailabilityEnum )) ) - { - const MPresenceInfoFieldValueEnum* availability = - TXIMPGetInterface< const MPresenceInfoFieldValueEnum >::From( - presenceField.FieldValue(), - MXIMPBase::EPanicIfUnknown ); - MPresenceBuddyInfo2::TAvailabilityValues availabe = MPresenceBuddyInfo2::EUnknownAvailability; - switch (availability->Value()) - { - case NPresenceInfo::EAvailable : - { - availabe = MPresenceBuddyInfo2::EAvailable; - iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC ); - break; - } - - case NPresenceInfo::EBusy : - { - availabe = MPresenceBuddyInfo2::EBusy; - iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC ); - break; - } - - case NPresenceInfo::EHidden : - { - availabe = MPresenceBuddyInfo2::EAvailable; - iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC ); - break; - } - - case NPresenceInfo::EDoNotDisturb: - { - availabe = MPresenceBuddyInfo2::EBusy; - iOwnPresenceInfo->SetAvailabilityL( availabe,KDndState); - break; - } - - case NPresenceInfo::EAway: - { - availabe = MPresenceBuddyInfo2::EBusy; - iOwnPresenceInfo->SetAvailabilityL( availabe,KAwayState); - break; - } - - case NPresenceInfo::ENotAvailable: - { - availabe = MPresenceBuddyInfo2::ENotAvailable; - iOwnPresenceInfo->SetAvailabilityL( availabe ,KNullDesC ); - break; - } - - default: - break; - } - } - else if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KStatusMessage )) ) - { - const MPresenceInfoFieldValueText* statustext = - TXIMPGetInterface< const MPresenceInfoFieldValueText >::From( - presenceField.FieldValue(), - MXIMPBase::EPanicIfUnknown ); - // now manufacture the message for the status text - if( statustext && statustext->TextValue().Length() ) - { - iOwnPresenceInfo->SetStatusMessageL( statustext->TextValue() ); - } - - } - } - - } - } - else //for update presence - { - TInt fieldCount = presenceFields.FieldCount(); - char* availablty = ( char* ) User::AllocLC ( MAX_MSG_SIZE ); - smsg = ( char* ) User::AllocLC ( MAX_MSG_SIZE ); - tmpmsg = ( char* ) User::AllocLC ( MAX_MSG_SIZE ); - msgHdr.message_type = EUpdateOwnPresence; - memset ( smsg, '\0', MAX_MSG_SIZE ); - memset ( tmpmsg, '\0', MAX_MSG_SIZE ); - memset ( availablty, '\0', MAX_MSG_SIZE ); - memcpy( smsg, &msgHdr, sizeof( message_hdr_req ) ); - totalLen += sizeof( message_hdr_req ); - // updating availability - const MPersonPresenceInfo* personPresence = aPresence.PersonPresence(); - const MPresenceInfoFieldCollection& presenceFields = personPresence->Fields(); - //TInt fieldCount = presenceFields.FieldCount(); - for( TInt i = 0; i < fieldCount; i++ ) - { - const MPresenceInfoField& presenceField = presenceFields.FieldAt( i ); - TBuf8<32> temp = presenceField.FieldType(); - LOGGER ( TXT( "ExtractPersonPresenceAttributes:%S "),&presenceField.FieldType()); - - if( !( presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KAvailabilityEnum )) ) - { - const MPresenceInfoFieldValueEnum* availability = - TXIMPGetInterface< const MPresenceInfoFieldValueEnum >::From( - presenceField.FieldValue(), - MXIMPBase::EPanicIfUnknown ); - if ( availability->Value() == NPresenceInfo::EAvailable ) - { - char* temp = "avaliable"; - strcpy(availablty,temp); - userLen = strlen( availablty ); - memcpy( smsg + totalLen, availablty, userLen ); - totalLen += userLen + 1; - } - else if ( availability->Value() == NPresenceInfo::EBusy ) - { - char* temp = "dnd"; - strcpy(availablty,temp); - userLen = strlen( availablty ); - memcpy( smsg + totalLen, availablty, userLen ); - totalLen += userLen + 1; - } - else if(availability->Value() == NPresenceInfo::EAway) - { - char* temp = "away"; - strcpy(availablty,temp); - userLen = strlen( availablty ); - memcpy( smsg + totalLen, availablty, userLen ); - totalLen += userLen + 1; - } - else if(availability->Value() == NPresenceInfo::EHidden) - { - char* temp = "hidden"; - strcpy(availablty,temp); - userLen = strlen( availablty ); - memcpy( smsg + totalLen, availablty, userLen ); - totalLen += userLen + 1; - } - else if(availability->Value() == NPresenceInfo::ENotAvailable) - { - char* temp = "offline"; - strcpy(availablty,temp); - userLen = strlen( availablty ); - memcpy( smsg + totalLen, availablty, userLen ); - totalLen += userLen + 1; - } - - } - //updating status text - - if( !(presenceField.FieldType().Compare( NPresenceInfo::NFieldType::KStatusMessage )) ) - { - const MPresenceInfoFieldValueText* statustext = - TXIMPGetInterface< const MPresenceInfoFieldValueText >::From( - presenceField.FieldValue(), - MXIMPBase::EPanicIfUnknown ); - // now manufacture the message for the status text - if( statustext && statustext->TextValue().Length() ) - { - TPtrC bufferPtr ( statustext->TextValue() ); - err = tbufC16tochar ( bufferPtr, tmpmsg ); - if( KErrNotFound == err) - { - iConnMan.HandleToHost().HandleRequestCompleted ( iRequestId, err ); - } - userLen = strlen ( tmpmsg ) + 1; //for '\0' - } - memcpy( smsg + totalLen, tmpmsg, userLen ); - totalLen += userLen + 1; - } - } - iSendId = iConnMan.DataHandler().SendDataL ( iStatus, smsg, totalLen ); - SetActive();// signal the scheduler - CleanupStack::PopAndDestroy ( 3 ); //tmpmsg,smsg,availability - } - LOGGER ( TXT("CPublishOwnPresencerequest::PublishOwnPresenceL End") ); - } - - -// End of file