static const char * skypeweb_list_icon(PurpleAccount *account, PurpleBuddy *buddy) { if (buddy != NULL) { const gchar *buddy_name = purple_buddy_get_name(buddy); if (buddy_name && SKYPEWEB_BUDDY_IS_MSN(buddy_name)) { return "msn"; } } return "skype"; }
const gchar * skypeweb_user_url_prefix(const gchar *who) { if(SKYPEWEB_BUDDY_IS_S4B(who)) { return ""; // already has the 2: prefix! } else if (SKYPEWEB_BUDDY_IS_MSN(who)) { return "1:"; } else if(SKYPEWEB_BUDDY_IS_PHONE(who)) { return "4:"; } else { return "8:"; } }
static void skypeweb_xfer_send_init(PurpleXfer *xfer) { PurpleConnection *pc = purple_account_get_connection(purple_xfer_get_account(xfer)); SkypeWebAccount *sa = purple_connection_get_protocol_data(pc); gchar *basename = g_path_get_basename(purple_xfer_get_local_filename(xfer)); gchar *id, *post, *headers; SkypeWebFileTransfer *swft = purple_xfer_get_protocol_data(xfer); JsonObject *obj = json_object_new(); JsonObject *permissions = json_object_new(); JsonArray *userpermissions = json_array_new(); purple_xfer_set_filename(xfer, basename); purple_xfer_ref(xfer); json_object_set_string_member(obj, "type", "sharing/file"); json_object_set_string_member(obj, "filename", basename); if (SKYPEWEB_BUDDY_IS_MSN(swft->from)) { id = g_strconcat("1:", swft->from, NULL); } else { id = g_strconcat("8:", swft->from, NULL); } json_array_add_string_element(userpermissions, "read"); json_object_set_array_member(permissions, id, userpermissions); json_object_set_object_member(obj, "permissions", permissions); post = skypeweb_jsonobj_to_string(obj); //POST to api.asm.skype.com /v1/objects //{"type":"sharing/file","permissions":{"8:eionrobb":["read"]},"filename":"GiantLobsterMoose.txt"} headers = g_strdup_printf("POST /v1/objects HTTP/1.0\r\n" "Connection: close\r\n" "Authorization: skype_token %s\r\n" //slightly different to normal! "Host: " SKYPEWEB_XFER_HOST "\r\n" "Content-Length: %d\r\n" "Content-Type: application/json\r\n" "\r\n\r\n%s", sa->skype_token, strlen(post), post); skypeweb_fetch_url_request(sa, "https://" SKYPEWEB_XFER_HOST, TRUE, NULL, FALSE, headers, FALSE, -1, skypeweb_got_object_for_file, swft); g_free(post); json_object_unref(obj); g_free(id); g_free(basename); }
static void skypeweb_login(PurpleAccount *account) { PurpleConnection *pc = purple_account_get_connection(account); SkypeWebAccount *sa = g_new0(SkypeWebAccount, 1); PurpleConnectionFlags flags; purple_connection_set_protocol_data(pc, sa); if (!purple_ssl_is_supported()) { purple_connection_error (pc, PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, _("Server requires TLS/SSL for login. No TLS/SSL support found.")); return; } flags = purple_connection_get_flags(pc); flags |= PURPLE_CONNECTION_FLAG_HTML | PURPLE_CONNECTION_FLAG_NO_BGCOLOR | PURPLE_CONNECTION_FLAG_NO_FONTSIZE; purple_connection_set_flags(pc, flags); if (!SKYPEWEB_BUDDY_IS_MSN(purple_account_get_username(account))) { sa->username = g_ascii_strdown(purple_account_get_username(account), -1); } sa->account = account; sa->pc = pc; sa->cookie_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); sa->hostname_ip_cache = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); sa->sent_messages_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); sa->waiting_conns = g_queue_new(); sa->messages_host = g_strdup(SKYPEWEB_DEFAULT_MESSAGES_HOST); if(strchr(purple_account_get_username(account), '@')) { //Has an email address for a username, probably a microsoft account? skypeweb_begin_oauth_login(sa); } else { skypeweb_begin_web_login(sa); } purple_signal_connect(purple_conversations_get_handle(), "conversation-updated", pc, PURPLE_CALLBACK(skypeweb_mark_conv_seen), NULL); }