From 53b0ae45f24868b0b8e95bd7c8981a9fe42bb11f Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Sat, 25 Jul 2009 18:53:34 +0000 Subject: [PATCH] Sync up freeswitch.erl git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14362 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- .../mod_erlang_event/freeswitch.erl | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/mod/event_handlers/mod_erlang_event/freeswitch.erl b/src/mod/event_handlers/mod_erlang_event/freeswitch.erl index 248eddd79c..97bea8da6d 100644 --- a/src/mod/event_handlers/mod_erlang_event/freeswitch.erl +++ b/src/mod/event_handlers/mod_erlang_event/freeswitch.erl @@ -18,8 +18,8 @@ nixevent/2, noevents/1, close/1, get_event_header/2, get_event_body/1, get_event_name/1, getpid/1, sendmsg/3, - sendevent/3, handlecall/2, handlecall/3, start_fetch_handler/4, - start_log_handler/3, start_event_handler/3]). + sendevent/3, sendevent_custom/3, handlecall/2, handlecall/3, start_fetch_handler/5, + start_log_handler/4, start_event_handler/4]). -define(TIMEOUT, 5000). %% @doc Return the value for a specific header in an event or `{error,notfound}'. @@ -79,6 +79,7 @@ api(Node, Cmd) -> %% sent to calling process after it is received. This function %% returns the result of the initial bgapi call or `timeout' if FreeSWITCH fails %% to respond. +-spec(bgapi/3 :: (Node :: atom(), Cmd :: atom(), Args :: string()) -> {'ok', string()} | {'error', any()} | 'timeout'). bgapi(Node, Cmd, Args) -> Self = self(), % spawn a new process so that both responses go here instead of directly to @@ -91,13 +92,13 @@ bgapi(Node, Cmd, Args) -> Self ! {api, {error, Reason}}; {ok, JobID} -> % send the reply to the calling process - Self ! {api, ok}, + Self ! {api, {ok, JobID}}, receive % wait for the job's reply {bgok, JobID, Reply} -> % send the actual command output back to the calling process - Self ! {bgok, Reply}; + Self ! {bgok, JobID, Reply}; {bgerror, JobID, Reply} -> - Self ! {bgerror, Reply} + Self ! {bgerror, JobID, Reply} end after ?TIMEOUT -> % send a timeout to the calling process @@ -115,6 +116,7 @@ bgapi(Node, Cmd, Args) -> %% passed as the argument to `Fun' after it is received. This function %% returns the result of the initial bgapi call or `timeout' if FreeSWITCH fails %% to respond. +-spec(bgapi/4 :: (Node :: atom(), Cmd :: atom(), Args :: string(), Fun :: fun()) -> 'ok' | {'error', any()} | 'timeout'). bgapi(Node, Cmd, Args, Fun) -> Self = self(), % spawn a new process so that both responses go here instead of directly to @@ -201,6 +203,19 @@ sendevent(Node, EventName, Headers) -> timeout end. +%% @doc Send a CUSTOM event to FreeSWITCH. `SubClassName' is the name of the event +%% subclass and `Headers' is a list of `{Key, Value}' string tuples. See the +%% mod_event_socket documentation for more information. +sendevent_custom(Node, SubClassName, Headers) -> + {sendevent, Node} ! {sendevent, 'CUSTOM', SubClassName, Headers}, + receive + ok -> ok; + {error, Reason} -> {error, Reason} + after ?TIMEOUT -> + timeout + end. + + %% @doc Send a message to the call identified by `UUID'. `Headers' is a list of %% `{Key, Value}' string tuples. sendmsg(Node, UUID, Headers) -> @@ -246,15 +261,16 @@ handlecall(Node, UUID) -> end. %% @private -start_handler(Node, Type, Module, Function) -> +start_handler(Node, Type, Module, Function, State) -> Self = self(), spawn(fun() -> monitor_node(Node, true), {foo, Node} ! Type, receive ok -> + io:format("OK!!!!!!!~n"), Self ! {Type, {ok, self()}}, - apply(Module, Function, [Node]); + apply(Module, Function, [Node, State]); {error,Reason} -> Self ! {Type, {error, Reason}} after ?TIMEOUT -> @@ -281,8 +297,8 @@ start_handler(Node, Type, Module, Function) -> %% This function returns either `{ok, Pid}' where `Pid' is the pid of the newly %% spawned process, `{error, Reason}' or the atom `timeout' if FreeSWITCH did %% not respond. -start_log_handler(Node, Module, Function) -> - start_handler(Node, register_log_handler, Module, Function). +start_log_handler(Node, Module, Function, State) -> + start_handler(Node, register_log_handler, Module, Function, State). %% @todo Notify the process if it gets replaced with a new event handler. @@ -300,8 +316,8 @@ start_log_handler(Node, Module, Function) -> %% This function returns either `{ok, Pid}' where `Pid' is the pid of the newly %% spawned process, `{error, Reason}' or the atom `timeout' if FreeSWITCH did %% not respond. -start_event_handler(Node, Module, Function) -> - start_handler(Node, register_event_handler, Module, Function). +start_event_handler(Node, Module, Function, State) -> + start_handler(Node, register_event_handler, Module, Function, State). %% @doc Spawn Module:Function as an XML config fetch handler for configs of type %% `Section'. See the FreeSWITCH documentation for mod_xml_rpc for more @@ -321,5 +337,5 @@ start_event_handler(Node, Module, Function) -> %% This function returns either `{ok, Pid}' where `Pid' is the pid of the newly %% spawned process, `{error, Reason}' or the atom `timeout' if FreeSWITCH did %% not respond. -start_fetch_handler(Node, Section, Module, Function) -> - start_handler(Node, {bind, Section}, Module, Function). +start_fetch_handler(Node, Section, Module, Function, State) -> + start_handler(Node, {bind, Section}, Module, Function, State).