aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2010-11-02 22:40:08 +0100
committerBadlop <badlop@process-one.net>2010-11-02 22:40:08 +0100
commit184ec38510e5b47c8549060c3df933ea3b85f85c (patch)
tree92ec859cd63386171b7d57d4b1a5c9299f56e5c3
parentFix crash in ejabberd_c2s when blacklist hook returned true (thanks to Jonas ... (diff)
Implement the mod_irc option default_encoding, it was already documented
Related: http://www.ejabberd.im/node/4270#comment-56609 http://www.ejabberd.im/node/4270#comment-56780
-rw-r--r--src/mod_irc/mod_irc.erl28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index 01bb76279..b12f3b8b2 100644
--- a/src/mod_irc/mod_irc.erl
+++ b/src/mod_irc/mod_irc.erl
@@ -330,7 +330,7 @@ do_route1(Host, ServerHost, From, To, Packet) ->
[] ->
?DEBUG("open new connection~n", []),
{Username, Encoding, Port, Password} = get_connection_params(
- Host, From, Server),
+ Host, ServerHost, From, Server),
ConnectionUsername =
case Packet of
%% If the user tries to join a
@@ -535,6 +535,7 @@ get_form(Host, From, [], Lang) ->
#jid{user = User, server = Server,
luser = LUser, lserver = LServer} = From,
US = {LUser, LServer},
+ DefaultEncoding = get_default_encoding(Host),
Customs =
case catch mnesia:dirty_read({irc_custom, {US, Host}}) of
{'EXIT', _Reason} ->
@@ -587,7 +588,7 @@ get_form(Host, From, [], Lang) ->
"'{\"irc server\", \"encoding\", port, \"password\"}'. "
"By default this service use \"~s\" encoding, port ~p, "
"empty password."),
- [?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT]))}]}]},
+ [DefaultEncoding, ?DEFAULT_IRC_PORT]))}]}]},
{xmlelement, "field", [{"type", "fixed"}],
[{xmlelement, "value", [],
[{xmlcdata,
@@ -662,15 +663,30 @@ set_form(_Host, _, _, _Lang, _XData) ->
{error, ?ERR_SERVICE_UNAVAILABLE}.
+%% Host = "irc.example.com"
+%% ServerHost = "example.com"
get_connection_params(Host, From, IRCServer) ->
+ [_ | HostTail] = string:tokens(Host, "."),
+ ServerHost = string:join(HostTail, "."),
+ get_connection_params(Host, ServerHost, From, IRCServer).
+
+get_default_encoding(ServerHost) ->
+ Result = gen_mod:get_module_opt(
+ ServerHost, ?MODULE, default_encoding,
+ ?DEFAULT_IRC_ENCODING),
+ ?INFO_MSG("The default_encoding configured for host ~p is: ~p~n", [ServerHost, Result]),
+ Result.
+
+get_connection_params(Host, ServerHost, From, IRCServer) ->
#jid{user = User, server = _Server,
luser = LUser, lserver = LServer} = From,
US = {LUser, LServer},
+ DefaultEncoding = get_default_encoding(ServerHost),
case catch mnesia:dirty_read({irc_custom, {US, Host}}) of
{'EXIT', _Reason} ->
- {User, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, ""};
+ {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
[] ->
- {User, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, ""};
+ {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""};
[#irc_custom{data = Data}] ->
Username = xml:get_attr_s(username, Data),
{NewUsername, NewEncoding, NewPort, NewPassword} =
@@ -682,7 +698,7 @@ get_connection_params(Host, From, IRCServer) ->
{value, {_, Encoding}} ->
{Username, Encoding, ?DEFAULT_IRC_PORT, ""};
_ ->
- {Username, ?DEFAULT_IRC_ENCODING, ?DEFAULT_IRC_PORT, ""}
+ {Username, DefaultEncoding, ?DEFAULT_IRC_PORT, ""}
end,
{NewUsername,
NewEncoding,
@@ -881,7 +897,7 @@ generate_connection_params_fields(Lang, [ConnectionParams | ConnectionsParams],
generate_connection_params_field(Lang, Server, Encoding, Port, Password, Number) ->
EncodingUsed = case Encoding of
[] ->
- ?DEFAULT_IRC_ENCODING;
+ get_default_encoding(Server);
_ ->
Encoding
end,