@ -95,19 +95,19 @@ void chat_core_sync_my_addresses(void) {
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] sync_my_addresses START my_node=0x%016llx " , CC_ID , ( unsigned long long ) g_cc . my_node_id ) ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] sync_my_addresses START my_node=0x%016llx " , CC_ID , ( unsigned long long ) g_cc . my_node_id ) ;
sqlite3_stmt * del = NULL ;
sqlite3_stmt * del = NULL ;
sqlite3_prepare_v2 ( g_cc . db , " DELETE FROM node_addresses WHERE node_id=? AND addr_type=0 " , - 1 , & del , NULL ) ;
sqlite3_prepare_v2 ( g_cc . db , " DELETE FROM node_addresses WHERE node_id=? " , - 1 , & del , NULL ) ;
if ( del ) {
if ( del ) {
sqlite3_bind_int64 ( del , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int64 ( del , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_step ( del ) ;
sqlite3_step ( del ) ;
int deleted = sqlite3_changes ( g_cc . db ) ;
int deleted = sqlite3_changes ( g_cc . db ) ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] DELETE addr_type=0 for my_node=0x%016llx: %d rows deleted " , CC_ID , ( unsigned long long ) g_cc . my_node_id , deleted ) ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] DELETE for my_node=0x%016llx: %d rows deleted " , CC_ID , ( unsigned long long ) g_cc . my_node_id , deleted ) ;
sqlite3_finalize ( del ) ;
sqlite3_finalize ( del ) ;
}
}
sqlite3_stmt * ins = NULL ;
sqlite3_stmt * ins = NULL ;
sqlite3_prepare_v2 ( g_cc . db ,
sqlite3_prepare_v2 ( g_cc . db ,
" INSERT OR REPLACE INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id) "
" INSERT OR REPLACE INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id) "
" VALUES(?,?,1,?,?,0 ,?) " , - 1 , & ins , NULL ) ;
" VALUES(?,?,1,?,?,? ,?) " , - 1 , & ins , NULL ) ;
if ( ! ins ) {
if ( ! ins ) {
DEBUG_WARN ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] FAIL prepare INSERT stmt my_node=0x%016llx " , CC_ID , ( unsigned long long ) g_cc . my_node_id ) ;
DEBUG_WARN ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] FAIL prepare INSERT stmt my_node=0x%016llx " , CC_ID , ( unsigned long long ) g_cc . my_node_id ) ;
return ;
return ;
@ -129,7 +129,8 @@ void chat_core_sync_my_addresses(void) {
sqlite3_bind_int ( ins , 2 , 4 ) ;
sqlite3_bind_int ( ins , 2 , 4 ) ;
sqlite3_bind_blob ( ins , 3 , & sin - > sin_addr , 4 , SQLITE_STATIC ) ;
sqlite3_bind_blob ( ins , 3 , & sin - > sin_addr , 4 , SQLITE_STATIC ) ;
sqlite3_bind_int ( ins , 4 , ( int ) ntohs ( sin - > sin_port ) ) ;
sqlite3_bind_int ( ins , 4 , ( int ) ntohs ( sin - > sin_port ) ) ;
sqlite3_bind_int ( ins , 5 , ( int ) sock - > sock_id ) ;
sqlite3_bind_int ( ins , 5 , addr_type_from_ip ( 4 , ( const uint8_t * ) & sin - > sin_addr ) ) ;
sqlite3_bind_int ( ins , 6 , ( int ) sock - > sock_id ) ;
sqlite3_step ( ins ) ; sqlite3_reset ( ins ) ;
sqlite3_step ( ins ) ; sqlite3_reset ( ins ) ;
uint8_t * ip = ( uint8_t * ) & sin - > sin_addr ;
uint8_t * ip = ( uint8_t * ) & sin - > sin_addr ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT my_node=0x%016llx sock=%d %d.%d.%d.%d:%d " ,
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT my_node=0x%016llx sock=%d %d.%d.%d.%d:%d " ,
@ -141,7 +142,8 @@ void chat_core_sync_my_addresses(void) {
sqlite3_bind_int ( ins , 2 , 6 ) ;
sqlite3_bind_int ( ins , 2 , 6 ) ;
sqlite3_bind_blob ( ins , 3 , & sin6 - > sin6_addr , 16 , SQLITE_STATIC ) ;
sqlite3_bind_blob ( ins , 3 , & sin6 - > sin6_addr , 16 , SQLITE_STATIC ) ;
sqlite3_bind_int ( ins , 4 , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
sqlite3_bind_int ( ins , 4 , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
sqlite3_bind_int ( ins , 5 , ( int ) sock - > sock_id ) ;
sqlite3_bind_int ( ins , 5 , addr_type_from_ip ( 6 , sin6 - > sin6_addr . s6_addr ) ) ;
sqlite3_bind_int ( ins , 6 , ( int ) sock - > sock_id ) ;
sqlite3_step ( ins ) ; sqlite3_reset ( ins ) ;
sqlite3_step ( ins ) ; sqlite3_reset ( ins ) ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT v6 my_node=0x%016llx sock=%d port=%d " ,
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT v6 my_node=0x%016llx sock=%d port=%d " ,
CC_ID , ( unsigned long long ) g_cc . my_node_id , sock - > sock_id , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
CC_ID , ( unsigned long long ) g_cc . my_node_id , sock - > sock_id , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
@ -154,7 +156,7 @@ void chat_core_sync_my_addresses(void) {
{ sqlite3_stmt * tcp_ins = NULL ;
{ sqlite3_stmt * tcp_ins = NULL ;
sqlite3_prepare_v2 ( g_cc . db ,
sqlite3_prepare_v2 ( g_cc . db ,
" INSERT OR REPLACE INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id) "
" INSERT OR REPLACE INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id) "
" VALUES(?,?,2,?,?,0 ,?) " , - 1 , & tcp_ins , NULL ) ;
" VALUES(?,?,2,?,?,? ,?) " , - 1 , & tcp_ins , NULL ) ;
if ( tcp_ins ) {
if ( tcp_ins ) {
struct TCP_SOCKET * ts = g_cc . inst - > tcp_sockets ;
struct TCP_SOCKET * ts = g_cc . inst - > tcp_sockets ;
int tcp_count = 0 ;
int tcp_count = 0 ;
@ -164,12 +166,13 @@ void chat_core_sync_my_addresses(void) {
if ( ! addr | | ! addr - > ss_family ) { ts = ts - > next ; continue ; }
if ( ! addr | | ! addr - > ss_family ) { ts = ts - > next ; continue ; }
if ( addr - > ss_family = = AF_INET ) {
if ( addr - > ss_family = = AF_INET ) {
struct sockaddr_in * sin = ( struct sockaddr_in * ) addr ;
struct sockaddr_in * sin = ( struct sockaddr_in * ) addr ;
if ( sin - > sin_addr . s_addr = = 0 ) { ts = ts - > next ; continue ; } // skip 0.0.0.0
if ( sin - > sin_addr . s_addr = = 0 ) { ts = ts - > next ; continue ; }
sqlite3_bind_int64 ( tcp_ins , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int64 ( tcp_ins , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int ( tcp_ins , 2 , 4 ) ;
sqlite3_bind_int ( tcp_ins , 2 , 4 ) ;
sqlite3_bind_blob ( tcp_ins , 3 , & sin - > sin_addr , 4 , SQLITE_STATIC ) ;
sqlite3_bind_blob ( tcp_ins , 3 , & sin - > sin_addr , 4 , SQLITE_STATIC ) ;
sqlite3_bind_int ( tcp_ins , 4 , ( int ) ntohs ( sin - > sin_port ) ) ;
sqlite3_bind_int ( tcp_ins , 4 , ( int ) ntohs ( sin - > sin_port ) ) ;
sqlite3_bind_int ( tcp_ins , 5 , ( int ) ts - > sock_id ) ;
sqlite3_bind_int ( tcp_ins , 5 , addr_type_from_ip ( 4 , ( const uint8_t * ) & sin - > sin_addr ) ) ;
sqlite3_bind_int ( tcp_ins , 6 , ( int ) ts - > sock_id ) ;
sqlite3_step ( tcp_ins ) ; sqlite3_reset ( tcp_ins ) ;
sqlite3_step ( tcp_ins ) ; sqlite3_reset ( tcp_ins ) ;
uint8_t * ip = ( uint8_t * ) & sin - > sin_addr ;
uint8_t * ip = ( uint8_t * ) & sin - > sin_addr ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT TCP my_node=0x%016llx sock=%d %d.%d.%d.%d:%d " ,
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT TCP my_node=0x%016llx sock=%d %d.%d.%d.%d:%d " ,
@ -177,12 +180,13 @@ void chat_core_sync_my_addresses(void) {
tcp_written + + ;
tcp_written + + ;
} else if ( addr - > ss_family = = AF_INET6 ) {
} else if ( addr - > ss_family = = AF_INET6 ) {
struct sockaddr_in6 * sin6 = ( struct sockaddr_in6 * ) addr ;
struct sockaddr_in6 * sin6 = ( struct sockaddr_in6 * ) addr ;
if ( memcmp ( & sin6 - > sin6_addr , & in6addr_any , 16 ) = = 0 ) { ts = ts - > next ; continue ; } // skip ::
if ( memcmp ( & sin6 - > sin6_addr , & in6addr_any , 16 ) = = 0 ) { ts = ts - > next ; continue ; }
sqlite3_bind_int64 ( tcp_ins , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int64 ( tcp_ins , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int ( tcp_ins , 2 , 6 ) ;
sqlite3_bind_int ( tcp_ins , 2 , 6 ) ;
sqlite3_bind_blob ( tcp_ins , 3 , & sin6 - > sin6_addr , 16 , SQLITE_STATIC ) ;
sqlite3_bind_blob ( tcp_ins , 3 , & sin6 - > sin6_addr , 16 , SQLITE_STATIC ) ;
sqlite3_bind_int ( tcp_ins , 4 , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
sqlite3_bind_int ( tcp_ins , 4 , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
sqlite3_bind_int ( tcp_ins , 5 , ( int ) ts - > sock_id ) ;
sqlite3_bind_int ( tcp_ins , 5 , addr_type_from_ip ( 6 , sin6 - > sin6_addr . s6_addr ) ) ;
sqlite3_bind_int ( tcp_ins , 6 , ( int ) ts - > sock_id ) ;
sqlite3_step ( tcp_ins ) ; sqlite3_reset ( tcp_ins ) ;
sqlite3_step ( tcp_ins ) ; sqlite3_reset ( tcp_ins ) ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT TCP v6 my_node=0x%016llx sock=%d port=%d " ,
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] INSERT TCP v6 my_node=0x%016llx sock=%d port=%d " ,
CC_ID , ( unsigned long long ) g_cc . my_node_id , ts - > sock_id , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
CC_ID , ( unsigned long long ) g_cc . my_node_id , ts - > sock_id , ( int ) ntohs ( sin6 - > sin6_port ) ) ;
@ -205,11 +209,11 @@ void chat_core_sync_my_addresses(void) {
CC_ID , written , tcp_written , written + tcp_written , skipped , ( unsigned long long ) g_cc . my_node_id ) ;
CC_ID , written , tcp_written , written + tcp_written , skipped , ( unsigned long long ) g_cc . my_node_id ) ;
sqlite3_stmt * chk = NULL ;
sqlite3_stmt * chk = NULL ;
sqlite3_prepare_v2 ( g_cc . db , " SELECT COUNT(*) FROM node_addresses WHERE node_id=? AND addr_type=0 " , - 1 , & chk , NULL ) ;
sqlite3_prepare_v2 ( g_cc . db , " SELECT COUNT(*) FROM node_addresses WHERE node_id=? " , - 1 , & chk , NULL ) ;
if ( chk ) {
if ( chk ) {
sqlite3_bind_int64 ( chk , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
sqlite3_bind_int64 ( chk , 1 , ( sqlite3_int64 ) g_cc . my_node_id ) ;
int cnt = sqlite3_step ( chk ) = = SQLITE_ROW ? sqlite3_column_int ( chk , 0 ) : - 1 ;
int cnt = sqlite3_step ( chk ) = = SQLITE_ROW ? sqlite3_column_int ( chk , 0 ) : - 1 ;
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] VERIFY: total addr_type=0 rows for my_node=0x%016llx = %d " ,
DEBUG_INFO ( DEBUG_CATEGORY_MEMBER_SYNC , " %s: [ADDR_SYNC] VERIFY: total rows for my_node=0x%016llx = %d " ,
CC_ID , ( unsigned long long ) g_cc . my_node_id , cnt ) ;
CC_ID , ( unsigned long long ) g_cc . my_node_id , cnt ) ;
sqlite3_finalize ( chk ) ;
sqlite3_finalize ( chk ) ;
}
}