jl777 8 years ago
parent
commit
61b3c3a9f1
  1. 49
      iguana/dpow/dpow_network.c

49
iguana/dpow/dpow_network.c

@ -56,29 +56,42 @@ static int _increasing_ipbits(const void *a,const void *b)
#undef uint32_b #undef uint32_b
} }
int32_t dpow_addnotary(struct supernet_info *myinfo,char *ipaddr) int32_t dpow_addnotary(struct supernet_info *myinfo,struct dpow_info *dp,char *ipaddr)
{ {
char str[512]; uint32_t ipbits; int32_t i,n,retval = -1; char str[512]; uint32_t ipbits,*ptr; int32_t i,iter,n,retval = -1;
if ( myinfo->dpowsock >= 0 && strcmp(ipaddr,myinfo->ipaddr) != 0 ) if ( myinfo->dpowsock >= 0 && strcmp(ipaddr,myinfo->ipaddr) != 0 )
{ {
portable_mutex_lock(&myinfo->dpowmutex); portable_mutex_lock(&myinfo->dpowmutex);
n = myinfo->numdpowipbits;
ipbits = (uint32_t)calc_ipbits(ipaddr); ipbits = (uint32_t)calc_ipbits(ipaddr);
for (i=0; i<n; i++) for (iter=0; iter<2; iter++)
if ( ipbits == myinfo->dpowipbits[i] )
break;
if ( i == n && n < sizeof(myinfo->dpowipbits)/sizeof(*myinfo->dpowipbits) )
{ {
myinfo->dpowipbits[n] = ipbits; if ( iter == 0 )
retval = nn_connect(myinfo->dpowsock,nanomsg_tcpname(str,ipaddr)); {
for (i=0; i<=n; i++) n = myinfo->numdpowipbits;
printf("%08x ",myinfo->dpowipbits[i]); ptr = myinfo->dpowipbits;
printf("->\n"); }
myinfo->numdpowipbits++; else
qsort(myinfo->dpowipbits,myinfo->numdpowipbits,sizeof(*myinfo->dpowipbits),_increasing_ipbits); {
for (i=0; i<myinfo->numdpowipbits; i++) n = dp->numipbits;
printf("%08x ",myinfo->dpowipbits[i]); ptr = dp->ipbits;
printf("addnotary.[%d] (%s) retval.%d (total %d)\n",n,ipaddr,retval,myinfo->numdpowipbits); }
for (i=0; i<n; i++)
if ( ipbits == ptr[i] )
break;
if ( i == n && n < 64 )
{
ptr[n] = ipbits;
if ( iter == 0 )
retval = nn_connect(myinfo->dpowsock,nanomsg_tcpname(str,ipaddr));
n++;
qsort(ptr,n,sizeof(uint32_t),_increasing_ipbits);
if ( iter == 0 )
myinfo->numdpowipbits = n;
else dp->numipbits = n;
for (i=0; i<n; i++)
printf("%08x ",ptr[i]);
printf("addnotary.[%d] (%s) retval.%d (total %d %d) iter.%d\n",n,ipaddr,retval,myinfo->numdpowipbits,dp->numipbits,iter);
}
} }
portable_mutex_unlock(&myinfo->dpowmutex); portable_mutex_unlock(&myinfo->dpowmutex);
} }
@ -356,7 +369,7 @@ void dpow_ipbitsadd(struct supernet_info *myinfo,struct dpow_info *dp,uint32_t *
{ {
expand_ipbits(ipaddr,ipbits[i]); expand_ipbits(ipaddr,ipbits[i]);
printf("ADD NOTARY.(%s)\n",ipaddr); printf("ADD NOTARY.(%s)\n",ipaddr);
dpow_addnotary(myinfo,ipaddr); dpow_addnotary(myinfo,dp,ipaddr);
} }
} else if ( missing > 0 ) printf("ignore\n"); } else if ( missing > 0 ) printf("ignore\n");
} }

Loading…
Cancel
Save