diff options
| -rw-r--r-- | hcid/agent.c | 33 | ||||
| -rw-r--r-- | hcid/agent.h | 8 | ||||
| -rw-r--r-- | hcid/dbus-hci.c | 10 | 
3 files changed, 28 insertions, 23 deletions
| diff --git a/hcid/agent.c b/hcid/agent.c index b2fbe03c..90df291a 100644 --- a/hcid/agent.c +++ b/hcid/agent.c @@ -56,6 +56,7 @@  typedef enum {  	AGENT_REQUEST_PASSKEY, +	AGENT_REQUEST_PINCODE,  	AGENT_REQUEST_AUTHORIZE,  	AGENT_REQUEST_CONFIRM_MODE  } agent_request_type_t; @@ -145,6 +146,8 @@ static void agent_free(struct agent *agent)  	if (agent->request) {  		DBusError err; +		agent_pincode_cb pincode_cb; +		agent_cb cb;  		if (agent->request->call)  			dbus_pending_call_cancel(agent->request->call); @@ -152,11 +155,13 @@ static void agent_free(struct agent *agent)  		dbus_error_init(&err);  		dbus_set_error_const(&err, "org.bluez.Error.Failed", "Canceled"); -		if (agent->request->type == AGENT_REQUEST_PASSKEY) { -			agent_passkey_cb cb = agent->request->cb; -			cb(agent, &err, NULL, agent->request->user_data); -		} else  { -			agent_cb cb = agent->request->cb; +		switch (agent->request->type) { +		case AGENT_REQUEST_PINCODE: +			pincode_cb = agent->request->cb; +			pincode_cb(agent, &err, NULL, agent->request->user_data); +			break; +		default: +			cb = agent->request->cb;  			cb(agent, &err, agent->request->user_data);  		} @@ -364,7 +369,7 @@ int agent_authorize(struct agent *agent,  	return 0;  } -static DBusPendingCall *passkey_request_new(struct agent *agent, +static DBusPendingCall *pincode_request_new(struct agent *agent,  						const char *device_path,  						dbus_bool_t numeric)  { @@ -372,7 +377,7 @@ static DBusPendingCall *passkey_request_new(struct agent *agent,  	DBusPendingCall *call;  	message = dbus_message_new_method_call(agent->name, agent->path, -					"org.bluez.Agent", "RequestPasskey"); +					"org.bluez.Agent", "RequestPinCode");  	if (message == NULL) {  		error("Couldn't allocate D-Bus message");  		return NULL; @@ -392,12 +397,12 @@ static DBusPendingCall *passkey_request_new(struct agent *agent,  	return call;  } -static void passkey_reply(DBusPendingCall *call, void *user_data) +static void pincode_reply(DBusPendingCall *call, void *user_data)  {  	struct agent_request *req = user_data;  	struct agent *agent = req->agent;  	struct adapter *adapter = agent->adapter; -	agent_passkey_cb cb = req->cb; +	agent_pincode_cb cb = req->cb;  	DBusMessage *message;  	DBusError err;  	bdaddr_t sba; @@ -457,21 +462,21 @@ done:  		agent_free(agent);  } -int agent_request_passkey(struct agent *agent, struct device *device, -				agent_passkey_cb cb, void *user_data) +int agent_request_pincode(struct agent *agent, struct device *device, +				agent_pincode_cb cb, void *user_data)  {  	struct agent_request *req;  	if (agent->request)  		return -EBUSY; -	req = agent_request_new(agent, AGENT_REQUEST_PASSKEY, cb, user_data); +	req = agent_request_new(agent, AGENT_REQUEST_PINCODE, cb, user_data); -	req->call = passkey_request_new(agent, device->path, FALSE); +	req->call = pincode_request_new(agent, device->path, FALSE);  	if (!req->call)  		goto failed; -	dbus_pending_call_set_notify(req->call, passkey_reply, req, NULL); +	dbus_pending_call_set_notify(req->call, pincode_reply, req, NULL);  	agent->request = req; diff --git a/hcid/agent.h b/hcid/agent.h index 9d2ac377..31a95428 100644 --- a/hcid/agent.h +++ b/hcid/agent.h @@ -27,8 +27,8 @@ struct agent;  typedef void (*agent_cb) (struct agent *agent, DBusError *err,  				void *user_data); -typedef void (*agent_passkey_cb) (struct agent *agent, DBusError *err, -					const char *passkey, void *user_data); +typedef void (*agent_pincode_cb) (struct agent *agent, DBusError *err, +					const char *pincode, void *user_data);  typedef void (*agent_remove_cb) (struct agent *agent, void *user_data); @@ -41,8 +41,8 @@ int agent_destroy(struct agent *agent, gboolean exited);  int agent_authorize(struct agent *agent, const char *path,  			const char *uuid, agent_cb cb, void *user_data); -int agent_request_passkey(struct agent *agent, struct device *device, -				agent_passkey_cb cb, void *user_data); +int agent_request_pincode(struct agent *agent, struct device *device, +				agent_pincode_cb cb, void *user_data);  int agent_confirm_mode_change(struct agent *agent, const char *new_mode,  				agent_cb cb, void *user_data); diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index fec4d3bb..3c5dd591 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -931,7 +931,7 @@ void hcid_dbus_pending_pin_req_add(bdaddr_t *sba, bdaddr_t *dba)  		adapter->bonding->auth_active = 1;  } -static void passkey_cb(struct agent *agent, DBusError *err, const char *passkey, +static void pincode_cb(struct agent *agent, DBusError *err, const char *pincode,  			struct device *device)  {  	struct adapter *adapter = device->adapter; @@ -957,13 +957,13 @@ static void passkey_cb(struct agent *agent, DBusError *err, const char *passkey,  		goto done;  	} -	len = strlen(passkey); +	len = strlen(pincode);  	set_pin_length(&sba, len);  	memset(&pr, 0, sizeof(pr));  	bacpy(&pr.bdaddr, &dba); -	memcpy(pr.pin_code, passkey, len); +	memcpy(pr.pin_code, pincode, len);  	pr.pin_len = len;  	hci_send_cmd(dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY, PIN_CODE_REPLY_CP_SIZE, &pr); @@ -1011,8 +1011,8 @@ int hcid_dbus_request_pin(int dev, bdaddr_t *sba, struct hci_conn_info *ci)  			return -ENODEV;  	} -	return agent_request_passkey(agent, device, -					(agent_passkey_cb) passkey_cb, +	return agent_request_pincode(agent, device, +					(agent_pincode_cb) pincode_cb,  					device);  old_fallback: | 
