mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-12 21:52:07 +02:00
In mod_last*:get_last_iq/4, check for user resources first to return 0 seconds if there is one
Fixes problem 2 of EJAB-1158.
This commit is contained in:
parent
100f2e9a13
commit
0c484369c9
|
@ -153,19 +153,28 @@ get_last(LUser, LServer) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
get_last_iq(IQ, SubEl, LUser, LServer) ->
|
get_last_iq(IQ, SubEl, LUser, LServer) ->
|
||||||
case get_last(LUser, LServer) of
|
case ejabberd_sm:get_user_resources(LUser, LServer) of
|
||||||
{error, _Reason} ->
|
[] ->
|
||||||
IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
|
case get_last(LUser, LServer) of
|
||||||
not_found ->
|
{error, _Reason} ->
|
||||||
IQ#iq{type = error, sub_el = [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
|
IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
|
||||||
{ok, TimeStamp, Status} ->
|
not_found ->
|
||||||
TimeStamp2 = now_to_seconds(now()),
|
IQ#iq{type = error, sub_el = [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
|
||||||
Sec = TimeStamp2 - TimeStamp,
|
{ok, TimeStamp, Status} ->
|
||||||
|
TimeStamp2 = now_to_seconds(now()),
|
||||||
|
Sec = TimeStamp2 - TimeStamp,
|
||||||
|
IQ#iq{type = result,
|
||||||
|
sub_el = [{xmlelement, "query",
|
||||||
|
[{"xmlns", ?NS_LAST},
|
||||||
|
{"seconds", integer_to_list(Sec)}],
|
||||||
|
[{xmlcdata, Status}]}]}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
IQ#iq{type = result,
|
IQ#iq{type = result,
|
||||||
sub_el = [{xmlelement, "query",
|
sub_el = [{xmlelement, "query",
|
||||||
[{"xmlns", ?NS_LAST},
|
[{"xmlns", ?NS_LAST},
|
||||||
{"seconds", integer_to_list(Sec)}],
|
{"seconds", "0"}],
|
||||||
[{xmlcdata, Status}]}]}
|
[]}]}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
on_presence_update(User, Server, _Resource, Status) ->
|
on_presence_update(User, Server, _Resource, Status) ->
|
||||||
|
|
|
@ -151,19 +151,28 @@ get_last(LUser, LServer) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
get_last_iq(IQ, SubEl, LUser, LServer) ->
|
get_last_iq(IQ, SubEl, LUser, LServer) ->
|
||||||
case get_last(LUser, LServer) of
|
case ejabberd_sm:get_user_resources(LUser, LServer) of
|
||||||
{error, _Reason} ->
|
[] ->
|
||||||
IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
|
case get_last(LUser, LServer) of
|
||||||
not_found ->
|
{error, _Reason} ->
|
||||||
IQ#iq{type = error, sub_el = [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
|
IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]};
|
||||||
{ok, TimeStamp, Status} ->
|
not_found ->
|
||||||
TimeStamp2 = now_to_seconds(now()),
|
IQ#iq{type = error, sub_el = [SubEl, ?ERR_SERVICE_UNAVAILABLE]};
|
||||||
Sec = TimeStamp2 - TimeStamp,
|
{ok, TimeStamp, Status} ->
|
||||||
|
TimeStamp2 = now_to_seconds(now()),
|
||||||
|
Sec = TimeStamp2 - TimeStamp,
|
||||||
|
IQ#iq{type = result,
|
||||||
|
sub_el = [{xmlelement, "query",
|
||||||
|
[{"xmlns", ?NS_LAST},
|
||||||
|
{"seconds", integer_to_list(Sec)}],
|
||||||
|
[{xmlcdata, Status}]}]}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
IQ#iq{type = result,
|
IQ#iq{type = result,
|
||||||
sub_el = [{xmlelement, "query",
|
sub_el = [{xmlelement, "query",
|
||||||
[{"xmlns", ?NS_LAST},
|
[{"xmlns", ?NS_LAST},
|
||||||
{"seconds", integer_to_list(Sec)}],
|
{"seconds", "0"}],
|
||||||
[{xmlcdata, Status}]}]}
|
[]}]}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
on_presence_update(User, Server, _Resource, Status) ->
|
on_presence_update(User, Server, _Resource, Status) ->
|
||||||
|
|
Loading…
Reference in New Issue
Block a user