/pidgin/main: 723b8ecf31cd: Add media_send_dtmf() to prpl

David Woodhouse <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: 723b8ecf31cd46068fd1a8ba98a973340fc61a09
Author:	 David Woodhouse <[email protected]>
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) \
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.