summaryrefslogtreecommitdiff
path: root/components/service_edge
diff options
context:
space:
mode:
authorMagnus Feuer <mfeuer@jaguarlandrover.com>2015-06-08 14:59:21 -0700
committerMagnus Feuer <mfeuer@jaguarlandrover.com>2015-06-09 13:54:45 -0700
commit72d2d4ab6c126c166d0d17d710bf2c25802d471f (patch)
treee678c58766b711bfaaa94bfddcdd2997c86b661a /components/service_edge
parent2f3850291b8c34613cecd266b88d908ff677b145 (diff)
downloadrvi_core-72d2d4ab6c126c166d0d17d710bf2c25802d471f.tar.gz
Converted timeout management to Unix time in msec
Diffstat (limited to 'components/service_edge')
-rw-r--r--components/service_edge/src/service_edge_rpc.erl26
1 files changed, 24 insertions, 2 deletions
diff --git a/components/service_edge/src/service_edge_rpc.erl b/components/service_edge/src/service_edge_rpc.erl
index 9914bed..cff7fad 100644
--- a/components/service_edge/src/service_edge_rpc.erl
+++ b/components/service_edge/src/service_edge_rpc.erl
@@ -349,9 +349,9 @@ handle_call({rvi, get_available_services, []}, _From, St) ->
{reply, service_discovery_rpc:get_all_services(St#st.cs), St};
handle_call({ rvi, handle_local_message,
- [SvcName, Timeout, Parameters] }, _From, St) ->
+ [SvcName, TimeoutArg, Parameters] }, _From, St) ->
?debug("service_edge_rpc:local_msg: service_name: ~p", [SvcName]),
- ?debug("service_edge_rpc:local_msg: timeout: ~p", [Timeout]),
+ ?debug("service_edge_rpc:local_msg: timeout: ~p", [TimeoutArg]),
?debug("service_edge_rpc:local_msg: parameters: ~p", [Parameters]),
%%
@@ -362,7 +362,28 @@ handle_call({ rvi, handle_local_message,
[ok, Certificate, Signature ] =
authorize_rpc:authorize_local_message(St#st.cs, SvcName),
+ %%
+ %% Slick but ugly.
+ %% If the timeout is more than 24 hrs old when parsed as unix time,
+ %% then we are looking at a relative msec timeout. Convert accordingly
+ %%
+ { Mega, Sec, _Micro } = now(),
+ Now = Mega * 1000000 + Sec,
+
+ Timeout =
+ case TimeoutArg - Now < -86400 of
+ true -> %% Relative timeout arg. Convert to unix time msec
+ ?debug("service_edge_rpc:local_msg(): Timeout ~p is relative.",
+ [TimeoutArg]),
+ (Now * 1000) + TimeoutArg;
+
+ false -> %% Absolute timoeut. Convert to unix time msec
+ TimeoutArg * 1000
+ end,
+
+
+
%%
%% Check if this is a local service by trying to resolve its service name.
@@ -531,6 +552,7 @@ dispatch_to_local_service([ $w, $s, $: | WSPidStr], message,
wse:call(list_to_pid(WSPidStr), wse:window(),
"message",
[ "service_name", SvcName ] ++ flatten_ws_args(Args)),
+ ?debug("service_edge:dispatch_to_local_service(message, websock): Done", []),
ok;
%% Dispatch to regular JSON-RPC over HTTP.