summaryrefslogtreecommitdiff
path: root/src/pbx_rose.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/pbx_rose.erl')
-rw-r--r--src/pbx_rose.erl38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/pbx_rose.erl b/src/pbx_rose.erl
index 76cb89e..0447d8b 100644
--- a/src/pbx_rose.erl
+++ b/src/pbx_rose.erl
@@ -8,16 +8,6 @@
-include("opcodes.hrl").
-include("Remote-Operations-Generic-ROS-PDUs.hrl").
-return(Id, Op, {ok, Data}) ->
- 'Remote-Operations-Generic-ROS-PDUs':encode('ROS', {returnResult,
- #'ReturnResult'{invokeId = Id,
- result = #'ReturnResult_result'{opcode = Op, result = Data}}}).
-
-invoke(Op, {ok, Data}) ->
- Id = pbx_invoke:next(),
- 'Remote-Operations-Generic-ROS-PDUs':encode('ROS', {invoke,
- #'Invoke'{invokeId = Id, opcode = Op, argument = Data}}).
-
decode({invoke, #'Invoke'{invokeId = Id, opcode = Op, argument = Data}}) ->
pbx_invoke:set(Id),
case Op of
@@ -37,7 +27,8 @@ decode({invoke, #'Invoke'{invokeId = Id, opcode = Op, argument = Data}}) ->
ok;
?STATUS ->
%io:format("Status: ~p~n", [pbx_status:value(Data)]),
- pbx_conn:send(return(Id, Op, pbx_status:encode()));
+ %%% pbx_conn:send(return(Id, Op, pbx_status:encode()));
+ ok;
_ ->
error
end;
@@ -83,6 +74,15 @@ decode(<<Data/binary>>) ->
init(_Args) ->
{ok, {present, 0}}.
+handle_event({invoke, Invoke = #'Invoke'{opcode = ?STATUS}}, _State) ->
+ Status = pbx_status:decode(Invoke#'Invoke'.argument),
+ case pbx_status:value(Status) of
+ normal ->
+ reply(Invoke, pbx_status:encode());
+ _ ->
+ ok
+ end,
+ {ok, Invoke#'Invoke'.invokeId};
handle_event({invoke, Invoke = #'Invoke'{}}, _State) ->
io:format("Invoke ~p~n", [Invoke]),
{ok, Invoke#'Invoke'.invokeId};
@@ -112,5 +112,21 @@ terminate(_Reason, _State) ->
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
+%%%
+
next({present, N}) ->
{present, N+1}.
+
+reply(Invoke = #'Invoke'{}, Data) ->
+ pbx_conn:send(return(Invoke, Data)).
+
+return(#'Invoke'{invokeId = Id, opcode = Op}, {ok, Data}) ->
+ Result = #'ReturnResult_result'{opcode = Op, result = Data},
+ ReturnResult = #'ReturnResult'{invokeId = Id, result = Result},
+ 'Remote-Operations-Generic-ROS-PDUs':encode('ROS', {returnResult,
+ ReturnResult}).
+
+invoke(Op, {ok, Data}) ->
+ Id = pbx_pdu:call(?MODULE, nextInvoke),
+ Invoke = #'Invoke'{invokeId = Id, opcode = Op, argument = Data},
+ 'Remote-Operations-Generic-ROS-PDUs':encode('ROS', {invoke, Invoke}).