static gboolean exec_skype() { GError *error; #ifdef USE_XVFB_SERVER PurpleAccount *acct = NULL; int skype_stdin; gchar **skype_list; gchar *command; if (!getenv("SKYPEDISPLAY")) setenv("SKYPEDISPLAY", ":25", 0); unsetenv("DBUS_SESSION_BUS_ADDRESS"); command = g_strconcat("Xvfb ", //"Xnest ", //Uncomment if using Xnest getenv("SKYPEDISPLAY"), " -ac -terminate -tst -xinerama", " -render -shmem -screen 0 320x240x16", //Dont use me if using Xnest NULL); if (g_spawn_command_line_async(command, NULL)) { acct = skype_get_account(NULL); skype_debug_info("skype_x11", "acct: %d\n", acct); if (acct && acct->username && acct->username[0] != '\0' && acct->password && acct->password[0] != '\0') { g_free(command); command = g_strconcat("skype --pipelogin -display ", getenv("SKYPEDISPLAY"), NULL); g_shell_parse_argv(command, NULL, &skype_list, NULL); if (g_spawn_async_with_pipes(NULL, skype_list, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &skype_stdin, NULL, NULL, NULL)) { g_strfreev(skype_list); write(skype_stdin, acct->username, strlen(acct->username)); write(skype_stdin, " ", 1); write(skype_stdin, acct->password, strlen(acct->password)); write(skype_stdin, "\n", 1); fsync(skype_stdin); skype_debug_info("skype_x11", "pipelogin worked\n"); g_free(command); return TRUE; } g_strfreev(skype_list); } } g_free(command); #endif if (g_spawn_command_line_async("skype --disable-cleanlooks", &error)) { return TRUE; } else { skype_debug_error("skype", "Could not start skype: %s\n", error->message); return FALSE; } }
static gboolean exec_skype() { if (!connected && !in_progress) { in_progress = TRUE; PurpleAccount *acct = skype_get_account(NULL); purple_proxy_connect(acct->gc, acct, purple_account_get_string(acct, "host", "skype.robbmob.com"), purple_account_get_int(acct, "port", 5000), connect_function, acct); g_thread_create((GThreadFunc)skype_read_thread, acct, FALSE, NULL); purple_timeout_add_seconds(10, connection_timeout, acct); } return TRUE; }
void connect_function(gpointer data, gint source, const gchar *error_message) { gchar *loginmsg; PurpleAccount *acct = skype_get_account(NULL); if (error_message) { in_progress = FALSE; g_thread_create((GThreadFunc)skype_message_received, g_strdup("CONNSTATUS LOGGEDOUT"), FALSE, NULL); return; } source_sock = source; loginmsg = g_strdup_printf("LOGIN %s %s", acct->username, acct->password); send_message(loginmsg); skype_debug_info("skype", "Sending: 'LOGIN {username} {password}'\n"); g_free(loginmsg); g_thread_create((GThreadFunc)skype_read_thread, NULL, FALSE, NULL); }