Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
a69fc3ab45
  1. 68
      basilisk/basilisk.c
  2. 2
      basilisk/basilisk.h
  3. 2
      iguana/main.c

68
basilisk/basilisk.c

@ -80,37 +80,28 @@ uint8_t *get_dataptr(int32_t hdroffset,uint8_t **ptrp,int32_t *datalenp,uint8_t
uint8_t *basilisk_jsondata(int32_t extraoffset,uint8_t **ptrp,uint8_t *space,int32_t spacesize,int32_t *datalenp,char *symbol,cJSON *sendjson,uint32_t basilisktag) uint8_t *basilisk_jsondata(int32_t extraoffset,uint8_t **ptrp,uint8_t *space,int32_t spacesize,int32_t *datalenp,char *symbol,cJSON *sendjson,uint32_t basilisktag)
{ {
char *sendstr,*hexstr; uint8_t *data; bits256 hash; int32_t i,datalen,hexlen=0,havehash=1; char *sendstr,*hexstr; uint8_t *data; int32_t datalen,hexlen=0;
if ( jobj(sendjson,"coin") == 0 ) if ( jobj(sendjson,"coin") == 0 )
jaddstr(sendjson,"coin",symbol); jaddstr(sendjson,"coin",symbol);
if ( jobj(sendjson,"hash") != 0 ) if ( (hexstr= jstr(sendjson,"data")) != 0 )
{ {
havehash = 1; if ( (hexlen= is_hexstr(hexstr,0)) > 0 )
hash = jbits256(sendjson,"hash"); hexlen >>= 1;
jdelete(sendjson,"data");
} }
if ( (hexstr= jstr(sendjson,"data")) != 0 && (hexlen= is_hexstr(hexstr,0)) > 0 )
hexlen >>= 1;
*ptrp = 0; *ptrp = 0;
sendstr = jprint(sendjson,0); sendstr = jprint(sendjson,0);
datalen = (int32_t)strlen(sendstr) + 1; datalen = (int32_t)strlen(sendstr) + 1;
if ( (datalen + extraoffset + BASILISK_HDROFFSET + hexlen + havehash*(sizeof(hash)+1)) <= spacesize ) if ( (datalen + extraoffset + BASILISK_HDROFFSET + hexlen) <= spacesize )
data = space; data = space;
else else
{ {
data = calloc(1,datalen + extraoffset + BASILISK_HDROFFSET + hexlen + havehash*(sizeof(hash)+1)); data = calloc(1,datalen + extraoffset + BASILISK_HDROFFSET + hexlen);
*ptrp = data; *ptrp = data;
} }
data += extraoffset + BASILISK_HDROFFSET; data += extraoffset + BASILISK_HDROFFSET;
memcpy(data,sendstr,datalen); memcpy(data,sendstr,datalen);
free(sendstr); free(sendstr);
if ( havehash != 0 || hexlen != 0 )
{
if ( (data[datalen++]= havehash) != 0 )
{
for (i=0; i<32; i++)
data[datalen++] = hash.bytes[i];
}
}
if ( hexlen > 0 ) if ( hexlen > 0 )
{ {
decode_hex(&data[datalen],hexlen,hexstr); decode_hex(&data[datalen],hexlen,hexstr);
@ -159,7 +150,7 @@ struct basilisk_item *basilisk_itemcreate(struct supernet_info *myinfo,char *CMD
int32_t basilisk_sendcmd(struct supernet_info *myinfo,char *destipaddr,char *type,uint32_t *basilisktagp,int32_t encryptflag,int32_t delaymillis,uint8_t *data,int32_t datalen,int32_t fanout,uint32_t nBits) // data must be offset by sizeof(iguana_msghdr)+sizeof(basilisktag) int32_t basilisk_sendcmd(struct supernet_info *myinfo,char *destipaddr,char *type,uint32_t *basilisktagp,int32_t encryptflag,int32_t delaymillis,uint8_t *data,int32_t datalen,int32_t fanout,uint32_t nBits) // data must be offset by sizeof(iguana_msghdr)+sizeof(basilisktag)
{ {
int32_t i,r,l,s,val,n=0,offset,havehash=0,retval = -1; char cmd[12]; struct iguana_info *coin,*tmp; struct iguana_peer *addr; bits256 hash; uint32_t *alreadysent; int32_t i,r,l,s,val,n=0,retval = -1; char cmd[12]; struct iguana_info *coin,*tmp; struct iguana_peer *addr; bits256 hash; uint32_t *alreadysent;
if ( fanout <= 0 ) if ( fanout <= 0 )
fanout = BASILISK_MINFANOUT; fanout = BASILISK_MINFANOUT;
else if ( fanout > BASILISK_MAXFANOUT ) else if ( fanout > BASILISK_MAXFANOUT )
@ -179,23 +170,18 @@ int32_t basilisk_sendcmd(struct supernet_info *myinfo,char *destipaddr,char *typ
{ {
printf("return after locally basilisk_msgprocess\n"); printf("return after locally basilisk_msgprocess\n");
hash = GENESIS_PUBKEY; hash = GENESIS_PUBKEY;
if ( datalen > 0 ) basilisk_msgprocess(myinfo,0,0,type,*basilisktagp,data,datalen);
{
if ( (havehash= *data) != 0 )
{
for (i=0; i<32; i++)
hash.bytes[i] = data[i + 1];
}
}
offset = (int32_t)(havehash * (1 + sizeof(bits256)));
basilisk_msgprocess(myinfo,0,0,type,*basilisktagp,data+offset,datalen-offset,hash);
return(0); return(0);
} }
} }
alreadysent = calloc(IGUANA_MAXPEERS * IGUANA_MAXCOINS,sizeof(*alreadysent)); alreadysent = calloc(IGUANA_MAXPEERS * IGUANA_MAXCOINS,sizeof(*alreadysent));
iguana_rwnum(1,&data[-sizeof(*basilisktagp)],sizeof(*basilisktagp),basilisktagp); iguana_rwnum(1,&data[-sizeof(*basilisktagp)],sizeof(*basilisktagp),basilisktagp);
if ( nBits != 0 && *basilisktagp == 0 ) if ( *basilisktagp == 0 )
*basilisktagp = basilisk_calcnonce(myinfo,data,datalen,nBits); {
if ( nBits != 0 )
*basilisktagp = basilisk_calcnonce(myinfo,data,datalen,nBits);
else *basilisktagp = rand();
}
data -= sizeof(*basilisktagp), datalen += sizeof(*basilisktagp); data -= sizeof(*basilisktagp), datalen += sizeof(*basilisktagp);
memset(cmd,0,sizeof(cmd)); memset(cmd,0,sizeof(cmd));
sprintf(cmd,"SuperNET%s",type); sprintf(cmd,"SuperNET%s",type);
@ -274,9 +260,8 @@ int32_t basilisk_blocksubmit(struct supernet_info *myinfo,struct iguana_info *vi
void basilisk_p2p(void *_myinfo,void *_addr,char *senderip,uint8_t *data,int32_t datalen,char *type,int32_t encrypted) void basilisk_p2p(void *_myinfo,void *_addr,char *senderip,uint8_t *data,int32_t datalen,char *type,int32_t encrypted)
{ {
uint32_t ipbits,basilisktag; int32_t i,havehash,msglen,len=0; void *ptr = 0; uint8_t space[8192]; bits256 senderpub,hash,tmp,hash2; struct supernet_info *myinfo = _myinfo; uint32_t ipbits,basilisktag; int32_t msglen,len=0; void *ptr = 0; uint8_t space[8192]; bits256 senderpub; struct supernet_info *myinfo = _myinfo;
hash = GENESIS_PUBKEY; printf("received.%d basilisk_p2p.(%s) from %s\n",datalen,type,senderip!=0?senderip:"?");
printf("received basilisk_p2p.(%s) from %s\n",type,senderip!=0?senderip:"?");
if ( encrypted != 0 ) if ( encrypted != 0 )
{ {
memset(senderpub.bytes,0,sizeof(senderpub)); memset(senderpub.bytes,0,sizeof(senderpub));
@ -289,18 +274,8 @@ void basilisk_p2p(void *_myinfo,void *_addr,char *senderip,uint8_t *data,int32_t
if ( senderip != 0 && senderip[0] != 0 && strcmp(senderip,"127.0.0.1") != 0 ) if ( senderip != 0 && senderip[0] != 0 && strcmp(senderip,"127.0.0.1") != 0 )
ipbits = (uint32_t)calc_ipbits(senderip); ipbits = (uint32_t)calc_ipbits(senderip);
else ipbits = 0; else ipbits = 0;
len += iguana_rwnum(0,&data[len],sizeof(basilisktag),&basilisktag); len += iguana_rwnum(0,data,sizeof(basilisktag),&basilisktag);
if ( datalen > len && (havehash= data[len]) != 0 ) basilisk_msgprocess(myinfo,_addr,ipbits,type,basilisktag,&data[len],datalen - len);
{
vcalc_sha256(0,tmp.bytes,&data[len],datalen - len);
tmp.uints[0] = basilisktag;
vcalc_sha256(0,hash2.bytes,tmp.bytes,sizeof(tmp));
for (i=0; i<32; i++)
hash.bytes[i] = data[len + i + 1];
}
if ( bits256_nonz(hash) == 0 )
hash = GENESIS_PUBKEY;
basilisk_msgprocess(myinfo,_addr,ipbits,type,basilisktag,&data[len],datalen - len,hash);
if ( ptr != 0 ) if ( ptr != 0 )
free(ptr); free(ptr);
} }
@ -943,9 +918,9 @@ void basilisk_wait(struct supernet_info *myinfo,struct iguana_info *coin)
} }
} }
void basilisk_msgprocess(struct supernet_info *myinfo,void *addr,uint32_t senderipbits,char *type,uint32_t basilisktag,uint8_t *data,int32_t datalen,bits256 hash) void basilisk_msgprocess(struct supernet_info *myinfo,void *addr,uint32_t senderipbits,char *type,uint32_t basilisktag,uint8_t *data,int32_t datalen)
{ {
cJSON *valsobj; char *symbol,*retstr=0,remoteaddr[64],CMD[4],cmd[4]; int32_t origlen,from_basilisk,i,timeoutmillis,flag,numrequired,jsonlen; uint8_t *origdata; struct iguana_info *coin=0; cJSON *valsobj; char *symbol,*retstr=0,remoteaddr[64],CMD[4],cmd[4]; int32_t origlen,from_basilisk,i,timeoutmillis,flag,numrequired,jsonlen; uint8_t *origdata; struct iguana_info *coin=0; bits256 hash;
static basilisk_servicefunc *basilisk_services[][2] = static basilisk_servicefunc *basilisk_services[][2] =
{ {
{ (void *)"RUN", &basilisk_respond_dispatch }, // higher level protocol handler, pass through { (void *)"RUN", &basilisk_respond_dispatch }, // higher level protocol handler, pass through
@ -1014,6 +989,7 @@ void basilisk_msgprocess(struct supernet_info *myinfo,void *addr,uint32_t sender
} else data = 0, datalen = 0; } else data = 0, datalen = 0;
if ( (symbol= jstr(valsobj,"coin")) == 0 ) if ( (symbol= jstr(valsobj,"coin")) == 0 )
symbol = "BTCD"; symbol = "BTCD";
hash = jbits256(valsobj,"hash");
timeoutmillis = jint(valsobj,"timeout"); timeoutmillis = jint(valsobj,"timeout");
if ( (numrequired= jint(valsobj,"numrequired")) == 0 ) if ( (numrequired= jint(valsobj,"numrequired")) == 0 )
numrequired = 1; numrequired = 1;

2
basilisk/basilisk.h

@ -45,7 +45,7 @@ struct basilisk_info
struct basilisk_value values[8192]; int32_t numvalues; struct basilisk_value values[8192]; int32_t numvalues;
}; };
void basilisk_msgprocess(struct supernet_info *myinfo,void *addr,uint32_t senderipbits,char *type,uint32_t basilisktag,uint8_t *data,int32_t datalen,bits256 pubkey); void basilisk_msgprocess(struct supernet_info *myinfo,void *addr,uint32_t senderipbits,char *type,uint32_t basilisktag,uint8_t *data,int32_t datalen);
int32_t basilisk_sendcmd(struct supernet_info *myinfo,char *destipaddr,char *type,uint32_t *basilisktagp,int32_t encryptflag,int32_t delaymillis,uint8_t *data,int32_t datalen,int32_t fanout,uint32_t nBits); // data must be offset by sizeof(iguana_msghdr)+sizeof(basilisktag) int32_t basilisk_sendcmd(struct supernet_info *myinfo,char *destipaddr,char *type,uint32_t *basilisktagp,int32_t encryptflag,int32_t delaymillis,uint8_t *data,int32_t datalen,int32_t fanout,uint32_t nBits); // data must be offset by sizeof(iguana_msghdr)+sizeof(basilisktag)
void basilisks_init(struct supernet_info *myinfo); void basilisks_init(struct supernet_info *myinfo);

2
iguana/main.c

@ -1150,7 +1150,7 @@ void iguana_appletests(struct supernet_info *myinfo)
bitcoin_sharedsecret(myinfo->ctx,hash2,pubkey,33); bitcoin_sharedsecret(myinfo->ctx,hash2,pubkey,33);
printf("secp256k1 elapsed %.3f for %d iterations\n",OS_milliseconds() - startmillis,i); printf("secp256k1 elapsed %.3f for %d iterations\n",OS_milliseconds() - startmillis,i);
getchar();**/ getchar();**/
if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"protover\":70002,\"RELAY\":1,\"VALIDATE\":1,\"portp2p\":14631,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":128,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":4,\"poll\":1}"),0,myinfo->rpcport)) != 0 ) if ( 1 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"protover\":70002,\"RELAY\":0,\"VALIDATE\":0,\"portp2p\":14631,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":64,\"endpend\":64,\"services\":129,\"maxpeers\":128,\"newcoin\":\"BTCD\",\"active\":1,\"numhelpers\":4,\"poll\":1}"),0,myinfo->rpcport)) != 0 )
{ {
free(str); free(str);
if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"portp2p\":8333,\"RELAY\":0,\"VALIDATE\":0,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":1,\"endpend\":1,\"services\":128,\"maxpeers\":64,\"newcoin\":\"BTC\",\"active\":0,\"numhelpers\":4,\"poll\":100}"),0,myinfo->rpcport)) != 0 ) if ( 0 && (str= SuperNET_JSON(myinfo,cJSON_Parse("{\"portp2p\":8333,\"RELAY\":0,\"VALIDATE\":0,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":1,\"endpend\":1,\"services\":128,\"maxpeers\":64,\"newcoin\":\"BTC\",\"active\":0,\"numhelpers\":4,\"poll\":100}"),0,myinfo->rpcport)) != 0 )

Loading…
Cancel
Save