/* Create Arrays: */ cJSON *cJSON_CreateIntArray(int *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && i<count;i++){n=cJSON_CreateNumber(numbers[i]);if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;}
void jaddnum(cJSON *json,char *field,double num) { cJSON_AddItemToObject(json,field,cJSON_CreateNumber(num)); }
void jaddinum(cJSON *json,double num) { cJSON_AddItemToArray(json,cJSON_CreateNumber(num)); }
int sg_json_set_double(sg_json_doc_t *doc, const char *json_pointer, double value) { cJSON *json = cast_to_cJSON(doc); return set_value(json, json_pointer, cJSON_CreateNumber(value)); }
char * BinToDoxmJSON(const OicSecDoxm_t * doxm) { if (NULL == doxm) { return NULL; } char *jsonStr = NULL; cJSON *jsonDoxm = NULL; char base64Buff[B64ENCODE_OUT_SAFESIZE(sizeof(((OicUuid_t*)0)->id)) + 1] = {}; uint32_t outLen = 0; B64Result b64Ret = B64_OK; cJSON *jsonRoot = cJSON_CreateObject(); VERIFY_NON_NULL(TAG, jsonRoot, ERROR); jsonDoxm = cJSON_CreateObject(); VERIFY_NON_NULL(TAG, jsonDoxm, ERROR); cJSON_AddItemToObject(jsonRoot, OIC_JSON_DOXM_NAME, jsonDoxm ); //OxmType -- Not Mandatory if(doxm->oxmTypeLen > 0) { cJSON *jsonOxmTyArray = cJSON_CreateArray(); VERIFY_NON_NULL(TAG, jsonOxmTyArray, ERROR); cJSON_AddItemToObject (jsonDoxm, OIC_JSON_OXM_TYPE_NAME, jsonOxmTyArray ); for (size_t i = 0; i < doxm->oxmTypeLen; i++) { cJSON_AddItemToArray (jsonOxmTyArray, cJSON_CreateString(doxm->oxmType[i])); } } //Oxm -- Not Mandatory if(doxm->oxmLen > 0) { cJSON *jsonOxmArray = cJSON_CreateArray(); VERIFY_NON_NULL(TAG, jsonOxmArray, ERROR); cJSON_AddItemToObject (jsonDoxm, OIC_JSON_OXM_NAME,jsonOxmArray ); for (size_t i = 0; i < doxm->oxmLen; i++) { cJSON_AddItemToArray (jsonOxmArray, cJSON_CreateNumber(doxm->oxm[i])); } } //OxmSel -- Mandatory cJSON_AddNumberToObject(jsonDoxm, OIC_JSON_OXM_SEL_NAME, (int)doxm->oxmSel); //Owned -- Mandatory cJSON_AddBoolToObject(jsonDoxm, OIC_JSON_OWNED_NAME, doxm->owned); //TODO: Need more clarification on deviceIDFormat field type. #if 0 //DeviceIdFormat -- Mandatory cJSON_AddNumberToObject(jsonDoxm, OIC_JSON_DEVICE_ID_FORMAT_NAME, doxm->deviceIDFormat); #endif //DeviceId -- Mandatory outLen = 0; b64Ret = b64Encode(doxm->deviceID.id, sizeof(doxm->deviceID.id), base64Buff, sizeof(base64Buff), &outLen); VERIFY_SUCCESS(TAG, b64Ret == B64_OK, ERROR); cJSON_AddStringToObject(jsonDoxm, OIC_JSON_DEVICE_ID_NAME, base64Buff); //Owner -- Mandatory outLen = 0; b64Ret = b64Encode(doxm->owner.id, sizeof(doxm->owner.id), base64Buff, sizeof(base64Buff), &outLen); VERIFY_SUCCESS(TAG, b64Ret == B64_OK, ERROR); cJSON_AddStringToObject(jsonDoxm, OIC_JSON_OWNER_NAME, base64Buff); jsonStr = cJSON_PrintUnformatted(jsonRoot); exit: if (jsonRoot) { cJSON_Delete(jsonRoot); } return jsonStr; }
cJSON *cJSON_CreateDoubleArray(const double *numbers,int count, ngx_pool_t *pool) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray(pool);for(i=0;a && i<count;i++){n=cJSON_CreateNumber(numbers[i], pool);if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;}
static void StatQuery_AddArrayNumber( stat_query_section_t *array, double prop_value ) { cJSON *object; object = cJSON_CreateNumber( prop_value ); cJSON_AddItemToArray( (cJSON *)array, object ); }
void sendNumericalMessage(const char* name, float value, Listener* listener) { sendJSONMessage(name, cJSON_CreateNumber(value), NULL, listener); }
void server_masters(socket_t * client, http_request_t * req, db_t * db) { char buffer[10240] = ""; if (strcmp(req->method, "GET") == 0) { list_t * masters = list_new(); char * countK = (char *)http_request_getArg(req, "countK"); char * countP = (char *)http_request_getArg(req, "countP"); if(countK != NULL && countP != NULL) { db_filtration(db, masters, atoi(countK), atoi(countP)); } else { db_parse(db, masters); } cJSON * jPageText = cJSON_CreateArray(); for(int i = 0; i < list_size(masters); i++) { master_t * sm = list_get(masters, i); cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(master_getName(sm))); cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(master_getSurname(sm))); cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(master_getCountK(sm))); cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(master_getCountP(sm))); cJSON_AddItemToArray(jPageText, jText); } char * pageText = cJSON_Print(jPageText); list_free(masters); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } else if (strcmp(req->method, "POST") == 0) { char * name = (char *)http_request_getArg(req, "name"); char * surname = (char *)http_request_getArg(req, "surname"); char * countK = (char *)http_request_getArg(req, "countK"); char * countP = (char *)http_request_getArg(req, "countP"); if(verification(name, surname, countK, countP) == 1) { db_insertData(db, name, surname, atoi(countK), atoi(countP)); cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Name", cJSON_CreateString(name)); cJSON_AddItemToObject(jText, "Surname", cJSON_CreateString(surname)); cJSON_AddItemToObject(jText, "CountK", cJSON_CreateNumber(atoi(countK))); cJSON_AddItemToObject(jText, "CountP", cJSON_CreateNumber(atoi(countP))); char * pageText = cJSON_Print(jText); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } else { cJSON * jText = cJSON_CreateObject(); cJSON_AddItemToObject(jText, "Error", cJSON_CreateString("Wrong input")); char * pageText = cJSON_Print(jText); char * textJSON = textToJSON(pageText); strcat(buffer, textJSON); free(textJSON); } } socket_write_string(client, buffer); socket_close(client); }
static cJSON * _error_serializeJSON(const error_t * self) { cJSON * jError = cJSON_CreateObject(); cJSON_AddItemToObject(jError, "Number of requests", cJSON_CreateNumber(self->status)); cJSON_AddItemToObject(jError, "Current existence of problem", cJSON_CreateString(self->error)); return jError; }
void sendEventedFloatMessage(const char* name, const char* value, float event, Listener* listener) { sendJSONMessage(name, cJSON_CreateString(value), cJSON_CreateNumber(event), listener); }
const char* SerializeReflection(ShaderInfo* psReflection) { cJSON* root; cJSON_Hooks hooks; hooks.malloc_fn = jsonMalloc; hooks.free_fn = jsonFree; cJSON_InitHooks(&hooks); root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "ui32MajorVersion", cJSON_CreateNumber(psReflection->ui32MajorVersion)); cJSON_AddItemToObject(root, "ui32MinorVersion", cJSON_CreateNumber(psReflection->ui32MinorVersion)); cJSON_AddItemToObject(root, "ui32NumInputSignatures", cJSON_CreateNumber(psReflection->ui32NumInputSignatures)); for(uint32_t i = 0; i < psReflection->ui32NumInputSignatures; ++i) { std::string name; name += "input"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteInOutSignature(psReflection->psInputSignatures+i, obj); } cJSON_AddItemToObject(root, "ui32NumOutputSignatures", cJSON_CreateNumber(psReflection->ui32NumOutputSignatures)); for(uint32_t i = 0; i < psReflection->ui32NumOutputSignatures; ++i) { std::string name; name += "output"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteInOutSignature(psReflection->psOutputSignatures+i, obj); } cJSON_AddItemToObject(root, "ui32NumResourceBindings", cJSON_CreateNumber(psReflection->ui32NumResourceBindings)); for(uint32_t i = 0; i < psReflection->ui32NumResourceBindings; ++i) { std::string name; name += "resource"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteResourceBinding(psReflection->psResourceBindings+i, obj); } cJSON_AddItemToObject(root, "ui32NumConstantBuffers", cJSON_CreateNumber(psReflection->ui32NumConstantBuffers)); for(uint32_t i = 0; i < psReflection->ui32NumConstantBuffers; ++i) { std::string name; name += "cbuf"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteConstantBuffer(psReflection->psConstantBuffers+i, obj); } //psThisPointerConstBuffer is a cache. Don't need to write this out. //It just points to the $ThisPointer cbuffer within the psConstantBuffers array. for(uint32_t i = 0; i < psReflection->ui32NumClassTypes; ++i) { std::string name; name += "classType"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteClassType(psReflection->psClassTypes+i, obj); } for(uint32_t i = 0; i < psReflection->ui32NumClassInstances; ++i) { std::string name; name += "classInst"; AppendIntToString(name, i); cJSON* obj = cJSON_CreateObject(); cJSON_AddItemToObject(root, name.c_str(), obj); WriteClassInstance(psReflection->psClassInstances+i, obj); } //psReflection->aui32TableIDToTypeID //psReflection->aui32ConstBufferBindpointRemap cJSON_AddItemToObject(root, "eTessPartitioning", cJSON_CreateNumber(psReflection->eTessPartitioning)); cJSON_AddItemToObject(root, "eTessOutPrim", cJSON_CreateNumber(psReflection->eTessOutPrim)); const char* jsonString = cJSON_Print(root); cJSON_Delete(root); return jsonString; }
cJSON *cJSON_CreateDoubleArray(const double *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && i<count;i++){n=cJSON_CreateNumber(numbers[i]);if(!n){cJSON_Delete(a);return 0;}if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;}
/** * Encode log as GELF */ static char *to_gelf(const switch_log_node_t *node, switch_log_level_t log_level) { char *gelf_text = NULL; cJSON *gelf = cJSON_CreateObject(); char *hostname; char timestamp[32]; char *full_message = node->content; char short_message[151]; char *short_message_end = NULL; char *parsed_full_message = NULL; char *field_name = NULL; switch_event_t *log_fields = NULL; switch_core_session_t *session = NULL; cJSON_AddItemToObject(gelf, "version", cJSON_CreateString("1.1")); if ((hostname = switch_core_get_variable("hostname")) && !zstr(hostname)) { cJSON_AddItemToObject(gelf, "host", cJSON_CreateString(hostname)); } else if ((hostname = switch_core_get_variable("local_ip_v4")) && !zstr(hostname)) { cJSON_AddItemToObject(gelf, "host", cJSON_CreateString(hostname)); } switch_snprintf(timestamp, 32, "%"SWITCH_UINT64_T_FMT".%d", (uint64_t)(node->timestamp / 1000000), (node->timestamp % 1000000) / 1000); cJSON_AddItemToObject(gelf, "timestamp", cJSON_CreateString(timestamp)); cJSON_AddItemToObject(gelf, "_microtimestamp", cJSON_CreateNumber(node->timestamp)); cJSON_AddItemToObject(gelf, "level", cJSON_CreateNumber(to_graylog2_level(log_level))); cJSON_AddItemToObject(gelf, "_ident", cJSON_CreateString("freeswitch")); cJSON_AddItemToObject(gelf, "_pid", cJSON_CreateNumber((int)getpid())); if (!zstr(node->userdata)) { cJSON_AddItemToObject(gelf, "_uuid", cJSON_CreateString(node->userdata)); } if (!zstr_buf(node->file)) { cJSON_AddItemToObject(gelf, "_file", cJSON_CreateString(node->file)); cJSON_AddItemToObject(gelf, "_line", cJSON_CreateNumber(node->line)); } if (!zstr_buf(node->func)) { cJSON_AddItemToObject(gelf, "_function", cJSON_CreateString(node->func)); } /* skip initial space and new line */ if (*full_message == ' ') { full_message++; } if (*full_message == '\n') { full_message++; } /* get fields from channel data, if configured */ if (!zstr(node->userdata) && (session = switch_core_session_locate(node->userdata))) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_event_header_t *hp; /* session_fields name mapped to variable name */ for (hp = globals.session_fields->headers; hp; hp = hp->next) { if (!zstr(hp->name) && !zstr(hp->value)) { const char *val = switch_channel_get_variable(channel, hp->value); if (!zstr(val)) { if (!log_fields) { switch_event_create_plain(&log_fields, SWITCH_EVENT_CHANNEL_DATA); } switch_event_add_header_string(log_fields, SWITCH_STACK_BOTTOM, hp->name, val); } } } switch_core_session_rwunlock(session); } /* parse list of fields from message text, if any */ if (strncmp(full_message, "LOG_FIELDS", 10) == 0) { switch_event_create_brackets(full_message+10, '[', ']', ',', &log_fields, &parsed_full_message, SWITCH_TRUE); full_message = parsed_full_message; } /* add additional fields */ if (log_fields) { switch_event_header_t *hp; for (hp = log_fields->headers; hp; hp = hp->next) { if (!zstr(hp->name) && !zstr(hp->value)) { if (strncmp(hp->name, "@#", 2) == 0) { field_name = switch_mprintf("_%s", hp->name + 2); cJSON_AddItemToObject(gelf, field_name, cJSON_CreateNumber(strtod(hp->value, NULL))); } else { field_name = switch_mprintf("_%s", hp->name); cJSON_AddItemToObject(gelf, field_name, cJSON_CreateString(hp->value)); } free(field_name); } } switch_event_destroy(&log_fields); } cJSON_AddItemToObject(gelf, "full_message", cJSON_CreateString(full_message)); switch_snprintf(short_message, sizeof(short_message) - 1, "%s", full_message); if ((short_message_end = strchr(short_message, '\n'))) { *short_message_end = '\0'; } cJSON_AddItemToObject(gelf, "short_message", cJSON_CreateString(short_message)); gelf_text = cJSON_PrintUnformatted(gelf); cJSON_Delete(gelf); switch_safe_free(parsed_full_message); return gelf_text; }
char *pNXT_jsonhandler(cJSON **argjsonp,char *argstr,char *verifiedsender) { struct NXThandler_info *mp = Global_mp; long len; struct coin_info *cp; int32_t valid,firsttime = 1; cJSON *secretobj = 0,*json; char NXTACCTSECRET[1024],sender[64],*origparmstxt,*parmstxt=0,encoded[NXT_TOKEN_LEN+1],*retstr = 0; again: sender[0] = 0; if ( verifiedsender != 0 && verifiedsender[0] != 0 ) safecopy(sender,verifiedsender,sizeof(sender)); valid = -1; //printf("pNXT_jsonhandler argjson.%p\n",*argjsonp); if ( *argjsonp != 0 ) { secretobj = cJSON_GetObjectItem(*argjsonp,"secret"); copy_cJSON(NXTACCTSECRET,secretobj); if ( NXTACCTSECRET[0] == 0 && (cp= get_coin_info("BTCD")) != 0 ) { safecopy(NXTACCTSECRET,cp->NXTACCTSECRET,sizeof(NXTACCTSECRET)); cJSON_ReplaceItemInObject(*argjsonp,"secret",cJSON_CreateString(NXTACCTSECRET)); //printf("got cp.%p for BTCD (%s) (%s)\n",cp,cp->NXTACCTSECRET,cJSON_Print(*argjsonp)); } parmstxt = cJSON_Print(*argjsonp); len = strlen(parmstxt); stripwhite_ns(parmstxt,len); //printf("parmstxt.(%s)\n",parmstxt); } if ( *argjsonp == 0 ) { json = cJSON_CreateObject(); cJSON_AddItemToObject(json,"error",cJSON_CreateString("cant parse")); cJSON_AddItemToObject(json,"argstr",cJSON_CreateString(argstr)); retstr = cJSON_Print(json); free_json(json); return(retstr); } else { origparmstxt = parmstxt; parmstxt = verify_tokenized_json(sender,&valid,argjsonp,parmstxt); } retstr = pNXT_json_commands(mp,Global_pNXT,*argjsonp,sender,valid,argstr); //printf("back from pNXT_json_commands\n"); if ( firsttime != 0 && retstr == 0 && *argjsonp != 0 && parmstxt == 0 ) { cJSON *reqobj; uint64_t nxt64bits; char _tokbuf[4096],NXTaddr[64],buf[1024];//,*str; firsttime = 0; reqobj = cJSON_GetObjectItem(*argjsonp,"requestType"); copy_cJSON(buf,reqobj); if ( cJSON_GetObjectItem(*argjsonp,"requestType") != 0 ) cJSON_ReplaceItemInObject(*argjsonp,"time",cJSON_CreateNumber(time(NULL))); else cJSON_AddItemToObject(*argjsonp,"time",cJSON_CreateNumber(time(NULL))); nxt64bits = issue_getAccountId(0,NXTACCTSECRET); expand_nxt64bits(NXTaddr,nxt64bits); cJSON_ReplaceItemInObject(*argjsonp,"NXT",cJSON_CreateString(NXTaddr)); printf("replace NXT.(%s)\n",NXTaddr); //#ifndef __linux__ if ( strcmp(buf,"teleport") != 0 && strcmp(buf,"tradebot") != 0 && strcmp(buf,"makeoffer") != 0 && strcmp(buf,"select") != 0 && strcmp(buf,"checkmessages") != 0 && Global_pNXT->privacyServer != 0 ) { parmstxt = remove_secret(argjsonp,parmstxt); issue_generateToken(mp->curl_handle2,encoded,parmstxt,NXTACCTSECRET); encoded[NXT_TOKEN_LEN] = 0; sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",parmstxt,encoded); retstr = sendmessage(NXTaddr,NXTACCTSECRET,_tokbuf,(int32_t)strlen(_tokbuf)+1,Global_pNXT->privacyServer_NXTaddr,_tokbuf); } else //#endif { issue_generateToken(mp->curl_handle2,encoded,origparmstxt,NXTACCTSECRET); encoded[NXT_TOKEN_LEN] = 0; sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",origparmstxt,encoded); if ( *argjsonp != 0 ) free_json(*argjsonp); *argjsonp = cJSON_Parse(_tokbuf); if ( origparmstxt != 0 ) free(origparmstxt), origparmstxt = 0; goto again; } } //printf("free parmstxt.%p, argjson.%p\n",parmstxt,*argjsonp); if ( parmstxt != 0 ) free(parmstxt); return(retstr); }
switch_status_t mod_amqp_logging_recv(const switch_log_node_t *node, switch_log_level_t level) { switch_hash_index_t *hi = NULL; mod_amqp_message_t *msg = NULL; mod_amqp_logging_profile_t *logging = NULL; char *json = NULL; if (!strcmp(node->file, "mod_amqp_logging.c")) { return SWITCH_STATUS_SUCCESS; } /* 1. Loop through logging hash of profiles. Check for a profile that accepts this logging level, and file regex. 2. If event not already parsed/created, then create it now 3. Queue copy of event into logging profile send queue 4. Destroy local event copy */ for (hi = switch_core_hash_first(globals.logging_hash); hi; hi = switch_core_hash_next(&hi)) { switch_core_hash_this(hi, NULL, NULL, (void **)&logging); if ( logging && switch_log_check_mask(logging->log_level_mask, level) ) { char file[128] = {0}; if ( !json ) { cJSON *body = NULL; char date[80] = ""; switch_time_exp_t tm; switch_time_exp_lt(&tm, node->timestamp); switch_snprintf(date, sizeof(date), "%0.4d-%0.2d-%0.2d %0.2d:%0.2d:%0.2d.%0.6d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_usec); /* Create cJSON body */ body = cJSON_CreateObject(); cJSON_AddItemToObject(body, "file", cJSON_CreateString((const char *) node->file)); cJSON_AddItemToObject(body, "function", cJSON_CreateString((const char *) node->func)); cJSON_AddItemToObject(body, "line", cJSON_CreateNumber((double) node->line)); cJSON_AddItemToObject(body, "level", cJSON_CreateString(switch_log_level2str(node->level))); cJSON_AddItemToObject(body, "timestamp", cJSON_CreateString((const char *)date)); cJSON_AddItemToObject(body, "timestamp_epoch", cJSON_CreateNumber((double) node->timestamp / 1000000)); cJSON_AddItemToObject(body, "content", cJSON_CreateString(node->content )); json = cJSON_Print(body); cJSON_Delete(body); } /* Create message */ switch_malloc(msg, sizeof(mod_amqp_message_t)); msg->pjson = strdup(json); strcpy(file, node->file); switch_replace_char(file, '.', '_', 0); snprintf(msg->routing_key, sizeof(msg->routing_key), "%s.%s.%s.%s", switch_core_get_hostname(), node->userdata, switch_log_level2str(node->level), file); if (switch_queue_trypush(logging->send_queue, msg) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "AMQP logging message queue full. Messages will be dropped!\n"); return SWITCH_STATUS_SUCCESS; } } } switch_safe_free(json); return SWITCH_STATUS_SUCCESS; }