source: ogServer-Git/src/json.c @ d89d6c6

Last change on this file since d89d6c6 was 0efc182, checked in by OpenGnSys Support Team <soporte-og@…>, 4 years ago

#1004 Handle new fields in /image/create response

ogClient now includes more information regarding the new image. This patch
modifies ogServer to support new elements sent in ogClient /image/create
response and store them in the database.

Example of new /image/create response:

{

"disk": "1",
"partition": "1",
"code": "131",
"id": "1",
"name": "ubuntu",
"repository": "192.168.56.10",
"software": "Ubuntu 18.04.5 LTS \naccountsservice 0.6.45\n...",
"clonator": "PARTCLONE",
"compressor": "LZOP",
"filesystem": "EXTFS",
"datasize": 2100000

}

New fields are "clonator", "compressor", "filesystem" and "datasize".

  • Property mode set to 100644
File size: 2.8 KB
RevLine 
[04ca20e]1/*
2 * Copyright (C) 2020 Soleta Networks <info@soleta.eu>
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU Affero General Public License as published by the
6 * Free Software Foundation, version 3.
7 */
8
9#include "json.h"
10#include <stdint.h>
11
12int og_json_parse_string(json_t *element, const char **str)
13{
14        if (json_typeof(element) != JSON_STRING)
15                return -1;
16
17        *str = json_string_value(element);
18        return 0;
19}
20
[0efc182]21int og_json_parse_uint64(json_t *element, uint64_t *integer)
22{
23        if (json_typeof(element) != JSON_INTEGER)
24                return -1;
25
26        *integer = json_integer_value(element);
27        return 0;
28}
29
[04ca20e]30int og_json_parse_uint(json_t *element, uint32_t *integer)
31{
32        if (json_typeof(element) != JSON_INTEGER)
33                return -1;
34
35        *integer = json_integer_value(element);
36        return 0;
37}
38
39int og_json_parse_bool(json_t *element, bool *value)
40{
41        if (json_typeof(element) == JSON_TRUE)
42                *value = true;
43        else if (json_typeof(element) == JSON_FALSE)
44                *value = false;
45        else
46                return -1;
47
48        return 0;
49}
50
[33b0c6f]51int og_json_parse_scope(json_t *element, struct og_scope *scope,
52                        const uint64_t required_flags)
53{
54        uint64_t flags = 0UL;
55        const char *key;
56        json_t *value;
57        int err = 0;
58
59        json_object_foreach(element, key, value) {
60                if (!strcmp(key, "id")) {
61                        err = og_json_parse_uint(value, &scope->id);
62                        flags |= OG_PARAM_SCOPE_ID;
63                } else if (!strcmp(key, "type")) {
64                        err = og_json_parse_string(value, &scope->type);
65                        flags |= OG_PARAM_SCOPE_TYPE;
66                } else {
67                        err = -1;
68                }
69
70                if (err < 0)
71                        return err;
72        }
73
74        if (flags != required_flags)
75                return -1;
76
77        return err;
78}
79
[04ca20e]80int og_json_parse_partition(json_t *element, struct og_partition *part,
81                            uint64_t required_flags)
82{
83        uint64_t flags = 0UL;
84        const char *key;
85        json_t *value;
86        int err = 0;
87
88        json_object_foreach(element, key, value) {
89                if (!strcmp(key, "partition")) {
90                        err = og_json_parse_string(value, &part->number);
91                        flags |= OG_PARAM_PART_NUMBER;
92                } else if (!strcmp(key, "code")) {
93                        err = og_json_parse_string(value, &part->code);
94                        flags |= OG_PARAM_PART_CODE;
95                } else if (!strcmp(key, "filesystem")) {
96                        err = og_json_parse_string(value, &part->filesystem);
97                        flags |= OG_PARAM_PART_FILESYSTEM;
98                } else if (!strcmp(key, "size")) {
99                        err = og_json_parse_string(value, &part->size);
100                        flags |= OG_PARAM_PART_SIZE;
101                } else if (!strcmp(key, "format")) {
102                        err = og_json_parse_string(value, &part->format);
103                        flags |= OG_PARAM_PART_FORMAT;
104                } else if (!strcmp(key, "disk")) {
105                        err = og_json_parse_string(value, &part->disk);
106                        flags |= OG_PARAM_PART_DISK;
107                } else if (!strcmp(key, "os")) {
108                        err = og_json_parse_string(value, &part->os);
109                        flags |= OG_PARAM_PART_OS;
110                } else if (!strcmp(key, "used_size")) {
111                        err = og_json_parse_string(value, &part->used_size);
112                        flags |= OG_PARAM_PART_USED_SIZE;
113                }
114
115                if (err < 0)
116                        return err;
117        }
118
119        if (flags != required_flags)
120                return -1;
121
122        return err;
123}
Note: See TracBrowser for help on using the repository browser.