%% External exports
-export([start/2, start_link/2, become_controller/1,
- socket_type/0, receive_headers/1, url_encode/1,
+ socket_type/0, receive_headers/1,
transform_listen_option/2, listen_opt_type/1]).
-export([init/2, opt_type/1]).
[{Last, Cur}];
parse_urlencoded(undefined, _, _, _) -> [].
-
-url_encode(A) ->
- url_encode(A, <<>>).
-
-url_encode(<<H:8, T/binary>>, Acc) when
- (H >= $a andalso H =< $z) orelse
- (H >= $A andalso H =< $Z) orelse
- (H >= $0 andalso H =< $9) orelse
- H == $_ orelse
- H == $. orelse
- H == $- orelse
- H == $/ orelse
- H == $: ->
- url_encode(T, <<Acc/binary, H>>);
-url_encode(<<H:8, T/binary>>, Acc) ->
- case integer_to_hex(H) of
- [X, Y] -> url_encode(T, <<Acc/binary, $%, X, Y>>);
- [X] -> url_encode(T, <<Acc/binary, $%, $0, X>>)
- end;
-url_encode(<<>>, Acc) ->
- Acc.
-
-
-integer_to_hex(I) ->
- case catch erlang:integer_to_list(I, 16) of
- {'EXIT', _} -> old_integer_to_hex(I);
- Int -> Int
- end.
-
-old_integer_to_hex(I) when I < 10 -> integer_to_list(I);
-old_integer_to_hex(I) when I < 16 -> [I - 10 + $A];
-old_integer_to_hex(I) when I >= 16 ->
- N = trunc(I / 16),
- old_integer_to_hex(N) ++ old_integer_to_hex(I rem 16).
-
% The following code is mostly taken from yaws_ssl.erl
toupper(C) when C >= $a andalso C =< $z -> C - 32;
?XE(<<"tr">>,
[?XE(<<"td">>,
[?AC((URLFunc({user, Prefix,
- ejabberd_http:url_encode(User),
+ misc:url_encode(User),
Server})),
(us_to_list(US)))]),
?XE(<<"td">>, FQueueLen),
SUsers = lists:usort(Users),
lists:flatmap(fun ({_S, U} = SU) ->
[?AC(<<"../user/",
- (ejabberd_http:url_encode(U))/binary, "/">>,
+ (misc:url_encode(U))/binary, "/">>,
(su_to_list(SU))),
?BR]
end,
%% API
-export([tolower/1, term_to_base64/1, base64_to_term/1, ip_to_list/1,
- hex_to_bin/1, hex_to_base64/1, expand_keyword/3,
+ hex_to_bin/1, hex_to_base64/1, url_encode/1, expand_keyword/3,
atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1,
l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1,
now_to_usec/1, usec_to_now/1, encode_pid/1, decode_pid/2,
hex_to_base64(Hex) ->
base64:encode(hex_to_bin(Hex)).
+-spec url_encode(binary()) -> binary().
+url_encode(A) ->
+ url_encode(A, <<>>).
+
-spec expand_keyword(binary(), binary(), binary()) -> binary().
expand_keyword(Keyword, Input, Replacement) ->
Parts = binary:split(Input, Keyword, [global]),
%%%===================================================================
%%% Internal functions
%%%===================================================================
+-spec url_encode(binary(), binary()) -> binary().
+url_encode(<<H:8, T/binary>>, Acc) when
+ (H >= $a andalso H =< $z) orelse
+ (H >= $A andalso H =< $Z) orelse
+ (H >= $0 andalso H =< $9) orelse
+ H == $_ orelse
+ H == $. orelse
+ H == $- orelse
+ H == $/ orelse
+ H == $: ->
+ url_encode(T, <<Acc/binary, H>>);
+url_encode(<<H:8, T/binary>>, Acc) ->
+ case integer_to_hex(H) of
+ [X, Y] -> url_encode(T, <<Acc/binary, $%, X, Y>>);
+ [X] -> url_encode(T, <<Acc/binary, $%, $0, X>>)
+ end;
+url_encode(<<>>, Acc) ->
+ Acc.
+
+integer_to_hex(I) ->
+ case catch erlang:integer_to_list(I, 16) of
+ {'EXIT', _} -> old_integer_to_hex(I);
+ Int -> Int
+ end.
+
+old_integer_to_hex(I) when I < 10 -> integer_to_list(I);
+old_integer_to_hex(I) when I < 16 -> [I - 10 + $A];
+old_integer_to_hex(I) when I >= 16 ->
+ N = trunc(I / 16),
+ old_integer_to_hex(N) ++ old_integer_to_hex(I rem 16).
+
-spec set_node_id(string(), binary()) -> pid().
set_node_id(PidStr, NodeBin) ->
ExtPidStr = erlang:pid_to_list(
-define(SERVICE_REQUEST_TIMEOUT, 5000). % 5 seconds.
-define(SLOT_TIMEOUT, 18000000). % 5 hours.
-define(FORMAT(Error), file:format_error(Error)).
--define(URL_ENC(URL), binary_to_list(ejabberd_http:url_encode(URL))).
+-define(URL_ENC(URL), binary_to_list(misc:url_encode(URL))).
-define(ADDR_TO_STR(IP), ejabberd_config:may_hide_data(misc:ip_to_list(IP))).
-define(STR_TO_INT(Str, B), binary_to_integer(iolist_to_binary(Str), B)).
-define(DEFAULT_CONTENT_TYPE, <<"application/octet-stream">>).
Base = base_url(Server, Path),
[<<$&, ParHead/binary>> | ParTail] =
[<<"&", (iolist_to_binary(Key))/binary, "=",
- (ejabberd_http:url_encode(Value))/binary>>
+ (misc:url_encode(Value))/binary>>
|| {Key, Value} <- Params],
Tail = iolist_to_binary([ParHead | ParTail]),
binary_to_list(<<Base/binary, $?, Tail/binary>>).