<Ángel De Cara Salas:=#

Documentación de
ReverbSend

Transferencia de archivos P2P segura mediante WebRTC y Laravel Reverb.

01. Descripción

ReverbSend es una herramienta de intercambio de archivos totalmente descentralizada. A diferencia de los servicios en la nube tradicionales, los archivos nunca se almacenan en un servidor intermedio; viajan directamente desde el dispositivo del emisor hasta el del receptor.

Aprovechando la potencia de WebRTC para la creación de canales de datos de alta velocidad y Laravel Reverb (WebSockets) para la señalización inicial, ReverbSend permite enviar archivos sin límite de tamaño de forma rápida, segura y anónima.

02. Arquitectura P2P & Señalización

El proceso se divide en dos fases: el "Apretón de manos" (Signaling) manejado por el servidor, y la transferencia de datos masiva manejada directamente por los navegadores o a través de un relé seguro.

FASE 1: SEÑALIZACIÓN (WebSockets)
PC Emisor
Intercambio
SDP & ICE
Laravel Reverb
Dispositivo Receptor
FASE 2: TRANSFERENCIA DE ARCHIVOS (WebRTC)
Emisor
Conexión Directa STUN (P2P Puro)
Receptor
Emisor (NAT Simétrico)
Coturn (Relay Server)
Receptor

03. Características principales

Cero Almacenamiento

Privacidad absoluta. Los archivos no tocan el disco duro del servidor; viajan cifrados de punto a punto (DTLS/SRTP).

Infraestructura Propia (TURN)

Implementa un servidor Coturn privado para evadir firewalls estrictos y routers con NAT Simétrico de las operadoras.

Señalización en Tiempo Real

Conexión instantánea a través de códigos efímeros de 8 caracteres utilizando Laravel Reverb y Livewire.

Gestión de Buffer Inteligente

Envío fragmentado adaptativo para evitar cuellos de botella y saturación de memoria RAM en archivos grandes.

04. Seguridad TURN y Credenciales

Para evitar el robo de ancho de banda del servidor Relay, ReverbSend utiliza una arquitectura REST API Auth. Las credenciales de WebRTC no son estáticas, sino que se generan dinámicamente mediante HMAC-SHA1 y tienen una vida útil de solo 10 minutos.

PHP / Laravel Livewire

public function getTurnCredentials() {

// Generar token de vida limitada (10 min)

$secret = env('TURN_SECRET');

$timestamp = time() + 600;

$username = $timestamp . ':reverbsend';


return [

'username' => $username,

'password' => base64_encode(hash_hmac('sha1', $username, $secret, true))

];

}