/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