ssb: Only print broadcast failures once.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 32m33s
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 32m33s
This commit is contained in:
@ -5,8 +5,10 @@ async function main() {
|
||||
}
|
||||
|
||||
tfrpc.register(async function complete() {
|
||||
if (core.user?.credentials?.permissions?.administration &&
|
||||
(await core.globalSettingsGet('index')) == '/~core/intro/') {
|
||||
if (
|
||||
core.user?.credentials?.permissions?.administration &&
|
||||
(await core.globalSettingsGet('index')) == '/~core/intro/'
|
||||
) {
|
||||
return await core.globalSettingsSet('index', '/~core/ssb/');
|
||||
}
|
||||
});
|
||||
|
55
src/ssb.c
55
src/ssb.c
@ -165,6 +165,12 @@ typedef struct _tf_ssb_timer_t
|
||||
void* user_data;
|
||||
} tf_ssb_timer_t;
|
||||
|
||||
typedef struct _tf_ssb_broadcast_result_t
|
||||
{
|
||||
struct sockaddr_storage addr;
|
||||
int result;
|
||||
} tf_ssb_broadcast_result_t;
|
||||
|
||||
typedef struct _tf_ssb_t
|
||||
{
|
||||
bool own_context;
|
||||
@ -192,6 +198,9 @@ typedef struct _tf_ssb_t
|
||||
uv_timer_t request_activity_timer;
|
||||
uv_tcp_t server;
|
||||
|
||||
tf_ssb_broadcast_result_t* broadcast_results;
|
||||
int broadcast_results_count;
|
||||
|
||||
uint8_t network_key[32];
|
||||
|
||||
uint8_t pub[crypto_sign_PUBLICKEYBYTES];
|
||||
@ -2841,6 +2850,12 @@ void tf_ssb_destroy(tf_ssb_t* ssb)
|
||||
tf_free(ssb->room_name);
|
||||
ssb->room_name = NULL;
|
||||
}
|
||||
if (ssb->broadcast_results_count)
|
||||
{
|
||||
tf_free(ssb->broadcast_results);
|
||||
ssb->broadcast_results = NULL;
|
||||
ssb->broadcast_results_count = 0;
|
||||
}
|
||||
|
||||
ssb->shutting_down_deferred = true;
|
||||
if (ssb->connection_ref_count == 0 && ssb->db_ref_count == 0)
|
||||
@ -3257,6 +3272,39 @@ static void _tf_ssb_on_connection(uv_stream_t* stream, int status)
|
||||
_tf_ssb_connection_read_start(connection);
|
||||
}
|
||||
|
||||
static void _tf_ssb_update_broadcast_result(tf_ssb_t* ssb, struct sockaddr* address, const char* address_str, int result)
|
||||
{
|
||||
for (int i = 0; i < ssb->broadcast_results_count; i++)
|
||||
{
|
||||
if (ssb->broadcast_results[i].addr.ss_family == address->sa_family && address->sa_family == AF_INET &&
|
||||
memcmp(&ssb->broadcast_results[i].addr, address, sizeof(struct sockaddr_in)) == 0)
|
||||
{
|
||||
if (result != ssb->broadcast_results[i].result)
|
||||
{
|
||||
if (result)
|
||||
{
|
||||
char broadcast_str[256] = { 0 };
|
||||
uv_ip4_name((struct sockaddr_in*)address, broadcast_str, sizeof(broadcast_str));
|
||||
tf_printf("Unable to send broadcast for %s via %s (%d): %s.\n", address_str, broadcast_str, result, uv_strerror(result));
|
||||
}
|
||||
ssb->broadcast_results[i].result = result;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (address->sa_family == AF_INET)
|
||||
{
|
||||
struct sockaddr_storage storage = { 0 };
|
||||
memcpy(&storage, address, sizeof(struct sockaddr_in));
|
||||
ssb->broadcast_results = tf_resize_vec(ssb->broadcast_results, sizeof(tf_ssb_broadcast_result_t) * (ssb->broadcast_results_count + 1));
|
||||
ssb->broadcast_results[ssb->broadcast_results_count++] = (tf_ssb_broadcast_result_t) {
|
||||
.result = result,
|
||||
.addr = storage,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
static void _tf_ssb_send_broadcast(tf_ssb_t* ssb, struct sockaddr_in* address, struct sockaddr_in* netmask)
|
||||
{
|
||||
struct sockaddr server_addr;
|
||||
@ -3290,12 +3338,7 @@ static void _tf_ssb_send_broadcast(tf_ssb_t* ssb, struct sockaddr_in* address, s
|
||||
broadcast_addr.sin_port = htons(8008);
|
||||
broadcast_addr.sin_addr.s_addr = (address->sin_addr.s_addr & netmask->sin_addr.s_addr) | (INADDR_BROADCAST & ~netmask->sin_addr.s_addr);
|
||||
r = uv_udp_try_send(&ssb->broadcast_sender, &buf, 1, (struct sockaddr*)&broadcast_addr);
|
||||
if (r < 0)
|
||||
{
|
||||
char broadcast_str[256] = { 0 };
|
||||
uv_ip4_name(&broadcast_addr, broadcast_str, sizeof(broadcast_str));
|
||||
tf_printf("failed to send broadcast for %s via %s (%d): %s\n", address_str, broadcast_str, r, uv_strerror(r));
|
||||
}
|
||||
_tf_ssb_update_broadcast_result(ssb, (struct sockaddr*)&broadcast_addr, address_str, r);
|
||||
}
|
||||
|
||||
typedef struct _seeds_t
|
||||
|
Reference in New Issue
Block a user