From 5b10e3d451bd538a7f5c0ac432dcc1b85c157a53 Mon Sep 17 00:00:00 2001 From: moon Date: Mon, 15 Sep 2025 03:49:50 +0330 Subject: add new opcode + firehose change --- src/server.c | 55 +++++++++++++++++++++++++------------------------------ 1 file changed, 25 insertions(+), 30 deletions(-) (limited to 'src/server.c') diff --git a/src/server.c b/src/server.c index cc1f45d..3140788 100644 --- a/src/server.c +++ b/src/server.c @@ -464,7 +464,7 @@ void paste_server( if (unlikely(req.count > 64)) req.count = 64; log(_info, - "<%.*s> request type: firehose count %i offset %li", + "<%.*s> request type: firehose count %i offset %lu", (int) ip_size, ip_addr, req.count, @@ -473,38 +473,20 @@ void paste_server( water_splash entries[ req.count ]; uint16_t copied_count = firehose_get_packets(req.offset, req.count, entries); - size_t total_packets_size = PACKET_SIZE * copied_count; - - size_t output_len = 1 + 8 + total_packets_size; + size_t output_len = 1 + 8 + (sizeof(water_splash) * copied_count); byte* output_data = calloc(output_len, sizeof(byte)); output_data[ 0 ] = firehose_reply; size_t offset = 1; - uint64_t new_offset = req.offset + copied_count; - output_data[ offset++ ] = new_offset & 0xFF; - output_data[ offset++ ] = (new_offset >> 8) & 0xFF; - output_data[ offset++ ] = (new_offset >> 16) & 0xFF; - output_data[ offset++ ] = (new_offset >> 24) & 0xFF; - output_data[ offset++ ] = (new_offset >> 32) & 0xFF; - output_data[ offset++ ] = (new_offset >> 40) & 0xFF; - output_data[ offset++ ] = (new_offset >> 48) & 0xFF; - output_data[ offset++ ] = (new_offset >> 56) & 0xFF; + uint64_t new_offset = req.offset + copied_count; + write_u64_le(output_data + offset, new_offset); + offset += 8; for (int i = 0; i < copied_count; i++) { - struct data_packet_entry* entry = &packet_index[ entries[ i ].storage_index ]; - byte decompressed[ sizeof(struct data_packet) ]; - uLongf decompressed_len = sizeof(struct data_packet); - if (uncompress( - decompressed, - &decompressed_len, - entry->compressed_payload, - entry->compressed_size) - != Z_OK) { - log(_error, "firehose: decompression failed"); - continue; - } - data_packet2s(*(struct data_packet*) decompressed, output_data + offset); - offset += PACKET_SIZE; + memcpy(output_data + offset, &entries[ i ].storage_index, 8); + offset += 8; + memcpy(output_data + offset, entries[ i ].packet_hash, 32); + offset += 32; } reply(output_len, output_data); @@ -540,7 +522,12 @@ void paste_server( for (int j = 0; j < 8; j++) { uint16_t word = (neighbor.v6_addr[ j * 2 ] << 8) | neighbor.v6_addr[ j * 2 + 1 ]; - offset += sprintf(ip_string + offset, "%x%s", word, (j < 7) ? ":" : ""); + offset += snprintf( + ip_string + offset, + sizeof(ip_string) - offset, + "%x%s", + word, + (j < 7) ? ":" : ""); } } @@ -821,8 +808,10 @@ void save_packet(const struct data_packet packet) { } } +char* global_neighbors_save_path = "neighbors.bin"; + void save_neighbors() { - FILE* file = fopen("neighbors.bin", "wb"); + FILE* file = fopen(global_neighbors_save_path, "wb"); if (!file) { perror("failed to save neighbors"); return; @@ -843,7 +832,7 @@ void save_neighbors() { } void load_neighbors() { - FILE* file = fopen("neighbors.bin", "rb"); + FILE* file = fopen(global_neighbors_save_path, "rb"); if (!file) { return; } size_t count = 0; @@ -1065,6 +1054,12 @@ int main(int argc, char** argv) { free(port); } + char* packets_path = get_config("packets_dir", false); + if (packets_path) global_packets_dir_path = packets_path; + + char* neighbors_save_path = get_config("neighbors_path", false); + if (neighbors_save_path) global_neighbors_save_path = neighbors_save_path; + fprintf( stderr, "-- moonpaste server v%i.%i --\n" -- cgit v1.2.3