Re: [PATCHv3 04/16] android/socket: Define structs and implement listen

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Andrei,

On Mon, Nov 18, 2013, Andrei Emeltchenko wrote:
> This defines structures for socket HAL. We need to emulate Android
> sockets by sending connect/accept signals over file descriptor.
> Handle HAL socket listen call. Create RFCOMM socket and wait for events.
> ---
>  android/socket.c |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 116 insertions(+), 2 deletions(-)
> 
> diff --git a/android/socket.c b/android/socket.c
> index e580036..276c78c 100644
> --- a/android/socket.c
> +++ b/android/socket.c
> @@ -27,8 +27,12 @@
>  
>  #include <glib.h>
>  #include <stdbool.h>
> +#include <unistd.h>
> +#include <errno.h>
>  
>  #include "lib/bluetooth.h"
> +#include "btio/btio.h"
> +#include "lib/sdp.h"
>  #include "log.h"
>  #include "hal-msg.h"
>  #include "hal-ipc.h"
> @@ -37,13 +41,123 @@
>  
>  static bdaddr_t adapter_addr;
>  
> -static int handle_listen(void *buf)
> +/* Simple list of RFCOMM server sockets */
> +GList *rfcomm_srv_list = NULL;
> +
> +/* Simple list of RFCOMM connected sockets */
> +GList *rfcomm_connected_list = NULL;

Didn't I suggest "servers" and "connections" as names for these?

> +struct rfcomm_slot {

The term "slot" seems a bit confusing to me. You're using this struct as
context for both server sockets and connected sockets. Would the name
struct rfcomm_socket make more sense? Feel free to suggest something
else too.

> +
> +	rfslot = g_malloc0(sizeof(*rfslot));

rfslot = g_new0(struct rfcom_slot, 1);

> +static void cleanup_rfslot(struct rfcomm_slot *rfslot)
> +{
> +	DBG("Cleanup: rfslot: %p fd %d real_sock %d chan %u",
> +		rfslot, rfslot->fd, rfslot->real_sock, rfslot->channel);

Since DBG() will anyway print the function name having an explicit
"Cleanup:" in the log message seems redundant.

> +static struct {
> +	uint8_t uuid[16];
> +	uint8_t channel;
> +} uuid_to_chan[] = {
> +	{ .uuid = {
> +	0x00, 0x00, 0x11, 0x2F, 0x00, 0x00, 0x10, 0x00,
> +	0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
> +	},

Why doesn't this first entry have a channel? Please indent the stuff
between { and } with an extra tab.

> +#define PBAP_DEFAULT_CHANNEL	15

I'd rather have these default channel definitions in a separate place,
probably in the beginning of the C-file where you can quickly see them.
Having them inline like this doesn't really provide any value at all
compared to just hard-coding them in the places where you have
.channel = ...

> +	{ .uuid = {
> +	0x00, 0x00, 0x11, 0x05, 0x00, 0x00, 0x10, 0x00,
> +	0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
> +	},
> +#define OPP_DEFAULT_CHANNEL	9
> +	.channel = OPP_DEFAULT_CHANNEL },

Is this the missing channel from the first entry? Looks misplaced to me.

> +static int get_rfcomm_default_chan(const uint8_t *uuid)
> +{
> +	int i;
> +
> +	for (i = 0; uuid_to_chan[i].channel; i++) {
> +		if (!memcmp(uuid_to_chan[i].uuid, uuid, 16))
> +			return uuid_to_chan[i].channel;
> +	}
>  
>  	return -1;

Maybe return -ENOENT?

> +static void accept_cb(GIOChannel *io, GError *err, gpointer user_data)
> +{
> +}
> +
> +static int handle_listen(void *buf)
> +{
> +	struct hal_cmd_sock_listen *cmd = buf;
> +	struct rfcomm_slot *rfslot;
> +	GIOChannel *io;
> +	GError *err = NULL;
> +	int hal_fd = -1;

Why do you need to pre-initialize hal_fd? If create_rfslot() can fail
can won't you detect that?

> +	int chan;
> +
> +	DBG("");
> +
> +	chan = get_rfcomm_default_chan(cmd->uuid);
> +	if (chan < 0)
> +		return -1;

Maybe "return chan;"?

Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux