X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-proto-ws.c;h=10c06fcde5a9d88c4b9b2b7fa2c7fd09125fe706;hb=f40979c718fa6fe6b571e133e1bf19fc90957298;hp=ebd5fd5856b81c82a429b1dddba7646e5292254b;hpb=7386e1c5090b4e76036bc212f2a2cf32920bb160;p=src%2Fapp-framework-binder.git diff --git a/src/afb-proto-ws.c b/src/afb-proto-ws.c index ebd5fd58..10c06fcd 100644 --- a/src/afb-proto-ws.c +++ b/src/afb-proto-ws.c @@ -67,25 +67,28 @@ For the purpose of handling events the server can: - push or broadcast data as an event + - signal unexpected event + */ /************** constants for protocol definition *************************/ -#define CHAR_FOR_CALL 'K' -#define CHAR_FOR_REPLY 'k' -#define CHAR_FOR_EVT_BROADCAST 'B' -#define CHAR_FOR_EVT_ADD 'E' -#define CHAR_FOR_EVT_DEL 'e' -#define CHAR_FOR_EVT_PUSH 'P' -#define CHAR_FOR_EVT_SUBSCRIBE 'X' -#define CHAR_FOR_EVT_UNSUBSCRIBE 'x' -#define CHAR_FOR_DESCRIBE 'D' -#define CHAR_FOR_DESCRIPTION 'd' -#define CHAR_FOR_TOKEN_ADD 'T' -#define CHAR_FOR_TOKEN_DROP 't' -#define CHAR_FOR_SESSION_ADD 'S' -#define CHAR_FOR_SESSION_DROP 's' -#define CHAR_FOR_VERSION_OFFER 'V' -#define CHAR_FOR_VERSION_SET 'v' +#define CHAR_FOR_CALL 'K' /* client -> server */ +#define CHAR_FOR_REPLY 'k' /* server -> client */ +#define CHAR_FOR_EVT_BROADCAST 'B' /* server -> client */ +#define CHAR_FOR_EVT_ADD 'E' /* server -> client */ +#define CHAR_FOR_EVT_DEL 'e' /* server -> client */ +#define CHAR_FOR_EVT_PUSH 'P' /* server -> client */ +#define CHAR_FOR_EVT_SUBSCRIBE 'X' /* server -> client */ +#define CHAR_FOR_EVT_UNSUBSCRIBE 'x' /* server -> client */ +#define CHAR_FOR_EVT_UNEXPECTED 'U' /* client -> server */ +#define CHAR_FOR_DESCRIBE 'D' /* client -> server */ +#define CHAR_FOR_DESCRIPTION 'd' /* server -> client */ +#define CHAR_FOR_TOKEN_ADD 'T' /* client -> server */ +#define CHAR_FOR_TOKEN_DROP 't' /* client -> server */ +#define CHAR_FOR_SESSION_ADD 'S' /* client -> server */ +#define CHAR_FOR_SESSION_DROP 's' /* client -> server */ +#define CHAR_FOR_VERSION_OFFER 'V' /* client -> server */ +#define CHAR_FOR_VERSION_SET 'v' /* server -> client */ /******************* manage versions *****************************/ @@ -757,7 +760,7 @@ static void client_on_binary(void *closure, char *data, size_t size) queue_message_processing(protows, data, size, client_on_binary_job); } -static int client_send_idstr_add_drop(struct afb_proto_ws *protows, char order, uint16_t id, const char *value) +static int client_send_cmd_id16_optstr(struct afb_proto_ws *protows, char order, uint16_t id, const char *value) { struct writebuf wb = { .iovcount = 0, .bufcount = 0 }; int rc = -1; @@ -771,23 +774,28 @@ static int client_send_idstr_add_drop(struct afb_proto_ws *protows, char order, int afb_proto_ws_client_session_create(struct afb_proto_ws *protows, uint16_t sessionid, const char *sessionstr) { - return client_send_idstr_add_drop(protows, CHAR_FOR_SESSION_ADD, sessionid, sessionstr); + return client_send_cmd_id16_optstr(protows, CHAR_FOR_SESSION_ADD, sessionid, sessionstr); } int afb_proto_ws_client_session_remove(struct afb_proto_ws *protows, uint16_t sessionid) { - return client_send_idstr_add_drop(protows, CHAR_FOR_SESSION_DROP, sessionid, NULL); + return client_send_cmd_id16_optstr(protows, CHAR_FOR_SESSION_DROP, sessionid, NULL); } int afb_proto_ws_client_token_create(struct afb_proto_ws *protows, uint16_t tokenid, const char *tokenstr) { - return client_send_idstr_add_drop(protows, CHAR_FOR_TOKEN_ADD, tokenid, tokenstr); + return client_send_cmd_id16_optstr(protows, CHAR_FOR_TOKEN_ADD, tokenid, tokenstr); } int afb_proto_ws_client_token_remove(struct afb_proto_ws *protows, uint16_t tokenid) { - return client_send_idstr_add_drop(protows, CHAR_FOR_TOKEN_DROP, tokenid, NULL); + return client_send_cmd_id16_optstr(protows, CHAR_FOR_TOKEN_DROP, tokenid, NULL); +} + +int afb_proto_ws_client_event_unexpected(struct afb_proto_ws *protows, uint16_t eventid) +{ + return client_send_cmd_id16_optstr(protows, CHAR_FOR_EVT_UNEXPECTED, eventid, NULL); } int afb_proto_ws_client_call( @@ -1039,6 +1047,14 @@ static void server_on_token_drop(struct afb_proto_ws *protows, struct readbuf *r protows->server_itf->on_token_remove(protows->closure, tokenid); } +static void server_on_event_unexpected(struct afb_proto_ws *protows, struct readbuf *rb) +{ + uint16_t eventid; + + if (readbuf_uint16(rb, &eventid)) + protows->server_itf->on_event_unexpected(protows->closure, eventid); +} + /* on version offer */ static void server_on_version_offer(struct afb_proto_ws *protows, struct readbuf *rb) { @@ -1097,6 +1113,9 @@ static void server_on_binary_job(int sig, void *closure) case CHAR_FOR_TOKEN_DROP: server_on_token_drop(binary->protows, &binary->rb); break; + case CHAR_FOR_EVT_UNEXPECTED: + server_on_event_unexpected(binary->protows, &binary->rb); + break; case CHAR_FOR_VERSION_OFFER: server_on_version_offer(binary->protows, &binary->rb); break;