diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl index 3ff9f2908..f6d0e765d 100644 --- a/src/ejabberd_sm.erl +++ b/src/ejabberd_sm.erl @@ -159,9 +159,9 @@ close_session(SID, User, Server, Resource) -> ejabberd_hooks:run(sm_remove_connection_hook, JID#jid.lserver, [SID, JID, Info]). --spec check_in_subscription(any(), binary(), binary(), - any(), any(), any()) -> any(). - +-spec check_in_subscription(boolean(), binary(), binary(), jid(), + subscribe | subscribed | unsubscribe | unsubscribed, + binary()) -> boolean() | {stop, false}. check_in_subscription(Acc, User, Server, _JID, _Type, _Reason) -> case ejabberd_auth:is_user_exists(User, Server) of true -> Acc; diff --git a/src/mod_http_upload_quota.erl b/src/mod_http_upload_quota.erl index 056edbedb..fa37b801f 100644 --- a/src/mod_http_upload_quota.erl +++ b/src/mod_http_upload_quota.erl @@ -263,8 +263,8 @@ code_change(_OldVsn, #state{server_host = ServerHost} = State, _Extra) -> %% ejabberd_hooks callback. %%-------------------------------------------------------------------- --spec handle_slot_request(term(), jid(), binary(), non_neg_integer(), binary()) - -> term(). +-spec handle_slot_request(allow | deny, jid(), binary(), + non_neg_integer(), binary()) -> allow | deny. handle_slot_request(allow, #jid{lserver = ServerHost} = JID, Path, Size, _Lang) -> diff --git a/src/mod_last.erl b/src/mod_last.erl index 6d0edebf0..56e3b1c5e 100644 --- a/src/mod_last.erl +++ b/src/mod_last.erl @@ -200,6 +200,7 @@ get_last_info(LUser, LServer) -> Res -> Res end. +-spec remove_user(binary(), binary()) -> any(). remove_user(User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server), diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 7e93a3166..2529b7389 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -191,7 +191,9 @@ remove_room(LServer, Name, Host) -> Mod:remove_room(LServer, LName, LHost), ok. -get_room_config(X, RoomState, _From, Lang) -> +-spec get_room_config([xdata_field()], mod_muc_room:state(), jid(), binary()) + -> [xdata_field()]. +get_room_config(XFields, RoomState, _From, Lang) -> Config = RoomState#state.config, Label = <<"Enable message archiving">>, Var = <<"muc#roomconfig_mam">>, @@ -203,8 +205,10 @@ get_room_config(X, RoomState, _From, Lang) -> label = translate:translate(Lang, Label), var = Var, values = [Val]}, - X ++ [XField]. + XFields ++ [XField]. +-spec set_room_option({pos_integer(), _}, binary(), [binary()], binary()) + -> {pos_integer(), _}. set_room_option(_Acc, <<"muc#roomconfig_mam">> = Opt, Vals, Lang) -> try Val = case Vals of @@ -222,6 +226,7 @@ set_room_option(_Acc, <<"muc#roomconfig_mam">> = Opt, Vals, Lang) -> set_room_option(Acc, _Opt, _Vals, _Lang) -> Acc. +-spec user_receive_packet(stanza(), ejabberd_c2s:state(), jid(), jid(), jid()) -> stanza(). user_receive_packet(Pkt, C2SState, JID, Peer, To) -> LUser = JID#jid.luser, LServer = JID#jid.lserver, @@ -239,6 +244,7 @@ user_receive_packet(Pkt, C2SState, JID, Peer, To) -> Pkt end. +-spec user_send_packet(stanza(), ejabberd_c2s:state(), jid(), jid()) -> stanza(). user_send_packet(Pkt, C2SState, JID, Peer) -> LUser = JID#jid.luser, LServer = JID#jid.lserver, @@ -256,10 +262,14 @@ user_send_packet(Pkt, C2SState, JID, Peer) -> Pkt end. +-spec user_send_packet_strip_tag(stanza(), ejabberd_c2s:state(), + jid(), jid()) -> stanza(). user_send_packet_strip_tag(Pkt, _C2SState, JID, _Peer) -> LServer = JID#jid.lserver, strip_my_archived_tag(Pkt, LServer). +-spec muc_filter_message(message(), mod_muc_room:state(), + jid(), jid(), binary()) -> message(). muc_filter_message(Pkt, #state{config = Config} = MUCState, RoomJID, From, FromNick) -> if Config#config.mam -> @@ -302,6 +312,7 @@ process_iq_v0_3(#iq{from = #jid{lserver = LServer}, process_iq_v0_3(IQ) -> process_iq(IQ). +-spec muc_process_iq(ignore | iq(), mod_muc_room:state()) -> ignore | iq(). muc_process_iq(#iq{type = T, lang = Lang, from = From, sub_els = [#mam_query{xmlns = NS}]} = IQ, @@ -372,6 +383,8 @@ disco_sm_features({result, OtherFeatures}, disco_sm_features(Acc, _From, _To, _Node, _Lang) -> Acc. +-spec message_is_archived(boolean(), ejabberd_c2s:state(), + jid(), jid(), message()) -> boolean(). message_is_archived(true, _C2SState, _Peer, _JID, _Pkt) -> true; message_is_archived(false, C2SState, Peer, diff --git a/src/mod_metrics.erl b/src/mod_metrics.erl index 605fe3d6b..7861542c5 100644 --- a/src/mod_metrics.erl +++ b/src/mod_metrics.erl @@ -86,9 +86,12 @@ sm_register_connection_hook(_SID, #jid{lserver=LServer}, _Info) -> sm_remove_connection_hook(_SID, #jid{lserver=LServer}, _Info) -> push(LServer, sm_remove_connection). +-spec user_send_packet(stanza(), ejabberd_c2s:state(), jid(), jid()) -> stanza(). user_send_packet(Packet, _C2SState, #jid{lserver=LServer}, _To) -> push(LServer, user_send_packet), Packet. + +-spec user_receive_packet(stanza(), ejabberd_c2s:state(), jid(), jid(), jid()) -> stanza(). user_receive_packet(Packet, _C2SState, _JID, _From, #jid{lserver=LServer}) -> push(LServer, user_receive_packet), Packet. diff --git a/src/mod_offline.erl b/src/mod_offline.erl index 03eb3c59a..509406aa4 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -533,6 +533,9 @@ resend_offline_messages(User, Server) -> _ -> ok end. +-spec pop_offline_messages([{route, jid(), jid(), message()}], + binary(), binary()) -> + [{route, jid(), jid(), message()}]. pop_offline_messages(Ls, User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server), diff --git a/src/mod_pres_counter.erl b/src/mod_pres_counter.erl index 786ba97f2..955e53f6f 100644 --- a/src/mod_pres_counter.erl +++ b/src/mod_pres_counter.erl @@ -51,6 +51,8 @@ stop(Host) -> depends(_Host, _Opts) -> []. +-spec check_packet(allow | deny, binary(), binary(), _, + {jid(), jid(), stanza()}, in | out) -> allow | deny. check_packet(_, _User, Server, _PrivacyList, {From, To, #presence{type = Type}}, Dir) -> IsSubscription = case Type of diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl index 0796a20bb..fadc7720c 100644 --- a/src/mod_pubsub.erl +++ b/src/mod_pubsub.erl @@ -722,6 +722,9 @@ out_subscription(User, Server, JID, subscribed) -> out_subscription(_, _, _, _) -> true. +-spec in_subscription(boolean(), binary(), binary(), jid(), + subscribe | subscribed | unsubscribe | unsubscribed, + binary()) -> true. in_subscription(_, User, Server, Owner, unsubscribed, _) -> unsubscribe_user(jid:make(User, Server, <<>>), Owner), true; diff --git a/src/mod_roster.erl b/src/mod_roster.erl index c118a61ff..2a41907a4 100644 --- a/src/mod_roster.erl +++ b/src/mod_roster.erl @@ -175,6 +175,7 @@ roster_version_on_db(Host) -> false). %% Returns a list that may contain an xmlelement with the XEP-237 feature if it's enabled. +-spec get_versioning_feature([xmpp_element()], binary()) -> [xmpp_element()]. get_versioning_feature(Acc, Host) -> case roster_versioning_enabled(Host) of true -> @@ -274,6 +275,7 @@ process_iq_get(#iq{from = From, to = To, lang = Lang, xmpp:make_error(IQ, xmpp:err_internal_server_error(Txt, Lang)) end. +-spec get_user_roster([#roster{}], {binary(), binary()}) -> [#roster{}]. get_user_roster(Acc, {LUser, LServer}) -> Items = get_roster(LUser, LServer), lists:filter(fun (#roster{subscription = none, @@ -416,6 +418,8 @@ push_item_version(Server, User, From, Item, end, ejabberd_sm:get_user_resources(User, Server)). +-spec get_subscription_lists({[ljid()], [ljid()]}, binary(), binary()) + -> {[ljid()], [ljid()]}. get_subscription_lists(_Acc, User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server), @@ -448,6 +452,9 @@ transaction(LServer, F) -> Mod = gen_mod:db_mod(LServer, ?MODULE), Mod:transaction(LServer, F). +-spec in_subscription(boolean(), binary(), binary(), jid(), + subscribe | subscribed | unsubscribe | unsubscribed, + binary()) -> boolean(). in_subscription(_, User, Server, JID, Type, Reason) -> process_subscription(in, User, Server, JID, Type, Reason). @@ -726,6 +733,7 @@ process_item_set_t(LUser, LServer, #roster_item{jid = JID1} = QueryItem) -> end; process_item_set_t(_LUser, _LServer, _) -> ok. +-spec get_in_pending_subscriptions([presence()], binary(), binary()) -> [presence()]. get_in_pending_subscriptions(Ls, User, Server) -> LServer = jid:nameprep(Server), Mod = gen_mod:db_mod(LServer, ?MODULE), @@ -755,6 +763,8 @@ read_subscription_and_groups(User, Server, LJID) -> Mod = gen_mod:db_mod(LServer, ?MODULE), Mod:read_subscription_and_groups(LUser, LServer, LJID). +-spec get_jid_info({subscription(), [binary()]}, binary(), binary(), jid()) + -> {subscription(), [binary()]}. get_jid_info(_, User, Server, JID) -> LJID = jid:tolower(JID), case read_subscription_and_groups(User, Server, LJID) of diff --git a/src/mod_service_log.erl b/src/mod_service_log.erl index a88b04b58..ea7768bca 100644 --- a/src/mod_service_log.erl +++ b/src/mod_service_log.erl @@ -54,14 +54,17 @@ stop(Host) -> depends(_Host, _Opts) -> []. +-spec log_user_send(stanza(), ejabberd_c2s:state(), jid(), jid()) -> stanza(). log_user_send(Packet, _C2SState, From, To) -> log_packet(From, To, Packet, From#jid.lserver), Packet. +-spec log_user_receive(stanza(), ejabberd_c2s:state(), jid(), jid(), jid()) -> stanza(). log_user_receive(Packet, _C2SState, _JID, From, To) -> log_packet(From, To, Packet, To#jid.lserver), Packet. +-spec log_packet(jid(), jid(), stanza(), binary()) -> ok. log_packet(From, To, Packet, Host) -> Loggers = gen_mod:get_module_opt(Host, ?MODULE, loggers, fun(L) -> diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index ac3717bd3..8b620514b 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -135,6 +135,7 @@ stop(Host) -> depends(_Host, _Opts) -> []. +-spec get_user_roster([#roster{}], {binary(), binary()}) -> [#roster{}]. get_user_roster(Items, US) -> {U, S} = US, DisplayedGroups = get_user_displayed_groups(US), @@ -202,6 +203,7 @@ get_rosteritem_name_vcard(_) -> %% This function rewrites the roster entries when moving or renaming %% them in the user contact list. +-spec process_item(#roster{}, binary()) -> #roster{}. process_item(RosterItem, Host) -> USFrom = {UserFrom, ServerFrom} = RosterItem#roster.us, {UserTo, ServerTo, ResourceTo} = RosterItem#roster.jid, @@ -292,6 +294,8 @@ set_item(User, Server, Resource, Item) -> jid:make(Server), ResIQ). +-spec get_subscription_lists({[ljid()], [ljid()]}, binary(), binary()) + -> {[ljid()], [ljid()]}. get_subscription_lists({F, T}, User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server), @@ -304,6 +308,8 @@ get_subscription_lists({F, T}, User, Server) -> SRJIDs = [{U1, S1, <<"">>} || {U1, S1} <- SRUsers], {lists:usort(SRJIDs ++ F), lists:usort(SRJIDs ++ T)}. +-spec get_jid_info({subscription(), [binary()]}, binary(), binary(), jid()) + -> {subscription(), [binary()]}. get_jid_info({Subscription, Groups}, User, Server, JID) -> LUser = jid:nodeprep(User), @@ -332,6 +338,9 @@ get_jid_info({Subscription, Groups}, User, Server, error -> {Subscription, Groups} end. +-spec in_subscription(boolean(), binary(), binary(), jid(), + subscribe | subscribed | unsubscribe | unsubscribed, + binary()) -> boolean(). in_subscription(Acc, User, Server, JID, Type, _Reason) -> process_subscription(in, User, Server, JID, Type, Acc). diff --git a/src/mod_shared_roster_ldap.erl b/src/mod_shared_roster_ldap.erl index 809887237..97ead9f3d 100644 --- a/src/mod_shared_roster_ldap.erl +++ b/src/mod_shared_roster_ldap.erl @@ -111,6 +111,7 @@ depends(_Host, _Opts) -> %%-------------------------------------------------------------------- %% Hooks %%-------------------------------------------------------------------- +-spec get_user_roster([#roster{}], {binary(), binary()}) -> [#roster{}]. get_user_roster(Items, {U, S} = US) -> SRUsers = get_user_to_groups_map(US, true), {NewItems1, SRUsersRest} = lists:mapfoldl(fun (Item, @@ -143,6 +144,7 @@ get_user_roster(Items, {U, S} = US) -> %% This function in use to rewrite the roster entries when moving or renaming %% them in the user contact list. +-spec process_item(#roster{}, binary()) -> #roster{}. process_item(RosterItem, _Host) -> USFrom = RosterItem#roster.us, {User, Server, _Resource} = RosterItem#roster.jid, @@ -158,6 +160,8 @@ process_item(RosterItem, _Host) -> _ -> RosterItem#roster{subscription = both, ask = none} end. +-spec get_subscription_lists({[ljid()], [ljid()]}, binary(), binary()) + -> {[ljid()], [ljid()]}. get_subscription_lists({F, T}, User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server), @@ -170,6 +174,8 @@ get_subscription_lists({F, T}, User, Server) -> SRJIDs = [{U1, S1, <<"">>} || {U1, S1} <- SRUsers], {lists:usort(SRJIDs ++ F), lists:usort(SRJIDs ++ T)}. +-spec get_jid_info({subscription(), [binary()]}, binary(), binary(), jid()) + -> {subscription(), [binary()]}. get_jid_info({Subscription, Groups}, User, Server, JID) -> LUser = jid:nodeprep(User), @@ -187,6 +193,9 @@ get_jid_info({Subscription, Groups}, User, Server, error -> {Subscription, Groups} end. +-spec in_subscription(boolean(), binary(), binary(), jid(), + subscribe | subscribed | unsubscribe | unsubscribed, + binary()) -> boolean(). in_subscription(Acc, User, Server, JID, Type, _Reason) -> process_subscription(in, User, Server, JID, Type, Acc). diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 4653d6e2c..f0fb556ba 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -423,6 +423,7 @@ search(LServer, XFields) -> Mod:search(LServer, Data, AllowReturnAll, MaxMatch). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec remove_user(binary(), binary()) -> any(). remove_user(User, Server) -> LUser = jid:nodeprep(User), LServer = jid:nameprep(Server),