diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/PC_Tools/HTIGateway/ServicePlugins/HtiPIM/HtiPIM.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/PC_Tools/HTIGateway/ServicePlugins/HtiPIM/HtiPIM.cpp Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,413 @@ +/* +* Copyright (c) 2009 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: +*/ +#include "HtiPIMH.h" +#include "HtiPlugin.h" +#include "HtiSoapHandlerInterface.h" + +//********************************************************************************** +// CONSTANTS +// +//********************************************************************************** + +// commands +const unsigned char CMD_IMPORT_VCARD = 0x01; +const unsigned char CMD_IMPORT_VCALENDAR = 0x02; +const unsigned char CMD_DELETE_CONTACT_ENTRIES = 0x03; +const unsigned char CMD_DELETE_CALENDAR_ENTRIES = 0x04; +const unsigned char CMD_NOTEPAD_ADD_MEMO = 0x05; +const unsigned char CMD_NOTEPAD_ADD_MEMO_FROM_FILE = 0x06; +const unsigned char CMD_NOTEPAD_DELETE_ALL = 0x07; +const unsigned char CMD_SIM_CARD_INFORMATION = 0x10; +const unsigned char CMD_IMPORT_SIM_CONTACT = 0x11; +const unsigned char CMD_DELETE_SIM_CONTACT = 0x12; +const unsigned char CMD_CREATE_BOOKMARK = 0x1A; +const unsigned char CMD_DELETE_BOOKMARK = 0x1B; + + +//********************************************************************************** +// UTIL FUNCTIONS +// +//********************************************************************************** +//********************************************************************************** +// GetSoapDIMEAttachment +//********************************************************************************** +int GetSoapDIMEAttachment(struct soap* soap, + char* href, + void*& data, + int &dataLen ) +{ + struct soap_multipart *attachment; + for ( attachment = soap->dime.list; attachment; attachment = attachment->next ) + { + if( !strcmp( (*attachment).id, href ) ) + { + data = attachment->ptr, + dataLen = (int) (*attachment).size; + return SOAP_OK; + } + } + + soap->error = soap_receiver_fault_format(soap, "HtiGateway", + "Did not find DIME attachment \"%s\"", href); + return SOAP_FAULT; +} + +//********************************************************************************** +// SOAP FUNCTIONS +// +//********************************************************************************** +//********************************************************************************** +// ns1__import_vCard +//********************************************************************************** +int ns1__import_vCard(struct soap* soap, + char *vCard, + int &entryId) +{ + if(check_mandatory_string_parameter(soap, vCard, "vCard")) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_IMPORT_VCARD ); + msg.AddString( vCard ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckMsgExactLen( 5 ) || msg.CheckCommandCode( 0xFF ) ) + return SOAP_FAULT; + + entryId = msg.GetInt( 1 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__import_vCardDime +//********************************************************************************** +int ns1__import_vCardDime(struct soap* soap, + struct ns1__HtiSoapAttachment *vCardDimeAttachment, + int &entryId) +{ + if( check_mandatory_string_parameter( soap, vCardDimeAttachment->href, + "vCardDimeAttachment href" ) ) + return SOAP_FAULT; + + void* data = NULL; + int dataLen = 0; + if ( GetSoapDIMEAttachment( soap, vCardDimeAttachment->href, data, dataLen ) ) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_IMPORT_VCARD ); + msg.AddData( data, dataLen ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckMsgExactLen( 5 ) || msg.CheckCommandCode( 0xFF ) ) + return SOAP_FAULT; + + entryId = msg.GetInt( 1 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__import_vCalendar +//********************************************************************************** +int ns1__import_vCalendar(struct soap* soap, + char *vCal, + int &entryId) +{ + if(check_mandatory_string_parameter(soap, vCal, "vCalendar")) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_IMPORT_VCALENDAR ); + msg.AddString( vCal ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckMsgExactLen( 5 ) || msg.CheckCommandCode( 0xFF ) ) + return SOAP_FAULT; + + entryId = msg.GetInt( 1 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__import_vCalendarDime +//********************************************************************************** +int ns1__import_vCalendarDime(struct soap* soap, + struct ns1__HtiSoapAttachment *vCalendarDimeAttachment, + int &entryId) +{ + if(check_mandatory_string_parameter(soap, vCalendarDimeAttachment->href, + "vCalendarDimeAttachment href")) + return SOAP_FAULT; + + void* data = NULL; + int dataLen = 0; + if ( GetSoapDIMEAttachment( soap, vCalendarDimeAttachment->href, data, dataLen ) ) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_IMPORT_VCALENDAR ); + msg.AddData( data, dataLen ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckMsgExactLen( 5 ) || msg.CheckCommandCode( 0xFF ) ) + return SOAP_FAULT; + + entryId = msg.GetInt( 1 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__deleteContactEntry +//********************************************************************************** +int ns1__deleteContactEntry(struct soap* soap, + int entryId, + struct ns1__deleteContactEntryResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_CONTACT_ENTRIES ); + msg.AddInt( entryId ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__deleteAllContactEntries +//********************************************************************************** +int ns1__deleteAllContactEntries(struct soap* soap, + void *_, + struct ns1__deleteAllContactEntriesResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_CONTACT_ENTRIES ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__deleteCalendarEntry +//********************************************************************************** +int ns1__deleteCalendarEntry(struct soap* soap, + int entryId, + struct ns1__deleteCalendarEntryResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_CALENDAR_ENTRIES ); + msg.AddInt( entryId ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__deleteAllCalendarEntries +//********************************************************************************** +int ns1__deleteAllCalendarEntries(struct soap* soap, + void *_, + struct ns1__deleteAllCalendarEntriesResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_CALENDAR_ENTRIES ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__getSIMCardCaps +//********************************************************************************** +int ns1__getSIMCardCaps(struct soap* soap, + void *_, + struct ns1__getSIMCardCapsResponse &r) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_SIM_CARD_INFORMATION ); + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckCommandCode( 0xFF ) || msg.CheckMsgExactLen( 13 ) ) + return SOAP_FAULT; + + r._returnHtiSIMCardCaps.maxNumOfSecondNames = msg.GetByte( 1 ); + r._returnHtiSIMCardCaps.maxNumOfAdditionalNums = msg.GetByte( 2 ); + r._returnHtiSIMCardCaps.maxNumOfEmails = msg.GetByte( 3 ); + r._returnHtiSIMCardCaps.maxLengthOfName = msg.GetByte( 4 ); + r._returnHtiSIMCardCaps.maxLengthOfNumber = msg.GetByte( 5 ); + r._returnHtiSIMCardCaps.maxLengthOfSecondName = msg.GetByte( 6 ); + r._returnHtiSIMCardCaps.maxLengthOfAdditionalNum = msg.GetByte( 7 ); + r._returnHtiSIMCardCaps.maxLenghtOfEmail = msg.GetByte( 8 ); + r._returnHtiSIMCardCaps.totalSlots = msg.GetWord( 9 ); + r._returnHtiSIMCardCaps.usedSlots = msg.GetWord( 11 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__importSIMContact +//********************************************************************************** +int ns1__importSIMContact(struct soap* soap, + struct ArrayOfHtiSIMContactFields SIMContacts, + int &entryId) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_IMPORT_SIM_CONTACT ); + + // Only one byte for number of contacts + if ( SIMContacts.__size > 0xFF ) + { + soap->error = soap_receiver_fault( soap, "HtiGateway", + "Too many contacts" ); + return SOAP_FAULT; + } + msg.AddByte( (BYTE) SIMContacts.__size ); + + // Loop through contacts + for ( int i = 0; i < SIMContacts.__size; i++ ) + { + msg.AddByte( SIMContacts.__ptrHtiSIMContactField[i].fieldType ); + + // fieldData cannot be empty + if ( check_mandatory_string_parameter( soap, + SIMContacts.__ptrHtiSIMContactField[i].fieldData, + "HtiSIMContactField.fieldData" ) ) + return SOAP_FAULT; + + msg.AddStringWithLengthByte( SIMContacts.__ptrHtiSIMContactField[i].fieldData ); + } + + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckCommandCode( 0xFF ) || msg.CheckMsgExactLen( 5 ) ) + return SOAP_FAULT; + + entryId = msg.GetInt( 1 ); + + return SOAP_OK; +} + +//********************************************************************************** +// ns1__deleteSIMContact +//********************************************************************************** +int ns1__deleteSIMContact(struct soap* soap, + int entryId, + struct ns1__deleteSIMContactResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_SIM_CONTACT ); + msg.AddInt( entryId ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__deleteAllSIMContacts +//********************************************************************************** +int ns1__deleteAllSIMContacts(struct soap* soap, + void *_, + struct ns1__deleteAllSIMContactsResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_SIM_CONTACT ); + // 60 second timeout maybe not enough(?) + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_60_SECONDS ); +} + +//********************************************************************************** +// ns1__notepadAddMemo +//********************************************************************************** +int ns1__notepadAddMemo(struct soap* soap, + char *text, + struct ns1__notepadAddMemoResponse *out) +{ + if( check_mandatory_string_parameter( soap, text, "text" ) ) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_NOTEPAD_ADD_MEMO ); + msg.AddString( text ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} +//********************************************************************************** +// ns1__notepadAddMemoFromFile +//********************************************************************************** +int ns1__notepadAddMemoFromFile(struct soap* soap, + char *filePath, + struct ns1__notepadAddMemoFromFileResponse *out) +{ + if( check_mandatory_string_parameter( soap, filePath, "filePath" ) ) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_NOTEPAD_ADD_MEMO_FROM_FILE ); + msg.AddString( filePath ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__notepadDeleteAll +//********************************************************************************** +int ns1__notepadDeleteAll(struct soap* soap, + void *_, + struct ns1__notepadDeleteAllResponse *out) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_NOTEPAD_DELETE_ALL ); + return msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ); +} + +//********************************************************************************** +// ns1__createBookmark +//********************************************************************************** +int ns1__createBookmark(struct soap* soap, + char *folderName, + char *bookmarkName, + char *url, + char *accessPointName, + char *userName, + char *password, + int &createdItemCount) +{ + if( check_mandatory_string_parameter( soap, bookmarkName, "bookmarkName" ) ) + return SOAP_FAULT; + if( check_mandatory_string_parameter( soap, url, "url" ) ) + return SOAP_FAULT; + + HtiMsgHelper msg( soap, HTI_UID, CMD_CREATE_BOOKMARK ); + msg.AddStringWithLengthByteZero( folderName ); + msg.AddStringWithLengthByte( bookmarkName ); + msg.AddStringWithLengthWordZero( url ); + msg.AddStringWithLengthByteZero( accessPointName ); + msg.AddStringWithLengthByteZero( userName ); + msg.AddStringWithLengthByteZero( password ); + + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckCommandCode( 0xFF ) || msg.CheckMsgExactLen( 2 ) ) + return SOAP_FAULT; + + createdItemCount = msg.GetByte( 1 ); + + return SOAP_OK; +} +//********************************************************************************** +// ns1__deleteBookmark +//********************************************************************************** +int ns1__deleteBookmark(struct soap* soap, + char *folderName, + char *bookmarkName, + int &deletedItemCount) +{ + HtiMsgHelper msg( soap, HTI_UID, CMD_DELETE_BOOKMARK ); + msg.AddStringWithLengthByteZero( folderName ); + msg.AddStringWithLengthByteZero( bookmarkName ); + + if ( msg.SendReceiveMsg( HTIMSG_TIMEOUT_10_SECONDS ) ) + return SOAP_FAULT; + + if ( msg.CheckCommandCode( 0xFF ) || msg.CheckMsgExactLen( 2 ) ) + return SOAP_FAULT; + + deletedItemCount = msg.GetByte( 1 ); + + return SOAP_OK; +}