]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Make XML fetch reply ACKs distinguishable, update freeswitch.erl
authorAndrew Thompson <andrew@hijacked.us>
Sat, 17 Jul 2010 18:02:57 +0000 (14:02 -0400)
committerAndrew Thompson <andrew@hijacked.us>
Sat, 17 Jul 2010 18:02:57 +0000 (14:02 -0400)
src/mod/event_handlers/mod_erlang_event/freeswitch.erl
src/mod/event_handlers/mod_erlang_event/handle_msg.c
src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c

index 97bea8da6df1bb779395c25cf0cba4f8bd9d10b0..b508a70f44df4966e72c12734b6c352afd9ea77d 100644 (file)
@@ -19,7 +19,7 @@
                get_event_header/2, get_event_body/1,
                get_event_name/1, getpid/1, sendmsg/3,
                sendevent/3, sendevent_custom/3, handlecall/2, handlecall/3, start_fetch_handler/5,
-               start_log_handler/4, start_event_handler/4]).
+               start_log_handler/4, start_event_handler/4, fetch_reply/3]).
 -define(TIMEOUT, 5000).
 
 %% @doc Return the value for a specific header in an event or `{error,notfound}'.
@@ -55,9 +55,21 @@ send(Node, Term) ->
                Response ->
                        Response
        after ?TIMEOUT ->
-               timeout
+                       timeout
+       end.
+
+fetch_reply(Node, FetchID, Reply) ->
+       {send, Node} ! {fetch_reply, FetchID, Reply},
+       receive
+               {ok, FetchID} ->
+                       ok;
+               {error, FetchID, Reason} ->
+                       {error, Reason}
+       after ?TIMEOUT ->
+                       timeout
        end.
 
+
 %% @doc Make a blocking API call to FreeSWITCH. The result of the API call is
 %% returned or `timeout' if FreeSWITCH fails to respond.
 api(Node, Cmd, Args) ->
@@ -268,7 +280,6 @@ start_handler(Node, Type, Module, Function, State) ->
                {foo, Node} ! Type,
                receive
                        ok ->
-                               io:format("OK!!!!!!!~n"),
                                Self ! {Type, {ok, self()}},
                                apply(Module, Function, [Node, State]);
                        {error,Reason} ->
index c2026ed67a9d3602df92c338ada5727cfef98c29..18d4aa791ddb9caa36ecf7d9a232c422320d860c 100644 (file)
@@ -205,18 +205,22 @@ static switch_status_t handle_msg_fetch_reply(listener_t *listener, ei_x_buff *
                        /* Relay the status back to the fetch responder. */
                        if (status == is_waiting) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found waiting slot for %s\n", uuid_str);
+                               ei_x_encode_tuple_header(rbuf, 2);
                                ei_x_encode_atom(rbuf, "ok");
+                               _ei_x_encode_string(rbuf, uuid_str);
                                /* Return here to avoid freeing the reply. */
                                return SWITCH_STATUS_SUCCESS;
                        } else if (status == is_timeout) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Handler for %s timed out\n", uuid_str);
-                               ei_x_encode_tuple_header(rbuf, 2);
+                               ei_x_encode_tuple_header(rbuf, 3);
                                ei_x_encode_atom(rbuf, "error");
+                               _ei_x_encode_string(rbuf, uuid_str);
                                ei_x_encode_atom(rbuf, "timeout");
                        } else {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found filled slot for %s\n", uuid_str);
-                               ei_x_encode_tuple_header(rbuf, 2);
+                               ei_x_encode_tuple_header(rbuf, 3);
                                ei_x_encode_atom(rbuf, "error");
+                               _ei_x_encode_string(rbuf, uuid_str);
                                ei_x_encode_atom(rbuf, "duplicate_response");
                        }
                } else {
index adcd23eafe106891a87ab767a0a4c73015e1c014..4e0126f853bb1e4ee3409cd0bad2be3e67396064 100644 (file)
@@ -460,6 +460,11 @@ static switch_xml_t erlang_fetch(const char *sectionstr, const char *tag_name, c
 
        ei_get_type(rep->buff, &rep->index, &type, &size);
 
+       if (type == ERL_NIL_EXT) {
+               // empty string returned
+               goto cleanup;
+       }
+
        if (type != ERL_STRING_EXT && type != ERL_BINARY_EXT) { /* XXX no unicode or character codes > 255 */
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "XML fetch response contained non ASCII characters? (was type %d of size %d)\n", type,
                                                  size);