diff --git a/apps/roster/src/protocol/roster_message.erl b/apps/roster/src/protocol/roster_message.erl index e1350816cafb5b4063c97c43ff9e905099375ccb..7ef37e15eaada414e34cb36eff98d38673e3492a 100644 --- a/apps/roster/src/protocol/roster_message.erl +++ b/apps/roster/src/protocol/roster_message.erl @@ -49,7 +49,13 @@ info(#'Message'{status = [], id = [], feed_id = F, from=From0, to = To, try From = case hd(binary:split(ClientId, <<"_">>)) of <<"sys">> -> From0; - <<"emqttd">> -> roster:phone_id(ClientId) + <<"emqttd">> -> + PhoneId = roster:phone_id(ClientId), + case Type of + [forward] when PhoneId == To -> From0; + [forward] -> <<>>; %% bad request + _ -> PhoneId + end end, {R, UID} = diff --git a/apps/roster/src/protocol/roster_schedule.erl b/apps/roster/src/protocol/roster_schedule.erl index d1469ed5cd5593bce955909d9009b929d6e7c320..e71952bb773a0d78beb92b2159384bfe152539ab 100644 --- a/apps/roster/src/protocol/roster_schedule.erl +++ b/apps/roster/src/protocol/roster_schedule.erl @@ -36,6 +36,19 @@ info(#'History'{feed = {act, <<"publish">>, PhoneId} = Feed, size = N0, end, {reply, {bert, Reply}, Req, State}; +info(#'Job'{id = [], feed_id = {act, <<"publish">>, PhoneId} = Feed, time = [], + data = [#'Message'{type = [forward]} | _] = Msgs, status = init}, Req, #cx{params = ClientId} = S) -> + ?ROSTER_LOG_REQ('Job', message_forward, ClientId, "Feed=~p", [Feed]), + Reply = + case PhoneId == roster:phone_id(ClientId) of + true -> + [ roster_message:info(Msg, Req, S) || Msg = #'Message'{status = []} <- Msgs ], + <<>>; + false -> + #io{code = #error{code = permission_denied}} + end, + {reply, {bert, Reply}, Req, S}; + info(#'Job'{id = [], feed_id = {act, <<"publish">>, PhoneId} = Feed, time = Time0, data = [#'Message'{} | _], status = init} = J0, Req, #cx{params = ClientId, client_pid = C} = S) -> ?ROSTER_LOG_REQ('Job', init, ClientId, "Feed=~p, Time=~p", [Feed, Time0]), @@ -152,7 +165,8 @@ do_scheduled_work({_TimeStamp, JobId} = SchedKey, MqttClient) -> end. do_work(MqttClient, #'Job'{feed_id = #act{data = _PhoneId}, data = [#'Message'{} | _] = Msgs}) -> - [send_msg(MqttClient, Msg) || Msg = #'Message'{} <- Msgs]. + [send_msg(MqttClient, Msg) || Msg = #'Message'{} <- Msgs], + ok. complete_job(MqttClient, Job = #'Job'{feed_id = #act{data = PhoneId}}) -> Job1 = Job#'Job'{status = complete, data = [{done, os:system_time(millisecond)}]},