xmedialib v0.1.1 XMediaLib.Stun View Source
The XMediaLib.Stun module provides the RFC 5389 implementation of the STUN protocol for both encoding and decoding.
Link to this section Summary
Functions
STUN object structure for per-connection usage
Accepts a STUN binary stream and attempts to convert it to readable packets for use by the greater application.
Accepts data and attempts to convert it to a STUN specific stream as a response to the calling client.
Accepts data and attempts to convert it to a STUN specific stream as a response to the calling client, formatted to a string.
Link to this section Functions
STUN object structure for per-connection usage
Accepts a STUN binary stream and attempts to convert it to readable packets for use by the greater application.
Example
iex> request = <<0, 1, 0, 0, 33, 18, 164, 66, 0, 146, 225, 0,
...> 61, 62, 163, 87, 45, 150, 223, 8>>
iex> XMediaLib.Stun.decode(request)
{:ok, %XMediaLib.Stun{ attrs: %{}, class: :request, fingerprint: false, integrity: false, key: nil, method: :binding, ns: nil, peer_id: nil, transactionid: 177565706535525809372192520}}
Accepts data and attempts to convert it to a STUN specific stream as a response to the calling client.
Example
iex> response = %Stun{class: :success, method: :binding,
...> transactionid: 123456789012, fingerprint: false, attrs: %{
...> xor_mapped_address: {{127,0,0,1}, 12345},
...> mapped_address: {{127,0,0,1}, 12345},
...> source_address: {{127,0,0,1}, 12346},
...> software: <<"XMediaLib-stun">>
...> }}
iex> XMediaLib.Stun.encode(response)
<<1, 1, 0, 56, 33, 18, 164, 66, 0, 0, 0, 0, 0, 0, 0, 28, 190, 153, 26, 20, 0, 1, 0, 8, 0, 1, 48, 57, 127, 0, 0, 1, 128, 34, 0, 14, 88, 77, 101, 100, 105, 97, 76, 105, 98, 45, 115, 116, 117, 110, 0, 0, 0, 4, 0, 8, 0, 1, 48, 58, 127, 0, 0, 1, 0, 32, 0, 8, 0, 1, 17, 43, 94, 18, 164, 67>>
Accepts data and attempts to convert it to a STUN specific stream as a response to the calling client, formatted to a string.
Example
iex> response = %Stun{class: :success, method: :binding,
...> transactionid: 123456789012, fingerprint: false, attrs: %{
...> xor_mapped_address: {{127,0,0,1}, 12345},
...> mapped_address: {{127,0,0,1}, 12345},
...> source_address: {{127,0,0,1}, 12346},
...> software: <<"XMediaLib-stun">>
...> }} |> Stun.encode()
iex> XMediaLib.Stun.pretty(response)
{:ok,
%{
attrs: %{
mapped_address: "127.0.0.1:12345",
software: "XMediaLib-stun",
source_address: "127.0.0.1:12346",
xor_mapped_address: "127.0.0.1:12345"
},
class: :success,
method: :binding,
transactionid: 123456789012
}}