From 3e9c9fc750dff18d546e13c404402823eb490a5e Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 13 Dec 2010 12:17:28 +0100 Subject: [PATCH 1/9] Remove Type and Spec, backport list comprehensions, so R12B-5 can compile --- src/pg2_backport.erl | 56 +++++--------------------------------------- 1 file changed, 6 insertions(+), 50 deletions(-) diff --git a/src/pg2_backport.erl b/src/pg2_backport.erl index 9c9f5d6bc..f706e66a9 100644 --- a/src/pg2_backport.erl +++ b/src/pg2_backport.erl @@ -30,18 +30,12 @@ %%% Exported functions %%% --spec start_link() -> {'ok', pid()} | {'error', term()}. - start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). --spec start() -> {'ok', pid()} | {'error', term()}. - start() -> ensure_started(). --spec create(term()) -> 'ok'. - create(Name) -> ensure_started(), case ets:member(pg2_table, {group, Name}) of @@ -55,10 +49,6 @@ create(Name) -> ok end. --type name() :: term(). - --spec delete(name()) -> 'ok'. - delete(Name) -> ensure_started(), global:trans({{?MODULE, Name}, self()}, @@ -67,8 +57,6 @@ delete(Name) -> end), ok. --spec join(name(), pid()) -> 'ok' | {'error', {'no_such_group', term()}}. - join(Name, Pid) when is_pid(Pid) -> ensure_started(), case ets:member(pg2_table, {group, Name}) of @@ -83,8 +71,6 @@ join(Name, Pid) when is_pid(Pid) -> ok end. --spec leave(name(), pid()) -> 'ok' | {'error', {'no_such_group', name()}}. - leave(Name, Pid) when is_pid(Pid) -> ensure_started(), case ets:member(pg2_table, {group, Name}) of @@ -99,10 +85,6 @@ leave(Name, Pid) when is_pid(Pid) -> ok end. --type get_members_ret() :: [pid()] | {'error', {'no_such_group', name()}}. - --spec get_members(name()) -> get_members_ret(). - get_members(Name) -> ensure_started(), case ets:member(pg2_table, {group, Name}) of @@ -112,8 +94,6 @@ get_members(Name) -> {error, {no_such_group, Name}} end. --spec get_local_members(name()) -> get_members_ret(). - get_local_members(Name) -> ensure_started(), case ets:member(pg2_table, {group, Name}) of @@ -123,16 +103,10 @@ get_local_members(Name) -> {error, {no_such_group, Name}} end. --spec which_groups() -> [name()]. - which_groups() -> ensure_started(), all_groups(). --type gcp_error_reason() :: {'no_process', term()} | {'no_such_group', term()}. - --spec get_closest_pid(term()) -> pid() | {'error', gcp_error_reason()}. - get_closest_pid(Name) -> case get_local_members(Name) of [Pid] -> @@ -157,8 +131,6 @@ get_closest_pid(Name) -> -record(state, {}). --spec init([]) -> {'ok', #state{}}. - init([]) -> Ns = nodes(), net_kernel:monitor_nodes(true), @@ -169,14 +141,6 @@ init([]) -> pg2_table = ets:new(pg2_table, [ordered_set, protected, named_table]), {ok, #state{}}. --type call() :: {'create', name()} - | {'delete', name()} - | {'join', name(), pid()} - | {'leave', name(), pid()}. - --spec handle_call(call(), _, #state{}) -> - {'reply', 'ok', #state{}}. - handle_call({create, Name}, _From, S) -> assure_group(Name), {reply, ok, S}; @@ -195,12 +159,6 @@ handle_call(Request, From, S) -> [Request, From]), {noreply, S}. --type all_members() :: [[name(),...]]. --type cast() :: {'exchange', node(), all_members()} - | {'del_member', name(), pid()}. - --spec handle_cast(cast(), #state{}) -> {'noreply', #state{}}. - handle_cast({exchange, _Node, List}, S) -> store(List), {noreply, S}; @@ -208,8 +166,6 @@ handle_cast(_, S) -> %% Ignore {del_member, Name, Pid}. {noreply, S}. --spec handle_info(tuple(), #state{}) -> {'noreply', #state{}}. - handle_info({'DOWN', MonitorRef, process, _Pid, _Info}, S) -> member_died(MonitorRef), {noreply, S}; @@ -222,8 +178,6 @@ handle_info({new_pg2, Node}, S) -> handle_info(_, S) -> {noreply, S}. --spec terminate(term(), #state{}) -> 'ok'. - terminate(_Reason, _S) -> true = ets:delete(pg2_table), ok. @@ -289,8 +243,9 @@ join_group(Name, Pid) -> try _ = ets:update_counter(pg2_table, Member_Name_Pid, {2, +1}) catch _:_ -> true = ets:insert(pg2_table, {Member_Name_Pid, 1}), - _ = [ets:insert(pg2_table, {{local_member, Name, Pid}}) || - node(Pid) =:= node()], + _ = [ets:insert(pg2_table, {{local_member, Name, PidX}}) || + PidX <- [Pid], + node(PidX) =:= node()], true = ets:insert(pg2_table, {{pid, Pid, Name}}) end. @@ -301,8 +256,9 @@ leave_group(Name, Pid) -> if N =:= 0 -> true = ets:delete(pg2_table, {pid, Pid, Name}), - _ = [ets:delete(pg2_table, {local_member, Name, Pid}) || - node(Pid) =:= node()], + _ = [ets:delete(pg2_table, {local_member, Name, PidX}) || + PidX <- [Pid], + node(PidX) =:= node()], true = ets:delete(pg2_table, Member_Name_Pid); true -> ok From d9c01e8ed94732b5617f003afb479a6da63c7a98 Mon Sep 17 00:00:00 2001 From: "W. Andrew Loe III" Date: Fri, 3 Dec 2010 13:53:38 -0800 Subject: [PATCH 2/9] Ignore OS X libraries. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0b52e71ff..60f1a2614 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ /doc/version.tex /src/*.beam /src/*.so +/src/*.so.dSYM /src/*/*.beam /src/*/Makefile /src/Makefile From 606c207e21dd3eca63b976407e11405b6bf1bdba Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Fri, 17 Dec 2010 17:26:20 +0900 Subject: [PATCH 3/9] Make sure 'closed' event is correctly processed on every state --- src/ejabberd_s2s_out.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl index f59e8ec8e..b07c9dcd3 100644 --- a/src/ejabberd_s2s_out.erl +++ b/src/ejabberd_s2s_out.erl @@ -248,7 +248,7 @@ open_socket(init, StateData) -> wait_before_reconnect(StateData) end end; -open_socket(stop, StateData) -> +open_socket(closed, StateData) -> ?INFO_MSG("s2s connection: ~s -> ~s (stopped in open socket)", [StateData#state.myname, StateData#state.server]), {stop, normal, StateData}; From b9f4daca462bc0b6258e5afc33e9c70694d0351a Mon Sep 17 00:00:00 2001 From: Badlop Date: Thu, 16 Dec 2010 13:33:30 +0100 Subject: [PATCH 4/9] Revert branch name back to 2.1.x --- doc/dev.html | 4 ++-- doc/features.html | 4 ++-- doc/guide.html | 4 ++-- doc/version.tex | 2 +- src/ejabberd.app | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/dev.html b/doc/dev.html index 6709b6a12..b7fea526a 100644 --- a/doc/dev.html +++ b/doc/dev.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.6 Developers Guide +<TITLE>Ejabberd 2.1.x Developers Guide @@ -49,7 +49,7 @@ TD P{margin:0px;}

-

Ejabberd 2.1.6 Developers Guide

Alexey Shchepin
+

Ejabberd 2.1.x Developers Guide

Alexey Shchepin
mailto:alexey@sevcom.net
xmpp:aleksey@jabber.ru

diff --git a/doc/features.html b/doc/features.html index 8ed0bd76c..503ac0d3f 100644 --- a/doc/features.html +++ b/doc/features.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.6 Feature Sheet +<TITLE>Ejabberd 2.1.x Feature Sheet @@ -50,7 +50,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}

-

Ejabberd 2.1.6 Feature Sheet

Sander Devrieze
+

Ejabberd 2.1.x Feature Sheet

Sander Devrieze
mailto:s.devrieze@pandora.be
xmpp:sander@devrieze.dyndns.org

diff --git a/doc/guide.html b/doc/guide.html index b1b30a6d6..8835f90ba 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -6,7 +6,7 @@ - ejabberd 2.1.6 + ejabberd 2.1.x Installation and Operation Guide @@ -76,7 +76,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}


- +
ejabberd 2.1.6
ejabberd 2.1.x
 
Installation and Operation Guide

diff --git a/doc/version.tex b/doc/version.tex index 10a0da534..905ac86f2 100644 --- a/doc/version.tex +++ b/doc/version.tex @@ -1,2 +1,2 @@ % ejabberd version (automatically generated). -\newcommand{\version}{2.1.6} +\newcommand{\version}{2.1.x} diff --git a/src/ejabberd.app b/src/ejabberd.app index c2d282d31..67653d241 100644 --- a/src/ejabberd.app +++ b/src/ejabberd.app @@ -2,7 +2,7 @@ {application, ejabberd, [{description, "ejabberd"}, - {vsn, "2.1.6"}, + {vsn, "2.1.x"}, {modules, [acl, adhoc, configure, From b47c50145d6c0b9643dc3d9578617e3231cdf793 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Mon, 20 Dec 2010 17:56:24 +0200 Subject: [PATCH 5/9] Make jlib:ip_to_list safe to use --- src/jlib.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/jlib.erl b/src/jlib.erl index cb70c5a4a..1d5648a2b 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -803,4 +803,6 @@ ip_to_list({_,_,_,_,_,_,_,_} = Ipv6Address) -> inet_parse:ntoa(Ipv6Address); %% This function clause could use inet_parse too: ip_to_list({A,B,C,D}) -> - lists:flatten(io_lib:format("~w.~w.~w.~w",[A,B,C,D])). + lists:flatten(io_lib:format("~w.~w.~w.~w",[A,B,C,D])); +ip_to_list(IP) -> + lists:flatten(io_lib:format("~w", [IP])). From 4c8b034874afb421a948f2dedfda669106ce255c Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Tue, 28 Dec 2010 21:09:15 +0900 Subject: [PATCH 6/9] Change c2s state before offline messages resending --- src/ejabberd_c2s.erl | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 6dbcd778a..52e4fa378 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1733,37 +1733,33 @@ presence_update(From, Packet, StateData) -> StateData#state.pres_invis, ?DEBUG("from unavail = ~p~n", [FromUnavail]), NewState = + NewStateData = StateData#state{pres_last = Packet, + pres_invis = false, + pres_timestamp = Timestamp}, if FromUnavail -> ejabberd_hooks:run(user_available_hook, - StateData#state.server, - [StateData#state.jid]), + NewStateData#state.server, + [NewStateData#state.jid]), if NewPriority >= 0 -> - resend_offline_messages(StateData), - resend_subscription_requests(StateData); + resend_offline_messages(NewStateData), + resend_subscription_requests(NewStateData); true -> ok end, - presence_broadcast_first( - From, StateData#state{pres_last = Packet, - pres_invis = false, - pres_timestamp = Timestamp - }, Packet); + presence_broadcast_first(From, NewStateData, Packet); true -> - presence_broadcast_to_trusted(StateData, + presence_broadcast_to_trusted(NewStateData, From, - StateData#state.pres_f, - StateData#state.pres_a, + NewStateData#state.pres_f, + NewStateData#state.pres_a, Packet), if OldPriority < 0, NewPriority >= 0 -> - resend_offline_messages(StateData); + resend_offline_messages(NewStateData); true -> ok end, - StateData#state{pres_last = Packet, - pres_invis = false, - pres_timestamp = Timestamp - } + NewStateData end, NewState end. From 15c27c9dddd3cb6e5addf0ac3ae31f6ecfea356c Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Mon, 3 Jan 2011 09:52:12 +0100 Subject: [PATCH 7/9] fix bad jid issue --- src/mod_shared_roster.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index 64a8291b6..d5070c81c 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -350,7 +350,7 @@ out_subscription(UserFrom, ServerFrom, JIDTo, unsubscribed) -> %% Remove pending out subscription #jid{luser = UserTo, lserver = ServerTo} = JIDTo, - JIDFrom = jlib:make_jid(UserFrom, UserTo, ""), + JIDFrom = jlib:make_jid(UserFrom, ServerFrom, ""), Mod:out_subscription(UserTo, ServerTo, JIDFrom, unsubscribe), %% Remove pending in subscription From cffe224d4a0a5c95a235efa30264e19f070ae177 Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Mon, 3 Jan 2011 15:26:44 +0100 Subject: [PATCH 8/9] log and drop messages only from autofilter --- src/ejabberd_router.erl | 1 + src/mod_autofilter.erl | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl index ba4072cfa..e6aa7ea51 100644 --- a/src/ejabberd_router.erl +++ b/src/ejabberd_router.erl @@ -415,6 +415,7 @@ do_route(OrigFrom, OrigTo, OrigPacket) -> end end; drop -> + ?DEBUG("packet dropped~n", []), ok end. diff --git a/src/mod_autofilter.erl b/src/mod_autofilter.erl index 97b374b6b..ef18d5bc7 100644 --- a/src/mod_autofilter.erl +++ b/src/mod_autofilter.erl @@ -110,12 +110,14 @@ offline_message(From, To, Packet) -> mnesia:dirty_write(Record), ok. -filter_packet({From, To, Packet}) -> +filter_packet({From, To, {xmlelement, "message", _, _}}) -> {User, Server, _} = jlib:jid_tolower(From), case mnesia:dirty_read({autofilter, {User, Server}}) of - [#autofilter{drop=true}] -> drop; + [#autofilter{drop=true}] -> drop _ -> {From, To, Packet} - end. + end; +filter_packet(OK) -> + OK. close_session(SID, JID) -> close_session(SID, JID, []). From 4a9e7f0a3ac3288a87d3f0c5e52af91a20af3514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Tue, 4 Jan 2011 11:18:14 +0000 Subject: [PATCH 9/9] Use route instead of send_element to go through standard workflow Offline messages should thus be tracked for ack if needed (TEXTO-226). Signed-off-by: Evgeniy Khramtsov --- src/ejabberd_c2s.erl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 600f6fa20..ec8509fed 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -1572,7 +1572,7 @@ change_shaper(StateData, JID) -> send_text(StateData, Text) when StateData#state.xml_socket -> ?DEBUG("Send Text on stream = ~p", [lists:flatten(Text)]), - (StateData#state.sockmod):send_xml(StateData#state.socket, + (StateData#state.sockmod):send_xml(StateData#state.socket, {xmlstreamraw, Text}); send_text(StateData, Text) -> ?DEBUG("Send XML on stream = ~p", [Text]), @@ -2169,11 +2169,13 @@ resend_offline_messages(StateData) -> jlib:jid_to_string(To), Attrs), FixedPacket = {xmlelement, Name, Attrs2, Els}, - send_element(StateData, FixedPacket), - ejabberd_hooks:run(user_receive_packet, - StateData#state.server, - [StateData#state.debug, StateData#state.jid, - From, To, FixedPacket]); + %% Use route instead of send_element to go through standard workflow + ejabberd_router:route(From, To, Packet); + %% send_element(StateData, FixedPacket), + %% ejabberd_hooks:run(user_receive_packet, + %% StateData#state.server, + %% [StateData#state.jid, + %% From, To, FixedPacket]); true -> ok end