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)); }
uint64_t InstantDEX_name(char *key,int32_t *keysizep,char *exchange,char *name,char *base,uint64_t *baseidp,char *rel,uint64_t *relidp) { uint64_t baseid,relid,assetbits = 0; char *s,*str; baseid = *baseidp, relid = *relidp; //printf(">>>>>> name.(%s) (%s/%s) %llu/%llu\n",name,base,rel,(long long)baseid,(long long)relid); if ( strcmp(base,"5527630") == 0 || baseid == 5527630 ) strcpy(base,"NXT"); if ( strcmp(rel,"5527630") == 0 || relid == 5527630 ) strcpy(rel,"NXT"); if ( relid == 0 && rel[0] != 0 ) { if ( is_decimalstr(rel) != 0 ) relid = calc_nxt64bits(rel); else relid = is_MGWcoin(rel); } else if ( (str= is_MGWasset(0,relid)) != 0 ) strcpy(rel,str); if ( baseid == 0 && base[0] != 0 ) { if ( is_decimalstr(base) != 0 ) baseid = calc_nxt64bits(base); else baseid = is_MGWcoin(base); } else if ( (str= is_MGWasset(0,baseid)) != 0 ) strcpy(base,str); if ( strcmp("InstantDEX",exchange) == 0 || strcmp("nxtae",exchange) == 0 || strcmp("unconf",exchange) == 0 || (baseid != 0 && relid != 0) ) { if ( strcmp(rel,"NXT") == 0 ) s = "+", relid = stringbits("NXT"), strcpy(rel,"NXT"); else if ( strcmp(base,"NXT") == 0 ) s = "-", baseid = stringbits("NXT"), strcpy(base,"NXT"); else s = ""; if ( base[0] == 0 ) { get_assetname(base,baseid); //printf("mapped %llu -> (%s)\n",(long long)baseid,base); } if ( rel[0] == 0 ) { get_assetname(rel,relid); //printf("mapped %llu -> (%s)\n",(long long)relid,rel); } if ( name[0] == 0 ) { if ( relid == NXT_ASSETID ) sprintf(name,"%llu",(long long)baseid); else if ( baseid == NXT_ASSETID ) sprintf(name,"-%llu",(long long)relid); else sprintf(name,"%llu/%llu",(long long)baseid,(long long)relid); } } else { if ( base[0] != 0 && rel[0] != 0 && baseid == 0 && relid == 0 ) { baseid = peggy_basebits(base), relid = peggy_basebits(rel); if ( name[0] == 0 && baseid != 0 && relid != 0 ) { strcpy(name,base); // need to be smarter strcat(name,"/"); strcat(name,rel); } } if ( name[0] == 0 || baseid == 0 || relid == 0 || base[0] == 0 || rel[0] == 0 ) { if ( baseid == 0 && base[0] != 0 ) baseid = stringbits(base); else if ( baseid != 0 && base[0] == 0 ) sprintf(base,"%llu",(long long)baseid); if ( relid == 0 && rel[0] != 0 ) { relid = stringbits(rel); printf("set relid.%llu <- (%s)\n",(long long)relid,rel); } else if ( relid != 0 && rel[0] == 0 ) sprintf(rel,"%llu",(long long)relid); if ( name[0] == 0 ) strcpy(name,base), strcat(name,"/"), strcat(name,rel); } } *baseidp = baseid, *relidp = relid; *keysizep = prices777_key(key,exchange,name,base,baseid,rel,relid); //printf("<<<<<<< name.(%s) (%s/%s) %llu/%llu\n",name,base,rel,(long long)baseid,(long long)relid); return(assetbits); }