diff options
| author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-10-04 13:31:42 +0000 | 
|---|---|---|
| committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-10-04 13:31:42 +0000 | 
| commit | 75e9f40bc7fa230182ea23fbd26064f2ab25d87c (patch) | |
| tree | aaab6caccf4038717902b00b6a1d3a8a46cf54a4 | |
| parent | 9232035b60c0d88126c1023a74bf4221c8c127ef (diff) | |
hcid: removed RFCOMM functions
| -rw-r--r-- | hcid/dbus-sdp.c | 288 | ||||
| -rw-r--r-- | hcid/dbus-sdp.h | 10 | 
2 files changed, 2 insertions, 296 deletions
| diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c index 7f16aa3e..37825843 100644 --- a/hcid/dbus-sdp.c +++ b/hcid/dbus-sdp.c @@ -60,18 +60,8 @@  #include "sdp-xml.h"  #define SESSION_TIMEOUT 2000 - -#define MAX_IDENTIFIER_LEN	29	/* "XX:XX:XX:XX:XX:XX/0xYYYYYYYY\0" */  #define DEFAULT_XML_BUF_SIZE	1024 -typedef struct { -	uint16_t	dev_id; -	char		*dst; -	void		*search_data; -	get_record_cb_t *cb; -	void 		*data; -} get_record_data_t; -  struct transaction_context {  	DBusConnection	*conn;  	DBusMessage	*rq; @@ -80,9 +70,6 @@ struct transaction_context {  	guint		io_id;  	uuid_t		uuid;  	GSList		*identifiers; - -	/* Used for internal async get remote service record implementation */ -	get_record_data_t *call;  };  typedef int connect_cb_t(struct transaction_context *t); @@ -94,9 +81,6 @@ struct pending_connect {  	char *dst;  	sdp_session_t *session;  	connect_cb_t *conn_cb; - -	/* Used for internal async get remote service record implementation */ -	get_record_data_t *call;  };  /* FIXME:  move to a common file */ @@ -430,36 +414,6 @@ static void transaction_context_free(void *udata, gboolean cache)  	g_free(ctxt);  } -static get_record_data_t *get_record_data_new(uint16_t dev_id, const char *dst, -					void *search_data, -					get_record_cb_t *cb, void *data) -{ -	get_record_data_t *n; - -	n = g_new(get_record_data_t, 1); - -	n->dst = g_strdup(dst); -	n->dev_id = dev_id; -	n->search_data = search_data; -	n->cb = cb; -	n->data = data; - -	return n; -} - -static void get_record_data_free(get_record_data_t *d) -{ -	g_free(d->search_data); -	g_free(d->dst); -	g_free(d); -} - -static inline void get_record_data_call_cb(get_record_data_t *d, -						sdp_record_t *rec, int err) -{ -	d->cb(rec, d->data, err); -} -  static gboolean search_process_cb(GIOChannel *chan,  				GIOCondition cond, void *udata)  { @@ -483,12 +437,7 @@ static gboolean search_process_cb(GIOChannel *chan,  failed:  	if (err) { -		if (ctxt->call) { -			get_record_data_call_cb(ctxt->call, NULL, err); -			get_record_data_free(ctxt->call); -		} else -			error_failed(ctxt->conn, ctxt->rq, err); - +		error_failed(ctxt->conn, ctxt->rq, err);  		transaction_context_free(ctxt, FALSE);  	} @@ -916,8 +865,6 @@ static gboolean sdp_client_connect_cb(GIOChannel *chan,  	ctxt->conn = dbus_connection_ref(c->conn);  	ctxt->rq = dbus_message_ref(c->rq);  	ctxt->session = c->session; -	if (c->call) -		ctxt->call = c->call;  	/* set the complete transaction callback and send the search request */  	sdp_err = c->conn_cb(ctxt); @@ -936,13 +883,7 @@ static gboolean sdp_client_connect_cb(GIOChannel *chan,  	goto done;  failed: -	if (c->call) -		get_record_data_call_cb(c->call, NULL, err); -	else -		error_connection_attempt_failed(c->conn, c->rq, err); - -	if (c->call) -		get_record_data_free(c->call); +	error_connection_attempt_failed(c->conn, c->rq, err);  	if (ctxt)  		transaction_context_free(ctxt, FALSE); @@ -1222,228 +1163,3 @@ DBusHandlerResult finish_remote_svc_transact(DBusConnection *conn,  	return send_message_and_unref(conn, reply);  } - -/* - * Internal async get remote service record implementation - */ - -static void get_rec_with_handle_comp_cb(uint8_t type, uint16_t err, -					uint8_t *rsp, size_t size, void *udata) -{ -	struct transaction_context *ctxt = udata; -	int scanned, cb_err = 0; -	sdp_record_t *rec = NULL; - -	if (err == 0xffff) { -		int sdp_err = sdp_get_error(ctxt->session); -		if (sdp_err < 0) { -			error("search failed: Invalid session!"); -			cb_err = EINVAL; -			goto failed; -		} -		error("search failed :%s (%d)", strerror(sdp_err), sdp_err); -		cb_err = sdp_err; -		goto failed; -	} - -	if (type == SDP_ERROR_RSP || type != SDP_SVC_ATTR_RSP) { -		error("SDP error: %s(%d)", strerror(EPROTO), EPROTO); -		cb_err = EPROTO; -		goto failed; -	} - -	rec = sdp_extract_pdu(rsp, &scanned); -	if (!rec) { -		error("Service record is NULL"); -		cb_err = EPROTO; -		goto failed; -	} - -failed: -	get_record_data_call_cb(ctxt->call, rec, cb_err); - -	if (rec) -		sdp_record_free(rec); - -	get_record_data_free(ctxt->call); - -	transaction_context_free(ctxt, TRUE); -} - -static int get_rec_with_handle_conn_cb(struct transaction_context *ctxt) -{ -	uint32_t range = 0x0000ffff; -	sdp_list_t *attrids; -	uint32_t handle; - -	if (sdp_set_notify(ctxt->session, -				get_rec_with_handle_comp_cb, ctxt) < 0) { -		error("Invalid session data!"); -		return -EINVAL; -	} - -	handle = *((uint32_t *)ctxt->call->search_data); -	attrids = sdp_list_append(NULL, &range); - -	if (sdp_service_attr_async(ctxt->session, handle, -					SDP_ATTR_REQ_RANGE, attrids) < 0) { -		error("send request failed: %s (%d)", strerror(errno), errno); -		sdp_list_free(attrids, NULL); -		return -errno; -	} - -	sdp_list_free(attrids, NULL); - -	return 0; -} - -int get_record_with_handle(DBusConnection *conn, DBusMessage *msg, -			uint16_t dev_id, const char *dst, -			uint32_t handle, get_record_cb_t *cb, void *data) -{ -	struct pending_connect *c; -	get_record_data_t *d; -	uint32_t *rec_handle; -	int err; - -	if (find_pending_connect(dst)) { -		error("SDP search in progress!"); -		return -EINPROGRESS; -	} - -	rec_handle = g_new(uint32_t, 1); - -	*rec_handle = handle; - -	d = get_record_data_new(dev_id, dst, rec_handle, cb, data); - -	if (!(c = connect_request(conn, msg, dev_id, dst, -				get_rec_with_handle_conn_cb, &err))) { -		error("Search request failed: %s (%d)", strerror(err), err); -		get_record_data_free(d); -		return -err; -	} - -	c->call = d; - -	return 0; -} - -static void get_rec_with_uuid_comp_cb(uint8_t type, uint16_t err, -					uint8_t *rsp, size_t size, void *udata) -{ -	struct transaction_context *ctxt = udata; -	get_record_data_t *d = ctxt->call; -	int csrc, tsrc, cb_err = 0; -	uint32_t *handle; -	uint8_t *pdata; - -	if (err == 0xffff) { -		int sdp_err = sdp_get_error(ctxt->session); -		if (sdp_err < 0) { -			error("search failed: Invalid session!"); -			cb_err = EINVAL; -			goto failed; -		} -		error("search failed: %s (%d)", strerror(sdp_err), sdp_err); -		cb_err = sdp_err; -		goto failed; -	} - -	if (type == SDP_ERROR_RSP || type != SDP_SVC_SEARCH_RSP) { -		error("SDP error: %s (%d)", strerror(EPROTO), EPROTO); -		cb_err = EPROTO; -		goto failed; -	} - -	pdata = rsp; -	tsrc = ntohs(bt_get_unaligned((uint16_t *) pdata)); -	if (tsrc <= 0) -		goto failed; -	pdata += sizeof(uint16_t); - -	csrc = ntohs(bt_get_unaligned((uint16_t *) pdata)); -	if (csrc <= 0) -		goto failed; -	pdata += sizeof(uint16_t); - -	handle = g_new(uint32_t, 1); -	*handle = ntohl(bt_get_unaligned((uint32_t*) pdata)); - -	g_free(d->search_data); -	d->search_data = handle; - -	cb_err = get_rec_with_handle_conn_cb(ctxt); -	if (cb_err) -		goto failed; - -	return; - -failed: -	get_record_data_call_cb(d, NULL, cb_err); - -	get_record_data_free(d); - -	transaction_context_free(ctxt, TRUE); -} - -static int get_rec_with_uuid_conn_cb(struct transaction_context *ctxt) -{ -	get_record_data_t *d = ctxt->call; -	sdp_list_t *search = NULL; -	uuid_t *uuid; -	int err = 0; - -	if (sdp_set_notify(ctxt->session, -			get_rec_with_uuid_comp_cb, ctxt) < 0) { -		err = -EINVAL; -		goto failed; -	} - -	uuid = (uuid_t *)d->search_data; -	search = sdp_list_append(NULL, uuid); - -	if (sdp_service_search_async(ctxt->session, search, 1) < 0) { -		error("send request failed: %s (%d)", strerror(errno), errno); -		err = -sdp_get_error(ctxt->session); -		goto failed; -	} - -failed: -	if (search) -		sdp_list_free(search, NULL); - -	return err; -} - -int get_record_with_uuid(DBusConnection *conn, DBusMessage *msg, -			uint16_t dev_id, const char *dst, -			const uuid_t *uuid, get_record_cb_t *cb, void *data) -{ -	struct pending_connect *c; -	get_record_data_t *d; -	int err; -	uuid_t *sdp_uuid; - -	if (find_pending_connect(dst)) { -		error("SDP search in progress!"); -		return -EINPROGRESS; -	} - -	sdp_uuid = g_new(uuid_t, 1); - -	memcpy(sdp_uuid, uuid, sizeof(uuid_t)); - -	d = get_record_data_new(dev_id, dst, sdp_uuid, cb, data); - -	if (!(c = connect_request(conn, msg, dev_id, dst, -				get_rec_with_uuid_conn_cb, &err))) { -		error("Search request failed: %s (%d)", strerror(err), err); -		get_record_data_free(d); -		return -err; -	} - -	c->call = d; - -	return 0; -} diff --git a/hcid/dbus-sdp.h b/hcid/dbus-sdp.h index 3df3c4ac..fc9927e9 100644 --- a/hcid/dbus-sdp.h +++ b/hcid/dbus-sdp.h @@ -39,13 +39,3 @@ DBusHandlerResult finish_remote_svc_transact(DBusConnection *conn,  						DBusMessage *msg, void *data);  uint16_t sdp_str2svclass(const char *str); - -typedef void get_record_cb_t(sdp_record_t *rec, void *data, int err); - -int get_record_with_uuid(DBusConnection *conn, DBusMessage *msg, -			uint16_t dev_id, const char *dst, -			const uuid_t *uuid, get_record_cb_t *cb, void *data); - -int get_record_with_handle(DBusConnection *conn, DBusMessage *msg, -			uint16_t dev_id, const char *dst, -			uint32_t handle, get_record_cb_t *cb, void *data); | 
