diff -r d0f3a028347a -r 59927b2d3b75 isolationserver/isoserver/src/isoavtar.c --- a/isolationserver/isoserver/src/isoavtar.c Tue Feb 02 01:10:06 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,308 +0,0 @@ -/* -* ============================================================================ -* Name : isoconnectionmanager.c -* Part of : isolation server. -* Version : %version: 6 % -* -* 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 -*/ - - -#include "tp-conn.h" -#include "isoavtar.h" -#include "stdio.h" -#include "isoservermain.h" -#include "msgliterals.h" -#include "msgqlib.h" -#include "msg_enums.h" -#include "isoutils.h" - - -#include -#include - -/* - * ! \file - * Implements the functions in isoavtar.h - */ - - -/*! \brief callback for updating own avtar. This function - * sends response to client - * - * \param proxy : unused - * \param avatar_sha1: token string - * \param error : error if any - * \param message : message header - * \return : void - */ -void update_avtar_cb(DBusGProxy *proxy, char* avatar_sha1, GError* error, gpointer userdata) - { - - int err = 0; - //user data is of type message_hdr_req - message_hdr_req* msg_hdr = ( message_hdr_req* ) userdata; - // create the msg queue - - iso_logger( "%s", "In - update_avtar_cb\n" ); - UNUSED_FORMAL_PARAM(proxy); - - //msg_hdr should never be NULL - - if ( NULL != error ) - { - //There was some error - //send the response for the msg_hdr request to client - - iso_logger( "%s", "error in update_avtar_cb" ); - err = send_response_to_client( msg_hdr, error->code, 0 ); - g_error_free(error); - } - else - { - //If the set avatar was successful then send the msg_hdr alongwith the avatar sha1 to client - // : sending the avatar sha1 - - iso_logger( "%s %s", "avatar sha1 is : ", avatar_sha1 ); - err = send_response_to_client( msg_hdr, 0, 1 ); - free ( avatar_sha1 ); - } - - if ( err < 0 ) - { - // failed to deliver - iso_logger( "%s", "failed to deliver\n" ); - } - free( msg_hdr ); - - iso_logger( "%s", "Out - update_avtar_cb\n" ); - - } - -/*! \brief sends avtar of the client to n/w server thru' gabble - * calls tp_conn_iface_avatars_set_avatar_async to set avatar - * - * \param avtarcontent : avatar image content - * \param mimetype : mime type - * \param msghdr request header that will be passed back to client - * - * \return : error code on failure, 0 on success - */ -gint send_avtar( GArray* avtarcontent , char * mimetype , message_hdr_req *msg_hdr ) - { - - gint error = 0; - DBusGProxy* avatar_face = NULL; - message_hdr_req *hdr_req = NULL; - iso_logger( "%s", "In - send_avtar\n" ); - - //Allocate the memory for header req and initialize that to 0 - hdr_req = ( message_hdr_req* ) calloc ( sizeof( message_hdr_req ), 1 ); - if ( NULL == hdr_req ) - { - return MEM_ALLOCATION_ERROR; - } - //msg_hdr can never be NULL.. handled in the case - memcpy( hdr_req, msg_hdr, sizeof( message_hdr_req ) ); - - //Registering for signal to be done at different loation - /*dbus_g_proxy_connect_signal (DBUS_G_PROXY(globalCon.conn), "AvatarUpdated", - G_CALLBACK (avatar_updated_signal), - NULL, NULL); */ - //get the interface - avatar_face = tp_conn_get_interface ( - globalCon.conn, TELEPATHY_CONN_IFACE_AVATAR_QUARK); - - if ( avatar_face ) - { - //make call to the lib telepathy to set the avatar. update_avtar_cb is registered as the callback - tp_conn_iface_avatars_set_avatar_async (avatar_face, avtarcontent, mimetype, update_avtar_cb, (gpointer)hdr_req); - } - else { - error = TP_AVATAR_IFACE_ERROR; - } - - iso_logger( "%s", "Out - send_avtar\n" ); - return error; - } - -/*! \brief callback for clearing own avtar. This function - * sends response to client - * - * \param proxy : unused - * \param error : error if any - * \param userdata : message header - * \return : void - */ -void clear_avtar_cb( DBusGProxy *proxy, GError* error, gpointer userdata ) - { - - int err = 0; - //user data is of type message_hdr_req - message_hdr_req* msg_hdr = ( message_hdr_req* ) userdata; - - iso_logger( "%s", "In - clear_avtar_cb\n" ); - UNUSED_FORMAL_PARAM(proxy); - - //msg_hdr should never be NULL - - if ( NULL != error ) - { - //There was some error - //send the response for the msg_hdr request to client - - iso_logger( "%s", "error in clear_avtar_cb" ); - err = send_response_to_client( msg_hdr, error->code, 0 ); - g_error_free(error); - } - else - { - err = send_response_to_client( msg_hdr, 0, 1 ); - } - - if ( err < 0 ) - { - // failed to deliver - iso_logger( "%s", "failed to deliver\n" ); - } - free( msg_hdr ); - iso_logger( "%s", "Out - clear_avtar_cb\n" ); - - } -/*! \brief clears the self avtar - * - * \param msghdr request header that will be passed back to client - * - * \return : error code on failure, 0 on success - */ -gint clear_avatar( message_hdr_req *msg_hdr ) - { - gint error = 0; - DBusGProxy* avatar_face = NULL; - message_hdr_req *hdr_req = NULL; - iso_logger( "%s", "In - clear_avtar\n" ); - - //Allocate the memory for header req and initialize that to 0 - hdr_req = ( message_hdr_req* ) calloc ( sizeof( message_hdr_req ), 1 ); - if ( NULL == hdr_req ) - { - return MEM_ALLOCATION_ERROR; - } - //msg_hdr can never be NULL.. handled in the case - memcpy( hdr_req, msg_hdr, sizeof( message_hdr_req ) ); - - //get the interface - avatar_face = tp_conn_get_interface ( - globalCon.conn, TELEPATHY_CONN_IFACE_AVATAR_QUARK); - - if ( avatar_face ) - { - tp_conn_iface_avatars_clear_avatar_async(avatar_face, clear_avtar_cb, (gpointer)hdr_req); - } - else { - error = TP_AVATAR_IFACE_ERROR; - } - - iso_logger( "%s", "Out - clear_avtar\n" ); - - return error; - - } -/*! \brief clears the self avtar - * \param rmsg : message buffer to be parsed - * \param msg_struct : request header - * \param result : message buffer length - * \param avtarcontent : pointer to the avatar image data - * - * \return : error code on failure, 0 on success - */ -gint update_own_avatar(char* rmsg,message_hdr_resp* msg_struct,gint result, GArray** avtarcontent) - { - int len = 0; - int err = 0; - static gboolean fetch_avatar_data = 0; - static gchar *mimetype = NULL; - - - iso_logger( "%s", "In - EUpdateOwnAvtar\n" ); - - if(!fetch_avatar_data) - { - //parse mime type - //calculating len for request header - //skip the msg_hdr part - - len += sizeof( message_hdr_req ); - - *avtarcontent = g_array_new ( FALSE, FALSE, sizeof ( gchar ) ); - if ( NULL == *avtarcontent ) - { - return MEM_ALLOCATION_ERROR; - } - - // reading a mimetype from buffer - err = parse_a_string( rmsg, &mimetype, &len, result ); - - if ( err < 0 ) - { - goto oom; - } - - fetch_avatar_data = 1; - } - else - { - len = sizeof( message_hdr_req ); - } - - - g_array_append_vals( *avtarcontent, rmsg + len, result - len ); - - - if(! msg_struct->hdr_req.continue_flag ) - { - err = send_avtar( *avtarcontent, mimetype, &(msg_struct->hdr_req) ); - - fetch_avatar_data = 0; //reset the value so that if set avatar requested for - //falling of to goto oom - - } - else { - //Continue flag is set and read the data again return 0 - return 0; - } - - oom: - //Free the memory if err or operation complete ( sent to libeteleapthy) - if ( *avtarcontent ) - { - g_array_free( *avtarcontent, (*avtarcontent)->len ); - *avtarcontent = NULL; - } - if( mimetype ) - { - free ( mimetype ); - } - return err; - }