diff --git a/src/ejabberd_http_ws.erl b/src/ejabberd_http_ws.erl index d8c58618e..35b38e3e9 100644 --- a/src/ejabberd_http_ws.erl +++ b/src/ejabberd_http_ws.erl @@ -364,5 +364,8 @@ parsed_items(List) -> -spec route_text(pid(), binary()) -> ok. route_text(Pid, Data) -> - Pid ! {text, Data}, - ok. + Pid ! {text_with_reply, Data, self()}, + receive + {text_reply, Pid} -> + ok + end. diff --git a/src/ejabberd_websocket.erl b/src/ejabberd_websocket.erl index 3b4f03bdf..01a7aa6a1 100644 --- a/src/ejabberd_websocket.erl +++ b/src/ejabberd_websocket.erl @@ -225,6 +225,16 @@ ws_loop(FrameInfo, Socket, WsHandleLoopPid, SocketMode, Shaper) -> end, erlang:demonitor(Ref), websocket_close(Socket, WsHandleLoopPid, SocketMode, Code); + {text_with_reply, Data, Sender} -> + SocketMode:send(Socket, encode_frame(Data, 1)), + Sender ! {text_reply, self()}, + ws_loop(FrameInfo, Socket, WsHandleLoopPid, + SocketMode, Shaper); + {data_with_reply, Data, Sender} -> + SocketMode:send(Socket, encode_frame(Data, 2)), + Sender ! {data_reply, self()}, + ws_loop(FrameInfo, Socket, WsHandleLoopPid, + SocketMode, Shaper); {text, Data} -> SocketMode:send(Socket, encode_frame(Data, 1)), ws_loop(FrameInfo, Socket, WsHandleLoopPid,