Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/EionRobb/skype4pidgin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'skype_messaging.c')
-rw-r--r--skype_messaging.c259
1 files changed, 0 insertions, 259 deletions
diff --git a/skype_messaging.c b/skype_messaging.c
deleted file mode 100644
index eeda3ed..0000000
--- a/skype_messaging.c
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Skype plugin for libpurple/Pidgin/Adium
- * Written by: Eion Robb <eionrobb@gmail.com>
- *
- * This plugin uses the Skype API to show your contacts in libpurple, and send/receive
- * chat messages.
- * It requires the Skype program to be running.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef INCLUDED_LIBSKYPE_C
-# error "Don't compile this file directly. Just compile libskype.c instead."
-#endif
-
-#include <glib.h>
-
-#include "skype_events.c"
-
-static gboolean skype_handle_received_message(char *message);
-
-static void skype_message_received(char *message);
-static gboolean skype_connect();
-static void skype_disconnect();
-static void send_message(const char* message);
-static void hide_skype();
-static gboolean exec_skype();
-
-gpointer send_messages_thread_func(gpointer data);
-void skype_send_message_nowait(char *message, ...);
-char *skype_send_message(char *message, ...);
-
-// Sort through the mess of different OS's to get the right proto
-
-#ifndef SKYPENET
-# ifdef _WIN32
-# include "skype_messaging_win32.c"
-# else /*if !win32 */
-# ifdef __APPLE__
-# include "skype_messaging_carbon.c"
-# else /*if !apple */
-# ifndef SKYPE_DBUS
-# include "skype_messaging_x11.c"
-# else
-# include "skype_messaging_dbus.c"
-# endif /* !x11 */
-# endif /* !apple */
-# endif /* win32 */
-#else /* skypenet */
-# include "skype_messaging_network.c"
-#endif
-
-
-/*typedef struct {
- gpointer sender;
- gpointer body;
- int time;
- gpointer chatname;
-} SkypeMessage;*/
-
-static GHashTable *message_queue = NULL;
-static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
-static GCond *condition = NULL;
-
-#ifdef _WIN32
-//these two #defines override g_static_mutex_lock and
-// g_static_mutex_unlock so as to remove "strict-aliasing"
-// compiler warnings
-#define g_static_mutex_get_mutex2(mutex) \
- g_static_mutex_get_mutex ((GMutex **)(void*)mutex)
-#define g_static_mutex_lock2(mutex) \
- g_mutex_lock (g_static_mutex_get_mutex2 (mutex))
-#define g_static_mutex_unlock2(mutex) \
- g_mutex_unlock (g_static_mutex_get_mutex2 (mutex))
-#else
-#define g_static_mutex_get_mutex2 g_static_mutex_get_mutex
-#define g_static_mutex_lock2 g_static_mutex_lock
-#define g_static_mutex_unlock2 g_static_mutex_unlock
-#endif
-
-static void
-skype_message_received(char *orig_message)
-{
- guint request_number;
- guint *key;
- int string_pos;
- char *message;
-
- if (orig_message == NULL || strlen(orig_message) == 0)
- return;
-
- message = g_strdup(orig_message);
- g_free(orig_message);
-
- skype_debug_info("skype", "Received: %s\n", message);
-
- if(message[0] == '#')
- {
- //It's a reply from a call we've made - update the hash table
- sscanf(message, "#%u %n", &request_number, &string_pos);
- key = g_new(guint, 1);
- *key = request_number;
-
- g_static_mutex_lock2(&mutex);
- g_hash_table_insert(message_queue, key, g_strdup(&message[string_pos]));
- g_cond_broadcast(condition);
- g_static_mutex_unlock2(&mutex);
-
- g_free(message);
- } else {
- purple_timeout_add(1, (GSourceFunc)skype_handle_received_message, (gpointer)message);
- }
-}
-
-static GThread *send_messages_thread = NULL;
-static gboolean send_thread_state = FALSE;
-static GAsyncQueue *send_messages_queue = NULL;
-
-gpointer
-send_messages_thread_func(gpointer data)
-{
- gchar *message;
-
- send_thread_state = TRUE;
- while (send_thread_state)
- {
- //read from async queue
- message = g_async_queue_pop(send_messages_queue);
- //send the message
- send_message(message);
- g_free(message);
- }
- g_async_queue_unref(send_messages_queue);
-
- return NULL;
-}
-
-void
-skype_send_message_nowait(char *message_format, ...)
-{
- va_list args;
- char* message;
-
- va_start(args, message_format);
- message = g_strdup_vprintf(message_format, args);
- va_end(args);
-
- skype_debug_info("skype", "Sending: '%s'\n", message);
-
- if (send_messages_queue == NULL)
- send_messages_queue = g_async_queue_new();
-
- if (send_messages_thread == NULL)
- {
- send_messages_thread = g_thread_create(send_messages_thread_func, NULL, FALSE, NULL);
- }
-
- g_async_queue_push(send_messages_queue, message);
-
-}
-
-char *skype_send_message(char *message_format, ...)
-{
- static guint next_message_num = 0;
- guint cur_message_num;
- char *message;
- char *return_msg;
- va_list args;
-#if __APPLE__ || _WIN32 || __FreeBSD__
- guint timeout = 0;
-#else
- gboolean condition_result;
- GTimeVal endtime = {0,0};
-#endif
-
- va_start(args, message_format);
- message = g_strdup_vprintf(message_format, args);
- va_end(args);
-
- if (!message_queue)
- message_queue = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
-
- g_static_mutex_lock2(&mutex);
- if (!condition)
- condition = g_cond_new();
- cur_message_num = next_message_num++;
- if (next_message_num == G_MAXUINT)
- next_message_num = 0;
- g_static_mutex_unlock2(&mutex);
-
- //Send message asynchronously
- skype_send_message_nowait("#%u %s", cur_message_num, message);
- g_free(message);
-
- g_static_mutex_lock2(&mutex);
- //Wait for a response
- while(g_hash_table_lookup(message_queue, &cur_message_num) == NULL)
- {
- g_static_mutex_unlock2(&mutex);
- g_thread_yield();
-
-#ifdef __APPLE__
- RunCurrentEventLoop(kEventDurationMillisecond);
- g_static_mutex_lock2(&mutex);
-
- if (timeout++ == 10000)
-#else
-#ifdef _WIN32
- Sleep(1);
- g_static_mutex_lock2(&mutex);
-
- if (timeout++ == 10000)
-#else
-#ifdef __FreeBSD__
- usleep(1000);
- g_static_mutex_lock2(&mutex);
-
- if (timeout++ == 10000)
-#else
-
- //wait for message for a maximum of 10 seconds
- g_get_current_time(&endtime);
- g_time_val_add(&endtime, 10 * G_USEC_PER_SEC);
- g_static_mutex_lock2(&mutex);
- condition_result = g_cond_timed_wait(condition, g_static_mutex_get_mutex2(&mutex), &endtime);
-
- if(!condition_result)
-#endif
-#endif
-#endif
- {
- //we timed out while waiting
- g_hash_table_remove(message_queue, &cur_message_num);
- g_static_mutex_unlock2(&mutex);
- return g_strdup("");
- }
- }
- return_msg = (char *)g_hash_table_lookup(message_queue, &cur_message_num);
- g_hash_table_remove(message_queue, &cur_message_num);
- g_static_mutex_unlock2(&mutex);
-
- if (strncmp(return_msg, "ERROR", 5) == 0)
- {
- g_free(return_msg);
- return g_strdup("");
- }
- return return_msg;
-}