@@ -151,15 +151,33 @@ std::shared_ptr<ConfigSettings> ConfigSettings::parseJson(json_t *jsonConfig)
151
151
timeouts = parseTimeouts (timeoutsObj);
152
152
}
153
153
154
+ json_t *obj_network_ble = NULL ;
155
+
154
156
// find the vendor details array
155
157
json_t *modelArray = json_object_get (jsonConfig, " models" );
156
158
if (!modelArray || !json_is_array (modelArray)) {
157
- XLOGD_ERROR ( " missing or invalid 'models' field in config" );
158
- return std::shared_ptr<ConfigSettings>();
159
+ XLOGD_WARN ( " missing or invalid 'models' field in config (using defaults)" );
160
+
161
+ obj_network_ble = json_loads (DEFAULT_CONFIG::json (), JSON_DECODE_ANY, NULL );
162
+ if (!obj_network_ble || !json_is_object (obj_network_ble)) {
163
+ if (!obj_network_ble) {
164
+ XLOGD_ERROR (" invalid default config buffer" );
165
+ } else {
166
+ XLOGD_ERROR (" default config buffer is not a json object" );
167
+ json_decref (obj_network_ble);
168
+ }
169
+ return std::shared_ptr<ConfigSettings>();
170
+ }
171
+
172
+ modelArray = json_object_get (obj_network_ble, " models" );
173
+ if ((!modelArray || !json_is_array (modelArray))) {
174
+ XLOGD_ERROR (" missing or invalid 'models' field in default config" );
175
+ json_decref (obj_network_ble);
176
+ return std::shared_ptr<ConfigSettings>();
177
+ }
159
178
}
160
179
size_t array_size = json_array_size (modelArray);
161
180
162
-
163
181
vector<ConfigModelSettings> models;
164
182
165
183
for (unsigned int i = 0 ; i < array_size; i++) {
@@ -174,6 +192,10 @@ std::shared_ptr<ConfigSettings> ConfigSettings::parseJson(json_t *jsonConfig)
174
192
}
175
193
}
176
194
195
+ if (obj_network_ble != NULL ) {
196
+ json_decref (obj_network_ble);
197
+ }
198
+
177
199
// finally return the config
178
200
return std::make_shared<ConfigSettings>(timeouts, std::move (models));
179
201
}
0 commit comments