diff options
Diffstat (limited to 'serial/port.c')
| -rw-r--r-- | serial/port.c | 42 | 
1 files changed, 25 insertions, 17 deletions
| diff --git a/serial/port.c b/serial/port.c index 7d3b95c8..5bd217b7 100644 --- a/serial/port.c +++ b/serial/port.c @@ -134,7 +134,6 @@ static void connection_owner_exited(const char *name, struct rfcomm_node *node)  			DBUS_TYPE_INVALID);  	connected_nodes = g_slist_remove(connected_nodes, node); -	dbus_connection_destroy_object_path(node->conn, path);  }  static gboolean rfcomm_disconnect_cb(GIOChannel *io, @@ -168,8 +167,29 @@ static void port_unregister(DBusConnection *conn, void *data)  	rfcomm_node_free(node);  } -int port_register(DBusConnection *conn, int id, int fd, -		const char *name, const char *owner, char *ppath) +int port_add_listener(DBusConnection *conn, int id, int fd, +			const char *name, const char *owner) +{ +	struct rfcomm_node *node; + +	node = g_new0(struct rfcomm_node, 1); +	node->id	= id; +	node->name	= g_strdup(name); +	node->conn	= dbus_connection_ref(conn); +	node->owner	= g_strdup(owner); +	node->io 	= g_io_channel_unix_new(fd); +	node->io_id = g_io_add_watch(node->io, G_IO_ERR | G_IO_NVAL | G_IO_HUP, +					(GIOFunc) rfcomm_disconnect_cb, node); + +	connected_nodes = g_slist_append(connected_nodes, node); + +	/* Serial port connection listener */ +	return name_listener_add(conn, owner, +			(name_cb_t) connection_owner_exited, node); + +} + +int port_register(DBusConnection *conn, int id, const char *name, char *ppath)  {  	char path[MAX_PATH_LENGTH];  	struct rfcomm_node *node; @@ -198,24 +218,12 @@ int port_register(DBusConnection *conn, int id, int fd,  		return -1;  	} -	info("Registered RFCOMM:%s, path:%s owner:%s", name, path, owner); +	info("Registered RFCOMM:%s, path:%s", name, path);  	if (ppath)  		strcpy(ppath, path); -	if (fd < 0) -		return 0; - -	node->owner	= g_strdup(owner); -	node->io 	= g_io_channel_unix_new(fd); -	node->io_id = g_io_add_watch(node->io, G_IO_ERR | G_IO_NVAL | G_IO_HUP, -					(GIOFunc) rfcomm_disconnect_cb, node); - -	connected_nodes = g_slist_append(connected_nodes, node); - -	/* Serial port connection listener */ -	return name_listener_add(node->conn, owner, -			(name_cb_t) connection_owner_exited, node); +	return 0;  }  const char *port_get_owner(DBusConnection *conn, int16_t id) | 
