char *call_SuperNET_JSON(char *JSONstr) { cJSON *json,*array; int32_t valid; char NXTaddr[64],_tokbuf[2*MAX_JSON_FIELD],encoded[NXT_TOKEN_LEN+1],*cmdstr,*retstr = 0; struct coin_info *cp = get_coin_info("BTCD"); if ( Finished_init == 0 ) { printf("Finished_init still 0\n"); return(clonestr("{\"result\":null}")); } //printf("got call_SuperNET_JSON.(%s)\n",JSONstr); if ( cp != 0 && (json= cJSON_Parse(JSONstr)) != 0 ) { expand_nxt64bits(NXTaddr,cp->srvpubnxtbits); cJSON_AddItemToObject(json,"NXT",cJSON_CreateString(NXTaddr)); cJSON_AddItemToObject(json,"pubkey",cJSON_CreateString(Global_mp->pubkeystr)); cmdstr = cJSON_Print(json); if ( cmdstr != 0 ) { stripwhite_ns(cmdstr,strlen(cmdstr)); issue_generateToken(0,encoded,cmdstr,cp->srvNXTACCTSECRET); encoded[NXT_TOKEN_LEN] = 0; sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",cmdstr,encoded); free(cmdstr); //printf("made tokbuf.(%s)\n",_tokbuf); array = cJSON_Parse(_tokbuf); if ( array != 0 ) { cmdstr = verify_tokenized_json(0,NXTaddr,&valid,array); //printf("cmdstr.%s valid.%d\n",cmdstr,valid); retstr = SuperNET_json_commands(Global_mp,0,array,NXTaddr,valid,_tokbuf); //printf("json command return.(%s)\n",retstr); if ( cmdstr != 0 ) free(cmdstr); free_json(array); } else printf("couldnt parse tokbuf.(%s)\n",_tokbuf); } free_json(json); } else printf("couldnt parse (%s)\n",JSONstr); if ( retstr == 0 ) retstr = clonestr("{\"result\":null}"); return(retstr); }
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); }