diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2005-09-15 08:07:53 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2005-09-15 08:07:53 +0000 | 
| commit | 0c9289ad794b5fa0d3117824f61a585d820e4f42 (patch) | |
| tree | 0cfecc317a7ca908b42cc822ed7d953ad9d7feba | |
| parent | 12bc903cff57bed548080354159c0841cc20650b (diff) | |
Extend reply_handler_function() function
| -rw-r--r-- | hcid/dbus.c | 64 | 
1 files changed, 37 insertions, 27 deletions
diff --git a/hcid/dbus.c b/hcid/dbus.c index 2f66eae9..df520316 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -68,39 +68,49 @@ static void reply_handler_function(DBusPendingCall *call, void *user_data)  	pin_code_reply_cp pr;  	DBusMessage *message;  	DBusMessageIter iter; -	int type; +	int arg_type; +	int msg_type;  	size_t len;  	char *pin; - +	const char *error_msg; +          	message = dbus_pending_call_steal_reply(call); - -	if (dbus_message_is_error(message, WRONG_ARGS_ERROR)) -		goto error; - -	dbus_message_iter_init(message, &iter); - -	type = dbus_message_iter_get_arg_type(&iter); -	if (type != DBUS_TYPE_STRING) -		goto error; - -	dbus_message_iter_get_basic(&iter, &pin); -	len = strlen(pin); - -	memset(&pr, 0, sizeof(pr)); -	bacpy(&pr.bdaddr, &req->bda); -	memcpy(pr.pin_code, pin, len); -	pr.pin_len = len; -	hci_send_cmd(req->dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY, +         +	if (message) { +		msg_type = dbus_message_get_type(message); +		dbus_message_iter_init(message, &iter); +		 +		if (msg_type == DBUS_MESSAGE_TYPE_ERROR) { +			dbus_message_iter_get_basic(&iter, &error_msg); + +			/* handling WRONG_ARGS_ERROR, DBUS_ERROR_NO_REPLY, DBUS_ERROR_SERVICE_UNKNOWN */ +			syslog(LOG_ERR, "%s: %s", dbus_message_get_error_name(message), error_msg); +			hci_send_cmd(req->dev, OGF_LINK_CTL, +					OCF_PIN_CODE_NEG_REPLY, 6, &req->bda); +		} else { +			/* check signature */ +			arg_type = dbus_message_iter_get_arg_type(&iter); +			if (arg_type != DBUS_TYPE_STRING) { +				syslog(LOG_ERR, "Wrong reply signature: expected PIN"); +				hci_send_cmd(req->dev, OGF_LINK_CTL, +						OCF_PIN_CODE_NEG_REPLY, 6, &req->bda); +			} else { +				dbus_message_iter_get_basic(&iter, &pin); +				len = strlen(pin); +				 +				memset(&pr, 0, sizeof(pr)); +				bacpy(&pr.bdaddr, &req->bda); +				memcpy(pr.pin_code, pin, len); +				pr.pin_len = len; +				hci_send_cmd(req->dev, OGF_LINK_CTL, OCF_PIN_CODE_REPLY,  						PIN_CODE_REPLY_CP_SIZE, &pr); +			} +                } -	dbus_message_unref(message); -	dbus_pending_call_unref(call); - -	return; +		dbus_message_unref(message); +	} -error: -	hci_send_cmd(req->dev, OGF_LINK_CTL, -				OCF_PIN_CODE_NEG_REPLY, 6, &req->bda); +	dbus_pending_call_unref(call);  }  static void free_pin_req(void *req)  | 
