/pidgin/main: 723b8ecf31cd: Add media_send_dtmf() to prpl
David Woodhouse
David.Woodhouse at intel.com
Fri Mar 6 17:19:17 EST 2015
Changeset: 723b8ecf31cd46068fd1a8ba98a973340fc61a09
Author: David Woodhouse <David.Woodhouse at intel.com>
Date: 2015-03-06 22:09 +0000
Branch: default
URL: https://hg.pidgin.im/pidgin/main/rev/723b8ecf31cd
Description:
Add media_send_dtmf() to prpl
This allows for prpls to have their own protocol-specific method for
sending DTMF.
Refs #12617
diffstat:
libpurple/media.c | 6 +++++-
libpurple/protocols/bonjour/bonjour.c | 3 ++-
libpurple/protocols/gg/gg.c | 3 ++-
libpurple/protocols/irc/irc.c | 3 ++-
libpurple/protocols/jabber/libfacebook.c | 3 ++-
libpurple/protocols/jabber/libgtalk.c | 3 ++-
libpurple/protocols/jabber/libxmpp.c | 3 ++-
libpurple/protocols/msn/msn.c | 3 ++-
libpurple/protocols/mxit/mxit.c | 3 ++-
libpurple/protocols/novell/novell.c | 3 ++-
libpurple/protocols/null/nullprpl.c | 3 ++-
libpurple/protocols/oscar/libaim.c | 3 ++-
libpurple/protocols/oscar/libicq.c | 3 ++-
libpurple/protocols/sametime/sametime.c | 1 +
libpurple/protocols/silc/silc.c | 3 ++-
libpurple/protocols/simple/simple.c | 3 ++-
libpurple/protocols/yahoo/libyahoo.c | 3 ++-
libpurple/protocols/yahoo/libyahoojp.c | 3 ++-
libpurple/protocols/zephyr/zephyr.c | 3 ++-
libpurple/prpl.h | 10 ++++++++++
20 files changed, 50 insertions(+), 18 deletions(-)
diffs (268 lines):
diff --git a/libpurple/media.c b/libpurple/media.c
--- a/libpurple/media.c
+++ b/libpurple/media.c
@@ -1454,7 +1454,11 @@ purple_media_send_dtmf(PurpleMedia *medi
g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE);
- if (backend_iface && backend_iface->send_dtmf
+ if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, media_send_dtmf)
+ && prpl_info->media_send_dtmf(media, dtmf, volume, duration))
+ {
+ return TRUE;
+ } else if (backend_iface && backend_iface->send_dtmf
&& backend_iface->send_dtmf(media->priv->backend,
session_id, dtmf, volume, duration))
{
diff --git a/libpurple/protocols/bonjour/bonjour.c b/libpurple/protocols/bonjour/bonjour.c
--- a/libpurple/protocols/bonjour/bonjour.c
+++ b/libpurple/protocols/bonjour/bonjour.c
@@ -562,7 +562,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- bonjour_get_max_message_size /* get_max_message_size */
+ bonjour_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/gg/gg.c b/libpurple/protocols/gg/gg.c
--- a/libpurple/protocols/gg/gg.c
+++ b/libpurple/protocols/gg/gg.c
@@ -1015,7 +1015,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- ggp_get_max_message_size /* get_max_message_size */
+ ggp_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static gboolean ggp_load(PurplePlugin *plugin);
diff --git a/libpurple/protocols/irc/irc.c b/libpurple/protocols/irc/irc.c
--- a/libpurple/protocols/irc/irc.c
+++ b/libpurple/protocols/irc/irc.c
@@ -1005,7 +1005,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- irc_get_max_message_size /* get_max_message_size */
+ irc_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static gboolean load_plugin (PurplePlugin *plugin) {
diff --git a/libpurple/protocols/jabber/libfacebook.c b/libpurple/protocols/jabber/libfacebook.c
--- a/libpurple/protocols/jabber/libfacebook.c
+++ b/libpurple/protocols/jabber/libfacebook.c
@@ -150,7 +150,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static gboolean load_plugin(PurplePlugin *plugin)
diff --git a/libpurple/protocols/jabber/libgtalk.c b/libpurple/protocols/jabber/libgtalk.c
--- a/libpurple/protocols/jabber/libgtalk.c
+++ b/libpurple/protocols/jabber/libgtalk.c
@@ -133,7 +133,8 @@ static PurplePluginProtocolInfo prpl_inf
jabber_get_moods, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static gboolean load_plugin(PurplePlugin *plugin)
diff --git a/libpurple/protocols/jabber/libxmpp.c b/libpurple/protocols/jabber/libxmpp.c
--- a/libpurple/protocols/jabber/libxmpp.c
+++ b/libpurple/protocols/jabber/libxmpp.c
@@ -127,7 +127,8 @@ static PurplePluginProtocolInfo prpl_inf
jabber_get_moods, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static gboolean load_plugin(PurplePlugin *plugin)
diff --git a/libpurple/protocols/msn/msn.c b/libpurple/protocols/msn/msn.c
--- a/libpurple/protocols/msn/msn.c
+++ b/libpurple/protocols/msn/msn.c
@@ -2951,7 +2951,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
msn_set_public_alias, /* set_public_alias */
msn_get_public_alias, /* get_public_alias */
- msn_get_max_message_size /* get_max_message_size */
+ msn_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/mxit/mxit.c b/libpurple/protocols/mxit/mxit.c
--- a/libpurple/protocols/mxit/mxit.c
+++ b/libpurple/protocols/mxit/mxit.c
@@ -799,7 +799,8 @@ static PurplePluginProtocolInfo proto_in
mxit_get_moods, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
diff --git a/libpurple/protocols/novell/novell.c b/libpurple/protocols/novell/novell.c
--- a/libpurple/protocols/novell/novell.c
+++ b/libpurple/protocols/novell/novell.c
@@ -3576,7 +3576,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- novell_get_max_message_size /* get_max_message_size */
+ novell_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info = {
diff --git a/libpurple/protocols/null/nullprpl.c b/libpurple/protocols/null/nullprpl.c
--- a/libpurple/protocols/null/nullprpl.c
+++ b/libpurple/protocols/null/nullprpl.c
@@ -1083,7 +1083,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static void nullprpl_init(PurplePlugin *plugin)
diff --git a/libpurple/protocols/oscar/libaim.c b/libpurple/protocols/oscar/libaim.c
--- a/libpurple/protocols/oscar/libaim.c
+++ b/libpurple/protocols/oscar/libaim.c
@@ -99,7 +99,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- oscar_get_max_message_size /* get_max_message_size */
+ oscar_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/oscar/libicq.c b/libpurple/protocols/oscar/libicq.c
--- a/libpurple/protocols/oscar/libicq.c
+++ b/libpurple/protocols/oscar/libicq.c
@@ -115,7 +115,8 @@ static PurplePluginProtocolInfo prpl_inf
oscar_get_purple_moods, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- icq_get_max_message_size /* get_max_message_size */
+ icq_get_max_message_size, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/sametime/sametime.c b/libpurple/protocols/sametime/sametime.c
--- a/libpurple/protocols/sametime/sametime.c
+++ b/libpurple/protocols/sametime/sametime.c
@@ -5127,6 +5127,7 @@ static PurplePluginProtocolInfo mw_prpl_
NULL,
NULL,
NULL,
+ NULL,
NULL
};
diff --git a/libpurple/protocols/silc/silc.c b/libpurple/protocols/silc/silc.c
--- a/libpurple/protocols/silc/silc.c
+++ b/libpurple/protocols/silc/silc.c
@@ -2138,7 +2138,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/simple/simple.c b/libpurple/protocols/simple/simple.c
--- a/libpurple/protocols/simple/simple.c
+++ b/libpurple/protocols/simple/simple.c
@@ -2119,7 +2119,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
diff --git a/libpurple/protocols/yahoo/libyahoo.c b/libpurple/protocols/yahoo/libyahoo.c
--- a/libpurple/protocols/yahoo/libyahoo.c
+++ b/libpurple/protocols/yahoo/libyahoo.c
@@ -264,7 +264,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- yahoo_get_max_message_size
+ yahoo_get_max_message_size,
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/yahoo/libyahoojp.c b/libpurple/protocols/yahoo/libyahoojp.c
--- a/libpurple/protocols/yahoo/libyahoojp.c
+++ b/libpurple/protocols/yahoo/libyahoojp.c
@@ -162,7 +162,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- yahoo_get_max_message_size
+ yahoo_get_max_message_size,
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info =
diff --git a/libpurple/protocols/zephyr/zephyr.c b/libpurple/protocols/zephyr/zephyr.c
--- a/libpurple/protocols/zephyr/zephyr.c
+++ b/libpurple/protocols/zephyr/zephyr.c
@@ -2959,7 +2959,8 @@ static PurplePluginProtocolInfo prpl_inf
NULL, /* get_moods */
NULL, /* set_public_alias */
NULL, /* get_public_alias */
- NULL /* get_max_message_size */
+ NULL, /* get_max_message_size */
+ NULL /* media_send_dtmf */
};
static PurplePluginInfo info = {
diff --git a/libpurple/prpl.h b/libpurple/prpl.h
--- a/libpurple/prpl.h
+++ b/libpurple/prpl.h
@@ -633,6 +633,16 @@ struct _PurplePluginProtocolInfo
* Returns: Maximum message size, 0 if unspecified, -1 for infinite.
*/
gssize (*get_max_message_size)(PurpleConversation *conv);
+
+ /*
+ * Sends DTMF codes out-of-band in a protocol-specific way if the
+ * protocol supports it, or failing that in-band if the media backend
+ * can do so.
+ *
+ * See purple_media_send_dtmf()
+ */
+ gboolean (*media_send_dtmf)(PurpleMedia *media, gchar dtmf,
+ guint8 volume, guint8 duration);
};
#define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \
More information about the Commits
mailing list