diff -r 000000000000 -r d0f3a028347a libtelepathy/tsrc/src/telepathygabblesendmessage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtelepathy/tsrc/src/telepathygabblesendmessage.cpp Tue Feb 02 01:10:06 2010 +0200 @@ -0,0 +1,350 @@ +/* +* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Used for Send/Receive Test Cases +* +*/ + + + + +//Include files +#include +#include +#include +#include +#include +#include "telepathygabbleutils.h" +#include "telepathygabblesendmessage.h" +#include "telepathygabbletestdata.h" + + + + +//----------------------------------------------------------------------------- +// function_name : CTelepathyGabbleSendRecvMessage +// description : constructor +//----------------------------------------------------------------------------- + +CTelepathyGabbleSendRecvMessage::CTelepathyGabbleSendRecvMessage() +{ +} + +//----------------------------------------------------------------------------- +// function_name : ConstructL +// description : constructor +//----------------------------------------------------------------------------- +void CTelepathyGabbleSendRecvMessage::ConstructL() +{ + +} + +//----------------------------------------------------------------------------- +// function_name : NewL +// description : NewL +//----------------------------------------------------------------------------- +CTelepathyGabbleSendRecvMessage* CTelepathyGabbleSendRecvMessage::NewL() + { + CTelepathyGabbleSendRecvMessage* self = new(ELeave) CTelepathyGabbleSendRecvMessage; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +//----------------------------------------------------------------------------- +// function_name : ~CTelepathyGabbleSendRecvMessage +// description : Destructor +//----------------------------------------------------------------------------- +CTelepathyGabbleSendRecvMessage::~CTelepathyGabbleSendRecvMessage() + { + } + + +//----------------------------------------------------------------------------- +// function_name : SendMessage +// description : To send a message +//----------------------------------------------------------------------------- +TInt CTelepathyGabbleSendRecvMessage::SendMessage( const char *contact_id, + const char *message, + CTestData* aTestData ) +{ + TpChan* text_chan = NULL; //for send msg + + TInt contact_handle; + GArray *handles = NULL; + GError* error = NULL; + DBusGProxy *text_iface = NULL; + + gpointer userdata = NULL; + + + //get the contact handle. + contact_handle = CTelepathyGabbleUtils::get_handle_from_contact(contact_id,aTestData); + + if ( contact_handle == KErrNotFound ) + { + return CTestData::EMessageSendErr; + } + + text_chan = (TpChan*)g_hash_table_find( + aTestData->GetTextChannelsHT(), + (GHRFunc) text_channels_find_func, + &contact_handle ); + + //text_chan for the particular contact does not exist. + //New text_chan must be created. + if (text_chan == NULL) + { + text_chan = tp_conn_new_channel( + (aTestData->GetDBusConnection()), + (aTestData->GetTpConn()),CONNMGR_BUS,TP_IFACE_CHANNEL_TYPE_TEXT, + TP_CONN_HANDLE_TYPE_CONTACT,contact_handle, TRUE ); + + //Insert the new text_chan to the hash table. + + g_hash_table_insert( + (aTestData->GetTextChannelsHT()), + g_strdup(dbus_g_proxy_get_path(DBUS_G_PROXY(text_chan))),text_chan); + + } + + text_iface = tp_chan_get_interface(text_chan,TELEPATHY_CHAN_IFACE_TEXT_QUARK); + + + if( aTestData->GetTestType() == CTestData::ESendErr || + aTestData->GetTestType() == CTestData::EReceive ) + { + //Register the callback to get the error + //when the recipeint_id is invalid. + dbus_g_proxy_connect_signal(text_iface, "SendError", + G_CALLBACK(SendError_cb), + aTestData, NULL); + } + + if( aTestData->GetTestType() == CTestData::EReceive ) + { + //Register for the receive message callback here. + dbus_g_proxy_connect_signal(text_iface, "Received", + (G_CALLBACK(receivedMessage_cb)), + aTestData, NULL); + } + + + + //This callback tells whether the message is sent to the server or not. + + tp_chan_type_text_send_async( text_iface, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, + message,sendmessage_cb, aTestData); + + + // user_data = this i.e. the class pointer + + //Run the mainloop + g_main_loop_run (aTestData->GetMainLoop()); + + + //return the Message_sent that was updated in the callback sendmessage_cb + return aTestData->GetSendRecvMsgState(); +} + +//----------------------------------------------------------------------------- +// function_name : ReceiveMessage +// description : receive message +//----------------------------------------------------------------------------- +TInt CTelepathyGabbleSendRecvMessage::ReceiveMessage( const char *contact_id, + const char *message, + CTestData* aTestData ) +{ + TpChan* text_chan = NULL; //for send msg + DBusGProxy *text_iface; + + guint contact_handle; + + + + //send msg 1 + //For Automation, Do the send message to yourself + //own contact_id received from the cfg file. + TInt msg_status = SendMessage(contact_id,message,aTestData); + if( msg_status == CTestData::EMessageNotSent ) + { + aTestData->GetStifLogger()->Log( _L("ReceiveMessage: Msg is not sent successfully \n") ); + + if( aTestData->GetTestType() == CTestData::ERecvBlank ) + g_main_loop_quit(aTestData->GetMainLoop()); + + return CTestData::EMessageNotSent; + } + + + /*contact_handle = CTelepathyGabbleUtils::get_handle_from_contact(contact_id,aTestData); + + text_chan = (TpChan*)g_hash_table_find( + (aTestData->GetTextChannelsHT()), + (GHRFunc) text_channels_find_func, + &contact_handle ); + text_iface = tp_chan_get_interface(text_chan , + TELEPATHY_CHAN_IFACE_TEXT_QUARK); + + //Register for the receive message callback here. + dbus_g_proxy_connect_signal(text_iface, "Received", + (G_CALLBACK(receivedMessage_cb)), + aTestData, NULL); + + //send msg 2 + //Do the send message to yourself + + msg_status == CTestData::EMessageNotSent ) + { + return CTestData::EMessageNotSent; + }*/ + aTestData->GetStifLogger()->Log( _L("after : register receivedMessage_cb \n") ); + if (aTestData->GetTestType() == CTestData::EReceive && + aTestData->GetSendRecvMsgState() != CTestData::EMessageSendErr ) + { + //there are two callbacks now. + //receivedMessage_cb and sendmessage_cb. + + //Run the mainloop again as it was quit in the callback sendmessage_cb. + //the message_state is not yet MESSAGE_RECEIVED. + //we need to start the main loop again to get the receivedmessage_cb. + aTestData->GetStifLogger()->Log( _L("start mainloop if state not as EMESSAGE_RCVD \n") ); + g_main_loop_run (aTestData->GetMainLoop()); + + } + return aTestData->GetSendRecvMsgState(); +} + +//----------------------------------------------------------------------------- +// function_name : sendmessage_cb +// description : Callback for Send Message +//----------------------------------------------------------------------------- +void CTelepathyGabbleSendRecvMessage::sendmessage_cb( DBusGProxy* /*proxy*/, GError* /*error*/, gpointer userdata ) +{ + CTestData* testdata = static_cast (userdata); + + testdata->GetStifLogger()->Log( _L("inside sendmessage_cb \n") ); + + //This is the test case for sending message to invalid userid. + if ( testdata->GetTestType() != CTestData::ESendErr ) + + { + + testdata->SetSendRecvMsgState(CTestData::EMessageSent); + testdata->GetStifLogger()->Log( _L("sendmessage_cb::msg sent successfully \n") ); + + //Quit the main loop , just for now + g_main_loop_quit(testdata->GetMainLoop()); + } + else if( testdata->GetTestType() == CTestData::ERecvBlank ) + { + + //Quit the main loop , just for now + testdata->GetStifLogger()->Log( _L("sendmessage_cb::test case is for blank msg sending \n") ); + g_main_loop_quit(testdata->GetMainLoop()); + } + + + //otherwise send message error test case, dont quit. + +} + +//----------------------------------------------------------------------------- +// function_name : receivedMessage_cb +// description : Callback for receive message +//----------------------------------------------------------------------------- +void CTelepathyGabbleSendRecvMessage::receivedMessage_cb ( DBusGProxy* /*proxy*/, + guint /* message_id */, + guint /* timestamp */, + guint /* from_handle */, + guint /* message_type */, + guint /* message_flags */, + gchar * /*message_body */, + gpointer user_data ) +{ + //GArray *message_ids; + //GArray *handles = NULL; + CTestData* testdata = static_cast (user_data); + + + /*message_ids = g_array_new (FALSE, FALSE, sizeof (guint)); + + g_array_append_val (message_ids, message_id); + + g_array_free (message_ids, TRUE); + + handles = g_array_new (FALSE, FALSE, sizeof (guint32)); + + g_array_append_val (handles, from_handle); + + g_array_free (handles, TRUE);*/ + testdata->GetStifLogger()->Log( _L("receivedMessage_cb::test case is for receive msg \n") ); + + if( testdata->GetTestType() == CTestData::EReceive ) + { + testdata->SetSendRecvMsgState(CTestData::EMessageRecvd); + + //Quit the main loop once the receive message callback is received. + g_main_loop_quit(testdata->GetMainLoop()); + + } + + + +} + +//----------------------------------------------------------------------------- +// function_name : text_channels_find_func +// description : find whether the text channel +// is existing given the hash table pointer +//----------------------------------------------------------------------------- +gboolean CTelepathyGabbleSendRecvMessage::text_channels_find_func( gchar* /*key*/, + TpChan *text_channel_ht_ptr, + guint *contact_handle) +{ + if ((text_channel_ht_ptr->handle == *contact_handle)) + { + return TRUE; + }//else + return FALSE; +} + +void CTelepathyGabbleSendRecvMessage::SendError_cb ( DBusGProxy* /*proxy*/, + guint error, + guint /*timestamp*/, + guint /*message_type*/, + gchar* /*message_body*/, + gpointer user_data ) +{ + + //Get the testdata + CTestData* testdata = static_cast (user_data); + + FILE* fp; + + fp = fopen("c:\\testlogs.txt","a"); + if(fp) + { + fprintf(fp,"error code is %u", error); + fprintf(fp,"\n"); + fclose(fp); + } + + testdata->GetStifLogger()->Log( _L("inside SendError_cb \n") ); + + + testdata->SetSendRecvMsgState(CTestData::EMessageSendErr); + //quit the main loop + g_main_loop_quit(testdata->GetMainLoop()); +} \ No newline at end of file