Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
5690065dee
  1. 57
      iguana/SuperNET.c

57
iguana/SuperNET.c

@ -88,7 +88,7 @@ void SuperNET_myipaddr(struct supernet_info *myinfo,struct iguana_info *coin,str
//printf("myipaddr.%s self.%x your.%x\n",myinfo->ipaddr,myinfo->myaddr.selfipbits,myinfo->myaddr.myipbits);
}
int32_t SuperNET_json2bits(struct supernet_info *myinfo,int32_t plaintext,int32_t validpub,uint8_t *serialized,int32_t *complenp,uint8_t *compressed,int32_t maxsize,char *destip,bits256 destpub,cJSON *json)
int32_t SuperNET_json2bits(struct supernet_info *myinfo,int32_t validpub,uint8_t *serialized,int32_t *complenp,uint8_t *compressed,int32_t maxsize,char *destip,bits256 destpub,cJSON *json)
{
uint16_t apinum; uint32_t ipbits,crc; uint64_t tag; bits256 priv,seed,seed2; char *hexmsg; int32_t n,numbits,len = sizeof(uint32_t);
*complenp = -1;
@ -115,16 +115,13 @@ int32_t SuperNET_json2bits(struct supernet_info *myinfo,int32_t plaintext,int32_
}
crc = calc_crc32(0,&serialized[sizeof(crc)],len - sizeof(crc));
iguana_rwnum(1,serialized,sizeof(crc),&crc);
if ( plaintext != 0 )
memset(seed2.bytes,0,sizeof(seed2));
else
{
//memset(seed.bytes,0,sizeof(seed));
//int32_t testbits = ramcoder_compress(&compressed[3],maxsize-3,serialized,len,seed);
if ( validpub != 0 )
priv = myinfo->privkey;
else priv = GENESIS_PRIVKEY;
seed = curve25519_shared(priv,destpub);
vcalc_sha256(0,seed2.bytes,seed.bytes,sizeof(seed));
}
//char str[65],str2[65],str3[65],str4[65];
//int32_t i; for (i=0; i<len; i++)
// printf("%02x ",serialized[i]);
@ -135,24 +132,24 @@ int32_t SuperNET_json2bits(struct supernet_info *myinfo,int32_t plaintext,int32_
compressed[1] = ((numbits>>8) & 0xff);
compressed[2] = ((numbits>>16) & 0xff);
//printf("strlen.%d len.%d -> %s numbits.%d\n",(int32_t)strlen(jprint(json,0)),len,bits256_str(str,seed2),(int32_t)hconv_bitlen(numbits));
if ( 1 )
if ( 0 )
{
uint8_t space[9999];
int32_t testlen = ramcoder_decompress(space,IGUANA_MAXPACKETSIZE,&compressed[3],numbits,seed2);
printf("len.%d -> testlen.%d cmp.%d\n",len,testlen,memcmp(space,serialized,testlen));
int32_t i; for (i=0; i<3+hconv_bitlen(numbits); i++)
printf("%02x ",compressed[i]);
char str[65]; printf("complen.%d seed2.%s\n",i+3,bits256_str(str,seed2));
printf("complen.%d\n",i+3);
}
*complenp = (int32_t)hconv_bitlen(numbits) + 3;
return(len);
}
cJSON *SuperNET_bits2json(struct supernet_info *myinfo,bits256 prevpub,uint8_t *serialized,uint8_t *space,int32_t datalen,int32_t iscompressed)
cJSON *SuperNET_bits2json(struct supernet_info *myinfo,int32_t validpub,bits256 prevpub,uint8_t *serialized,uint8_t *space,int32_t datalen,int32_t iscompressed)
{
static bits256 genesis2;
char destip[64],method[64],agent[64],myipaddr[64],str[65],*hexmsg; uint64_t tag;
uint16_t apinum; uint32_t destipbits,myipbits; bits256 seed,seed2,senderpub;
uint16_t apinum; uint32_t destipbits,myipbits; bits256 priv,seed,seed2,senderpub;
int32_t numbits,iter,flag=0,len = 0; uint32_t crc,checkcrc; cJSON *json = cJSON_CreateObject();
//int32_t i; for (i=0; i<datalen; i++)
// printf("%02x ",serialized[i]);
@ -166,29 +163,15 @@ cJSON *SuperNET_bits2json(struct supernet_info *myinfo,bits256 prevpub,uint8_t *
numbits = (numbits << 8) + serialized[0];
if ( hconv_bitlen(numbits)+3 == datalen )
{
//if ( validpub != 0 )
// priv = myinfo->privkey;
//else priv = GENESIS_PRIVKEY;
//seed = curve25519_shared(priv,prevpub);
for (iter=0; iter<4; iter++)
{
switch ( iter )
if ( validpub != 0 )
priv = myinfo->privkey;
else priv = GENESIS_PRIVKEY;
seed = curve25519_shared(priv,prevpub);
for (iter=0; iter<3; iter++)
{
case 0: memset(seed2.bytes,0,sizeof(seed2)); break;
case 1:
seed = curve25519_shared(myinfo->privkey,prevpub);
vcalc_sha256(0,seed2.bytes,seed.bytes,sizeof(seed));
break;
case 2:
seed = curve25519_shared(GENESIS_PRIVKEY,prevpub);
vcalc_sha256(0,seed2.bytes,seed.bytes,sizeof(seed));
break;
case 3: seed2 = genesis2; break;
}
char str[65]; printf("compressed len.%d seed2.(%s)\n",numbits,bits256_str(str,seed2));
//char str[65]; printf("compressed len.%d seed2.(%s)\n",numbits,bits256_str(str,seed2));
datalen = ramcoder_decompress(space,IGUANA_MAXPACKETSIZE,&serialized[3],numbits,seed2);
if ( datalen > sizeof(crc) && datalen < IGUANA_MAXPACKETSIZE )
{
serialized = space;
crc = calc_crc32(0,&serialized[sizeof(crc)],datalen - sizeof(crc));
iguana_rwnum(0,serialized,sizeof(checkcrc),&checkcrc);
@ -200,7 +183,7 @@ cJSON *SuperNET_bits2json(struct supernet_info *myinfo,bits256 prevpub,uint8_t *
flag = 1;
break;
}
}
seed = (iter == 0) ? curve25519_shared(GENESIS_PRIVKEY,prevpub) : genesis2;
}
}
else
@ -248,8 +231,8 @@ int32_t iguana_send_supernet(struct iguana_info *coin,struct iguana_peer *addr,c
{
compressed = malloc(sizeof(struct iguana_msghdr) + IGUANA_MAXPACKETSIZE);
serialized = malloc(sizeof(struct iguana_msghdr) + IGUANA_MAXPACKETSIZE);
datalen = SuperNET_json2bits(SuperNET_MYINFO(0),juint(json,"plaintext"),addr->validpub,&serialized[sizeof(struct iguana_msghdr)],&complen,&compressed[sizeof(struct iguana_msghdr)],IGUANA_MAXPACKETSIZE,addr->ipaddr,addr->pubkey,json);
//printf("SUPERSEND.(%s) -> (%s) delaymillis.%d datalen.%d\n",jsonstr,addr->ipaddr,delaymillis,datalen);
datalen = SuperNET_json2bits(SuperNET_MYINFO(0),addr->validpub,&serialized[sizeof(struct iguana_msghdr)],&complen,&compressed[sizeof(struct iguana_msghdr)],IGUANA_MAXPACKETSIZE,addr->ipaddr,addr->pubkey,json);
printf("SUPERSEND.(%s) -> (%s) delaymillis.%d datalen.%d\n",jsonstr,addr->ipaddr,delaymillis,datalen);
if ( datalen >= 0 )
{
if ( complen >= 0 )
@ -307,8 +290,8 @@ char *SuperNET_DHTsend(struct supernet_info *myinfo,bits256 routehash,char *hexm
if ( lastpurge >= sizeof(Packetcache)/sizeof(*Packetcache) )
lastpurge = 0;
}
mydist = 256+DHT_dist(packethash,myinfo->myaddr.iphash);
for (iter=1; iter<2; iter++)
mydist = DHT_dist(packethash,myinfo->myaddr.iphash);
for (iter=0; iter<2; iter++)
{
for (i=0; i<IGUANA_MAXCOINS; i++)
{
@ -449,7 +432,7 @@ char *SuperNET_p2p(struct iguana_info *coin,struct iguana_peer *addr,int32_t *de
*delaymillisp = 0;
if ( compressed != 0 )
space = malloc(sizeof(struct iguana_msghdr) + IGUANA_MAXPACKETSIZE);
if ( (json= SuperNET_bits2json(myinfo,addr->pubkey,data,space,datalen,compressed)) != 0 )
if ( (json= SuperNET_bits2json(myinfo,addr->validpub,addr->pubkey,data,space,datalen,compressed)) != 0 )
{
maxdelay = juint(json,"maxdelay");
printf("GOT >>>>>>>> SUPERNET P2P.(%s) from.%s\n",jprint(json,0),coin->symbol);
@ -474,7 +457,7 @@ char *SuperNET_p2p(struct iguana_info *coin,struct iguana_peer *addr,int32_t *de
free_json(json);
if ( memcmp(senderpub.bytes,GENESIS_PUBKEY.bytes,sizeof(senderpub)) != 0 )
addr->validpub = 1;
} else printf("error decoding %d from %s\n",datalen,addr->ipaddr);
}
if ( space != 0 )
free(space);
return(retstr);

Loading…
Cancel
Save