rust turnclient
A release to attach some pre-builts
UDP 用のシンプルな Rust TURN (RFC 5766) クライアント - 厳密な NAT も通過します。現在は非同期のみ
<bonus>
汎用 TURN クライアント/プロキシ。カスタム目的で TURN を使用できます (シグナリング用のスクリプトを提供します)。 Github リリースには、事前にビルドされた実行可能ファイルがあります。 </bonus>
。
クリーンアップされたエコーのサンプル スニペット:
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 ;
詳細な手順については、クレートレベルのドキュメントを参照してください。
未実装 / TODO / 短所:
Box<dyn std::error::Error>
であり、テキスト文字列のみを使用します。Vec<u8>
使用します。例:
echo.rs
- 指定された TURN サーバーに接続し、指定されたピアを承認し、そのピアのエコー サーバーとして機能します (上に示したスニペット)proxy.rs
- ローカル UDP ピアと TURN 仲介ピアの間でパケットを交換します。割り当てが可能になったときにスクリプトを実行します。古い Rust および Tokio 0.1
用のクレートの古い0.1.0
バージョンがあります。これは現在のバージョンよりもパフォーマンスが向上するか低下する可能性がありますが、まだ実際には確認していません。