diff -r 000000000000 -r d0f3a028347a isolationserver/isoserver/inc/isoim.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/isolationserver/isoserver/inc/isoim.h Tue Feb 02 01:10:06 2010 +0200 @@ -0,0 +1,264 @@ +/* +* ============================================================================ +* Name : isoim.h +* Part of : isolation server instant messaing componenet. +* Version : %version: 14 % +* +* Copyright © 2007-2008 Nokia. All rights reserved. +* All rights reserved. +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer.Redistributions in binary form must +* reproduce the above copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of the Nokia Corporation nor the names of its contributors may be used +* to endorse or promote products derived from this software without specific prior written +* permission. +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* ============================================================================ +* Template version: 1.0 +*/ + +/*! +* /def To avoid multiple inclusion of header +*/ + +#ifndef _ISOIM_H_ +#define _ISOIM_H_ + +#include +#include + +#include "isoservermain.h" +#include "msg_enums.h" + +/*! /file + * Interfaces for the send / recieve of messages. + * client anywhere in the documentation refers to anyone + * using the isoserver + */ + +/*! /typedef struct send_msg_struct typedefed to send_msg_struct. + */ +typedef struct send_msg_struct send_msg_struct; + +/*! /struct send_msg_struct isoim.h + * /brief This struct is used to pass multiple pointers as userdata to callbacks + * + * /var hdr_req header request + * /var msg character string(message) + */ +struct send_msg_struct + { + message_hdr_req* hdr_req; + char *msg; + }; + +/*! /typedef struct _Received_UserData typedefed to Received_UserData. + */ +typedef struct _Received_UserData Received_UserData; + +/*! /struct Received_UserData isoim.h + * /brief This struct is used to pass multiple pointers as userdata to callbacks + * + * /var message_body message + * /var proxy proxy This is used for acknowledging the recieved message + * /var message_id This is used for acknowledging the recieved message + */ +struct _Received_UserData + { + gchar *message_body; + DBusGProxy *proxy; + guint message_id; + }; + +/*! /typedef struct send_error_struct typedefed to send_error_struct. + */ +typedef struct send_error_struct send_error_struct; + +/*! /struct send_error_struct isoim.h + * /brief This struct is used to pass multiple pointers as userdata to callbacks + * + * /var hdr_resp response header + * /var msg_type + * /var timestamp + * /var msg_body + */ +struct send_error_struct + { + message_hdr_resp hdr_resp; + guint msg_type; + guint timestamp; + gchar* msg_body; + }; + +/*! /brief requests the handles for the contacts to which message should be sent. + * request_handles_cb is registered as a callback. necessary data to be sent is + * passed as userdata + * + * /param msghdr request header that will be passed back to client + * /param contact_id all contacts + * /param message + * /param no_cntcts no. of contacts the msg shld be sent to + * /return : error code on failure, 0 on success + */ +void send_message( send_msg_struct* msg_hdr, const gchar **contact_id ) ; + +/*! /brief handles for contacts are recieved and text channel created (if already + * there same is used) message is sent to those contacts. + * + * + * /param proxy unused + * /param handles contact handles + * /param error error if any in getting the handles for contact + * /param userdata Has request header and message to be sent to reciever + * The request header is used for mapping of response to correct request + * + */ +void request_handles_cb( DBusGProxy *proxy, GArray *handles, GError* error, + gpointer userdata ) ; + + +/*! /brief parse the params for send and validates them + * + * /param aMsgBuffer message buffer to be parsed + * /param aContactId pointer to an array of strings, After this function this + * arg wil have the contacts to which message should be sent to + * /param aSendMsg message to be sent + * /param len : msg_len no. of bytes in aMsgBuffer + * /param contact_count : no. of contacts + * /return returns error code on failure, or 0 + */ +int parse_for_send( gchar* aMsgBuffer, gchar*** aContactId, + gchar** aSendMsg, gint msg_len, gint* contact_count ) ; + + +/*! /brief calls parse_for_send to parse the parameters, and calls + * send_message for sending the message + * + * /param buf : message buffer to be parsed + * /param len : msg_len no. of bytes in msg_buf + * + * /return gint : parse error code if any + */ +int action_parse_send( gchar* buf, gint msg_len ) ; + +/*! /brief Function to check if the channel is already present in the maintained hash + * text_channels_find_func. + * + * /param key unused + * /param text_channel hash table element + * /param contact_handle to be searched item + * /return boolean + */ +gboolean text_channels_find_func( gchar *key, + TpChan *text_channel, + guint *contact_handle ); + +/*! /brief Once the send request is sent to n/w server this callback is called + * + * /param proxy unused + * /param error n/w error if any + * /param userdata message header from which a response is formed + * /return void + */ +void sendreply_cb( DBusGProxy *proxy, GError *error, gpointer userdata ) ; + +/*! /brief This function is called by tg to as a response to request for the + * handles from the text channel. If there is no error, sent message( + * which has failed ) with its deatils is then sent to client + * + * /param proxy unused + * /param handles_names contac names (sender name) + * /param error error if any + * /param userdata send_error_struct + * /return void + */ +static void inspect_handles_for_error_cb( DBusGProxy *proxy,char **handles_names, + GError *error, gpointer userdata ); + +/*! /brief This function on registered for "senderror" signal is called when the message + * sending is failed. Calls tp_conn_inspect_handles_async to get the contact name + * from text channel + * + * /param proxy : unused + * /param error : error code + * /param timestamp : sent to inspect_handles_for_error_cb thru' send_error_struct + * /param message_type : sent to inspect_handles_for_error_cb thru' send_error_struct + * /param message_body : sent to inspect_handles_for_error_cb thru' send_error_struct + * /param user_data text_chan from where to get the contatc name of reciepien + * /return void + */ +static void senderror_cb ( DBusGProxy *proxy, + guint error, + guint timestamp, + guint message_type, + gchar *message_body, + gpointer user_data ); + +/*! /brief called as a callback to acknowledge the msg ack. + * + * /param proxy unused + * /param error error if any + * /param userdata unused + * /return void + */ +void msg_ack_pending_cb( DBusGProxy *proxy, GError *error, gpointer userdata ) ; + +/*! /brief This function is a callback for to get the contact name from handles. + * This function acknowledges the recieved message and send that to client(adap) + * + * /param proxy unused + * /param handles_names 2D array of message sender(one contact ended with a NULL string) + * /param error error if any + * /param userdata Received_UserData that has message body, response header etc., + * /return void + */ +static void getting_sender_cb( DBusGProxy *proxy,char **handles_names, + GError *error, gpointer userdata ) ; + +/*! /brief when a message is recieved this function is called by + * telepathygabble(by emitting signal). This function then requests tg + * to get the contact names corresponding to handles. + * + * /param proxy sent to getting_sender_cb as param in userdata + * /param timestamp unused + * /param handles_names + * /param message_type unused + * /param message_flags unused + * /param message_body recieved message + * /param userdata unused + */ +void receivedMessage_cb ( DBusGProxy *proxy, + guint message_id, + guint timestamp, + guint from_handle, + guint message_type, + guint message_flags, + gchar *message_body, + gpointer user_data ); +/*! /brief whenevr a new channel handler for text is created, this function is called. This + * function also registers that channel for Received and SendError signals. Also the pending + * messages are also retrieved in this function + * + * /param tp_chan new channel created + */ +void text_channel_init ( TpChan *text_chan ); + +/*! /brief called by getting_sender_cb to send the recieved message to client + * + * /param msg message recieved + * /param sender message from whom recieved + */ +int send_message_to_client( const gchar *msg , const gchar *sender); + +#endif \ No newline at end of file