diff --git a/basilisk/basilisk.c b/basilisk/basilisk.c index 95f4edaf3..372e88860 100755 --- a/basilisk/basilisk.c +++ b/basilisk/basilisk.c @@ -580,16 +580,17 @@ int32_t basilisk_relays_ping(struct supernet_info *myinfo,uint8_t *data,int32_t } for (i=0; inumrelays; i++) datalen += basilisk_relay_ping(myinfo,&data[datalen],maxlen - datalen,&myinfo->relays[i]); - for (i=0; inumrelays; i++) { rp = &myinfo->relays[i]; @@ -613,6 +614,18 @@ void basilisk_respond_ping(struct supernet_info *myinfo,uint32_t senderipbits,ui memcpy(symbol,&data[len],6), len += 6; len += iguana_rwvarint32(0,&data[len],&height); printf("(%s %d) ",symbol,height); + if ( addr != 0 && (virt= iguana_coinfind(symbol)) != 0 && virt->blocks.hwmchain.height > height && (height % myinfo->numrelays) == myinfo->RELAYID ) + { + if ( (blocklen= iguana_peerblockrequest(virt,virt->blockspace,IGUANA_MAXPACKETSIZE,0,virt->blocks.hwmchain.RO.hash2,0)) > 0 ) + { + char strbuf[8192],*blockstr,*allocptr = 0; + printf("RELAYID.%d send block.%d -> (%s)\n",myinfo->RELAYID,blocklen,addr->ipaddr); + blockstr = basilisk_addhexstr(&allocptr,0,strbuf,sizeof(strbuf),virt->blockspace,blocklen); + basilisk_blocksubmit(myinfo,btcd,virt,blockstr,virt->blocks.hwmchain.RO.hash2,height); + if ( allocptr != 0 ) + free(allocptr); + } + } } for (i=0; iRELAYID >= 0 ) { - basilisk_respond_ping(myinfo,ipbits,data,datalen); + basilisk_respond_ping(myinfo,_addr,ipbits,data,datalen); } } else @@ -839,7 +852,7 @@ void basilisks_loop(void *arg) rp = &myinfo->relays[i]; addr = 0; if ( rp->ipbits == myinfo->myaddr.myipbits ) - basilisk_respond_ping(myinfo,myinfo->myaddr.myipbits,&data[sizeof(struct iguana_msghdr)],datalen); + basilisk_respond_ping(myinfo,0,myinfo->myaddr.myipbits,&data[sizeof(struct iguana_msghdr)],datalen); else if ( (addr= iguana_peerfindipbits(btcd,rp->ipbits,1)) != 0 && addr->usock >= 0 ) { if ( iguana_queue_send(addr,0,data,"SuperNETPIN",datalen) <= 0 )