aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2006-09-25 03:51:11 +0000
committerAlexey Shchepin <alexey@process-one.net>2006-09-25 03:51:11 +0000
commitaa478100d807765dd67cf97af1ac95080fb1290f (patch)
tree8d842d61fa469a6acfd3c6fabc31a92c2a1232af /src
parent* src/msgs/es.msg: Updated Spanish translation (thanks to Badlop). (diff)
* src/ejabberd_socket.erl: Support for non-xml sockets
* src/ejabberd_c2s.erl: Likewise * src/ejabberd_s2s_in.erl: Likewise * src/ejabberd_service.erl: Likewise * src/web/ejabberd_http.erl: Likewise SVN Revision: 629
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl4
-rw-r--r--src/ejabberd_s2s_in.erl6
-rw-r--r--src/ejabberd_service.erl6
-rw-r--r--src/ejabberd_socket.erl48
-rw-r--r--src/web/ejabberd_http.erl4
5 files changed, 48 insertions, 20 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index cebe83c83..a9e0d01ef 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -17,6 +17,7 @@
start_link/2,
send_text/2,
send_element/2,
+ socket_type/0,
get_presence/1]).
%% gen_fsm callbacks
@@ -98,6 +99,9 @@ start(SockData, Opts) ->
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_c2s, [SockData, Opts], ?FSMOPTS).
+socket_type() ->
+ xml_stream.
+
%% Return Username, Resource and presence information
get_presence(FsmRef) ->
gen_fsm:sync_send_all_state_event(FsmRef, {get_presence}, 1000).
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index 401996ec3..64a85fc1c 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -14,7 +14,8 @@
%% External exports
-export([start/2,
start_link/2,
- match_domain/2]).
+ match_domain/2,
+ socket_type/0]).
%% gen_fsm callbacks
-export([init/1,
@@ -84,6 +85,9 @@ start(SockData, Opts) ->
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_s2s_in, [SockData, Opts], ?FSMOPTS).
+socket_type() ->
+ xml_stream.
+
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
%%%----------------------------------------------------------------------
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index 8a4f02b55..925915aa9 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -16,7 +16,8 @@
-export([start/2,
start_link/2,
send_text/2,
- send_element/2]).
+ send_element/2,
+ socket_type/0]).
%% gen_fsm callbacks
-export([init/1,
@@ -78,6 +79,9 @@ start(SockData, Opts) ->
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_service, [SockData, Opts], ?FSMOPTS).
+socket_type() ->
+ xml_stream.
+
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
%%%----------------------------------------------------------------------
diff --git a/src/ejabberd_socket.erl b/src/ejabberd_socket.erl
index 417d4f2eb..9b0218803 100644
--- a/src/ejabberd_socket.erl
+++ b/src/ejabberd_socket.erl
@@ -32,23 +32,35 @@
%% Description:
%%--------------------------------------------------------------------
start(Module, SockMod, Socket, Opts) ->
- MaxStanzaSize =
- case lists:keysearch(max_stanza_size, 1, Opts) of
- {value, {_, Size}} -> Size;
- _ -> infinity
- end,
- Receiver = ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize),
- SocketData = #socket_state{sockmod = SockMod,
- socket = Socket,
- receiver = Receiver},
- {ok, Pid} = Module:start(SocketData, Opts),
- case SockMod:controlling_process(Socket, Receiver) of
- ok ->
- ok;
- {error, _Reason} ->
- SockMod:close(Socket)
- end,
- ejabberd_receiver:become_controller(Receiver, Pid).
+ case Module:socket_type() of
+ xml_stream ->
+ MaxStanzaSize =
+ case lists:keysearch(max_stanza_size, 1, Opts) of
+ {value, {_, Size}} -> Size;
+ _ -> infinity
+ end,
+ Receiver = ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize),
+ SocketData = #socket_state{sockmod = SockMod,
+ socket = Socket,
+ receiver = Receiver},
+ {ok, Pid} = Module:start(SocketData, Opts),
+ case SockMod:controlling_process(Socket, Receiver) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end,
+ ejabberd_receiver:become_controller(Receiver, Pid);
+ raw ->
+ {ok, Pid} = Module:start({SockMod, Socket}, Opts),
+ case SockMod:controlling_process(Socket, Pid) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end,
+ ejabberd_receiver:become_controller(Pid)
+ end.
connect(Addr, Port, Opts) ->
case gen_tcp:connect(Addr, Port, Opts) of
@@ -66,7 +78,7 @@ connect(Addr, Port, Opts) ->
gen_tcp:close(Socket),
Error
end;
- {error, Reason} = Error ->
+ {error, _Reason} = Error ->
Error
end.
diff --git a/src/web/ejabberd_http.erl b/src/web/ejabberd_http.erl
index 5113f1afe..3220925ec 100644
--- a/src/web/ejabberd_http.erl
+++ b/src/web/ejabberd_http.erl
@@ -14,6 +14,7 @@
-export([start/2,
start_link/2,
become_controller/1,
+ socket_type/0,
receive_headers/1,
url_encode/1]).
@@ -85,6 +86,9 @@ start_link({SockMod, Socket}, Opts) ->
become_controller(_Pid) ->
ok.
+socket_type() ->
+ raw.
+
send_text(State, Text) ->
(State#state.sockmod):send(State#state.socket, Text).