diff options
author | David Oberhollenzer <goliath@infraroot.at> | 2019-03-28 13:57:19 +0100 |
---|---|---|
committer | David Oberhollenzer <goliath@infraroot.at> | 2019-03-28 15:19:06 +0100 |
commit | 9e7478397a6f3c7bc38be52268e805d5b094eeb2 (patch) | |
tree | a2f625e00999aac9eaed6b1e095aa62fe950ee83 | |
parent | c16735414ba63cb593881cd32e46dc086f003181 (diff) |
Include service ID in initsock status response
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
-rw-r--r-- | lib/include/initsock.h | 1 | ||||
-rw-r--r-- | lib/init/init_socket_recv_status.c | 7 | ||||
-rw-r--r-- | lib/init/init_socket_send_status.c | 11 |
3 files changed, 15 insertions, 4 deletions
diff --git a/lib/include/initsock.h b/lib/include/initsock.h index 55321db..10abe08 100644 --- a/lib/include/initsock.h +++ b/lib/include/initsock.h @@ -36,6 +36,7 @@ typedef struct { typedef struct { E_SERVICE_STATE state; int exit_status; + int id; char *filename; char *service_name; } init_status_response_t; diff --git a/lib/init/init_socket_recv_status.c b/lib/init/init_socket_recv_status.c index 95126e2..b812819 100644 --- a/lib/init/init_socket_recv_status.c +++ b/lib/init/init_socket_recv_status.c @@ -63,16 +63,19 @@ static char *read_string(int fd) int init_socket_recv_status(int fd, init_status_response_t *resp) { - uint8_t info[2]; + uint8_t info[8]; memset(resp, 0, sizeof(*resp)); - if (read_retry(fd, info, 2) <= 0) + if (read_retry(fd, info, sizeof(info)) <= 0) return -1; resp->state = info[0]; resp->exit_status = info[1]; + resp->id = ((int)info[4] << 24) | ((int)info[5] << 16) | + ((int)info[6] << 8) | (int)info[7]; + if (resp->state == ESS_NONE) return 0; diff --git a/lib/init/init_socket_send_status.c b/lib/init/init_socket_send_status.c index ecad94c..8cd5d8a 100644 --- a/lib/init/init_socket_send_status.c +++ b/lib/init/init_socket_send_status.c @@ -42,17 +42,24 @@ static int send_string(int fd, const void *dst, size_t addrlen, int init_socket_send_status(int fd, const void *dest_addr, size_t addrlen, E_SERVICE_STATE state, service_t *svc) { - uint8_t info[2]; + uint8_t info[8]; if (svc == NULL || state == ESS_NONE) { info[0] = ESS_NONE; info[1] = 0; + info[2] = info[3] = 0; + info[4] = info[5] = info[6] = info[7] = 0xFF; } else { info[0] = state; info[1] = svc->status & 0xFF; + info[2] = info[3] = 0; + info[4] = (svc->id >> 24) & 0xFF; + info[5] = (svc->id >> 16) & 0xFF; + info[6] = (svc->id >> 8) & 0xFF; + info[7] = svc->id & 0xFF; } - if (send_retry(fd, dest_addr, addrlen, info, 2)) + if (send_retry(fd, dest_addr, addrlen, info, sizeof(info))) return -1; if (svc != NULL && state != ESS_NONE) { |