isolationserver/isoserver/inc/isopresence.h
changeset 0 d0f3a028347a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/isolationserver/isoserver/inc/isopresence.h	Tue Feb 02 01:10:06 2010 +0200
@@ -0,0 +1,338 @@
+/* ============================================================================
+*  Name        : isopresence.h
+*  Part of     : isolation server.
+*  Version     : %version: 7 %
+*
+*  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 __ISOPRESENCE_H__
+#define __ISOPRESENCE_H__
+#include <glib.h>
+#include <gtypes.h>
+
+#include "isoservermain.h"
+#include "msg_enums.h"
+
+#include "tp-conn.h"
+#include "tp-connmgr.h"
+#include "tp-props-iface.h"
+#include "tp-interfaces.h"
+#include "tp-conn-iface-presence-gen.h"
+
+G_BEGIN_DECLS
+
+/*! /file
+*	This file has interfaces for presence implimentation. 
+*	client anywhere in the documentation refers to anyone
+*	using the isoserver
+*/
+
+/*! /typedef struct presence_msg_struct typedefed to presence_msg_struct 
+ */
+typedef struct presence_msg_struct presence_msg_struct;
+
+/*! /struct presence_msg_struct isopresence
+ *  /brief 
+ *  
+ *  /var hdr_req header request
+ *  /var useravailability availability, presence 
+ *  /var statustext status text 
+ */
+struct presence_msg_struct
+	{
+	message_hdr_req* hdr_req;
+	char *useravailability;
+	char *statustext; 
+	};
+
+
+#define TELEPATHY_TYPE_PRESENCE         (telepathy_presence_get_type ())
+#define TELEPATHY_PRESENCE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), TELEPATHY_TYPE_PRESENCE, TelepathyPresence))
+#define TELEPATHY_PRESENCE_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), TELEPATHY_TYPE_PRESENCE, TelepathyPresenceClass))
+#define TELEPATHY_IS_PRESENCE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), TELEPATHY_TYPE_PRESENCE))
+#define TELEPATHY_IS_PRESENCE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), TELEPATHY_TYPE_PRESENCE))
+#define TELEPATHY_PRESENCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TELEPATHY_TYPE_PRESENCE, TelepathyPresenceClass))
+
+/*! /typedef struct _TelepathyPresence typedefed to TelepathyPresence 
+ */
+typedef struct _TelepathyPresence      TelepathyPresence;
+
+/*! /typedef struct _TelepathyPresenceClass typedefed to TelepathyPresenceClass 
+ */
+typedef struct _TelepathyPresenceClass TelepathyPresenceClass;
+
+/*! /struct _TelepathyPresence isopresence.h
+ *  /var parent 
+ */
+struct _TelepathyPresence {
+	GObject parent;
+};
+
+/*! /struct _TelepathyPresenceClass isopresence.h
+ *  /var parent_class 
+ */
+struct _TelepathyPresenceClass {
+	GObjectClass parent_class;
+};
+
+/*! /typedef struct _TelepathyPresenceClass typedefed to TelepathyPresenceClass 
+ */
+ 
+/*! /enum presence states of the user
+ */
+typedef enum {
+	TELEPATHY_PRESENCE_STATE_AVAILABLE,
+	TELEPATHY_PRESENCE_STATE_BUSY,
+	TELEPATHY_PRESENCE_STATE_AWAY,
+	TELEPATHY_PRESENCE_STATE_EXT_AWAY,
+	TELEPATHY_PRESENCE_STATE_HIDDEN,      /* When you appear offline to others */
+	TELEPATHY_PRESENCE_STATE_UNAVAILABLE,
+} TelepathyPresenceState;
+
+GType               telepathy_presence_get_type                 (void) G_GNUC_CONST;
+
+/*!	/brief create a presence object instance
+ * 	/return created presence object instance
+ */
+TelepathyPresence *
+telepathy_presence_new (void);
+
+/*!	/brief get the presence state value
+ *
+ * 	/param presence : presence object
+ * 	/return state : state as set in presence object
+ */
+TelepathyPresenceState 
+telepathy_presence_get_state (TelepathyPresence      *presence);
+
+
+/*!	/brief get the presence status value
+ *
+ * 	/param presence : presence object
+ * 	/return state : status as set in presence object
+ */
+const gchar *
+telepathy_presence_get_status (TelepathyPresence      *presence);
+
+/*!	/brief set the presence state value in presence gobject
+ *
+ * 	/param presence : presence object
+ * 	/param state : state
+ * 	/return : void
+ */
+void
+telepathy_presence_set_state (TelepathyPresence      *presence,
+				TelepathyPresenceState  state);
+
+/*!	/brief set the presence status text value in presence gobject
+ *
+ * 	/param presence : presence object
+ * 	/param state : status
+ * 	/return : void
+ */
+void
+telepathy_presence_set_status (TelepathyPresence      *presence,
+				const gchar         *status);
+
+/*!	/brief converts presence state value from enum to string
+ *	/param presence_state : presence state enum value
+ * 	/return : presence state string value
+ */
+const gchar *
+telepathy_presence_state_to_str (TelepathyPresenceState presence_state);
+
+
+/*!	/brief converts presence state value from string to enum
+ *
+ * 	/param str : presence state string value
+ * 	/return : presence state enum value
+ */
+TelepathyPresenceState 
+telepathy_telepathy_presence_state_from_str (const gchar *str);
+
+/*!	/brief Registered as a signal for presence updates of 
+ *	other users. This function will be called whenevr a contact
+ *	to whom this user has subscribed for presence changes his 
+ *	presence state or status message.
+ * 
+ * 	/param proxy : unused
+ * 	/param handle_hash : hash table containing presence information
+ *	as hash value, contact handle as key
+ * 	/return : void
+ */
+void
+telepathy_presence_handler(DBusGProxy      *proxy,
+			   GHashTable      *handle_hash);
+
+/*!	/brief updates own presence to the n/w server. update_status_cb 
+ * 	is registered for the callback
+ *
+ * 	/param pres_iface : presence interface
+ * 	/param presence : presence object 
+ * 	/param msg_hdr : presence info list to send presence_msg_struct
+ *	has state, status etc., 
+ * 	/return : void
+ */
+void 
+telepathy_contacts_send_presence (DBusGProxy *pres_iface, 
+				TelepathyPresence *presence, 
+				presence_msg_struct* msg_hdr );
+					 
+/*!	/brief This function will be called for presence of each contact
+ *	key has got the state and value status
+ *
+ *	/param key : hash table key ie presence state
+ * 	/param value : hash table value ie presence information
+ * 	/param presence : user data
+ *	/remark presence object is logically unused ?
+ *
+ * 	/return : void
+ */
+static void
+telepathy_presences_foreach (gpointer        *key,
+		      gpointer        *value,
+		      TelepathyPresence **presence);
+					 
+
+/*!	/brief This function will be called for each contact. Contact name is 
+ *	got from the contcat handle, telepathy_presences_foreach is called 
+ *	to get the presence from value of the hash table
+ *
+ * @param key : hash table key ie contact handle id
+ * @param value : hash table value ie presence
+ * @return : void
+ */
+static void
+telepathy_presence_handle_foreach (gpointer *key,
+		      gpointer *value);
+
+
+/*!	/brief callback for updating own presence. This function 
+ *	sends response to client
+ *
+ * 	/param proxy : unused
+ * 	/param error : error if any
+ * 	/param message : message header  
+ * 	/return : void
+ */
+void 
+update_status_cb(DBusGProxy *proxy, 
+			GError* error, 
+			gpointer message);
+
+
+/*!	/brief Sends presence of conatct to the client. Forms 
+ *	the proper presence message format and sends that to client
+ *
+ * 	/param : availability user availability
+ * 	/param : text custom status message set by user
+ * 	/return : error code on failure, 0 on success
+ */
+int 
+send_presence_to_client( const gchar *availability, 
+			const gchar *text );
+
+/*!	/brief sends presence of the client to n/w server thru' gabble
+ * 	calls telepathy_contacts_send_presence to send presence
+ *
+ * 	/param msghdr request header that will be passed back to client
+ * 	/param message_type_err unused
+ *	/remark please remove this unused variable(why was this added?)
+ *
+ * 	/return : error code on failure, 0 on success
+ */
+void
+send_presence( presence_msg_struct* msg_hdr, 
+			gint message_type_err ) ;
+
+
+/*!	/brief parses the message buffer. aPresenceStatus and aStatustext
+ *	pointers updated
+ *
+ * 	/param aMsgBuffer message buffer
+ * 	/param aPresenceStatus after call to this function it will
+ *	have the presence status to be updated
+ * 	/param aStatustext after call to this function it will
+ *	have the status text to be updated
+ * 
+ * 	/param msg_len : msg_len no. of bytes in msg_buf
+ * 	/return returns error code on failure, or 0
+ */
+int 
+parse_for_presence( gchar* aMsgBuffer, 
+			gchar** aPresenceStatus, 
+			gchar** aStatustext, 
+			gint msg_len ) ;
+
+/*!	/brief Parses the message from client and sends the presence 
+ *	to n/w server. A err is returned if there is any parse error
+ *	or out of memory condition
+ *
+ * 	/param buf : buffer to be parsed
+ * 	/param buf_len : buffer length
+ * 	/return : error code if any, 0 on success 
+ */
+int 
+action_parse_presence( gchar* buf, 
+			gint buf_len ) ;
+
+/*!	/brief GObject finalize funtion
+*
+*	/param object object to be finalized
+*/
+static void         presence_finalize           (GObject             *object);
+
+/*!	/brief GObject get property funtion
+*
+*	/param object Gobject
+*	/param param_id
+*	/param value
+*	/param pspec
+*/
+static void         presence_get_property       (GObject             *object,
+						 guint                param_id,
+						 GValue              *value,
+						 GParamSpec          *pspec);
+
+/*!	/brief GObject set property funtion
+*
+*	/param object Gobject
+*	/param param_id
+*	/param value
+*	/param pspec
+*/						 
+static void         presence_set_property       (GObject             *object,
+						 guint                param_id,
+						 const GValue        *value,
+						 GParamSpec          *pspec);
+
+G_END_DECLS
+
+
+#endif //__ISOPRESENCE_H__
\ No newline at end of file