From 5a3fd51261b40196dca461798ff4ca50417e0c75 Mon Sep 17 00:00:00 2001 From: "Jose M. Guisado" Date: Mon, 8 Nov 2021 16:31:00 +0100 Subject: #1065 client: add support for ogclient linux state ogClient can be run in linux mode, intended for exposing some ogServer commands when running in a linux distribution. When connecting with a client in linux mode, do not expect a full partition setup response. Just expect a 'status', and then accept the connection without updating any partition information in the database. --- src/client.c | 8 ++++++++ src/rest.c | 2 ++ src/rest.h | 1 + 3 files changed, 11 insertions(+) diff --git a/src/client.c b/src/client.c index f6de95e..5befa9c 100644 --- a/src/client.c +++ b/src/client.c @@ -286,6 +286,7 @@ static int og_resp_refresh(json_t *data, struct og_client *cli) struct og_partition disks[OG_DISK_MAX] = {}; const char *serial_number = NULL; struct og_computer computer = {}; + const char *status = NULL; char cfg[4096] = {}; struct og_dbi *dbi; const char *key; @@ -304,12 +305,19 @@ static int og_resp_refresh(json_t *data, struct og_client *cli) err = og_json_parse_partition_array(value, partitions); } else if (!strcmp(key, "serial_number")) { err = og_json_parse_string(value, &serial_number); + } else if (!strcmp(key, "status")) { + err = og_json_parse_string(value, &status); } if (err < 0) return err; } + if (status && !strncmp(status, "LINUX", strlen("LINUX"))) { + cli->status = OG_CLIENT_STATUS_LINUX; + return 0; + } + if (strlen(serial_number) > 0) snprintf(cfg, sizeof(cfg), "ser=%s\n", serial_number); diff --git a/src/rest.c b/src/rest.c index 41f9b62..dba7122 100644 --- a/src/rest.c +++ b/src/rest.c @@ -124,6 +124,8 @@ static const char *og_client_status(const struct og_client *cli) return "OPG"; case OG_CLIENT_STATUS_VIRTUAL: return "VDI"; + case OG_CLIENT_STATUS_LINUX: + return "LINUX"; default: return "OFF"; } diff --git a/src/rest.h b/src/rest.h index 9c4f5e8..a4e6e64 100644 --- a/src/rest.h +++ b/src/rest.h @@ -16,6 +16,7 @@ enum og_client_status { OG_CLIENT_STATUS_OGLIVE, OG_CLIENT_STATUS_BUSY, OG_CLIENT_STATUS_VIRTUAL, + OG_CLIENT_STATUS_LINUX, }; enum og_cmd_type { -- cgit v1.2.3-18-g5258