From 9f03c472fef309878ff2f3bc720d51e6d03077f1 Mon Sep 17 00:00:00 2001 From: dequis Date: Sun, 13 Nov 2016 21:37:14 -0300 Subject: Improve support for protocols which don't require a password This adds a prpl_options_t enum with flags, which mostly just brings OPT_PROTO_{NO_PASSWORD,PASSWORD_OPTIONAL} from libpurple as PRPL_OPT_{NO_PASSWORD,PASSWORD_OPTIONAL} --- protocols/nogaim.h | 21 +++++++++++++++++++++ protocols/purple/purple.c | 10 ++++++++++ protocols/twitter/twitter.c | 3 ++- 3 files changed, 33 insertions(+), 1 deletion(-) (limited to 'protocols') diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 4cba2174..b5a46524 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -139,6 +139,27 @@ struct buddy_action { char *description; }; +/* This enum takes a few things from libpurple and a few things from old OPT_ flags. + * The only flag that was used before this struct was PRPL_OPT_NOOTR. + * + * The libpurple ones only use the same values as the PurpleProtocolOptions + * enum for convenience, but there's no promise of direct compatibility with + * those values. As of libpurple 2.8.0 they use up to 0x800 (1 << 11), which is + * a nice coincidence. + */ +typedef enum { + /* The protocol doesn't use passwords + * Mirrors libpurple's OPT_PROTO_NO_PASSWORD */ + PRPL_OPT_NO_PASSWORD = 1 << 4, + + /* The protocol doesn't require passwords, but may use them + * Mirrors libpurple's OPT_PROTO_PASSWORD_OPTIONAL */ + PRPL_OPT_PASSWORD_OPTIONAL = 1 << 7, + + /* The protocol is not suitable for OTR, see OPT_NOOTR */ + PRPL_OPT_NOOTR = 1 << 12, +} prpl_options_t; + struct prpl { int options; /* You should set this to the name of your protocol. diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c index 4ee41d62..c7123798 100644 --- a/protocols/purple/purple.c +++ b/protocols/purple/purple.c @@ -1724,6 +1724,7 @@ void purple_initmodule() supported by this libpurple instance. */ for (prots = purple_plugins_get_protocols(); prots; prots = prots->next) { PurplePlugin *prot = prots->data; + PurplePluginProtocolInfo *pi = prot->info->extra_info; struct prpl *ret; /* If we already have this one (as a native module), don't @@ -1737,6 +1738,15 @@ void purple_initmodule() if (strncmp(ret->name, "prpl-", 5) == 0) { ret->name += 5; } + + if (pi->options & OPT_PROTO_NO_PASSWORD) { + ret->options |= PRPL_OPT_NO_PASSWORD; + } + + if (pi->options & OPT_PROTO_PASSWORD_OPTIONAL) { + ret->options |= PRPL_OPT_PASSWORD_OPTIONAL; + } + register_protocol(ret); g_string_append_printf(help, "\n* %s (%s)", ret->name, prot->info->name); diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index b2039171..8bc6140a 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -1091,7 +1091,7 @@ void twitter_initmodule() { struct prpl *ret = g_new0(struct prpl, 1); - ret->options = OPT_NOOTR; + ret->options = PRPL_OPT_NOOTR | PRPL_OPT_NO_PASSWORD; ret->name = "twitter"; ret->login = twitter_login; ret->init = twitter_init; @@ -1118,5 +1118,6 @@ void twitter_initmodule() /* And an identi.ca variant: */ ret = g_memdup(ret, sizeof(struct prpl)); ret->name = "identica"; + ret->options = PRPL_OPT_NOOTR; register_protocol(ret); } -- cgit v1.2.3