From f754e0739dd4f7d40987d1d0426a281399a13b99 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Fri, 10 Jun 2011 20:55:01 +0200 Subject: [PATCH] handle requestInput/requestAction --- backends/libpurple/main.cpp | 52 ++++++++++++++++++++++++++++++++++++- spectrum/src/sample.cfg | 4 ++- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index 34b68155..2d6f6f94 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -45,6 +45,40 @@ static GOptionEntry options_entries[] = { { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, "", NULL } }; +static void * requestInput(const char *title, const char *primary,const char *secondary, const char *default_value, gboolean multiline, gboolean masked, gchar *hint,const char *ok_text, GCallback ok_cb,const char *cancel_text, GCallback cancel_cb, PurpleAccount *account, const char *who,PurpleConversation *conv, void *user_data) { + std::cout << "REQUEST INPUT\n"; + if (primary) { + std::string primaryString(primary); + std::cout << "REQUEST INPUT " << primaryString << "\n"; + if (primaryString == "Authorization Request Message:") { + std::cout << "AUTHORIZING\n"; + ((PurpleRequestInputCb) ok_cb)(user_data, "Please authorize me."); + return NULL; + } + } + return NULL; +} + +static void *requestAction(const char *title, const char *primary, const char *secondary, int default_action, PurpleAccount *account, const char *who,PurpleConversation *conv, void *user_data, size_t action_count, va_list actions){ + std::string t(title ? title : "NULL"); + if (t == "SSL Certificate Verification") { + Log("purple", "accepting SSL certificate"); + va_arg(actions, char *); + ((PurpleRequestActionCb) va_arg(actions, GCallback)) (user_data, 2); + } + else { + if (title) { + std::string headerString(title); + Log("purple", "header string: " << headerString); + if (headerString == "SSL Certificate Verification") { + va_arg(actions, char *); + ((PurpleRequestActionCb) va_arg(actions, GCallback)) (user_data, 2); + } + } + } + return NULL; +} + class SpectrumNetworkPlugin : public NetworkPlugin { public: SpectrumNetworkPlugin(Config *config, SpectrumEventLoop *loop, const std::string &host, int port) : NetworkPlugin(loop, host, port) { @@ -147,6 +181,7 @@ class SpectrumNetworkPlugin : public NetworkPlugin { serv_alias_buddy(buddy); } else { + std::cout << "ADDING NEW BUDDY\n"; PurpleBuddy *buddy = purple_buddy_new(account, buddyName.c_str(), alias.c_str()); // Add newly created buddy to legacy network roster. @@ -482,12 +517,27 @@ static PurpleNotifyUiOps notifyUiOps = NULL }; +static PurpleRequestUiOps requestUiOps = +{ + requestInput, + NULL, + requestAction, + NULL, + NULL, + NULL, //requestClose, + NULL, + NULL, + NULL, + NULL, + NULL +}; + static void transport_core_ui_init(void) { purple_blist_set_ui_ops(&blistUiOps); // purple_accounts_set_ui_ops(&accountUiOps); purple_notify_set_ui_ops(¬ifyUiOps); -// purple_request_set_ui_ops(&requestUiOps); + purple_request_set_ui_ops(&requestUiOps); // purple_xfers_set_ui_ops(getXferUiOps()); purple_connections_set_ui_ops(&conn_ui_ops); purple_conversations_set_ui_ops(&conversation_ui_ops); diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index b564a4dc..1c127d88 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -6,7 +6,9 @@ port = 5222 server_mode = 1 backend=../../backends/libpurple/libpurple_backend #backend=../../backends/libircclient-qt/libircclient-qt_backend -protocol=prpl-jabber +#protocol=prpl-jabber +#protocol=prpl-msn +protocol=prpl-icq [database] database = test.sql