Каков рекомендуемый способ кодирования / декодирования типов XDR в erlang? - PullRequest
2 голосов
/ 22 мая 2009

В другом обсуждении SO мы говорили о сопряжении приложения erlang с другим приложением, отличным от erlang, которое использует XDR-кодированные пакеты для сетевых коммуникаций .

К сожалению, я не смог найти реальных указателей по работе с данными XDR с использованием erlang.

Итак, каков рекомендуемый способ обработки данных, закодированных в XDR, в erlang?

Спасибо

PS: Пока я мог найти следующие ресурсы:

Ответы [ 2 ]

1 голос
/ 21 июля 2009

В исходной коллекции Jungerl Erlang есть проект с именем rpc . Он имеет генератор кода, который генерирует код Erlang для управления протоколами на основе XDR.

0 голосов
/ 30 мая 2009

Создание собственной библиотеки кодирования и декодирования XDR не сложно.

Кодирование терминов Эрланга в XDR тривиально:

%% @spec push_bool(bool()) -> binary()

push_bool(Value) ->
    case Value of
        true ->
           <<0, 0, 0, 1>>;
        false ->
            <<0, 0, 0, 0>>
    end.

Путь в другую сторону немного более многословен, в зависимости от того, как вы хотели бы, чтобы создавалась система отчетов об ошибках. Я выбрал исключения:

%% @spec pull_bool(binary()) -> {bool(), binary()}

pull_bool(Bin) ->
    {Value, Tail} = 
        try
            <<0, 0, 0, V, T/binary>> = Bin,
            {V, T}
        catch 
            error:{badmatch, _} -> 
                throw({xdr_error, "Invalid boolean value"})
        end,
    Result = case Value of
                 0 -> false;
                 1 -> true;
                 _ -> throw({xdr_error, "Invalid boolean value"})
             end, 
    {Result, Tail}.

В действительности не так уж много типов данных XDR, поэтому, возможно, всего будет несколько сотен строк кода.

...