mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-28 16:34:13 +01:00
* src/web/ejabberd_http.erl: Fixed processing of POST body for
HTTP Polling * src/web/ejabberd_http.erl: Support for "Connection" HTTP header (thanks to Sergei Golovan) * src/translate.erl: Much better handling of xml:lang (thanks to Sergei Golovan) SVN Revision: 271
This commit is contained in:
parent
db824bfc64
commit
34de660c44
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2004-09-30 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
|
* src/web/ejabberd_http.erl: Fixed processing of POST body for
|
||||||
|
HTTP Polling
|
||||||
|
|
||||||
|
* src/web/ejabberd_http.erl: Support for "Connection" HTTP header
|
||||||
|
(thanks to Sergei Golovan)
|
||||||
|
|
||||||
|
* src/translate.erl: Much better handling of xml:lang (thanks to
|
||||||
|
Sergei Golovan)
|
||||||
|
|
||||||
2004-09-29 Alexey Shchepin <alexey@sevcom.net>
|
2004-09-29 Alexey Shchepin <alexey@sevcom.net>
|
||||||
|
|
||||||
* src/ejabberd_listener.erl: Check result of controlling_process
|
* src/ejabberd_listener.erl: Check result of controlling_process
|
||||||
|
@ -40,7 +40,8 @@ load_dir(Dir) ->
|
|||||||
fun(FN) ->
|
fun(FN) ->
|
||||||
case string:len(FN) > 4 of
|
case string:len(FN) > 4 of
|
||||||
true ->
|
true ->
|
||||||
string:substr(FN,
|
string:substr(
|
||||||
|
FN,
|
||||||
string:len(FN) - 3) == ".msg";
|
string:len(FN) - 3) == ".msg";
|
||||||
_ ->
|
_ ->
|
||||||
false
|
false
|
||||||
@ -48,8 +49,9 @@ load_dir(Dir) ->
|
|||||||
end, Files),
|
end, Files),
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(FN) ->
|
fun(FN) ->
|
||||||
load_file(string:substr(FN, 1, string:len(FN) - 4),
|
L = ascii_tolower(
|
||||||
Dir ++ "/" ++ FN)
|
string:substr(FN, 1, string:len(FN) - 4)),
|
||||||
|
load_file(L, Dir ++ "/" ++ FN)
|
||||||
end, MsgFiles),
|
end, MsgFiles),
|
||||||
ok;
|
ok;
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
@ -74,15 +76,21 @@ load_file(Lang, File) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
translate(Lang, Msg) ->
|
translate(Lang, Msg) ->
|
||||||
case ets:lookup(translations, {Lang, Msg}) of
|
LLang = ascii_tolower(Lang),
|
||||||
|
case ets:lookup(translations, {LLang, Msg}) of
|
||||||
[{_, Trans}] ->
|
[{_, Trans}] ->
|
||||||
Trans;
|
Trans;
|
||||||
_ ->
|
_ ->
|
||||||
ShortLang = string:substr(Lang, 1, 2),
|
ShortLang = case string:tokens(LLang, "-") of
|
||||||
|
[] ->
|
||||||
|
LLang;
|
||||||
|
[SL | _] ->
|
||||||
|
SL
|
||||||
|
end,
|
||||||
case ShortLang of
|
case ShortLang of
|
||||||
"en" ->
|
"en" ->
|
||||||
Msg;
|
Msg;
|
||||||
Lang ->
|
LLang ->
|
||||||
translate(Msg);
|
translate(Msg);
|
||||||
_ ->
|
_ ->
|
||||||
case ets:lookup(translations, {ShortLang, Msg}) of
|
case ets:lookup(translations, {ShortLang, Msg}) of
|
||||||
@ -101,11 +109,17 @@ translate(Msg) ->
|
|||||||
"en" ->
|
"en" ->
|
||||||
Msg;
|
Msg;
|
||||||
Lang ->
|
Lang ->
|
||||||
case ets:lookup(translations, {Lang, Msg}) of
|
LLang = ascii_tolower(Lang),
|
||||||
|
case ets:lookup(translations, {LLang, Msg}) of
|
||||||
[{_, Trans}] ->
|
[{_, Trans}] ->
|
||||||
Trans;
|
Trans;
|
||||||
_ ->
|
_ ->
|
||||||
ShortLang = string:substr(Lang, 1, 2),
|
ShortLang = case string:tokens(LLang, "-") of
|
||||||
|
[] ->
|
||||||
|
LLang;
|
||||||
|
[SL | _] ->
|
||||||
|
SL
|
||||||
|
end,
|
||||||
case ShortLang of
|
case ShortLang of
|
||||||
"en" ->
|
"en" ->
|
||||||
Msg;
|
Msg;
|
||||||
@ -122,3 +136,10 @@ translate(Msg) ->
|
|||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
ascii_tolower([C | Cs]) when C >= $A, C =< $Z ->
|
||||||
|
[C + ($a - $A) | ascii_tolower(Cs)];
|
||||||
|
ascii_tolower([C | Cs]) ->
|
||||||
|
[C | ascii_tolower(Cs)];
|
||||||
|
ascii_tolower([]) ->
|
||||||
|
[].
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
request_version,
|
request_version,
|
||||||
request_path,
|
request_path,
|
||||||
request_auth,
|
request_auth,
|
||||||
|
request_keepalive,
|
||||||
request_content_length,
|
request_content_length,
|
||||||
request_lang = "en",
|
request_lang = "en",
|
||||||
use_http_poll = false,
|
use_http_poll = false,
|
||||||
@ -127,9 +128,26 @@ process_header(State, Data) ->
|
|||||||
Socket = State#state.socket,
|
Socket = State#state.socket,
|
||||||
case Data of
|
case Data of
|
||||||
{ok, {http_request, Method, Path, Version}} ->
|
{ok, {http_request, Method, Path, Version}} ->
|
||||||
|
KeepAlive = case Version of
|
||||||
|
{1, 1} ->
|
||||||
|
true;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end,
|
||||||
State#state{request_method = Method,
|
State#state{request_method = Method,
|
||||||
request_version = Version,
|
request_version = Version,
|
||||||
request_path = Path};
|
request_path = Path,
|
||||||
|
request_keepalive = KeepAlive};
|
||||||
|
{ok, {http_header, _, 'Connection', _, Conn}} ->
|
||||||
|
KeepAlive1 = case Conn of
|
||||||
|
"keep-alive" ->
|
||||||
|
true;
|
||||||
|
"close" ->
|
||||||
|
false;
|
||||||
|
_ ->
|
||||||
|
State#state.request_keepalive
|
||||||
|
end,
|
||||||
|
State#state{request_keepalive = KeepAlive1};
|
||||||
{ok, {http_header, _, 'Authorization', _, Auth}} ->
|
{ok, {http_header, _, 'Authorization', _, Auth}} ->
|
||||||
State#state{request_auth = parse_auth(Auth)};
|
State#state{request_auth = parse_auth(Auth)};
|
||||||
{ok, {http_header, _, 'Content-Length', _, SLen}} ->
|
{ok, {http_header, _, 'Content-Length', _, SLen}} ->
|
||||||
@ -150,8 +168,8 @@ process_header(State, Data) ->
|
|||||||
element(2, State#state.request_path)]),
|
element(2, State#state.request_path)]),
|
||||||
Out = process_request(State),
|
Out = process_request(State),
|
||||||
send_text(State, Out),
|
send_text(State, Out),
|
||||||
case State#state.request_version of
|
case State#state.request_keepalive of
|
||||||
{1,1} ->
|
true ->
|
||||||
case SockMod of
|
case SockMod of
|
||||||
gen_tcp ->
|
gen_tcp ->
|
||||||
inet:setopts(Socket, [{packet, http}]);
|
inet:setopts(Socket, [{packet, http}]);
|
||||||
@ -200,10 +218,12 @@ process_request(#state{request_method = 'GET',
|
|||||||
{'EXIT', _} ->
|
{'EXIT', _} ->
|
||||||
process_request(false);
|
process_request(false);
|
||||||
{NPath, Query} ->
|
{NPath, Query} ->
|
||||||
case (catch parse_urlencoded(Query)) of
|
LQuery = case (catch parse_urlencoded(Query)) of
|
||||||
{'EXIT', _Reason} ->
|
{'EXIT', _Reason} ->
|
||||||
process_request(false);
|
[];
|
||||||
LQuery ->
|
LQ ->
|
||||||
|
LQ
|
||||||
|
end,
|
||||||
LPath = string:tokens(NPath, "/"),
|
LPath = string:tokens(NPath, "/"),
|
||||||
Request = #request{method = 'GET',
|
Request = #request{method = 'GET',
|
||||||
path = LPath,
|
path = LPath,
|
||||||
@ -224,7 +244,6 @@ process_request(#state{request_method = 'GET',
|
|||||||
make_text_output(Status, Headers, Text)
|
make_text_output(Status, Headers, Text)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process_request(#state{request_method = 'POST',
|
process_request(#state{request_method = 'POST',
|
||||||
@ -269,10 +288,12 @@ process_request(#state{request_method = 'POST',
|
|||||||
process_request(false);
|
process_request(false);
|
||||||
{NPath, Query} ->
|
{NPath, Query} ->
|
||||||
LPath = string:tokens(NPath, "/"),
|
LPath = string:tokens(NPath, "/"),
|
||||||
case (catch parse_urlencoded(Data)) of
|
LQuery = case (catch parse_urlencoded(Data)) of
|
||||||
{'EXIT', _Reason} ->
|
{'EXIT', _Reason} ->
|
||||||
process_request(false);
|
[];
|
||||||
LQuery ->
|
LQ ->
|
||||||
|
LQ
|
||||||
|
end,
|
||||||
Request = #request{method = 'POST',
|
Request = #request{method = 'POST',
|
||||||
path = LPath,
|
path = LPath,
|
||||||
q = LQuery,
|
q = LQuery,
|
||||||
@ -292,7 +313,6 @@ process_request(#state{request_method = 'POST',
|
|||||||
make_text_output(Status, Headers, Text)
|
make_text_output(Status, Headers, Text)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
process_request(_) ->
|
process_request(_) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user