@ -15,39 +15,24 @@
// included from basilisk.c
// included from basilisk.c
char * basilisk_respond_addmessage ( struct supernet_info * myinfo , uint8_t * key , int32_t keylen , uint8_t * data , int32_t datalen , int32_t sendping , uint32_t duration )
int32_t basilisk_messagekeyread ( uint8_t * key , uint32_t * channelp , uint32_t * msgidp , bits256 * srchashp , bits256 * desthashp )
{
{
struct basilisk_message * msg ; int32_t i ; bits256 desthash ;
int32_t keylen = 0 ;
HASH_FIND ( hh , myinfo - > messagetable , key , keylen , msg ) ;
keylen + = iguana_rwnum ( 0 , & key [ keylen ] , sizeof ( uint32_t ) , channelp ) ;
if ( msg = = 0 & & keylen = = BASILISK_KEYSIZE )
keylen + = iguana_rwnum ( 0 , & key [ keylen ] , sizeof ( uint32_t ) , msgidp ) ;
{
keylen + = iguana_rwbignum ( 0 , & key [ keylen ] , sizeof ( * srchashp ) , srchashp - > bytes ) ;
msg = calloc ( 1 , sizeof ( * msg ) + datalen ) ;
keylen + = iguana_rwbignum ( 0 , & key [ keylen ] , sizeof ( * desthashp ) , desthashp - > bytes ) ;
if ( duration = = 0 )
return ( keylen ) ;
duration = BASILISK_MSGDURATION ;
}
else if ( duration > INSTANTDEX_LOCKTIME * 2 )
duration = INSTANTDEX_LOCKTIME * 2 ;
int32_t basilisk_messagekey ( uint8_t * key , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash )
memcpy ( desthash . bytes , & key [ BASILISK_KEYSIZE - sizeof ( desthash ) ] , sizeof ( desthash ) ) ;
{
if ( bits256_nonz ( desthash ) = = 0 )
int32_t keylen = 0 ;
msg - > broadcast = 1 ;
keylen + = iguana_rwnum ( 1 , & key [ keylen ] , sizeof ( uint32_t ) , & channel ) ;
msg - > duration = duration ;
keylen + = iguana_rwnum ( 1 , & key [ keylen ] , sizeof ( uint32_t ) , & msgid ) ;
msg - > expiration = ( uint32_t ) time ( NULL ) + duration ;
keylen + = iguana_rwbignum ( 1 , & key [ keylen ] , sizeof ( srchash ) , srchash . bytes ) ;
msg - > keylen = keylen ;
keylen + = iguana_rwbignum ( 1 , & key [ keylen ] , sizeof ( desthash ) , desthash . bytes ) ;
memcpy ( msg - > key , key , keylen ) ;
return ( keylen ) ;
msg - > datalen = datalen ;
memcpy ( msg - > data , data , datalen ) ;
portable_mutex_lock ( & myinfo - > messagemutex ) ;
HASH_ADD_KEYPTR ( hh , myinfo - > messagetable , msg - > key , msg - > keylen , msg ) ;
for ( i = 0 ; i < BASILISK_KEYSIZE ; i + + )
printf ( " %02x " , key [ i ] ) ;
printf ( " <- ADDMSG.[%d] exp %u \n " , QUEUEITEMS , msg - > expiration ) ;
QUEUEITEMS + + ;
portable_mutex_unlock ( & myinfo - > messagemutex ) ;
if ( sendping ! = 0 )
{
queue_enqueue ( " basilisk_message " , & myinfo - > msgQ , & msg - > DL , 0 ) ;
return ( clonestr ( " { \" result \" : \" message added to hashtable \" } " ) ) ;
} else return ( 0 ) ;
} else return ( 0 ) ;
}
}
cJSON * basilisk_msgjson ( struct basilisk_message * msg , uint8_t * key , int32_t keylen )
cJSON * basilisk_msgjson ( struct basilisk_message * msg , uint8_t * key , int32_t keylen )
@ -70,56 +55,15 @@ cJSON *basilisk_msgjson(struct basilisk_message *msg,uint8_t *key,int32_t keylen
return ( msgjson ) ;
return ( msgjson ) ;
}
}
cJSON * basilisk_respond_getmessage ( struct supernet_info * myinfo , uint8_t * key , int32_t keylen )
cJSON * _ basilisk_respond_getmessage( struct supernet_info * myinfo , uint8_t * key , int32_t keylen )
{
{
cJSON * msgjson = 0 ; struct basilisk_message * msg ;
cJSON * msgjson = 0 ; struct basilisk_message * msg ;
portable_mutex_lock ( & myinfo - > messagemutex ) ;
HASH_FIND ( hh , myinfo - > messagetable , key , keylen , msg ) ;
HASH_FIND ( hh , myinfo - > messagetable , key , keylen , msg ) ;
if ( msg ! = 0 & & msg - > broadcast = = 0 )
if ( msg ! = 0 & & msg - > broadcast = = 0 )
msgjson = basilisk_msgjson ( msg , key , keylen ) ;
msgjson = basilisk_msgjson ( msg , key , keylen ) ;
portable_mutex_unlock ( & myinfo - > messagemutex ) ;
return ( msgjson ) ;
return ( msgjson ) ;
}
}
// respond to incoming OUT, MSG
int32_t basilisk_messagekeyread ( uint8_t * key , uint32_t * channelp , uint32_t * msgidp , bits256 * srchashp , bits256 * desthashp )
{
int32_t keylen = 0 ;
keylen + = iguana_rwnum ( 0 , & key [ keylen ] , sizeof ( uint32_t ) , channelp ) ;
keylen + = iguana_rwnum ( 0 , & key [ keylen ] , sizeof ( uint32_t ) , msgidp ) ;
keylen + = iguana_rwbignum ( 0 , & key [ keylen ] , sizeof ( * srchashp ) , srchashp - > bytes ) ;
keylen + = iguana_rwbignum ( 0 , & key [ keylen ] , sizeof ( * desthashp ) , desthashp - > bytes ) ;
return ( keylen ) ;
}
int32_t basilisk_messagekey ( uint8_t * key , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash )
{
int32_t keylen = 0 ;
keylen + = iguana_rwnum ( 1 , & key [ keylen ] , sizeof ( uint32_t ) , & channel ) ;
keylen + = iguana_rwnum ( 1 , & key [ keylen ] , sizeof ( uint32_t ) , & msgid ) ;
keylen + = iguana_rwbignum ( 1 , & key [ keylen ] , sizeof ( srchash ) , srchash . bytes ) ;
keylen + = iguana_rwbignum ( 1 , & key [ keylen ] , sizeof ( desthash ) , desthash . bytes ) ;
return ( keylen ) ;
}
char * basilisk_respond_OUT ( struct supernet_info * myinfo , char * CMD , void * addr , char * remoteaddr , uint32_t basilisktag , cJSON * valsobj , uint8_t * data , int32_t datalen , bits256 hash , int32_t from_basilisk )
{
int32_t keylen , duration ; uint8_t key [ BASILISK_KEYSIZE ] ; bits256 senderhash ; char * retstr ;
senderhash = jbits256 ( valsobj , " srchash " ) ;
duration = juint ( valsobj , " duration " ) ;
keylen = basilisk_messagekey ( key , juint ( valsobj , " channel " ) , juint ( valsobj , " msgid " ) , senderhash , hash ) ;
retstr = basilisk_respond_addmessage ( myinfo , key , keylen , data , datalen , 1 , duration ) ;
if ( bits256_nonz ( hash ) = = 0 )
{
if ( duration > BASILISK_MSGDURATION )
duration = BASILISK_MSGDURATION ;
}
// printf("OUT keylen.%d datalen.%d\n",keylen,datalen);
char str [ 65 ] ; printf ( " add message.[%d] channel.%u msgid.%x %s \n " , datalen , juint ( valsobj , " channel " ) , juint ( valsobj , " msgid " ) , bits256_str ( str , hash ) ) ;
return ( retstr ) ;
}
int32_t basilisk_msgcmp ( struct basilisk_message * msg , int32_t width , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash )
int32_t basilisk_msgcmp ( struct basilisk_message * msg , int32_t width , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash )
{
{
uint32_t keychannel , keymsgid ; bits256 keysrc , keydest ;
uint32_t keychannel , keymsgid ; bits256 keysrc , keydest ;
@ -141,67 +85,159 @@ int32_t basilisk_msgcmp(struct basilisk_message *msg,int32_t width,uint32_t chan
char * basilisk_iterate_MSG ( struct supernet_info * myinfo , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash , int32_t origwidth )
char * basilisk_iterate_MSG ( struct supernet_info * myinfo , uint32_t channel , uint32_t msgid , bits256 srchash , bits256 desthash , int32_t origwidth )
{
{
struct basilisk_message * msg , * tmpmsg ; uint8_t key [ BASILISK_KEYSIZE ] ; int32_t i , keylen , width ; cJSON * item , * retjson , * array ; bits256 zero ;
uint8_t key [ BASILISK_KEYSIZE ] ; int32_t i , keylen , width ; cJSON * msgjson , * item , * retjson , * array ; bits256 zero ; struct basilisk_message * msg , * tmpmsg ; uint32_t now = ( uint32_t ) time ( NULL ) ;
memset ( zero . bytes , 0 , sizeof ( zero ) ) ;
memset ( zero . bytes , 0 , sizeof ( zero ) ) ;
array = cJSON_CreateArray ( ) ;
if ( ( width = origwidth ) > 3600 )
if ( ( width = origwidth ) > 3600 )
width = 3600 ;
width = 3600 ;
else if ( width < 1 )
else if ( width < 1 )
width = 1 ;
width = 1 ;
char str [ 65 ] , str2 [ 65 ] ; printf ( " MSGiterate (%s) -> (%s) \n " , bits256_str ( str , srchash ) , bits256_str ( str2 , desthash ) ) ;
array = cJSON_CreateArray ( ) ;
portable_mutex_lock ( & myinfo - > messagemutex ) ;
portable_mutex_lock ( & myinfo - > messagemutex ) ;
HASH_ITER ( hh , myinfo - > messagetable , msg , tmpmsg )
if ( bits256_nonz ( srchash ) = = 0 )
{
{
if ( msg - > broadcast ! = 0 & & basilisk_msgcmp ( msg , origwidth , channel , msgid , zero , zero ) = = 0 )
HASH_ITER ( hh , myinfo - > messagetable , msg , tmpmsg )
jaddi ( array , basilisk_msgjson ( msg , msg - > key , msg - > keylen ) ) ;
{
if ( basilisk_msgcmp ( msg , origwidth , channel , msgid , zero , zero ) = = 0 )
{
if ( ( msgjson = basilisk_msgjson ( msg , msg - > key , msg - > keylen ) ) ! = 0 )
jaddi ( array , msgjson ) ;
}
if ( now > msg - > expiration )
{
printf ( " delete expired message.%p QUEUEITEMS.%d \n " , msg , QUEUEITEMS ) ;
HASH_DELETE ( hh , myinfo - > messagetable , msg ) ;
QUEUEITEMS - - ;
free ( msg ) ;
}
}
}
}
portable_mutex_unlock ( & myinfo - > messagemutex ) ;
//printf("iterate_MSG allflag.%d width.%d channel.%d msgid.%d src.%llx -> %llx\n",allflag,origwidth,channel,msgid,(long long)srchash.txid,(long long)desthash.txid);
//printf("iterate_MSG width.%d channel.%d msgid.%d src.%llx -> %llx\n",origwidth,channel,msgid,(long long)srchash.txid,(long long)desthash.txid);
for ( i = 0 ; i < width ; i + + )
for ( i = 0 ; i < width ; i + + )
{
{
keylen = basilisk_messagekey ( key , channel , msgid , srchash , desthash ) ;
keylen = basilisk_messagekey ( key , channel , msgid , srchash , desthash ) ;
if ( ( item = basilisk_respond_getmessage ( myinfo , key , keylen ) ) ! = 0 )
if ( ( item = _ basilisk_respond_getmessage( myinfo , key , keylen ) ) ! = 0 )
jaddi ( array , item ) ; //, printf("gotmsg0.(%s)\n",jprint(item,0));
jaddi ( array , item ) ; //, printf("gotmsg0.(%s)\n",jprint(item,0));
//keylen = basilisk_messagekey(key,channel,msgid,desthash,srchash);
//if ( (item= _basilisk_respond_getmessage(myinfo,key,keylen)) != 0 )
// jaddi(array,item);//, printf("gotmsg0.(%s)\n",jprint(item,0));
if ( origwidth > 0 )
if ( origwidth > 0 )
{
{
if ( bits256_nonz ( srchash ) ! = 0 )
if ( bits256_nonz ( srchash ) ! = 0 )
{
{
keylen = basilisk_messagekey ( key , channel , msgid , zero , desthash ) ;
keylen = basilisk_messagekey ( key , channel , msgid , zero , desthash ) ;
if ( ( item = basilisk_respond_getmessage ( myinfo , key , keylen ) ) ! = 0 )
if ( ( item = _ basilisk_respond_getmessage( myinfo , key , keylen ) ) ! = 0 )
jaddi ( array , item ) ; //, printf("gotmsg1.(%s)\n",jprint(item,0));
jaddi ( array , item ) ; //, printf("gotmsg1.(%s)\n",jprint(item,0));
//keylen = basilisk_messagekey(key,channel,msgid,desthash,zero);
//if ( (item= _basilisk_respond_getmessage(myinfo,key,keylen)) != 0 )
// jaddi(array,item);//, printf("gotmsg1.(%s)\n",jprint(item,0));
}
}
if ( bits256_nonz ( desthash ) ! = 0 )
if ( bits256_nonz ( desthash ) ! = 0 )
{
{
keylen = basilisk_messagekey ( key , channel , msgid , srchash , zero ) ;
keylen = basilisk_messagekey ( key , channel , msgid , srchash , zero ) ;
if ( ( item = basilisk_respond_getmessage ( myinfo , key , keylen ) ) ! = 0 )
if ( ( item = _ basilisk_respond_getmessage( myinfo , key , keylen ) ) ! = 0 )
jaddi ( array , item ) ; //, printf("gotmsg2.(%s)\n",jprint(item,0));
jaddi ( array , item ) ; //, printf("gotmsg2.(%s)\n",jprint(item,0));
//keylen = basilisk_messagekey(key,channel,msgid,zero,srchash);
//if ( (item= _basilisk_respond_getmessage(myinfo,key,keylen)) != 0 )
// jaddi(array,item);//, printf("gotmsg2.(%s)\n",jprint(item,0));
}
}
if ( bits256_nonz ( srchash ) ! = 0 & & bits256_nonz ( desthash ) ! = 0 )
if ( bits256_nonz ( srchash ) ! = 0 & & bits256_nonz ( desthash ) ! = 0 )
{
{
keylen = basilisk_messagekey ( key , channel , msgid , zero , zero ) ;
keylen = basilisk_messagekey ( key , channel , msgid , zero , zero ) ;
if ( ( item = basilisk_respond_getmessage ( myinfo , key , keylen ) ) ! = 0 )
if ( ( item = _ basilisk_respond_getmessage( myinfo , key , keylen ) ) ! = 0 )
jaddi ( array , item ) ; //, printf("gotmsg3.(%s)\n",jprint(item,0));
jaddi ( array , item ) ; //, printf("gotmsg3.(%s)\n",jprint(item,0));
}
}
}
}
msgid - - ;
msgid - - ;
}
}
portable_mutex_unlock ( & myinfo - > messagemutex ) ;
if ( cJSON_GetArraySize ( array ) > 0 )
if ( cJSON_GetArraySize ( array ) > 0 )
{
{
retjson = cJSON_CreateObject ( ) ;
retjson = cJSON_CreateObject ( ) ;
jaddstr ( retjson , " result " , " success " ) ;
jaddstr ( retjson , " result " , " success " ) ;
jadd ( retjson , " messages " , array ) ;
jadd ( retjson , " messages " , array ) ;
//printf("MESSAGES.(%s)\n",jprint(array,0));
printf ( " MESSAGES.(%s) \n " , jprint ( array , 0 ) ) ;
return ( jprint ( retjson , 1 ) ) ;
return ( jprint ( retjson , 1 ) ) ;
} else return ( clonestr ( " { \" error \" : \" no messages \" } " ) ) ;
}
printf ( " no matching messages \n " ) ;
return ( clonestr ( " { \" error \" : \" no messages \" } " ) ) ;
}
char * basilisk_respond_addmessage ( struct supernet_info * myinfo , uint8_t * key , int32_t keylen , uint8_t * data , int32_t datalen , int32_t sendping , uint32_t duration )
{
struct basilisk_message * msg ; int32_t i ; bits256 desthash ;
if ( keylen ! = BASILISK_KEYSIZE )
{
printf ( " basilisk_respond_addmessage keylen.%d != %d \n " , keylen , BASILISK_KEYSIZE ) ;
return ( 0 ) ;
}
if ( duration = = 0 )
duration = BASILISK_MSGDURATION ;
else if ( duration > INSTANTDEX_LOCKTIME * 2 )
duration = INSTANTDEX_LOCKTIME * 2 ;
portable_mutex_lock ( & myinfo - > messagemutex ) ;
HASH_FIND ( hh , myinfo - > messagetable , key , keylen , msg ) ;
if ( msg = = 0 ) //|| msg->datalen != datalen )
{
if ( msg ! = 0 )
{
printf ( " overwrite delete of msg.[%d] \n " , msg - > datalen ) ;
HASH_DELETE ( hh , myinfo - > messagetable , msg ) ;
QUEUEITEMS - - ;
free ( msg ) ;
}
msg = calloc ( 1 , sizeof ( * msg ) + datalen ) ;
msg - > keylen = keylen ;
memcpy ( msg - > key , key , keylen ) ;
msg - > datalen = datalen ;
memcpy ( msg - > data , data , datalen ) ;
memcpy ( desthash . bytes , & key [ BASILISK_KEYSIZE - sizeof ( desthash ) ] , sizeof ( desthash ) ) ;
if ( bits256_nonz ( desthash ) = = 0 )
msg - > broadcast = 1 ;
msg - > duration = duration ;
msg - > expiration = ( uint32_t ) time ( NULL ) + duration ;
HASH_ADD_KEYPTR ( hh , myinfo - > messagetable , msg - > key , msg - > keylen , msg ) ;
QUEUEITEMS + + ;
for ( i = 0 ; i < BASILISK_KEYSIZE ; i + + )
printf ( " %02x " , key [ i ] ) ;
printf ( " <- ADDMSG.[%d] exp %u %p (%p %p) \n " , QUEUEITEMS , msg - > expiration , msg , msg - > hh . next , msg - > hh . prev ) ;
if ( sendping ! = 0 )
queue_enqueue ( " basilisk_message " , & myinfo - > msgQ , & msg - > DL , 0 ) ;
} //else memcpy(msg->data,data,datalen);
portable_mutex_unlock ( & myinfo - > messagemutex ) ;
return ( clonestr ( " { \" result \" : \" message added to hashtable \" } " ) ) ;
}
// respond to incoming OUT, MSG
char * basilisk_respond_OUT ( struct supernet_info * myinfo , char * CMD , void * addr , char * remoteaddr , uint32_t basilisktag , cJSON * valsobj , uint8_t * data , int32_t datalen , bits256 hash , int32_t from_basilisk )
{
int32_t keylen , duration ; uint8_t key [ BASILISK_KEYSIZE ] ; bits256 desthash , senderhash ; char * retstr ;
senderhash = jbits256 ( valsobj , " srchash " ) ;
desthash = jbits256 ( valsobj , " desthash " ) ;
duration = juint ( valsobj , " duration " ) ;
keylen = basilisk_messagekey ( key , juint ( valsobj , " channel " ) , juint ( valsobj , " msgid " ) , senderhash , desthash ) ;
if ( bits256_nonz ( hash ) = = 0 )
{
if ( duration > BASILISK_MSGDURATION )
duration = BASILISK_MSGDURATION ;
}
//char str[65]; printf("add message.[%d] channel.%u msgid.%x %s\n",datalen,juint(valsobj,"channel"),juint(valsobj,"msgid"),bits256_str(str,hash));
retstr = basilisk_respond_addmessage ( myinfo , key , keylen , data , datalen , 1 , duration ) ;
// printf("OUT keylen.%d datalen.%d\n",keylen,datalen);
return ( retstr ) ;
}
}
char * basilisk_respond_MSG ( struct supernet_info * myinfo , char * CMD , void * addr , char * remoteaddr , uint32_t basilisktag , cJSON * valsobj , uint8_t * data , int32_t datalen , bits256 hash , int32_t from_basilisk )
char * basilisk_respond_MSG ( struct supernet_info * myinfo , char * CMD , void * addr , char * remoteaddr , uint32_t basilisktag , cJSON * valsobj , uint8_t * data , int32_t datalen , bits256 hash , int32_t from_basilisk )
{
{
int32_t width ; uint32_t msgid , channel ;
int32_t width ; uint32_t msgid , channel ; char * retstr ;
width = juint ( valsobj , " width " ) ;
width = juint ( valsobj , " width " ) ;
msgid = juint ( valsobj , " msgid " ) ;
msgid = juint ( valsobj , " msgid " ) ;
channel = juint ( valsobj , " channel " ) ;
channel = juint ( valsobj , " channel " ) ;
//char str[65],str2[65]; printf("%s -> %s channel.%u msgid.%x width.%d\n",bits256_str(str,jbits256(valsobj,"sender")),bits256_str(str2,hash),juint(valsobj,"channel"),msgid,width);
//char str[65],str2[65]; printf("%s -> %s channel.%u msgid.%x width.%d\n",bits256_str(str,jbits256(valsobj,"sender")),bits256_str(str2,jbits256(valsobj,"desthash")),juint(valsobj,"channel"),msgid,width);
return ( basilisk_iterate_MSG ( myinfo , channel , msgid , jbits256 ( valsobj , " srchash " ) , hash , width ) ) ;
retstr = basilisk_iterate_MSG ( myinfo , channel , msgid , jbits256 ( valsobj , " srchash " ) , jbits256 ( valsobj , " desthash " ) , width ) ;
//printf("iterate_MSG.(%s)\n",retstr);
return ( retstr ) ;
}
}
# include "../includes/iguana_apidefs.h"
# include "../includes/iguana_apidefs.h"
@ -209,9 +245,12 @@ char *basilisk_respond_MSG(struct supernet_info *myinfo,char *CMD,void *addr,cha
HASH_ARRAY_STRING ( basilisk , getmessage , hash , vals , hexstr )
HASH_ARRAY_STRING ( basilisk , getmessage , hash , vals , hexstr )
{
{
uint32_t msgid , width , channel ;
uint32_t msgid , width , channel ; char * retstr ;
jaddbits256 ( vals , " srchash " , hash ) ;
if ( bits256_cmp ( GENESIS_PUBKEY , jbits256 ( vals , " srchash " ) ) = = 0 )
jaddbits256 ( vals , " desthash " , myinfo - > myaddr . persistent ) ;
jaddbits256 ( vals , " srchash " , hash ) ;
if ( bits256_cmp ( GENESIS_PUBKEY , jbits256 ( vals , " desthash " ) ) = = 0 )
jaddbits256 ( vals , " desthash " , myinfo - > myaddr . persistent ) ;
//char str[65]; printf("getmessage for (%s)\n",bits256_str(str,jbits256(vals,"desthash")));
if ( ( msgid = juint ( vals , " msgid " ) ) = = 0 )
if ( ( msgid = juint ( vals , " msgid " ) ) = = 0 )
{
{
msgid = ( uint32_t ) time ( NULL ) ;
msgid = ( uint32_t ) time ( NULL ) ;
@ -222,8 +261,9 @@ HASH_ARRAY_STRING(basilisk,getmessage,hash,vals,hexstr)
{
{
channel = juint ( vals , " channel " ) ;
channel = juint ( vals , " channel " ) ;
width = juint ( vals , " width " ) ;
width = juint ( vals , " width " ) ;
return ( basilisk_iterate_MSG ( myinfo , channel , msgid , myinfo - > myaddr . persistent , myinfo - > myaddr . persistent , width ) ) ;
retstr = basilisk_iterate_MSG ( myinfo , channel , msgid , jbits256 ( vals , " srchash " ) , jbits256 ( vals , " desthash " ) , width ) ;
} else return ( basilisk_standardservice ( " MSG " , myinfo , 0 , myinfo - > myaddr . persistent , vals , hexstr , 1 ) ) ;
return ( retstr ) ;
} else return ( basilisk_standardservice ( " MSG " , myinfo , 0 , jbits256 ( vals , " desthash " ) , vals , hexstr , 1 ) ) ;
}
}
HASH_ARRAY_STRING ( basilisk , sendmessage , hash , vals , hexstr )
HASH_ARRAY_STRING ( basilisk , sendmessage , hash , vals , hexstr )
@ -231,7 +271,7 @@ HASH_ARRAY_STRING(basilisk,sendmessage,hash,vals,hexstr)
int32_t keylen , datalen ; uint8_t key [ BASILISK_KEYSIZE ] , space [ 16384 ] , * data , * ptr = 0 ; char * retstr = 0 ;
int32_t keylen , datalen ; uint8_t key [ BASILISK_KEYSIZE ] , space [ 16384 ] , * data , * ptr = 0 ; char * retstr = 0 ;
if ( myinfo - > IAMNOTARY ! = 0 & & myinfo - > NOTARY . RELAYID > = 0 )
if ( myinfo - > IAMNOTARY ! = 0 & & myinfo - > NOTARY . RELAYID > = 0 )
{
{
keylen = basilisk_messagekey ( key , juint ( vals , " channel " ) , juint ( vals , " msgid " ) , jbits256 ( vals , " srchash " ) , hash ) ;
keylen = basilisk_messagekey ( key , juint ( vals , " channel " ) , juint ( vals , " msgid " ) , jbits256 ( vals , " srchash " ) , jbits256 ( vals , " dest hash" ) ) ;
if ( ( data = get_dataptr ( BASILISK_HDROFFSET , & ptr , & datalen , space , sizeof ( space ) , hexstr ) ) ! = 0 )
if ( ( data = get_dataptr ( BASILISK_HDROFFSET , & ptr , & datalen , space , sizeof ( space ) , hexstr ) ) ! = 0 )
{
{
retstr = basilisk_respond_addmessage ( myinfo , key , keylen , data , datalen , 0 , juint ( vals , " duration " ) ) ;
retstr = basilisk_respond_addmessage ( myinfo , key , keylen , data , datalen , 0 , juint ( vals , " duration " ) ) ;
@ -242,8 +282,8 @@ HASH_ARRAY_STRING(basilisk,sendmessage,hash,vals,hexstr)
free ( retstr ) ;
free ( retstr ) ;
}
}
if ( vals ! = 0 & & juint ( vals , " fanout " ) = = 0 )
if ( vals ! = 0 & & juint ( vals , " fanout " ) = = 0 )
jaddnum ( vals , " fanout " , MAX ( 5 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 2 ) ) ;
jaddnum ( vals , " fanout " , MAX ( 8 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 2 ) ) ;
return ( basilisk_standardservice ( " OUT " , myinfo , 0 , hash , vals , hexstr , 0 ) ) ;
return ( basilisk_standardservice ( " OUT " , myinfo , 0 , jbits256 ( vals , " dest hash" ) , vals , hexstr , 0 ) ) ;
}
}
# include "../includes/iguana_apiundefs.h"
# include "../includes/iguana_apiundefs.h"
@ -256,12 +296,12 @@ int32_t basilisk_channelsend(struct supernet_info *myinfo,bits256 srchash,bits25
jaddnum ( valsobj , " channel " , channel ) ;
jaddnum ( valsobj , " channel " , channel ) ;
if ( msgid = = 0 )
if ( msgid = = 0 )
msgid = ( uint32_t ) time ( NULL ) ;
msgid = ( uint32_t ) time ( NULL ) ;
jaddnum ( valsobj , " fanout " , MAX ( 5 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 2 ) ) ;
jaddnum ( valsobj , " fanout " , MAX ( 8 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 2 ) ) ;
jaddnum ( valsobj , " msgid " , msgid ) ;
jaddnum ( valsobj , " msgid " , msgid ) ;
jaddnum ( valsobj , " duration " , duration ) ;
jaddnum ( valsobj , " duration " , duration ) ;
jaddbits256 ( valsobj , " srchash " , srchash ) ;
jaddbits256 ( valsobj , " srchash " , srchash ) ;
jaddbits256 ( valsobj , " desthash " , desthash ) ;
jaddbits256 ( valsobj , " desthash " , desthash ) ;
char str [ 65 ] ; printf ( " sendmessage.[%d] channel.%u msgid.%x -> %s numrelays.%d:%d \n " , datalen , channel , msgid , bits256_str ( str , desthash ) , myinfo - > NOTARY . NUMRELAYS , juint ( valsobj , " fanout " ) ) ;
//char str[65]; printf(" sendmessage.[%d] channel.%u msgid.%x -> %s numrelays.%d:%d\n",datalen,channel,msgid,bits256_str(str,desthash),myinfo->NOTARY.NUMRELAYS,juint(valsobj,"fanout"));
if ( ( retstr = basilisk_sendmessage ( myinfo , 0 , 0 , 0 , desthash , valsobj , hexstr ) ) ! = 0 )
if ( ( retstr = basilisk_sendmessage ( myinfo , 0 , 0 , 0 , desthash , valsobj , hexstr ) ) ! = 0 )
free ( retstr ) ;
free ( retstr ) ;
free_json ( valsobj ) ;
free_json ( valsobj ) ;
@ -289,7 +329,7 @@ int32_t basilisk_message_returned(uint8_t *key,uint8_t *data,int32_t maxlen,cJSO
decode_hex ( data , datalen , hexstr ) ;
decode_hex ( data , datalen , hexstr ) ;
//printf("decoded hexstr.[%d]\n",datalen);
//printf("decoded hexstr.[%d]\n",datalen);
retval = datalen ;
retval = datalen ;
} else printf ( " datalen.%d < maxlen.%d \n " , datalen , maxlen ) ;
} else printf ( " datalen.%d >= maxlen.%d \n " , datalen , maxlen ) ;
}
}
}
}
} //else printf("no hexstr.%p or datalen.%d (%s)\n",hexstr,datalen,jprint(json,0));
} //else printf("no hexstr.%p or datalen.%d (%s)\n",hexstr,datalen,jprint(json,0));
@ -305,14 +345,14 @@ cJSON *basilisk_channelget(struct supernet_info *myinfo,bits256 srchash,bits256
msgid = ( uint32_t ) time ( NULL ) ;
msgid = ( uint32_t ) time ( NULL ) ;
jaddnum ( valsobj , " msgid " , msgid ) ;
jaddnum ( valsobj , " msgid " , msgid ) ;
jaddnum ( valsobj , " width " , width ) ;
jaddnum ( valsobj , " width " , width ) ;
jaddnum ( valsobj , " timeout " , 2500 ) ;
jaddnum ( valsobj , " timeout " , BASILISK_TIMEOUT ) ;
jaddnum ( valsobj , " fanout " , MAX ( 5 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 1 ) ) ;
jaddnum ( valsobj , " fanout " , MAX ( 8 , ( int32_t ) sqrt ( myinfo - > NOTARY . NUMRELAYS ) + 1 ) ) ;
jaddnum ( valsobj , " numrequired " , 1 ) ;
jaddnum ( valsobj , " numrequired " , 1 ) ;
jaddbits256 ( valsobj , " srchash " , srchash ) ;
jaddbits256 ( valsobj , " srchash " , srchash ) ;
jaddbits256 ( valsobj , " desthash " , desthash ) ;
jaddbits256 ( valsobj , " desthash " , desthash ) ;
if ( ( retstr = basilisk_getmessage ( myinfo , 0 , 0 , 0 , desthash , valsobj , 0 ) ) ! = 0 )
if ( ( retstr = basilisk_getmessage ( myinfo , 0 , 0 , 0 , desthash , valsobj , 0 ) ) ! = 0 )
{
{
printf ( " channel.%u msgid.%u gotmessage.(%d) \n " , channel , msgid , ( int32_t ) strlen ( retstr ) ) ;
//printf("channel.%u msgid.%u gotmessage.(%d)\n",channel,msgid,(int32_t)strlen(retstr));
if ( ( retarray = cJSON_Parse ( retstr ) ) ! = 0 )
if ( ( retarray = cJSON_Parse ( retstr ) ) ! = 0 )
{
{
if ( is_cJSON_Array ( retarray ) = = 0 )
if ( is_cJSON_Array ( retarray ) = = 0 )