-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
132 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
/* | ||
Copyright (c) 2020 Roger Light <[email protected]> | ||
All rights reserved. This program and the accompanying materials | ||
are made available under the terms of the Eclipse Public License v1.0 | ||
and Eclipse Distribution License v1.0 which accompany this distribution. | ||
The Eclipse Public License is available at | ||
http:https://www.eclipse.org/legal/epl-v10.html | ||
and the Eclipse Distribution License is available at | ||
http:https://www.eclipse.org/org/documents/edl-v10.php. | ||
Contributors: | ||
Roger Light - initial implementation and documentation. | ||
*/ | ||
|
||
#include "config.h" | ||
|
||
#include <cJSON.h> | ||
#include <stdbool.h> | ||
|
||
#include "mosquitto_broker_internal.h" | ||
|
||
|
||
int json_get_bool(cJSON *json, const char *name, bool *value, bool optional, bool default_value) | ||
{ | ||
cJSON *jtmp; | ||
|
||
if(optional == true){ | ||
*value = default_value; | ||
} | ||
|
||
jtmp = cJSON_GetObjectItemCaseSensitive(json, name); | ||
if(jtmp){ | ||
if(cJSON_IsBool(jtmp) == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
*value = cJSON_IsTrue(jtmp); | ||
}else{ | ||
if(optional == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
} | ||
return MOSQ_ERR_SUCCESS; | ||
} | ||
|
||
|
||
int json_get_int(cJSON *json, const char *name, int *value, bool optional, int default_value) | ||
{ | ||
cJSON *jtmp; | ||
|
||
if(optional == true){ | ||
*value = default_value; | ||
} | ||
|
||
jtmp = cJSON_GetObjectItemCaseSensitive(json, name); | ||
if(jtmp){ | ||
if(cJSON_IsNumber(jtmp) == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
*value = jtmp->valueint; | ||
}else{ | ||
if(optional == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
} | ||
return MOSQ_ERR_SUCCESS; | ||
} | ||
|
||
|
||
int json_get_string(cJSON *json, const char *name, char **value, bool optional) | ||
{ | ||
cJSON *jtmp; | ||
|
||
*value = NULL; | ||
|
||
jtmp = cJSON_GetObjectItemCaseSensitive(json, name); | ||
if(jtmp){ | ||
if(cJSON_IsString(jtmp) == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
*value = jtmp->valuestring; | ||
}else{ | ||
if(optional == false){ | ||
return MOSQ_ERR_INVAL; | ||
} | ||
} | ||
return MOSQ_ERR_SUCCESS; | ||
} | ||
|
||
|
||
/* Return a number as a number, or attempt to convert a string to a number, or a bool to a number */ | ||
double json_get_as_number(const cJSON *json) | ||
{ | ||
char *endptr = NULL; | ||
|
||
if(cJSON_IsNumber(json)){ | ||
return json->valuedouble; | ||
}else if(cJSON_IsString(json)){ | ||
return strtod(json->valuestring, &endptr); | ||
}else if(cJSON_IsBool(json)){ | ||
return cJSON_IsTrue(json); | ||
}else{ | ||
return 0.0; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
#ifndef JSON_HELP_H | ||
#define JSON_HELP_H | ||
/* | ||
Copyright (c) 2020 Roger Light <[email protected]> | ||
All rights reserved. This program and the accompanying materials | ||
are made available under the terms of the Eclipse Public License v1.0 | ||
and Eclipse Distribution License v1.0 which accompany this distribution. | ||
The Eclipse Public License is available at | ||
http:https://www.eclipse.org/legal/epl-v10.html | ||
and the Eclipse Distribution License is available at | ||
http:https://www.eclipse.org/org/documents/edl-v10.php. | ||
Contributors: | ||
Roger Light - initial implementation and documentation. | ||
*/ | ||
#include <cJSON.h> | ||
#include <stdbool.h> | ||
|
||
int json_get_bool(cJSON *json, const char *name, bool *value, bool optional, bool default_value); | ||
int json_get_int(cJSON *json, const char *name, int *value, bool optional, int default_value); | ||
int json_get_string(cJSON *json, const char *name, char **value, bool optional); | ||
double json_get_as_number(const cJSON *json); | ||
|
||
#endif |