--- /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;
+}