All of lore.kernel.org
 help / color / mirror / Atom feed
From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH v1 7/8] hfp_hf_bluez5: Add rejecting SCO connection
Date: Tue, 29 Jan 2013 09:27:32 -0600	[thread overview]
Message-ID: <5107EA64.9000707@gmail.com> (raw)
In-Reply-To: <1359407468-5110-8-git-send-email-claudio.takahasi@openbossa.org>

[-- Attachment #1: Type: text/plain, Size: 5399 bytes --]

Hi Claudio,

On 01/28/2013 03:11 PM, Claudio Takahasi wrote:
> This patch rejects the SCO incoming connection if there isn't a modem
> (service level connection) associated with the address.

Why service level connection is in parenthesis?

> ---
>   plugins/hfp_hf_bluez5.c | 82 ++++++++++++++++++++++++++++++++++++++++---------
>   1 file changed, 68 insertions(+), 14 deletions(-)
>
> diff --git a/plugins/hfp_hf_bluez5.c b/plugins/hfp_hf_bluez5.c
> index 87ae5e3..871c720 100644
> --- a/plugins/hfp_hf_bluez5.c
> +++ b/plugins/hfp_hf_bluez5.c
> @@ -61,6 +61,13 @@
>   struct hfp {
>   	struct hfp_slc_info info;
>   	DBusMessage *msg;
> +	bdaddr_t src;
> +	bdaddr_t dst;
> +};

What is src and what is dst? This is completely context dependent and 
confusing.  Also, we are already storing the device address on the modem 
object, why do we need this yet again?

> +
> +struct sock_bdaddr {
> +	bdaddr_t src;
> +	bdaddr_t dst;
>   };

I'd really like to avoid this structure.  At the very least change the 
name into something that conveys its purpose.  e.g. bdaddr_pair, or 
something.  The way it is now is just silly.

>
>   static GHashTable *modem_hash = NULL;
> @@ -68,6 +75,21 @@ static GHashTable *devices_proxies = NULL;
>   static GDBusClient *bluez = NULL;
>   static guint sco_watch = 0;
>
> +static gboolean modem_bacmp(gpointer key, gpointer value,
> +						gpointer user_data)
> +{
> +	const struct sock_bdaddr *bda = user_data;
> +	struct ofono_modem *modem = value;
> +	struct hfp *hfp = ofono_modem_get_data(modem);
> +	int ret;
> +
> +	ret = bt_bacmp(&bda->dst,&hfp->dst);
> +	if (ret != 0)
> +		return FALSE;
> +
> +	return bt_bacmp(&bda->src,&hfp->src) != 0 ? FALSE : TRUE;
> +}
> +
>   static void hfp_debug(const char *str, void *user_data)
>   {
>   	const char *prefix = user_data;
> @@ -275,14 +297,15 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
>   {
>   	struct hfp *hfp;
>   	struct ofono_modem *modem;
> +	struct sockaddr_rc src, dst;
> +	socklen_t alen;
>   	DBusMessageIter iter;
>   	GDBusProxy *proxy;
>   	DBusMessageIter entry;
> -	const char *device, *alias, *address;
> +	const char *device, *alias;
> +	char device_address[18];
>   	int fd, err;
>
> -	DBG("Profile handler NewConnection");
> -
>   	if (dbus_message_iter_init(msg,&entry) == FALSE)
>   		goto invalid;
>
> @@ -301,11 +324,6 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
>
>   	dbus_message_iter_get_basic(&iter,&alias);
>
> -	if (g_dbus_proxy_get_property(proxy, "Address",&iter) == FALSE)
> -		goto invalid;
> -
> -	dbus_message_iter_get_basic(&iter,&address);
> -
>   	dbus_message_iter_next(&entry);
>   	if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_UNIX_FD)
>   		goto invalid;
> @@ -314,7 +332,24 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
>   	if (fd<  0)
>   		goto invalid;
>
> -	modem = modem_register(device, address, alias);
> +	memset(&src, 0, sizeof(src));
> +	alen = sizeof(src);
> +	if (getsockname(fd, (struct sockaddr *)&src,&alen)<  0) {
> +		close(fd);
> +		goto invalid;
> +	}
> +
> +	memset(&dst, 0, sizeof(dst));
> +	alen = sizeof(dst);
> +	if (getpeername(fd, (struct sockaddr *)&dst,&alen)<  0) {
> +		close(fd);
> +		goto invalid;
> +	}
> +
> +	bt_ba2str(&dst.rc_bdaddr, device_address);
> +	DBG("Profile handler NewConnection: %s", device_address);
> +
> +	modem = modem_register(device, device_address, alias);
>   	if (modem == NULL) {
>   		close(fd);
>   		return g_dbus_create_error(msg, BLUEZ_ERROR_INTERFACE
> @@ -329,6 +364,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn,
>   					"Not enough resources");
>
>   	hfp = ofono_modem_get_data(modem);
> +	bt_bacpy(&hfp->src,&src.rc_bdaddr);
> +	bt_bacpy(&hfp->dst,&dst.rc_bdaddr);
>   	hfp->msg = dbus_message_ref(msg);
>

Fair enough, but this chunk really belongs in a separate patch.

>   	return NULL;
> @@ -384,7 +421,9 @@ static const GDBusMethodTable profile_methods[] = {
>   static gboolean sco_accept(GIOChannel *io, GIOCondition cond,
>   							gpointer user_data)
>   {
> -	struct sockaddr_sco saddr;
> +	struct ofono_modem *modem;
> +	struct sockaddr_sco src, dst;
> +	struct sock_bdaddr bda;
>   	socklen_t alen;
>   	int sk, nsk;
>
> @@ -393,14 +432,29 @@ static gboolean sco_accept(GIOChannel *io, GIOCondition cond,
>
>   	sk = g_io_channel_unix_get_fd(io);
>
> -	memset(&saddr, 0, sizeof(saddr));
> -	alen = sizeof(saddr);
> +	memset(&dst, 0, sizeof(dst));
> +	alen = sizeof(dst);
>
> -	nsk = accept(sk, (struct sockaddr *)&saddr,&alen);
> +	nsk = accept(sk, (struct sockaddr *)&dst,&alen);

When reading this patch I go 'what the...'

>   	if (nsk<  0)
>   		return TRUE;
>
> -	/* TODO: Verify if the device has a modem */
> +	memset(&src, 0, sizeof(src));
> +	alen = sizeof(src);
> +	if (getsockname(nsk, (struct sockaddr *)&src,&alen)<  0) {
> +		close(nsk);
> +		return TRUE;
> +	}
> +
> +	bt_bacpy(&bda.src,&src.sco_bdaddr);
> +	bt_bacpy(&bda.dst,&dst.sco_bdaddr);
> +
> +	modem = g_hash_table_find(modem_hash, modem_bacmp,&bda);
> +	if (modem == NULL) {
> +		ofono_error("Rejecting SCO: SLC connection missing!");
> +		close(nsk);
> +		return TRUE;
> +	}
>
>   	return TRUE;
>   }

Regards,
-Denis

  reply	other threads:[~2013-01-29 15:27 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-28 14:44 [PATCH v0 0/9] External HFP: Add SCO Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 1/9] bluez5: Add SCO socket declarations Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 2/9] bluez5: Add bt_bacpy() Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 3/9] hfp_hf_bluez5: Add SCO listen socket Claudio Takahasi
2013-01-28 15:59   ` Marcel Holtmann
2013-01-28 16:43     ` Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 4/9] bluez5: Add bt_ba2str() Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 5/9] bluez5: Add bt_getsockpeers() Claudio Takahasi
2013-01-28 15:32   ` Marcel Holtmann
2013-01-28 16:34     ` Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 6/9] bluez5: Add RFCOMM socket address declaration Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 7/9] hfp_hf_bluez5: Add rejecting SCO connection Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 8/9] hfp_hf_bluez5: Reject SCO if source doesn't match Claudio Takahasi
2013-01-28 16:04   ` Marcel Holtmann
2013-01-28 16:56     ` Claudio Takahasi
2013-01-28 14:44 ` [PATCH v0 9/9] hfp_hf_bluez5: Fix missing fd close Claudio Takahasi
2013-01-28 21:11 ` [PATCH v1 0/8] External HFP: Add SCO Claudio Takahasi
2013-01-28 21:11   ` [PATCH v1 1/8] bluez5: Add SCO socket declarations Claudio Takahasi
2013-01-29 14:55     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 2/8] bluez5: Add bt_bacpy() Claudio Takahasi
2013-01-29 14:55     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 3/8] hfp_hf_bluez5: Add SCO listen socket Claudio Takahasi
2013-01-29 15:02     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 4/8] bluez5: Add bt_ba2str() Claudio Takahasi
2013-01-29 15:03     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 5/8] bluez5: Add bt_bacmp() Claudio Takahasi
2013-01-29 15:03     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 6/8] bluez5: Add RFCOMM socket address declaration Claudio Takahasi
2013-01-29 15:04     ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 7/8] hfp_hf_bluez5: Add rejecting SCO connection Claudio Takahasi
2013-01-29 15:27     ` Denis Kenzior [this message]
2013-01-29 16:17       ` Claudio Takahasi
2013-01-29 16:25         ` Denis Kenzior
2013-01-28 21:11   ` [PATCH v1 8/8] hfp_hf_bluez5: Fix missing fd close Claudio Takahasi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5107EA64.9000707@gmail.com \
    --to=denkenz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.