From: José Bollo Date: Tue, 15 Dec 2015 10:45:48 +0000 (+0100) Subject: bug fix for jbus X-Git-Tag: 2.0.2~142 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=32c6eecb9955e94b4d68efc09912efe88140ce83;p=src%2Fapp-framework-main.git bug fix for jbus Change-Id: I4dd2ec2ba545924a3667266db990f2c1c99eadbc --- diff --git a/src/utils-jbus.c b/src/utils-jbus.c index 8c48113..988f9cf 100644 --- a/src/utils-jbus.c +++ b/src/utils-jbus.c @@ -60,19 +60,6 @@ static const char reply_out_of_memory[] = "{\"status\":\"out of memory\"}"; static const char reply_invalid[] = "{\"status\":\"invalid request\"}"; static const char interface_jbus[] = "org.jbus"; -static int send_reply(struct jreq *jreq, const char *reply) -{ - int rc = -1; - if (dbus_message_append_args(jreq->reply, DBUS_TYPE_STRING, &reply, DBUS_TYPE_INVALID)) { - if (dbus_connection_send(jreq->connection, jreq->reply, NULL)) - rc = 0; - } - dbus_message_unref(jreq->reply); - dbus_connection_unref(jreq->connection); - free(jreq); - return rc; -} - static DBusHandlerResult incoming_resp(DBusConnection *connection, DBusMessage *message, struct jbus *jbus) { int status; @@ -82,7 +69,7 @@ static DBusHandlerResult incoming_resp(DBusConnection *connection, DBusMessage * dbus_uint32_t serial; /* search for the waiter */ - serial = dbus_message_get_serial(message); + serial = dbus_message_get_reply_serial(message); prv = &jbus->waiters; while ((jrw = *prv) != NULL && jrw->serial != serial) prv = &jrw->next; @@ -144,12 +131,12 @@ static DBusHandlerResult incoming_call(DBusConnection *connection, DBusMessage * /* retrieve the json value */ if (!dbus_message_get_args(message, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID)) { - send_reply(jreq, reply_invalid); + jbus_replyj(jreq, reply_invalid); return DBUS_HANDLER_RESULT_HANDLED; } query = json_tokener_parse(str); if (query == NULL) { - send_reply(jreq, reply_invalid); + jbus_replyj(jreq, reply_invalid); return DBUS_HANDLER_RESULT_HANDLED; } @@ -245,10 +232,23 @@ void jbus_unref(struct jbus *jbus) } } +int jbus_replyj(struct jreq *jreq, const char *reply) +{ + int rc = -1; + if (dbus_message_append_args(jreq->reply, DBUS_TYPE_STRING, &reply, DBUS_TYPE_INVALID)) { + if (dbus_connection_send(jreq->connection, jreq->reply, NULL)) + rc = 0; + } + dbus_message_unref(jreq->reply); + dbus_connection_unref(jreq->connection); + free(jreq); + return rc; +} + int jbus_reply(struct jreq *jreq, struct json_object *reply) { const char *str = json_object_to_json_string(reply); - return send_reply(jreq, str ? str : reply_out_of_memory); + return jbus_replyj(jreq, str ? str : reply_out_of_memory); } int jbus_add_service(struct jbus *jbus, const char *method, void (*oncall)(struct jreq *jreq, struct json_object *request)) diff --git a/src/utils-jbus.h b/src/utils-jbus.h index f1ec78f..e751086 100644 --- a/src/utils-jbus.h +++ b/src/utils-jbus.h @@ -23,8 +23,10 @@ struct jbus *create_jbus(int session, const char *path); void jbus_addref(struct jbus *jbus); void jbus_unref(struct jbus *jbus); +int jbus_replyj(struct jreq *jreq, const char *reply); int jbus_reply(struct jreq *jreq, struct json_object *reply); int jbus_add_service(struct jbus *jbus, const char *method, void (*oncall)(struct jreq *, struct json_object *)); +int jbus_start_serving(struct jbus *jbus); int jbus_callj(struct jbus *jbus, const char *method, const char *query, void (*onresp)(int, struct json_object *, void *), void *data); int jbus_call(struct jbus *jbus, const char *method, struct json_object *query, void (*onresp)(int, struct json_object *response, void *), void *data);