]> granicus.if.org Git - ejabberd/commitdiff
*** empty log message ***
authorAlexey Shchepin <alexey@process-one.net>
Thu, 16 Jan 2003 20:24:53 +0000 (20:24 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Thu, 16 Jan 2003 20:24:53 +0000 (20:24 +0000)
SVN Revision: 41

TODO
src/ejabberd_c2s.erl
src/ejabberd_config.erl
src/ejabberd_local.erl
src/ejabberd_router.erl
src/mod_private.erl [new file with mode: 0644]
src/mod_vcard.erl
src/namespaces.hrl
src/translate.erl

diff --git a/TODO b/TODO
index 5aa7c610fcdbc30556f412b30c93d9a2ee263ae4..87f4691eaffac1dadf1af50f941bfcb8d63ed172 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,8 +1,5 @@
 S2S timeouts
-...
-iq:browse
-iq:disco
-...
-services support
-JUD
+iq:browse(?)
 SVR DNS records
+karma
+SSL
index 54c94889d64f2e45a4b90a681f7f0d04a3c6f9c6..7f0fb5e76ff53c9fcbed81bedb2a99f120568c00 100644 (file)
@@ -136,10 +136,10 @@ wait_for_auth({xmlstreamelement, El}, StateData) ->
            end;
        _ ->
            case jlib:iq_query_info(El) of
-               {iq, ID, Type, "jabber:iq:register", SubEl} ->
+               {iq, ID, Type, ?NS_REGISTER, SubEl} ->
                    ResIQ = mod_register:process_iq(
                              {"", "", ""}, {"", ?MYNAME, ""},
-                             {iq, ID, Type, "jabber:iq:register", SubEl}),
+                             {iq, ID, Type, ?NS_REGISTER, SubEl}),
                    Res1 = jlib:replace_from_to({"", ?MYNAME, ""},
                                                {"", "", ""},
                                                jlib:iq_to_xml(ResIQ)),
@@ -388,26 +388,16 @@ new_id() ->
     randoms:get_string().
 
 
-is_auth_packet({xmlelement, Name, Attrs, Els}) when Name == "iq" ->
-    case xml:get_attr_s("type", Attrs) of
-       "set" ->
-           case xml:remove_cdata(Els) of
-               [{xmlelement, "query", Attrs2, Els2}] ->
-                   case xml:get_attr_s("xmlns", Attrs2) of
-                       "jabber:iq:auth" ->
-                           {auth,
-                            xml:get_attr_s("id", Attrs),
-                            get_auth_tags(Els2, "", "", "", "")};
-                       _ -> false
-                   end;
-               _ ->
-                   false
-           end;
-       true ->
+is_auth_packet(El) ->
+    case jlib:iq_query_info(El) of
+       {iq, ID, Type, ?NS_AUTH, SubEl} ->
+           {xmlelement, _, _, Els} = SubEl,
+           {auth, ID,
+            get_auth_tags(Els, "", "", "", "")};
+       _ ->
            false
-    end;
-is_auth_packet(_) ->
-    false.
+    end.
+
 
 get_auth_tags([{xmlelement, Name, Attrs, Els}| L], U, P, D, R) ->
     CData = xml:get_cdata(Els),
index 5fb03ad2bda0530d137aa04572bea74af1c9f043..0c147090042f5b74a62a44b3a57a3782b79d07e2 100644 (file)
@@ -20,23 +20,16 @@ start() ->
 
 
 load_file(File) ->
-    {ok, Bin} = file:read_file(File),
-    Content = binary_to_list(Bin),
-    parse(Content).
-
-
-parse(String) ->
-    case erl_scan:tokens([], String, 0) of
-       {done, Result, Left} ->
-           {ok, Tokens, _} = Result,
-           {ok, Term} = erl_parse:parse_term(Tokens),
-           {Opt, Val} = Term,
-           ets:insert(ejabberd_config, {Opt, Val}),
-           parse(Left);
-       _ ->
-           ok
+    case file:consult(File) of
+       {ok, Terms} ->
+           lists:foreach(fun({Opt, Val}) ->
+                                 ets:insert(ejabberd_config, {Opt, Val})
+                         end, Terms);
+       {error, Reason} ->
+           exit(file:format_error(Reason))
     end.
 
+
 get_option(Opt) ->
     case ets:lookup(ejabberd_config, Opt) of
        [{_, Val}] ->
index b7e949eefcb7d4dfda40b8893344904f783abf3b..1b970447a3795fe6dda56a0400165d1971f51028 100644 (file)
@@ -27,6 +27,7 @@ start() ->
     mod_vcard:start(),
     mod_offline:start(),
     mod_echo:start(),
+    mod_private:start(),
     ok.
 
 init() ->
index 1dfab8562d7270a21c6554398641bdc8a403394d..bb60b797cd4efa642b12a29bb322fa64c466fbb7 100644 (file)
@@ -142,8 +142,15 @@ do_route(From, To, Packet) ->
                    ejabberd_s2s ! {route, From, To, Packet};
                [R] ->
                    Node = R#route.node,
-                   ?DEBUG("routed to node ~p~n", [Node]),
-                   {ejabberd_router, Node} ! {route, From, To, Packet}
+                   case node() of
+                       Node ->
+                           Pid = R#local_route.pid,
+                           ?DEBUG("routed to process ~p~n", [Pid]),
+                           Pid ! {route, From, To, Packet};
+                       _ ->
+                           ?DEBUG("routed to node ~p~n", [Node]),
+                           {ejabberd_router, Node} ! {route, From, To, Packet}
+                   end
            end;
        [R] ->
            Pid = R#local_route.pid,
diff --git a/src/mod_private.erl b/src/mod_private.erl
new file mode 100644 (file)
index 0000000..4f8164c
--- /dev/null
@@ -0,0 +1,95 @@
+%%%----------------------------------------------------------------------
+%%% File    : mod_private.erl
+%%% Author  : Alexey Shchepin <alexey@sevcom.net>
+%%% Purpose : 
+%%% Created : 16 Jan 2003 by Alexey Shchepin <alexey@sevcom.net>
+%%% Id      : $Id$
+%%%----------------------------------------------------------------------
+
+-module(mod_private).
+-author('alexey@sevcom.net').
+-vsn('$Revision$ ').
+
+-export([start/0,
+        process_local_iq/3]).
+
+-include("ejabberd.hrl").
+-include("namespaces.hrl").
+
+-record(private_storage, {userns, xml}).
+
+start() ->
+    mnesia:create_table(private_storage,
+                       [{disc_only_copies, [node()]},
+                        {attributes, record_info(fields, private_storage)}]),
+    ejabberd_local:register_iq_handler(?NS_PRIVATE, ?MODULE, process_local_iq).
+
+
+process_local_iq(From, To, {iq, ID, Type, XMLNS, SubEl}) ->
+    {User, Server, _} = From,
+    LUser = jlib:tolower(User),
+    LServer = jlib:tolower(Server),
+    case ?MYNAME of
+       Server ->
+           {xmlelement, Name, Attrs, Els} = SubEl,
+           case Type of
+               set ->
+                   F = fun() ->
+                               lists:foreach(
+                                 fun(El) ->
+                                         set_data(LUser, El)
+                                 end, Els)
+                       end,
+                   mnesia:transaction(F),
+                   {iq, ID, result, XMLNS, [{xmlelement, Name, Attrs, []}]};
+               get ->
+                   case catch get_data(LUser, Els) of
+                       {'EXIT', Reason} ->
+                           {iq, ID, error, XMLNS,
+                            [SubEl, {xmlelement, "error",
+                                     [{"code", "500"}],
+                                     [{xmlcdata, "Internal Server Error"}]}]};
+                       Res ->
+                           {iq, ID, error, XMLNS,
+                            [{xmlelement, Name, Attrs, Res}]}
+                   end
+           end;
+       _ ->
+           {iq, ID, error, XMLNS, [SubEl, {xmlelement, "error",
+                                           [{"code", "405"}],
+                                           [{xmlcdata, "Not Allowed"}]}]}
+    end.
+
+set_data(LUser, El) ->
+    case El of
+       {xmlelement, Name, Attrs, Els} ->
+           XMLNS = xml:get_attr_s("xmlns", Attrs),
+           case XMLNS of
+               "" ->
+                   ignore;
+               _ ->
+                   mnesia:write(#private_storage{userns = {LUser, XMLNS},
+                                                 xml = El})
+           end;
+       _ ->
+           ignore
+    end.
+
+get_data(LUser, Els) ->
+    get_data(LUser, Els, []).
+
+get_data(LUser, [], Res) ->
+    lists:reverse(Res);
+get_data(LUser, [El | Els], Res) ->
+    case El of
+       {xmlelement, Name, Attrs, _} ->
+           XMLNS = xml:get_attr_s("xmlns", Attrs),
+           case mnesia:dirty_read(private_storage, {LUser, XMLNS}) of
+               [R] ->
+                   get_data(LUser, Els, [R#private_storage.xml | Res]);
+               [] ->
+                   get_data(LUser, Els, [El | Res])
+           end;
+       _ ->
+           get_data(LUser, Els, Res)
+    end.
index 0b2c8d443fc92cff14bcf237533328a3b9551236..91f8904c21456a16c08912b8d5fecdaf3fb27867 100644 (file)
@@ -53,13 +53,13 @@ start() ->
     mnesia:add_table_index(vcard_search, lorgname),
     mnesia:add_table_index(vcard_search, lorgunit),
 
-
     ejabberd_local:register_iq_handler(?NS_VCARD,
                                       ?MODULE, process_local_iq),
     ejabberd_sm:register_iq_handler(?NS_VCARD,
                                    ?MODULE, process_sm_iq),
     spawn(?MODULE, init, []).
 
+
 init() ->
     ejabberd_router:register_local_route("vjud." ++ ?MYNAME),
     loop().
index 0786a59744519a7005200b864fe39a9f0352d3f2..21835b43d14322f7018d9ee55622acbb6b0da331 100644 (file)
@@ -8,8 +8,11 @@
 -define(NS_DISCO_ITEMS, "http://jabber.org/protocol/disco#items").
 -define(NS_DISCO_INFO, "http://jabber.org/protocol/disco#info").
 -define(NS_VCARD, "vcard-temp").
+-define(NS_AUTH, "jabber:iq:auth").
+-define(NS_REGISTER, "jabber:iq:register").
 -define(NS_SEARCH, "jabber:iq:search").
 -define(NS_ROSTER, "jabber:iq:roster").
+-define(NS_PRIVATE, "jabber:iq:private").
 -define(NS_XDATA, "jabber:x:data").
 -define(NS_DELAY, "jabber:x:delay").
 -define(NS_EVENT, "jabber:x:event").
index ca2a8f03cbde15af6357af12d18dd17a4c38714f..062ed846bd090cf4d9c1be9a9615a93cbcc7339a 100644 (file)
@@ -41,21 +41,14 @@ load_dir(Dir) ->
     ok.
 
 load_file(Lang, File) ->
-    {ok, Bin} = file:read_file(File),
-    Content = binary_to_list(Bin),
-    parse(Lang, Content).
-
-
-parse(Lang, String) ->
-    case erl_scan:tokens([], String, 0) of
-       {done, Result, Left} ->
-           {ok, Tokens, _} = Result,
-           {ok, Term} = erl_parse:parse_term(Tokens),
-           {Orig, Trans} = Term,
-           ets:insert(translations, {{Lang, Orig}, Trans}),
-           parse(Lang, Left);
-       _ ->
-           ok
+    case file:consult(File) of
+       {ok, Terms} ->
+           lists:foreach(fun({Orig, Trans}) ->
+                                 ets:insert(translations,
+                                            {{Lang, Orig}, Trans})
+                         end, Terms);
+       {error, Reason} ->
+           exit(file:format_error(Reason))
     end.
 
 translate(Lang, Msg) ->