aboutsummaryrefslogtreecommitdiff
path: root/src/pf_route_socket.erl
blob: a4f6ed50a7e535277020834a387df0b5c33436c2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-module(pf_route_socket).
-export([test/0, open/5]).

test() ->
    open(17, 3, 0, fun (_) -> ok end, fun (_) -> ok end).

open(PfRoute, SockRaw, AfUnspec, OpenFun, ParseFun) ->
    {ok, Socket} = socket:open(PfRoute, SockRaw, AfUnspec),
    OpenFun(Socket),
    recv(Socket, ParseFun).

recv(Socket, ParseFun) ->
    case socket:recv(Socket, 0) of
        {ok, <<Len:16/little-unsigned-integer, Rest/binary>>} ->
            ToRead = Len - 2,
            <<Pckt:ToRead/binary>> = Rest,
            logger:warning("Got a packet ~p", [Pckt]),
            ParseFun(Pckt),
            recv(Socket, ParseFun);
        Error ->
            Error
    end.