Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f2f2f64161 | |||
| 2c09d7c8a7 | |||
| 389a99b2db | |||
| 07c8bf5064 | |||
| 7fd91a4b12 | |||
| ae4356265f | |||
| a0396620f2 | |||
| 7e73ed88f7 |
+1
-1
@@ -1,2 +1,2 @@
|
||||
% ejabberd version (automatically generated).
|
||||
\newcommand{\version}{13.09}
|
||||
\newcommand{\version}{13.10}
|
||||
|
||||
@@ -114,23 +114,23 @@ init({SockMod, Socket}, Opts) ->
|
||||
inet:setopts(Socket1, [{packet, http_bin}, {recbuf, 8192}]);
|
||||
_ -> ok
|
||||
end,
|
||||
Captcha = case lists:member(captcha, Opts) of
|
||||
Captcha = case proplists:get_bool(captcha, Opts) of
|
||||
true -> [{[<<"captcha">>], ejabberd_captcha}];
|
||||
false -> []
|
||||
end,
|
||||
Register = case lists:member(register, Opts) of
|
||||
Register = case proplists:get_bool(register, Opts) of
|
||||
true -> [{[<<"register">>], mod_register_web}];
|
||||
false -> []
|
||||
end,
|
||||
Admin = case lists:member(web_admin, Opts) of
|
||||
Admin = case proplists:get_bool(web_admin, Opts) of
|
||||
true -> [{[<<"admin">>], ejabberd_web_admin}];
|
||||
false -> []
|
||||
end,
|
||||
Bind = case lists:member(http_bind, Opts) of
|
||||
Bind = case proplists:get_bool(http_bind, Opts) of
|
||||
true -> [{[<<"http-bind">>], mod_http_bind}];
|
||||
false -> []
|
||||
end,
|
||||
Poll = case lists:member(http_poll, Opts) of
|
||||
Poll = case proplists:get_bool(http_poll, Opts) of
|
||||
true -> [{[<<"http-poll">>], ejabberd_http_poll}];
|
||||
false -> []
|
||||
end,
|
||||
@@ -201,8 +201,8 @@ parse_headers(#state{request_method = Method,
|
||||
trail = Data} =
|
||||
State) ->
|
||||
PktType = case Method of
|
||||
undefined -> http;
|
||||
_ -> httph
|
||||
undefined -> http_bin;
|
||||
_ -> httph_bin
|
||||
end,
|
||||
case erlang:decode_packet(PktType, Data, []) of
|
||||
{ok, Pkt, Rest} ->
|
||||
|
||||
@@ -325,7 +325,7 @@ handle_info(Info, StateName, State) ->
|
||||
terminate(_Reason, _StateName, State) ->
|
||||
ejabberd_odbc_sup:remove_pid(State#state.host, self()),
|
||||
case State#state.db_type of
|
||||
mysql -> catch mysql_conn:stop(State#state.db_ref);
|
||||
mysql -> catch p1_mysql_conn:stop(State#state.db_ref);
|
||||
_ -> ok
|
||||
end,
|
||||
ok.
|
||||
@@ -447,9 +447,9 @@ sql_query_internal(Query) ->
|
||||
mysql ->
|
||||
?DEBUG("MySQL, Send query~n~p~n", [Query]),
|
||||
%%squery to be able to specify result_type = binary
|
||||
%%[Query] because mysql_conn expect query to be a list (elements can be binaries, or iolist)
|
||||
%%[Query] because p1_mysql_conn expect query to be a list (elements can be binaries, or iolist)
|
||||
%% but doesn't accept just a binary
|
||||
R = mysql_to_odbc(mysql_conn:squery(State#state.db_ref,
|
||||
R = mysql_to_odbc(p1_mysql_conn:squery(State#state.db_ref,
|
||||
[Query], self(),
|
||||
[{timeout, (?TRANSACTION_TIMEOUT) - 1000},
|
||||
{result_type, binary}])),
|
||||
@@ -533,12 +533,12 @@ pgsql_item_to_odbc(_) -> {updated, undefined}.
|
||||
%% part of init/1
|
||||
%% Open a database connection to MySQL
|
||||
mysql_connect(Server, Port, DB, Username, Password) ->
|
||||
case mysql_conn:start(binary_to_list(Server), Port,
|
||||
case p1_mysql_conn:start(binary_to_list(Server), Port,
|
||||
binary_to_list(Username), binary_to_list(Password),
|
||||
binary_to_list(DB), fun log/3)
|
||||
of
|
||||
{ok, Ref} ->
|
||||
mysql_conn:fetch(Ref, [<<"set names 'utf8';">>],
|
||||
p1_mysql_conn:fetch(Ref, [<<"set names 'utf8';">>],
|
||||
self()),
|
||||
{ok, Ref};
|
||||
Err -> Err
|
||||
@@ -546,15 +546,15 @@ mysql_connect(Server, Port, DB, Username, Password) ->
|
||||
|
||||
%% Convert MySQL query result to Erlang ODBC result formalism
|
||||
mysql_to_odbc({updated, MySQLRes}) ->
|
||||
{updated, mysql:get_result_affected_rows(MySQLRes)};
|
||||
{updated, p1_mysql:get_result_affected_rows(MySQLRes)};
|
||||
mysql_to_odbc({data, MySQLRes}) ->
|
||||
mysql_item_to_odbc(mysql:get_result_field_info(MySQLRes),
|
||||
mysql:get_result_rows(MySQLRes));
|
||||
mysql_item_to_odbc(p1_mysql:get_result_field_info(MySQLRes),
|
||||
p1_mysql:get_result_rows(MySQLRes));
|
||||
mysql_to_odbc({error, MySQLRes})
|
||||
when is_binary(MySQLRes) ->
|
||||
{error, MySQLRes};
|
||||
mysql_to_odbc({error, MySQLRes}) ->
|
||||
{error, mysql:get_result_reason(MySQLRes)}.
|
||||
{error, p1_mysql:get_result_reason(MySQLRes)}.
|
||||
|
||||
%% When tabular data is returned, convert it to the ODBC formalism
|
||||
mysql_item_to_odbc(Columns, Recs) ->
|
||||
|
||||
@@ -293,7 +293,9 @@ wait_for_stream({xmlstreamstart, _Name, Attrs},
|
||||
[Server])}),
|
||||
{next_state, stream_established, StateData};
|
||||
{<<"jabber:server">>, <<"jabber:server:dialback">>,
|
||||
_Server, _} ->
|
||||
_Server, _} when
|
||||
(StateData#state.tls_required and StateData#state.tls_enabled)
|
||||
or (not StateData#state.tls_required) ->
|
||||
send_text(StateData, ?STREAM_HEADER(<<"">>)),
|
||||
{next_state, stream_established, StateData};
|
||||
_ ->
|
||||
|
||||
+1
-1
@@ -196,7 +196,7 @@ read_roster_version(LUser, LServer, mnesia) ->
|
||||
[#roster_version{version = V}] -> V;
|
||||
[] -> error
|
||||
end;
|
||||
read_roster_version(LServer, LUser, odbc) ->
|
||||
read_roster_version(LUser, LServer, odbc) ->
|
||||
Username = ejabberd_odbc:escape(LUser),
|
||||
case odbc_queries:get_roster_version(LServer, Username)
|
||||
of
|
||||
|
||||
+1
-1
@@ -792,7 +792,7 @@ get_msg(Msg) -> Msg.
|
||||
%% Status information
|
||||
%%-----------------------------------------------------------------
|
||||
format_status(Opt, StatusData) ->
|
||||
[PDict, SysState, Parent, Debug, [Name, StateName, StateData, Mod, _Time]] =
|
||||
[PDict, SysState, Parent, Debug, [Name, StateName, StateData, Mod, _Time, _Limits, _Queue, _QueueLen]] =
|
||||
StatusData,
|
||||
NameTag = if is_pid(Name) ->
|
||||
pid_to_list(Name);
|
||||
|
||||
@@ -161,6 +161,7 @@ db_tests() ->
|
||||
presence_broadcast,
|
||||
last,
|
||||
roster_get,
|
||||
roster_ver,
|
||||
private,
|
||||
privacy,
|
||||
blocking,
|
||||
@@ -308,6 +309,29 @@ roster_get(Config) ->
|
||||
send_recv(Config, #iq{type = get, sub_els = [#roster{}]}),
|
||||
disconnect(Config).
|
||||
|
||||
roster_ver(Config) ->
|
||||
%% Get initial "ver"
|
||||
#iq{type = result, sub_els = [#roster{ver = Ver1, items = []}]} =
|
||||
send_recv(Config, #iq{type = get,
|
||||
sub_els = [#roster{ver = <<"">>}]}),
|
||||
%% Should receive empty IQ-result
|
||||
#iq{type = result, sub_els = []} =
|
||||
send_recv(Config, #iq{type = get,
|
||||
sub_els = [#roster{ver = Ver1}]}),
|
||||
%% Attempting to subscribe to server's JID
|
||||
send(Config, #presence{type = subscribe, to = server_jid(Config)}),
|
||||
%% Receive a single roster push with the new "ver"
|
||||
#iq{type = set, sub_els = [#roster{ver = Ver2}]} = recv(),
|
||||
%% Requesting roster with the previous "ver". Should receive Ver2 again
|
||||
#iq{type = result, sub_els = [#roster{ver = Ver2}]} =
|
||||
send_recv(Config, #iq{type = get,
|
||||
sub_els = [#roster{ver = Ver1}]}),
|
||||
%% Now requesting roster with the newest "ver". Should receive empty IQ.
|
||||
#iq{type = result, sub_els = []} =
|
||||
send_recv(Config, #iq{type = get,
|
||||
sub_els = [#roster{ver = Ver2}]}),
|
||||
disconnect(Config).
|
||||
|
||||
presence(Config) ->
|
||||
send(Config, #presence{}),
|
||||
JID = my_jid(Config),
|
||||
|
||||
@@ -33,7 +33,9 @@ host_config:
|
||||
- "flat"
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_roster:
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
db_type: odbc
|
||||
mod_vcard:
|
||||
db_type: odbc
|
||||
@@ -85,6 +87,8 @@ Welcome to this XMPP server."
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
db_type: odbc
|
||||
mod_vcard:
|
||||
db_type: odbc
|
||||
@@ -129,6 +133,8 @@ Welcome to this XMPP server."
|
||||
- "hometree"
|
||||
- "pep"
|
||||
mod_roster:
|
||||
versioning: true
|
||||
store_current_id: true
|
||||
db_type: internal
|
||||
mod_vcard:
|
||||
db_type: internal
|
||||
|
||||
Reference in New Issue
Block a user