void handleBuddyUpdatedRequest(const std::string &user, const std::string &buddyName, const std::string &alias, const std::vector<std::string> &groups) { Skype *skype = m_sessions[user]; if (skype) { skype->send_command("SET USER " + buddyName + " BUDDYSTATUS 2 Please authorize me"); skype->send_command("SET USER " + buddyName + " ISAUTHORIZED TRUE"); } }
void handleMessageSendRequest(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &xhtml) { Skype *skype = m_sessions[user]; if (skype) { skype->send_command("MESSAGE " + legacyName + " " + message); } }
void SkypePlugin::handleBuddyRemovedRequest(const std::string &user, const std::string &buddyName, const std::vector<std::string> &groups) { Skype *skype = m_sessions[user]; if (skype) { skype->send_command("SET USER " + buddyName + " BUDDYSTATUS 1"); skype->send_command("SET USER " + buddyName + " ISAUTHORIZED FALSE"); } }
void handleStatusChangeRequest(const std::string &user, int status, const std::string &statusMessage) { Skype *skype = m_sessions[user]; if (!skype) return; std::string st; switch(status) { case Swift::StatusShow::Away: { st = "AWAY"; break; } case Swift::StatusShow::DND: { st = "DND"; break; } case Swift::StatusShow::XA: { st = "NA"; break; } case Swift::StatusShow::None: { break; } case pbnetwork::STATUS_INVISIBLE: st = "INVISIBLE"; break; default: st = "ONLINE"; break; } skype->send_command("SET USERSTATUS " + st); if (!statusMessage.empty()) { skype->send_command("SET PROFILE MOOD_TEXT " + statusMessage); } }
static gboolean skype_check_missedmessages(gpointer data) { Skype *skype = (Skype *) data; skype->send_command("SEARCH MISSEDCHATMESSAGES"); return TRUE; }
void handleLogoutRequest(const std::string &user, const std::string &legacyName) { Skype *skype = m_sessions[user]; if (skype) { LOG4CXX_INFO(logger, "User wants to logout, logging out"); skype->logout(); Logging::shutdownLogging(); exit(1); } }
void handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { std::string name = legacyName; if (name.find("skype.") == 0 || name.find("prpl-skype.") == 0) { name = name.substr(name.find(".") + 1); } LOG4CXX_INFO(logger, "Creating account with name '" << name << "'"); Skype *skype = new Skype(user, name, password); m_sessions[user] = skype; m_accounts[skype] = user; skype->login(); }
void handleMemoryUsage(double &res, double &shared) { res = 0; shared = 0; for(std::map<std::string, Skype *>::const_iterator it = m_sessions.begin(); it != m_sessions.end(); it++) { Skype *skype = it->second; if (skype) { double r; double s; process_mem_usage(s, r, skype->getPid()); res += r; shared += s; } } }
void handleVCardRequest(const std::string &user, const std::string &legacyName, unsigned int id) { Skype *skype = m_sessions[user]; if (skype) { std::string name = legacyName; if (name.find("skype.") == 0) { name = name.substr(6); } std::string photo; gchar *filename = NULL; gchar *new_filename = NULL; gchar *image_data = NULL; gsize image_data_len = 0; gchar *ret; int fh; GError *error; const gchar *userfiles[] = {"user256", "user1024", "user4096", "user16384", "user32768", "user65536", "profile256", "profile1024", "profile4096", "profile16384", "profile32768", NULL}; char *username = g_strdup_printf("\x03\x10%s", name.c_str()); for (fh = 0; userfiles[fh]; fh++) { filename = g_strconcat("/tmp/skype/", skype->getUsername().c_str(), "/", skype->getUsername().c_str(), "/", userfiles[fh], ".dbb", NULL); std::cout << "getting filename:" << filename << "\n"; if (g_file_get_contents(filename, &image_data, &image_data_len, NULL)) { std::cout << "got\n"; char *start = (char *)memmem(image_data, image_data_len, username, strlen(username)+1); if (start != NULL) { char *next = image_data; char *last = next; //find last index of l33l while ((next = (char *)memmem(next+4, start-next-4, "l33l", 4))) { last = next; } start = last; if (start != NULL) { char *img_start; //find end of l33l block char *end = (char *)memmem(start+4, image_data+image_data_len-start-4, "l33l", 4); if (!end) end = image_data+image_data_len; //look for start of JPEG block img_start = (char *)memmem(start, end-start, "\xFF\xD8", 2); if (img_start) { //look for end of JPEG block char *img_end = (char *)memmem(img_start, end-img_start, "\xFF\xD9", 2); if (img_end) { image_data_len = img_end - img_start + 2; photo = std::string(img_start, image_data_len); } } } } g_free(image_data); } g_free(filename); } g_free(username); std::string alias = ""; std::cout << skype->getUsername() << " " << name << "\n"; if (skype->getUsername() == name) { alias = skype->send_command("GET PROFILE FULLNAME"); alias = GET_RESPONSE_DATA(alias, "FULLNAME") } handleVCard(user, id, legacyName, "", alias, photo); }
DBusHandlerResult skype_notify_handler(DBusConnection *connection, DBusMessage *message, gpointer data) { Skype *skype = (Skype *) data; return skype->dbusMessageReceived(connection, message); }
static gboolean create_dbus_proxy(gpointer data) { Skype *skype = (Skype *) data; return skype->createDBusProxy(); }
static gboolean load_skype_buddies(gpointer data) { Skype *skype = (Skype *) data; return skype->loadSkypeBuddies(); }