rendered paste body%%% File : blah.erl
%%% Author : mogorman <mogorman@astjab.org>
%%% Description : lets see if we can terminate an iax2 call
%%% Created : 11 Sep 2006 by mogorman <mogorman@localhost>
%0x06 = username.
-module(blah).
-export([start/0]).
start() ->
case gen_udp:open(4569,[binary,{active,false}]) of
{ok, LSock} ->
loop(LSock);
_ ->
stop
end.
loop(Socket) ->
case gen_udp:recv(Socket, 4000,1000) of
{ok, {Ip,Port,Data}} ->
parse(Ip, Port, Data),
loop(Socket);
_->
loop(Socket)
end.
parse(Ip, Port,<<FullFrame:1,SourceCall:15, Retransmit:1, DestCall:15,
TimeStamp:32, OSeqno:8, ISeqno:8, FrameType:8, CBit:1,
SubClass:7, Data/binary>>) -> %parse full frame
io:format("fullframe = ~p~nSourceCall = ~p~nRetransmit = ~p~nDestCall = ~p~nTimestamp = ~p~nOSeqno = ~p~nISeqno = ~p~nFrametype = ~p~nCbit = ~p~nSubclass = ~p~nData = ~p~n",[FullFrame, SourceCall, Retransmit, DestCall, TimeStamp, OSeqno, ISeqno, FrameType, CBit,SubClass, Data]),
parse(Ip, Port, Data);
parse(_Ip, _Port, <<FullFrame:1, SourceCall:15, TimeStamp:16,Data/binary>>) -> %parse mini frame
io:format("FullFrame = ~p~nSourceCall = ~p~nTimeStamp = ~p~nData ~p~n",[FullFrame,SourceCall,TimeStamp,Data]);
parse(Ip, Port, <<6:8, Length:8, Data/binary>>) -> % Parse Username
ByteLength = Length * 8,
<<Username:ByteLength, RealData/binary>> = Data,
io:format("Length = ~p~nUsername = ~p~nData = ~p~n",[Length,Username,Data]);
% parse(Ip,Port,RealData);
parse(Ip, Port, <<19:8, 2:8, Refresh:16, Data/binary>>) ->
io:format("Refresh = ~p~nData ~p~n", [Refresh, Data]),
parse(Ip,Port,Data);
parse(_Ip, _Port, <<>>) ->
io:format("Nothing less to parse~n").