Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
5a26482eab
  1. 1
      iguana/iguana777.c
  2. 14
      iguana/iguana777.h
  3. 2
      iguana/iguana_bundles.c
  4. 2
      iguana/iguana_init.c
  5. 9
      iguana/iguana_msg.c
  6. 30
      iguana/iguana_peers.c
  7. 8
      iguana/iguana_ramchain.c
  8. 2
      iguana/iguana_recv.c
  9. 25
      iguana/ramchain_api.c
  10. 1
      includes/iguana_apideclares.h

1
iguana/iguana777.c

@ -402,7 +402,6 @@ void iguana_coinloop(void *arg)
{
//printf("metrics\n");
coin->peers.lastmetrics = iguana_updatemetrics(coin); // ranks peers
coin->lastpossible = iguana_possible_peer(coin,0); // tries to connect to new peers
}
//printf("process\n");
iguana_bundlestats(coin,str);

14
iguana/iguana777.h

@ -232,7 +232,7 @@ struct iguana_kvitem { UT_hash_handle hh; uint8_t keyvalue[]; } __attribute__((p
struct iguana_iAddr
{
UT_hash_handle hh; uint32_t ipbits;
UT_hash_handle hh; uint64_t ipbits;
uint32_t lastkilled,lastconnect;
int32_t status,height,numkilled,numconnects;
};
@ -355,8 +355,8 @@ struct iguana_peer
queue_t sendQ;
struct iguana_msgaddress A;
char ipaddr[64],lastcommand[16],coinstr[16],symbol[16];
uint64_t pingnonce,totalsent,totalrecv; double pingtime,sendmillis,pingsum,getdatamillis;
uint32_t lastcontact,sendtime,ready,startsend,startrecv,pending,ipbits,lastgotaddr,lastblockrecv,pendtime,lastflush,lastpoll;
uint64_t pingnonce,totalsent,totalrecv,ipbits; double pingtime,sendmillis,pingsum,getdatamillis;
uint32_t lastcontact,sendtime,ready,startsend,startrecv,pending,lastgotaddr,lastblockrecv,pendtime,lastflush,lastpoll;
int32_t supernet,dead,addrind,usock,lastheight,protover,relayflag,numpackets,numpings,ipv6,height,rank,pendhdrs,pendblocks,recvhdrs,lastlefti;
double recvblocks,recvtotal;
int64_t allocated,freed;
@ -453,14 +453,12 @@ int32_t iguana_verifypeer(struct iguana_info *coin,void *key,void *value,int32_t
int32_t iguana_peermetrics(struct iguana_info *coin);
void iguana_peersloop(void *arg);
int32_t iguana_queue_send(struct iguana_info *coin,struct iguana_peer *addr,int32_t delay,uint8_t *serialized,char *cmd,int32_t len,int32_t getdatablock,int32_t forceflag);
uint32_t iguana_ipbits2ind(struct iguana_info *coin,struct iguana_iAddr *iA,uint32_t ipbits,int32_t createflag);
uint32_t iguana_rwiAddrind(struct iguana_info *coin,int32_t rwflag,struct iguana_iAddr *iA,uint32_t ind);
//uint32_t iguana_rwipbits_status(struct iguana_info *coin,int32_t rwflag,uint32_t ipbits,int32_t *statusp);
void iguana_connections(void *arg);
uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr);
uint32_t iguana_possible_peer(struct iguana_info *coin,char *ip_port);
//int32_t iguana_set_iAddrheight(struct iguana_info *coin,uint32_t ipbits,int32_t height);
//struct iguana_peer *iguana_choosepeer(struct iguana_info *coin);
void iguana_initpeer(struct iguana_info *coin,struct iguana_peer *addr,uint32_t ipbits);
void iguana_initpeer(struct iguana_info *coin,struct iguana_peer *addr,uint64_t ipbits);
void iguana_startconnection(void *arg);
void iguana_shutdownpeers(struct iguana_info *coin,int32_t forceflag);
void iguana_acceptloop(void *args);
@ -660,7 +658,7 @@ int32_t iguana_scriptgen(struct iguana_info *coin,uint8_t *script,char *asmstr,s
int32_t iguana_ramchain_spendtxid(struct iguana_info *coin,bits256 *txidp,struct iguana_txid *T,int32_t numtxids,bits256 *X,int32_t numexternaltxids,struct iguana_spend *s);
struct iguana_info *iguana_coinselect();
void iguana_dedicatedloop(struct iguana_info *coin,struct iguana_peer *addr);
struct iguana_peer *iguana_peerslot(struct iguana_info *coin,uint32_t ipbits);
struct iguana_peer *iguana_peerslot(struct iguana_info *coin,uint64_t ipbits);
char *busdata_sync(uint32_t *noncep,char *jsonstr,char *broadcastmode,char *destNXTaddr);
void peggy();

2
iguana/iguana_bundles.c

@ -348,7 +348,7 @@ void iguana_bundlepurge(struct iguana_info *coin,struct iguana_bundle *bp)
{
for (j=m=0; j<sizeof(coin->peers.active)/sizeof(*coin->peers.active); j++)
{
if ( (ipbits= coin->peers.active[j].ipbits) != 0 )
if ( (ipbits= (uint32_t)coin->peers.active[j].ipbits) != 0 )
{
if ( iguana_peerfname(coin,&hdrsi,"tmp",fname,ipbits,bp->hashes[0],zero,1) >= 0 )
{

2
iguana/iguana_init.c

@ -38,7 +38,7 @@ void iguana_initQs(struct iguana_info *coin)
iguana_initQ(&coin->peers.active[i].sendQ,"addrsendQ");
}
void iguana_initpeer(struct iguana_info *coin,struct iguana_peer *addr,uint32_t ipbits)
void iguana_initpeer(struct iguana_info *coin,struct iguana_peer *addr,uint64_t ipbits)
{
memset(addr,0,sizeof(*addr));
addr->ipbits = ipbits;

9
iguana/iguana_msg.c

@ -191,11 +191,14 @@ void iguana_gotverack(struct iguana_info *coin,struct iguana_peer *addr)
void iguana_gotaddr(struct iguana_info *coin,struct iguana_peer *addr,struct iguana_msgaddress *A)
{
char ipaddr[64]; uint32_t ipbits;
char ipaddr[64],ipport[64]; uint32_t ipbits; uint16_t port;
iguana_rwnum(0,&A->ip[12],sizeof(uint32_t),&ipbits);
iguana_rwnum(0,(void *)&A->port,sizeof(uint16_t),&port);
expand_ipbits(ipaddr,ipbits);
iguana_possible_peer(coin,ipaddr);
//printf("gotaddr.(%s)\n",ipaddr);
if ( port != 0 )
sprintf(ipport,"%s:%d",ipaddr,port);
iguana_possible_peer(coin,ipport);
printf("gotaddr.(%s:%d)\n",ipaddr,port);
}
void iguana_gotping(struct iguana_info *coin,struct iguana_peer *addr,uint64_t nonce,uint8_t *data)

30
iguana/iguana_peers.c

@ -16,9 +16,9 @@
#include "iguana777.h"
#define _iguana_hashfind(coin,ipbits) _iguana_hashset(coin,ipbits,-1)
struct iguana_iAddr *iguana_iAddrhashfind(struct iguana_info *coin,uint32_t ipbits,int32_t createflag);
struct iguana_iAddr *iguana_iAddrhashfind(struct iguana_info *coin,uint64_t ipbits,int32_t createflag);
struct iguana_iAddr *_iguana_hashset(struct iguana_info *coin,uint32_t ipbits,int32_t itemind)
struct iguana_iAddr *_iguana_hashset(struct iguana_info *coin,uint64_t ipbits,int32_t itemind)
{
struct iguana_iAddr *ptr = 0; int32_t allocsize; char str[65]; struct OS_memspace *mem = 0;
expand_ipbits(str,ipbits);
@ -56,7 +56,7 @@ struct iguana_iAddr *iguana_iAddrhashset(struct iguana_info *coin,struct iguana_
struct iguana_iAddr *tmp,*item;
if ( iA == 0 || iA->ipbits == 0 )
{
printf("null iA.%p or ipbits.%x ind.%d status.%d\n",iA,iA!=0?iA->ipbits:0,iA!=0?iA->hh.itemind:0,iA!=0?iA->status:0);
printf("null iA.%p or ipbits.%llx ind.%d status.%d\n",iA,iA!=0?(long long)iA->ipbits:0,iA!=0?iA->hh.itemind:0,iA!=0?iA->status:0);
exit(-1);
return(0);
}
@ -87,7 +87,7 @@ struct iguana_iAddr *iguana_iAddrhashset(struct iguana_info *coin,struct iguana_
return(iA);
}
struct iguana_iAddr *iguana_iAddrhashfind(struct iguana_info *coin,uint32_t ipbits,int32_t createflag)
struct iguana_iAddr *iguana_iAddrhashfind(struct iguana_info *coin,uint64_t ipbits,int32_t createflag)
{
int32_t ind; struct iguana_iAddr *item = 0;
portable_mutex_lock(&coin->peers_mutex);
@ -253,7 +253,7 @@ void iguana_iAkill(struct iguana_info *coin,struct iguana_peer *addr,int32_t mar
int32_t iguana_socket(int32_t bindflag,char *hostname,uint16_t port)
{
int32_t opt,sock,result; uint32_t ipbits; char ipaddr[64]; struct timeval timeout;
int32_t opt,sock,result; uint64_t ipbits; char ipaddr[64]; struct timeval timeout;
struct sockaddr_in saddr; socklen_t addrlen,slen;
addrlen = sizeof(saddr);
struct hostent *hostent = gethostbyname(hostname);
@ -265,7 +265,7 @@ int32_t iguana_socket(int32_t bindflag,char *hostname,uint16_t port)
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
memcpy(&saddr.sin_addr.s_addr,hostent->h_addr_list[0],hostent->h_length);
ipbits = (uint32_t)calc_ipbits(hostname);
ipbits = calc_ipbits(hostname);
//printf("ipbits.%08x vs %08x\n",ipbits,saddr.sin_addr.s_addr);
expand_ipbits(ipaddr,saddr.sin_addr.s_addr);
//if ( bindflag != 0 )
@ -524,7 +524,7 @@ void iguana_gotdata(struct iguana_info *coin,struct iguana_peer *addr,int32_t he
coin->longestchain = height;
}
int32_t iguana_iAddrheight(struct iguana_info *coin,uint32_t ipbits)
int32_t iguana_iAddrheight(struct iguana_info *coin,uint64_t ipbits)
{
struct iguana_iAddr *iA;
if ( (iA= iguana_iAddrhashfind(coin,ipbits,0)) != 0 )
@ -534,7 +534,7 @@ int32_t iguana_iAddrheight(struct iguana_info *coin,uint32_t ipbits)
void iguana_startconnection(void *arg)
{
int32_t i,n; char ipaddr[64]; struct iguana_peer *addr = arg; struct iguana_info *coin = 0;
int32_t i,n; uint16_t port; char ipaddr[64]; struct iguana_peer *addr = arg; struct iguana_info *coin = 0;
if ( addr == 0 || (coin= iguana_coinfind(addr->symbol)) == 0 )
{
printf("iguana_startconnection nullptrs addr.%p coin.%p\n",addr,coin);
@ -559,8 +559,10 @@ void iguana_startconnection(void *arg)
}
//printf("startconnection.(%s) pending.%u usock.%d addrind.%d\n",addr->ipaddr,addr->pending,addr->usock,addr->addrind);
addr->pending = (uint32_t)time(NULL);
if ( (port= (uint16_t)(addr->ipbits >> 32)) == 0 )
port = coin->chain->portp2p;
if ( addr->usock < 0 )
addr->usock = iguana_socket(0,addr->ipaddr,coin->chain->portp2p);
addr->usock = iguana_socket(0,addr->ipaddr,port);
if ( addr->usock < 0 || coin->peers.shuttingdown != 0 )
{
strcpy(ipaddr,addr->ipaddr);
@ -570,7 +572,7 @@ void iguana_startconnection(void *arg)
else
{
addr->ready = (uint32_t)time(NULL);
addr->ipbits = (uint32_t)calc_ipbits(addr->ipaddr);
addr->ipbits = calc_ipbits(addr->ipaddr);
addr->dead = 0;
addr->pending = 0;
addr->height = iguana_iAddrheight(coin,addr->ipbits);
@ -592,7 +594,7 @@ void iguana_startconnection(void *arg)
}
}
struct iguana_peer *iguana_peerslot(struct iguana_info *coin,uint32_t ipbits)
struct iguana_peer *iguana_peerslot(struct iguana_info *coin,uint64_t ipbits)
{
int32_t i; struct iguana_peer *addr; char ipaddr[64];
expand_ipbits(ipaddr,ipbits);
@ -653,7 +655,7 @@ void *iguana_iAddriterator(struct iguana_info *coin,struct iguana_iAddr *iA)
uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
{
char checkaddr[64]; uint32_t ipbits,now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA;
char checkaddr[64]; uint64_t ipbits; uint32_t now = (uint32_t)time(NULL); int32_t i,n; struct iguana_iAddr *iA;
if ( ipaddr != 0 )
{
//printf("%p Q possible peer.(%s)\n",coin,ipaddr);
@ -685,12 +687,12 @@ uint32_t iguana_possible_peer(struct iguana_info *coin,char *ipaddr)
return((uint32_t)time(NULL));
if ( strncmp("0.0.0",ipaddr,5) != 0 && strcmp("0.0.255.255",ipaddr) != 0 && strcmp("1.0.0.0",ipaddr) != 0 )
{
if ( (ipbits= (uint32_t)calc_ipbits(ipaddr)) != 0 )
if ( (ipbits= calc_ipbits(ipaddr)) != 0 )
{
expand_ipbits(checkaddr,ipbits);
if ( strcmp(checkaddr,ipaddr) == 0 )
{
//printf("valid ipaddr.(%s) MAXPEERS.%d\n",ipaddr,coin->MAXPEERS);
printf("valid ipaddr.(%s) MAXPEERS.%d\n",ipaddr,coin->MAXPEERS);
if ( (iA= iguana_iAddrhashfind(coin,ipbits,1)) != 0 )
{
if ( iA->status != IGUANA_PEER_CONNECTING && iA->status != IGUANA_PEER_READY && iA->status != IGUANA_PEER_ELIGIBLE )

8
iguana/iguana_ramchain.c

@ -268,7 +268,7 @@ int32_t iguana_peerfname(struct iguana_info *coin,int32_t *hdrsip,char *dirname,
int32_t iguana_peerfile_exists(struct iguana_info *coin,struct iguana_peer *addr,char *dirname,char *fname,bits256 hash2,bits256 prevhash2,int32_t numblocks)
{
FILE *fp; int32_t bundlei,hdrsi;
if ( (bundlei= iguana_peerfname(coin,&hdrsi,dirname,fname,addr!=0?addr->ipbits:0,hash2,prevhash2,numblocks)) >= 0 )
if ( (bundlei= iguana_peerfname(coin,&hdrsi,dirname,fname,addr!=0?(uint32_t)addr->ipbits:0,hash2,prevhash2,numblocks)) >= 0 )
{
OS_compatible_path(fname);
if ( (fp= fopen(fname,"rb")) == 0 )
@ -1493,7 +1493,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru
if ( (err= iguana_ramchain_verify(coin,ramchain)) == 0 )
{
B[0] = origtxdata->block.RO;
if ( (fpos= (int32_t)iguana_ramchain_save(coin,RAMCHAIN_ARG,addr->ipbits,origtxdata->block.RO.hash2,origtxdata->block.RO.prev_block,bundlei,0)) >= 0 )
if ( (fpos= (int32_t)iguana_ramchain_save(coin,RAMCHAIN_ARG,(uint32_t)addr->ipbits,origtxdata->block.RO.hash2,origtxdata->block.RO.prev_block,bundlei,0)) >= 0 )
{
//printf("set fpos.%d\n",fpos);
//bp->ipbits[bundlei] = addr->ipbits;
@ -1501,7 +1501,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru
ramchain->H.ROflag = 0;
flag = 1;
memset(&R,0,sizeof(R));
if ( verifyflag != 0 && (mapchain= iguana_ramchain_map(coin,fname,0,1,&R,0,addr->ipbits,origtxdata->block.RO.hash2,origtxdata->block.RO.prev_block,bundlei,fpos,1,0)) != 0 )
if ( verifyflag != 0 && (mapchain= iguana_ramchain_map(coin,fname,0,1,&R,0,(uint32_t)addr->ipbits,origtxdata->block.RO.hash2,origtxdata->block.RO.prev_block,bundlei,fpos,1,0)) != 0 )
{
//printf("mapped Soffset.%ld\n",(long)mapchain->data->Soffset);
iguana_ramchain_link(&R,origtxdata->block.RO.hash2,origtxdata->block.RO.hash2,bp->hdrsi,bp->bundleheight+bundlei,bundlei,1,firsti,1);
@ -1540,7 +1540,7 @@ long iguana_ramchain_data(struct iguana_info *coin,struct iguana_peer *addr,stru
bp->numspends += ramchain->H.data->numspends;
}
if ( fpos >= 0 )
block->fpos = fpos, block->fpipbits = addr->ipbits;
block->fpos = fpos, block->fpipbits = (uint32_t)addr->ipbits;
}
} else printf("ramchain verification error.%d hdrsi.%d bundlei.%d\n",err,bp->hdrsi,bundlei);
}

2
iguana/iguana_recv.c

@ -159,7 +159,7 @@ void iguana_gotblockM(struct iguana_info *coin,struct iguana_peer *addr,struct i
addr->recvtotal += recvlen;
if ( iguana_ramchain_data(coin,addr,origtxdata,txarray,origtxdata->block.RO.txn_count,data,recvlen) >= 0 )
{
txdata->block.fpipbits = addr->ipbits;
txdata->block.fpipbits = (uint32_t)addr->ipbits;
req->datalen = txdata->datalen;
req->ipbits = txdata->block.fpipbits;
if ( 0 )

25
iguana/ramchain_api.c

@ -16,21 +16,46 @@
#include "iguana777.h"
#include "../includes/iguana_apidefs.h"
ZERO_ARGS(ramchain,getpeers)
{
int32_t i,r,j,iter,n; struct iguana_peer *addr; cJSON *array = cJSON_CreateArray();
cJSON *retjson = cJSON_CreateObject();
r = rand();
for (iter=n=0; iter<2; iter++)
{
for (j=0; j<IGUANA_MAXPEERS; j++)
{
i = (r + j) % IGUANA_MAXPEERS;
addr = &coin->peers.active[i];
if ( addr->usock >= 0 && (iter == 1 || addr->supernet != 0) )
{
jaddistr(array,addr->ipaddr);
if ( ++n >= 64 )
break;
}
}
}
return(jprint(retjson,1));
}
ZERO_ARGS(ramchain,getinfo)
{
cJSON *retjson = cJSON_CreateObject();
jaddstr(retjson,"result",coin->statusstr);
return(jprint(retjson,1));
}
ZERO_ARGS(ramchain,getbestblockhash)
{
cJSON *retjson = cJSON_CreateObject();
char str[65]; jaddstr(retjson,"result",bits256_str(str,coin->blocks.hwmchain.RO.hash2));
return(jprint(retjson,1));
}
ZERO_ARGS(ramchain,getblockcount)
{
cJSON *retjson = cJSON_CreateObject();
jaddnum(retjson,"result",coin->blocks.hwmchain.height);
return(jprint(retjson,1));
}

1
includes/iguana_apideclares.h

@ -28,6 +28,7 @@ TWO_STRINGS(iguana,removenode,activecoin,ipaddr);
TWO_STRINGS(iguana,oneshot,activecoin,ipaddr);
TWO_STRINGS(iguana,nodestatus,activecoin,ipaddr);
ZERO_ARGS(ramchain,getpeers);
ZERO_ARGS(ramchain,getinfo);
ZERO_ARGS(ramchain,getbestblockhash);
ZERO_ARGS(ramchain,getblockcount);

Loading…
Cancel
Save