Hi Claudio / Vinicius,

On 02/19/2013 02:44 PM, Claudio Takahasi wrote:
From: Vinicius Costa Gomes<[email protected]>

This patch checks if the Handsfree Audio Manager already has an agent
registered for the same owner and object path.
---
  plugins/hfp_audio.c | 41 ++++++++++++++++++++++++++++++++++++++++-
  1 file changed, 40 insertions(+), 1 deletion(-)

diff --git a/plugins/hfp_audio.c b/plugins/hfp_audio.c
index db21a5d..32ddebc 100644
--- a/plugins/hfp_audio.c
+++ b/plugins/hfp_audio.c
@@ -25,6 +25,7 @@

  #include<errno.h>
  #include<stdio.h>
+#include<string.h>

  #include<gdbus.h>

@@ -35,12 +36,34 @@

  #define HFP_AUDIO_MANAGER_INTERFACE           OFONO_SERVICE 
".HandsfreeAudioManager"

+struct agent {
+       char *owner;
+       char *path;
+       unsigned char *codecs;
+       int codecs_len;
+};
+
  /* Supported agents codecs */
  enum hfp_codec {
        HFP_CODEC_CVSD = 0x01,
        HFP_CODEC_MSBC = 0x02,
  };

+static GSList *agents = NULL;
+
+static int agent_cmp(gconstpointer a, gconstpointer b)
+{
+       const struct agent *agent = a;
+       const struct agent *match = b;
+       int ret;
+
+       ret = strcmp(agent->owner, match->owner);
+       if (ret != 0)
+               return ret;
+
+       return strcmp(agent->path, match->path);
+}
+
  static DBusMessage *am_get_cards(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
  {
@@ -52,11 +75,14 @@ static DBusMessage *am_get_cards(DBusConnection *conn,
  static DBusMessage *am_agent_register(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
  {
-       const char *path;
+       struct agent match, *agent;
+       const char *sender, *path;
        unsigned char *codecs;
        DBusMessageIter iter, array;
        int length, i;

+       sender = dbus_message_get_sender(msg);
+
        if (dbus_message_iter_init(msg,&iter) == FALSE)
                goto invalid_args;

@@ -75,6 +101,19 @@ static DBusMessage *am_agent_register(DBusConnection *conn,
                        goto invalid_args;
        }

+       match.owner = (char *) sender;
+       match.path = (char *) path;
+       if (g_slist_find_custom(agents,&match, agent_cmp))
+               goto invalid_args;
+
+       agent = g_new0(struct agent, 1);
+       agent->owner = g_strdup(sender);
+       agent->path = g_strdup(path);
+       agent->codecs = g_memdup(codecs, length);
+       agent->codecs_len = length;
+
+       agents = g_slist_prepend(agents, agent);
+

How do you plan on using multiple agents? Unless there is dire need, I suggest only allowing 1 agent to be registered at a time.

        return dbus_message_new_method_return(msg);

  invalid_args:

Regards,
-Denis
_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to