All pastes #169390 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-09-13 21:22 UTC
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").