This commit is contained in:
jl777
2017-07-12 12:50:07 +02:00
parent 8ac5427300
commit b487a8fe6b
2 changed files with 59 additions and 26 deletions

View File

@@ -44,11 +44,36 @@ struct jumblr_item
char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64];
int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode
char *jumblr_issuemethod(char *usepass,char *method,char *params,uint16_t port)
{
cJSON *retjson,*resjson = 0; char *retstr;
if ( (retstr= komodo_issuemethod(userpass,method,params,port)) != 0 )
{
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
if ( jobj(retjson,"result") != 0 )
resjson = jduplicate(jobj(retjson,"result"));
else if ( jobj(retjson,"error") != 0 )
resjson = jduplicate(jobj(retjson,"error"));
else
{
resjson = cJSON_CreateObject();
jaddstr(resjson,"error","cant parse return");
}
free_json(retjson);
}
free(retstr);
}
if ( resjson != 0 )
return(jprint(resjson,1));
else return(clonestr("{\"error\":\"unknown error\"}"));
}
char *jumblr_importaddress(char *address) char *jumblr_importaddress(char *address)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\", \"%s\", false]",address,address); sprintf(params,"[\"%s\", \"%s\", false]",address,address);
return(komodo_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771));
} }
int32_t Jumblr_secretaddrfind(char *searchaddr) int32_t Jumblr_secretaddrfind(char *searchaddr)
@@ -76,16 +101,24 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external
return(Jumblr_numsecretaddrs); return(Jumblr_numsecretaddrs);
} }
char *Jumblr_depositaddradd(char *depositaddr) // external int32_t Jumblr_depositaddradd(char *depositaddr) // external
{ {
int32_t ind; int32_t ind,retal = -1; char *retstr; cJSON *retjson;
if ( depositaddr == 0 ) if ( depositaddr == 0 )
depositaddr = (char *)""; depositaddr = (char *)"";
if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 )
{ {
safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit));
return(jumblr_importaddress(depositaddr)); if ( (retstr= jumblr_importaddress(depositaddr)) != 0 )
} else return(clonestr((char *)"{\"error\":\"cant make a secret address a depositaddress\"}")); {
if ( (retjson= cJSON_Parse(retstr)) != 0 )
{
free_json(retjson);
}
free(retstr);
}
}
return(retval);
} }
int32_t Jumblr_secretaddr(char *secretaddr) int32_t Jumblr_secretaddr(char *secretaddr)
@@ -134,35 +167,35 @@ char *jumblr_validateaddress(char *addr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\"]",addr); sprintf(params,"[\"%s\"]",addr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771));
} }
char *jumblr_zgetnewaddress() char *jumblr_zgetnewaddress()
{ {
char params[1024]; char params[1024];
sprintf(params,"[]"); sprintf(params,"[]");
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771));
} }
char *jumblr_zlistoperationids() char *jumblr_zlistoperationids()
{ {
char params[1024]; char params[1024];
sprintf(params,"[]"); sprintf(params,"[]");
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771));
} }
char *jumblr_zgetoperationresult(char *opid) char *jumblr_zgetoperationresult(char *opid)
{ {
char params[1024]; char params[1024];
sprintf(params,"[[\"%s\"]]",opid); sprintf(params,"[[\"%s\"]]",opid);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationresult",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getoperationresult",params,7771));
} }
char *jumblr_zgetoperationstatus(char *opid) char *jumblr_zgetoperationstatus(char *opid)
{ {
char params[1024]; char params[1024];
sprintf(params,"[[\"%s\"]]",opid); sprintf(params,"[[\"%s\"]]",opid);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationstatus",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getoperationstatus",params,7771));
} }
char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount)
@@ -171,7 +204,7 @@ char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount)
if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' )
return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}")); return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}"));
sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771));
} }
char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount)
@@ -180,7 +213,7 @@ char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount)
if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' )
return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}")); return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}"));
sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771));
} }
char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount)
@@ -189,42 +222,42 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount)
if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' )
return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}")); return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}"));
sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771));
} }
char *jumblr_zlistreceivedbyaddress(char *addr) char *jumblr_zlistreceivedbyaddress(char *addr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\", 1]",addr); sprintf(params,"[\"%s\", 1]",addr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listreceivedbyaddress",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listreceivedbyaddress",params,7771));
} }
char *jumblr_getreceivedbyaddress(char *addr) char *jumblr_getreceivedbyaddress(char *addr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\", 1]",addr); sprintf(params,"[\"%s\", 1]",addr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"getreceivedbyaddress",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"getreceivedbyaddress",params,7771));
} }
char *jumblr_importprivkey(char *wifstr) char *jumblr_importprivkey(char *wifstr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\", \"\", false]",wifstr); sprintf(params,"[\"%s\", \"\", false]",wifstr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"importprivkey",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"importprivkey",params,7771));
} }
char *jumblr_zgetbalance(char *addr) char *jumblr_zgetbalance(char *addr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[\"%s\", 1]",addr); sprintf(params,"[\"%s\", 1]",addr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getbalance",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getbalance",params,7771));
} }
char *jumblr_listunspent(char *coinaddr) char *jumblr_listunspent(char *coinaddr)
{ {
char params[1024]; char params[1024];
sprintf(params,"[1, 99999999, [\"%s\"]]",coinaddr); sprintf(params,"[1, 99999999, [\"%s\"]]",coinaddr);
return(komodo_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771)); return(jumblr_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771));
} }
int64_t jumblr_receivedby(char *addr) int64_t jumblr_receivedby(char *addr)
@@ -248,7 +281,7 @@ int64_t jumblr_balance(char *addr)
printf("jumblr.[%s].(%s)\n","KMD",retstr); printf("jumblr.[%s].(%s)\n","KMD",retstr);
if ( (retjson= cJSON_Parse(retstr)) != 0 ) if ( (retjson= cJSON_Parse(retstr)) != 0 )
{ {
if ( (n= cJSON_GetArraySize(retjson)) > 0 ) if ( (n= cJSON_GetArraySize(retjson)) > 0 && is_cJSON_Array(retjson) != 0 )
for (i=0; i<n; i++) for (i=0; i<n; i++)
balance += SATOSHIDEN * jdouble(jitem(retjson,i),(char *)"amount"); balance += SATOSHIDEN * jdouble(jitem(retjson,i),(char *)"amount");
free_json(retjson); free_json(retjson);
@@ -318,7 +351,7 @@ void jumblr_opidupdate(struct jumblr_item *ptr)
{ {
if ( (retjson= cJSON_Parse(retstr)) != 0 ) if ( (retjson= cJSON_Parse(retstr)) != 0 )
{ {
if ( cJSON_GetArraySize(retjson) == 1 ) if ( cJSON_GetArraySize(retjson) == 1 && is_cJSON_array(retjson) != 0 )
{ {
item = jitem(retjson,0); item = jitem(retjson,0);
//printf("%s\n",jprint(item,0)); //printf("%s\n",jprint(item,0));
@@ -380,7 +413,7 @@ void jumblr_opidsupdate()
{ {
if ( (array= cJSON_Parse(retstr)) != 0 ) if ( (array= cJSON_Parse(retstr)) != 0 )
{ {
if ( (n= cJSON_GetArraySize(array)) > 0 ) if ( (n= cJSON_GetArraySize(array)) > 0 && is_cJSON_Array(array) != 0 )
{ {
printf("%s -> n%d\n",retstr,n); printf("%s -> n%d\n",retstr,n);
for (i=0; i<n; i++) for (i=0; i<n; i++)

View File

@@ -41,7 +41,7 @@ using namespace std;
* Or alternatively, create a specific query method for the information. * Or alternatively, create a specific query method for the information.
**/ **/
char *Jumblr_depositaddradd(char *depositaddr); int32_t Jumblr_depositaddradd(char *depositaddr);
int32_t Jumblr_secretaddradd(char *secretaddr); int32_t Jumblr_secretaddradd(char *secretaddr);
uint64_t komodo_interestsum(); uint64_t komodo_interestsum();
int32_t komodo_longestchain(); int32_t komodo_longestchain();
@@ -192,7 +192,7 @@ public:
UniValue jumblr_deposit(const UniValue& params, bool fHelp) UniValue jumblr_deposit(const UniValue& params, bool fHelp)
{ {
char *retstr; UniValue result(UniValue::VOBJ); int32_t retval; UniValue result(UniValue::VOBJ);
if (fHelp || params.size() != 1) if (fHelp || params.size() != 1)
throw runtime_error("jumblr_deposit \"depositaddress\"\n"); throw runtime_error("jumblr_deposit \"depositaddress\"\n");
CBitcoinAddress address(params[0].get_str()); CBitcoinAddress address(params[0].get_str());
@@ -200,9 +200,9 @@ UniValue jumblr_deposit(const UniValue& params, bool fHelp)
if ( isValid != 0 ) if ( isValid != 0 )
{ {
string addr = params[0].get_str(); string addr = params[0].get_str();
if ( (retstr= Jumblr_depositaddradd((char *)addr.c_str())) == 0 ) if ( (retval= Jumblr_depositaddradd((char *)addr.c_str())) >= 0 )
result.push_back(Pair("result", (char *)"null return from Jumblr_depositaddradd")); result.push_back(Pair("result", retval);
else result.push_back(Pair("result", retstr)); else result.push_back(Pair("error", retval));
} else result.push_back(Pair("error", "invalid address")); } else result.push_back(Pair("error", "invalid address"));
return(result); return(result);
} }