rust turnclient
A release to attach some pre-builts
Cliente Simple Rust TURN (RFC 5766) para UDP - atravessa até NAT estrito; assíncrono apenas atualmente
<bonus>
Um cliente/proxy TURN de uso geral, permitindo usar o TURN para coisas personalizadas (você fornece os scripts para sinalização). Existe um executável pré-construído nas versões do Github. </bonus>
.
Snippet de exemplo de eco limpo:
let udp : tokio :: net :: UdpSocket ;
let c = turnclient :: TurnClientBuilder :: new ( turn_server , username , password ) ;
let ( turnsink , turnstream ) = c . build_and_send_request ( udp ) . split ( ) ;
turnstream . map ( move |event| {
Ok ( match event {
MessageFromTurnServer :: AllocationGranted { relay_address , .. } => {
MessageToTurnServer :: AddPermission ( peer_addr , ChannelUsage :: WithChannel )
} ,
MessageFromTurnServer :: RecvFrom ( sa , data ) => {
MessageToTurnServer :: SendTo ( sa , data )
} ,
_ => MessageToTurnServer :: Noop ,
} )
} ) . forward ( turnsink ) . await ;
Consulte a documentação no nível da caixa para obter mais instruções.
Não implementado / TODO / contras:
Box<dyn std::error::Error>
, com apenas uma string de texto.Vec<u8>
para buffers de bytes.Exemplos:
echo.rs
- Conecte-se ao servidor TURN especificado, autorize o peer especificado e atue como um servidor de eco para ele (snippet descrito acima)proxy.rs
- Troca pacotes entre um peer UDP local e um peer mediado por TURN. Executa um script quando a alocação fica disponível. Existe uma versão antiga 0.1.0
da caixa para os antigos Rust e Tokio 0.1
. Isso pode ter um desempenho melhor ou pior do que a versão atual, ainda não verifiquei.