int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *SuperNET_install(char *plugin,char *jsonstr,cJSON *json); char *retstr,*resultstr,*methodstr,*destplugin; int32_t len; retbuf[0] = 0; //printf("<<<<<<<<<<<< INSIDE PLUGIN.(%s)! (%s) initflag.%d process %s\n",plugin->name,jsonstr,initflag,plugin->name); if ( initflag > 0 ) { SUPERNET.ppid = OS_getppid(); SUPERNET.argjson = cJSON_Duplicate(json,1); SUPERNET.readyflag = 1; if ( SUPERNET.UPNP != 0 ) { char portstr[64]; sprintf(portstr,"%d",SUPERNET.serviceport), upnpredirect(portstr,portstr,"TCP","SuperNET"); sprintf(portstr,"%d",SUPERNET.port + LB_OFFSET), upnpredirect(portstr,portstr,"TCP","SuperNET"); sprintf(portstr,"%d",SUPERNET.port + PUBGLOBALS_OFFSET), upnpredirect(portstr,portstr,"TCP","SuperNET"); sprintf(portstr,"%d",SUPERNET.port + PUBRELAYS_OFFSET), upnpredirect(portstr,portstr,"TCP","SuperNET"); } } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); if ( (destplugin= cJSON_str(cJSON_GetObjectItem(json,"name"))) == 0 ) destplugin = cJSON_str(cJSON_GetObjectItem(json,"path")); printf("SUPERNET\n"); if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; retstr = "return registered"; } else if ( methodstr != 0 && strcmp(methodstr,"install") == 0 && destplugin != 0 && destplugin[0] != 0 ) retstr = SuperNET_install(destplugin,jsonstr,json); else retstr = "return JSON result"; strcpy(retbuf,retstr); len = (int32_t)strlen(retbuf); while ( --len > 0 ) if ( retbuf[len] == '}' ) break; sprintf(retbuf + len,",\"debug\":%d,\"USESSL\":%d,\"MAINNET\":%d,\"DATADIR\":\"%s\",\"NXTAPI\":\"%s\",\"WEBSOCKETD\":\"%s\",\"SUPERNET_PORT\":%d,\"APISLEEP\":%d,\"domain\":\"%s\"}",Debuglevel,SUPERNET.usessl,SUPERNET.ismainnet,SUPERNET.DATADIR,SUPERNET.NXTAPIURL,SUPERNET.WEBSOCKETD,SUPERNET.port,SUPERNET.APISLEEP,SUPERNET.hostname); } return((int32_t)strlen(retbuf)); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *resultstr,*methodstr,*depositaddr,*retstr = 0; int32_t i; double pingmillis = 60000; retbuf[0] = 0; printf("<<<<<<<<<<<< INSIDE PLUGIN! process %s (%s)\n",plugin->name,jsonstr); if ( initflag > 0 ) { RPS.readyflag = 1; plugin->allowremote = 1; copy_cJSON(RPS.name,jobj(json,"name")); txnet777_init(&RPS.TXNET,json,"rps","RPS",RPS.name,pingmillis); strcpy(plugin->NXTADDR,RPS.TXNET.ACCT.NXTADDR); if ( (depositaddr= jstr(json,"depositaddr")) == 0 ) depositaddr = GATEWAY_ADDRESS; printf("fixed.%ld malleable.%ld tx.%ld\n",sizeof(struct txnet777_input),sizeof(struct txnet777_output),sizeof(struct txnet777)); sprintf(retbuf,"{\"result\":\"initialized RPS\",\"pluginNXT\":\"%s\",\"serviceNXT\":\"%s\",\"depositaddr\":\"%s\"}",plugin->NXTADDR,plugin->SERVICENXT,depositaddr); } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); methodstr = jstr(json,"method"); resultstr = jstr(json,"result"); if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } else if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } for (i=0; i<sizeof(PLUGNAME(_methods))/sizeof(*PLUGNAME(_methods)); i++) if ( strcmp(PLUGNAME(_methods)[i],methodstr) == 0 ) retstr = (*PLUGNAME(_functions)[i])(retbuf,maxlen,&RPS.TXNET,json,jsonstr,tokenstr,forwarder,sender,valid); } return(plugin_copyretstr(retbuf,maxlen,retstr)); }
int32_t PLUGNAME(_process_json)(struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag) { char echostr[MAX_JSON_FIELD],*resultstr,*methodstr; retbuf[0] = 0; //printf("<<<<<<<<<<<< INSIDE PLUGIN! process %s (%s)\n",plugin->name,jsonstr); if ( initflag > 0 ) { // configure settings plugin->allowremote = 1; strcpy(retbuf,"{\"result\":\"echodemo init\"}"); } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); copy_cJSON(echostr,cJSON_GetObjectItem(json,"echostr")); retbuf[0] = 0; if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } else if ( strcmp(methodstr,"echo") == 0 ) { sprintf(retbuf,"{\"result\":\"%s\"}",echostr); } } return((int32_t)strlen(retbuf)); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *origjsonstr,cJSON *origjson,int32_t initflag,char *tokenstr) { char *resultstr,*retstr = 0,*methodstr,*jsonstr,*destplugin,*submethod; struct destbuf tagstr,endpoint; cJSON *retjson,*json,*tokenobj; uint32_t nonce; struct applicant_info apply; retbuf[0] = 0; if ( tokenstr == 0 ) tokenstr = ""; if ( is_cJSON_Array(origjson) != 0 && cJSON_GetArraySize(origjson) == 2 ) json = cJSON_GetArrayItem(origjson,0), jsonstr = cJSON_Print(json), _stripwhite(jsonstr,' '); else json = origjson, jsonstr = origjsonstr; if ( Debuglevel > 2 ) printf("<<<<<<<<<<<< INSIDE relays PLUGIN! process %s [(%s).(%s)]\n",plugin->name,jsonstr,tokenstr); if ( initflag > 0 ) { // configure settings RELAYS.readyflag = 1; plugin->allowremote = 1; strcpy(retbuf,"{\"result\":\"initflag > 0\"}"); } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); destplugin = cJSON_str(cJSON_GetObjectItem(json,"destplugin")); submethod = cJSON_str(cJSON_GetObjectItem(json,"submethod")); if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } //fprintf(stderr,"RELAYS methodstr.(%s) (%s)\n",methodstr,jsonstr); if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } #ifdef INSIDE_MGW else if ( strcmp(methodstr,"msigaddr") == 0 ) { char *devMGW_command(char *jsonstr,cJSON *json); if ( SUPERNET.gatewayid >= 0 ) retstr = devMGW_command(jsonstr,json); } #endif else { strcpy(retbuf,"{\"result\":\"relay command under construction\"}"); if ( strcmp(methodstr,"list") == 0 ) retstr = relays_jsonstr(jsonstr,json); else if ( strcmp(methodstr,"telepathy") == 0 ) { sprintf(retbuf,"%s",jsonstr); } else if ( strcmp(methodstr,"busdata") == 0 ) { retstr = busdata_sync(&nonce,jsonstr,cJSON_str(cJSON_GetObjectItem(json,"broadcast")),0); // {"plugin":"relay","method":"busdata","destplugin":"relay","submethod":"join","broadcast":"join","endpoint":""} } else if ( strcmp(methodstr,"allservices") == 0 ) { if ( (retjson= serviceprovider_json()) != 0 ) { retstr = cJSON_Print(retjson), _stripwhite(retstr,' '); free_json(retjson); //printf("got.(%s)\n",retstr); } else printf("null serviceprovider_json()\n"); } else if ( strcmp(methodstr,"protocol") == 0 || strcmp(methodstr,"allprotocols") == 0 ) { if ( strcmp(methodstr,"protocol") == 0 && valid > 0 ) protocols_register(sender,jstr(json,"protocol"),jstr(json,"endpoint"),jint(json,"disconnect")); if ( (retjson= protocols_json(jstr(json,"protocol"))) != 0 ) { retstr = cJSON_Print(retjson), _stripwhite(retstr,' '); free_json(retjson); } else printf("null protocols_json()\n"); } else if ( strcmp(methodstr,"join") == 0 ) { if ( SUPERNET.noncing == 0 ) { copy_cJSON(&tagstr,cJSON_GetObjectItem(json,"tag")); copy_cJSON(&endpoint,cJSON_GetObjectItem(json,"endpoint")); SUPERNET.noncing = 1; if ( SUPERNET.iamrelay != 0 ) { portable_thread_create((void *)calc_nonces,clonestr(endpoint.buf)); sprintf(retbuf,"{\"result\":\"noncing\",\"endpoint\":\"%s\"}",endpoint.buf); } //fprintf(stderr,"join or nonce.(%s)\n",retbuf); } } else if ( strcmp(methodstr,"nonce") == 0 ) { struct destbuf endpoint,sender,destpoint,relaypoint,globalpoint,noncestr; memset(&apply,0,sizeof(apply)); copy_cJSON(&destpoint,cJSON_GetObjectItem(json,"destpoint")); copy_cJSON(&endpoint,cJSON_GetObjectItem(json,"lbendpoint")); copy_cJSON(&relaypoint,cJSON_GetObjectItem(json,"relaypoint")); copy_cJSON(&globalpoint,cJSON_GetObjectItem(json,"globalpoint")); copy_cJSON(&sender,cJSON_GetObjectItem(json,"NXT")); if ( SUPERNET.noncing != 0 && strcmp(SUPERNET.lbendpoint,destpoint.buf) == 0 ) { if ( endpoint.buf[0] != 0 && tokenstr[0] != 0 && (tokenobj= cJSON_Parse(tokenstr)) != 0 ) { strcpy(apply.lbendpoint,endpoint.buf); strcpy(apply.relayendpoint,relaypoint.buf); strcpy(apply.globalendpoint,globalpoint.buf); apply.senderbits = calc_nxt64bits(sender.buf); copy_cJSON(&noncestr,cJSON_GetObjectItem(tokenobj,"nonce")); if ( noncestr.buf[0] != 0 ) apply.nonce = (uint32_t)calc_nxt64bits(noncestr.buf); //printf("tokenobj.(%s) -> nonce.%u\n",tokenstr,apply.nonce); free_json(tokenobj); recv_nonces(&apply); } } } } } return(plugin_copyretstr(retbuf,maxlen,retstr)); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *resultstr,*methodstr,*retstr = 0; retbuf[0] = 0; if ( Debuglevel > 2 ) fprintf(stderr,"<<<<<<<<<<<< INSIDE PLUGIN! process %s (%s)\n",plugin->name,jsonstr); if ( initflag > 0 ) { // configure settings plugin->allowremote = 1; portable_mutex_init(&plugin->mutex); init_InstantDEX(calc_nxt64bits(SUPERNET.NXTADDR),0); update_NXT_assettrades(); INSTANTDEX.readyflag = 1; strcpy(retbuf,"{\"result\":\"InstantDEX init\"}"); } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); if ( (methodstr= cJSON_str(cJSON_GetObjectItem(json,"method"))) == 0 ) methodstr = cJSON_str(cJSON_GetObjectItem(json,"requestType")); retbuf[0] = 0; if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } portable_mutex_lock(&plugin->mutex); if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } else if ( strcmp(methodstr,"msigaddr") == 0 ) { char *devMGW_command(char *jsonstr,cJSON *json); if ( SUPERNET.gatewayid >= 0 ) { if ( (retstr= devMGW_command(jsonstr,json)) != 0 ) { //should_forward(sender,retstr); } } //else retstr = nn_loadbalanced((uint8_t *)jsonstr,(int32_t)strlen(jsonstr)+1); } else if ( strcmp(methodstr,"LSUM") == 0 ) { sprintf(retbuf,"{\"result\":\"%s\",\"amount\":%d}",(rand() & 1) ? "BUY" : "SELL",(rand() % 100) * 100000); retstr = clonestr(retbuf); } else if ( SUPERNET.iamrelay == 0 ) { retstr = InstantDEX_parser(forwarder,sender,valid,jsonstr,json); //printf("InstantDEX_parser return.(%s)\n",retstr); } else retstr = clonestr("{\"result\":\"relays only relay\"}"); if ( retstr != 0 ) { if ( strlen(retstr) >= maxlen-1 ) retstr[maxlen-1] = 0; strcpy(retbuf,retstr); free(retstr); } //else sprintf(retbuf,"{\"error\":\"method %s not found\"}",methodstr); portable_mutex_unlock(&plugin->mutex); } return((int32_t)strlen(retbuf) + retbuf[0]!=0); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *resultstr,*methodstr,zerobuf[1],*coinstr,*str = 0; cJSON *array,*item; int32_t i,n,j = 0; struct coin777 *coin; struct destbuf tmp; retbuf[0] = 0; if ( initflag > 0 ) { if ( json != 0 ) { COINS.argjson = cJSON_Duplicate(json,1); COINS.slicei = get_API_int(cJSON_GetObjectItem(json,"slice"),0); if ( (array= cJSON_GetObjectItem(json,"coins")) != 0 && (n= cJSON_GetArraySize(array)) > 0 ) { for (i=j=0; i<n; i++) { item = cJSON_GetArrayItem(array,i); coinstr = cJSON_str(cJSON_GetObjectItem(item,"name")); if ( coinstr != 0 && coinstr[0] != 0 && (coin= coin777_find(coinstr,0)) == 0 ) { printf("CALL coin777_create.(%s) (%s)\n",coinstr,cJSON_Print(item)); coin777_create(coinstr,item); } } } } else strcpy(retbuf,"{\"result\":\"no JSON for init\"}"); COINS.readyflag = 1; plugin->allowremote = 1; //plugin->sleepmillis = 1; } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); coinstr = cJSON_str(cJSON_GetObjectItem(json,"coin")); if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } //printf("COINS.(%s) for (%s) (%s)\n",methodstr,coinstr!=0?coinstr:"",jsonstr); if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } else { zerobuf[0] = 0; str = 0; //printf("INSIDE COINS.(%s) methods.%ld\n",jsonstr,sizeof(coins_methods)/sizeof(*coins_methods)); copy_cJSON(&tmp,cJSON_GetObjectItem(json,"NXT")), safecopy(sender,tmp.buf,32); if ( coinstr == 0 ) coinstr = zerobuf; else coin = coin777_find(coinstr,1); #ifdef INSIDE_MGW if ( strcmp(methodstr,"acctpubkeys") == 0 ) { if ( SUPERNET.gatewayid >= 0 ) { if ( coinstr[0] == 0 ) strcpy(retbuf,"{\"result\":\"need to specify coin\"}"); else if ( (coin= coin777_find(coinstr,1)) != 0 ) { int32_t MGW_publish_acctpubkeys(char *coinstr,char *str); char *get_msig_pubkeys(char *coinstr,char *serverport,char *userpass); if ( (str= get_msig_pubkeys(coin->name,coin->serverport,coin->userpass)) != 0 ) { MGW_publish_acctpubkeys(coin->name,str); strcpy(retbuf,"{\"result\":\"published and processed acctpubkeys\"}"); free(str), str= 0; } else sprintf(retbuf,"{\"error\":\"no get_msig_pubkeys result\",\"method\":\"%s\"}",methodstr); } else sprintf(retbuf,"{\"error\":\"no coin777\",\"method\":\"%s\"}",methodstr); } else sprintf(retbuf,"{\"error\":\"gateway only method\",\"method\":\"%s\"}",methodstr); } else if ( strcmp(methodstr,"gotmsigaddr") == 0 ) { if ( SUPERNET.gatewayid < 0 ) printf("GOTMSIG.(%s)\n",jsonstr); } else #endif sprintf(retbuf,"{\"error\":\"unsupported method\",\"method\":\"%s\"}",methodstr); } } //printf("<<<<<<<<<<<< INSIDE PLUGIN.(%s) initflag.%d process %s slice.%d\n",SUPERNET.myNXTaddr,initflag,plugin->name,COINS.slicei); return(plugin_copyretstr(retbuf,maxlen,str)); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *coinstr,*resultstr,*methodstr; struct coin777 *coin = 0; uint32_t startblocknum,endblocknum; retbuf[0] = 0; // Debuglevel = 3; printf("<<<<<<<<<<<< INSIDE PLUGIN! process %s\n",plugin->name); if ( initflag > 0 ) { strcpy(retbuf,"{\"result\":\"initflag > 0\"}"); plugin->allowremote = 1; RAMCHAINS.fastmode = get_API_int(cJSON_GetObjectItem(json,"fastmode"),0); RAMCHAINS.verifyspends = get_API_int(cJSON_GetObjectItem(json,"verifyspends"),1); //RAMCHAINS.fileincr = get_API_int(cJSON_GetObjectItem(json,"fileincr"),100L * 1000 * 1); RAMCHAINS.readyflag = 1; } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); coinstr = cJSON_str(cJSON_GetObjectItem(json,"coin")); startblocknum = get_API_int(cJSON_GetObjectItem(json,"start"),0); endblocknum = get_API_int(cJSON_GetObjectItem(json,"end"),0); if ( coinstr != 0 ) coin = coin777_find(coinstr,1); if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } printf("RAMCHAIN.(%s) for (%s) %p\n",methodstr,coinstr!=0?coinstr:"",coin); if ( coin != 0 && coinstr == 0 ) coinstr = coin->name; if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } else if ( coin != 0 ) { if ( strcmp(methodstr,"backup") == 0 ) { if ( coin->ramchain.DBs.ctl == 0 ) ramchain_init(retbuf,maxlen,coin,&coin->ramchain,json,coinstr,coin->serverport,coin->userpass,startblocknum,endblocknum,coin->minconfirms); if ( coin->ramchain.DBs.ctl != 0 ) { coin777_incrbackup(coin,0,0,0); strcpy(retbuf,"{\"result\":\"started backup\"}"); } else strcpy(retbuf,"{\"error\":\"cant create ramchain when coin not ready\"}"); } else if ( strcmp(methodstr,"resume") == 0 ) ramchain_init(retbuf,maxlen,coin,&coin->ramchain,json,coinstr,coin->serverport,coin->userpass,startblocknum,endblocknum,coin->minconfirms); else if ( strcmp(methodstr,"create") == 0 ) ramchain_init(retbuf,maxlen,coin,&coin->ramchain,json,coinstr,coin->serverport,coin->userpass,startblocknum,endblocknum,coin->minconfirms); else ramchain_func(retbuf,maxlen,coin,&coin->ramchain,json,methodstr); //else sprintf(retbuf,"{\"result\":\"no active ramchain\"}"); //printf("RAMCHAIN RETURNS.(%s)\n",retbuf); } } return((int32_t)strlen(retbuf) + retbuf[0] != 0); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *resultstr,*methodstr,*addr,*retstr = 0; struct destbuf echostr; retbuf[0] = 0; plugin->allowremote = 1; //fprintf(stderr,"<<<<<<<<<<<< INSIDE PLUGIN! process %s (%s)\n",plugin->name,jsonstr); if ( initflag > 0 ) { // configure settings strcpy(retbuf,"{\"result\":\"echodemo init\"}"); } else { resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); methodstr = cJSON_str(cJSON_GetObjectItem(json,"method")); copy_cJSON(&echostr,cJSON_GetObjectItem(json,"echostr")); retbuf[0] = 0; if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); return((int32_t)strlen(retbuf)); } if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } else if ( strcmp(methodstr,"echo") == 0 ) { sprintf(retbuf,"{\"result\":\"%s\"}",echostr.buf); } else if ( strcmp(methodstr,"passthru") == 0 ) { if ( jstr(json,"destplugin") != 0 ) { cJSON_DeleteItemFromObject(json,"plugin"); jaddstr(json,"plugin",jstr(json,"destplugin")); cJSON_DeleteItemFromObject(json,"destplugin"); } if ( jstr(json,"destmethod") != 0 ) { cJSON_DeleteItemFromObject(json,"method"); jaddstr(json,"method",jstr(json,"destmethod")); cJSON_DeleteItemFromObject(json,"destmethod"); } jaddstr(json,"pluginrequest","SuperNET"); retstr = jprint(json,0); //printf("passhru.(%s)\n",retstr); } else if ( strcmp(methodstr,"RS") == 0 ) { int32_t is_decimalstr(char *str); uint64_t RS_decode(char *rs); int32_t RS_encode(char *,uint64_t id); char rsaddr[64]; uint64_t nxt64bits = 0; if ( (addr= cJSON_str(cJSON_GetObjectItem(json,"addr"))) != 0 ) { rsaddr[0] = 0; if ( strlen(addr) > 4 ) { if ( strncmp(addr,"NXT-",4) == 0 ) { nxt64bits = RS_decode(addr); sprintf(retbuf,"{\"result\":\"success\",\"accountRS\":\"%s\",\"account\":\"%llu\"}",addr,(long long)nxt64bits); } else if ( is_decimalstr(addr) != 0 ) { nxt64bits = calc_nxt64bits(addr), RS_encode(rsaddr,nxt64bits); sprintf(retbuf,"{\"result\":\"success\",\"account\":\"%llu\",\"accountRS\":\"%s\"}",(long long)nxt64bits,rsaddr); } } else sprintf(retbuf,"{\"error\":\"illegal addr field\",\"addr\":\"%s\"}",addr); } else sprintf(retbuf,"{\"error\":\"no addr field\"}"); } } return(plugin_copyretstr(retbuf,maxlen,retstr)); }
int32_t PLUGNAME(_process_json)(char *forwarder,char *sender,int32_t valid,struct plugin_info *plugin,uint64_t tag,char *retbuf,int32_t maxlen,char *jsonstr,cJSON *json,int32_t initflag,char *tokenstr) { char *resultstr,*methodstr,*retstr = 0; retbuf[0] = 0; if ( Debuglevel > 2 ) fprintf(stderr,"<<<<<<<<<<<< INSIDE PLUGIN! process %s (%s) initflag.%d\n",plugin->name,jsonstr,initflag); if ( initflag > 0 ) { // configure settings plugin->allowremote = 1; portable_mutex_init(&plugin->mutex); init_InstantDEX(calc_nxt64bits(SUPERNET.NXTADDR),0,json); INSTANTDEX.history = txinds777_init(SUPERNET.DBPATH,"InstantDEX"); INSTANTDEX.numhist = (int32_t)INSTANTDEX.history->curitem; InstantDEX_inithistory(0,INSTANTDEX.numhist); //update_NXT_assettrades(); INSTANTDEX.readyflag = 1; strcpy(retbuf,"{\"result\":\"InstantDEX init\"}"); } else { if ( plugin_result(retbuf,json,tag) > 0 ) return((int32_t)strlen(retbuf)); resultstr = cJSON_str(cJSON_GetObjectItem(json,"result")); if ( (methodstr= cJSON_str(cJSON_GetObjectItem(json,"method"))) == 0 ) methodstr = cJSON_str(cJSON_GetObjectItem(json,"requestType")); retbuf[0] = 0; if ( methodstr == 0 || methodstr[0] == 0 ) { printf("(%s) has not method\n",jsonstr); return(0); } if ( resultstr != 0 && strcmp(resultstr,"registered") == 0 ) { plugin->registered = 1; strcpy(retbuf,"{\"result\":\"activated\"}"); } #ifdef INSIDE_MGW else if ( strcmp(methodstr,"msigaddr") == 0 ) { char *devMGW_command(char *jsonstr,cJSON *json); if ( SUPERNET.gatewayid >= 0 ) { if ( (retstr= devMGW_command(jsonstr,json)) != 0 ) { //should_forward(sender,retstr); } } //else retstr = nn_loadbalanced((uint8_t *)jsonstr,(int32_t)strlen(jsonstr)+1); } #endif else if ( strcmp(methodstr,"LSUM") == 0 ) { sprintf(retbuf,"{\"result\":\"%s\",\"amount\":%d}",(rand() & 1) ? "BUY" : "SELL",(rand() % 100) * 100000); retstr = clonestr(retbuf); } else if ( SUPERNET.iamrelay <= 1 ) { if ( strcmp(methodstr,"bid") == 0 || strcmp(methodstr,"ask") == 0 ) retstr = bidask_func(0,1,sender,json,jsonstr); else if ( strcmp(methodstr,"swap") == 0 ) retstr = swap_func(0,1,sender,json,jsonstr); //else if ( strcmp(methodstr,"shuffle") == 0 ) // retstr = shuffle_func(0,1,sender,json,jsonstr); } else retstr = clonestr("{\"result\":\"relays only relay\"}"); } return(plugin_copyretstr(retbuf,maxlen,retstr)); }