Parcourir la source

Allow socket options to be set by caller during the connect phase as well

pull/16/head
Chandrashekhar Mullaparthi il y a 16 ans
Parent
révision
2e6bff7e8b
3 fichiers modifiés avec 23 ajouts et 5 suppressions
  1. +2
    -0
      .gitignore
  2. +1
    -1
      ebin/ibrowse.app
  3. +20
    -4
      src/ibrowse_http_client.erl

+ 2
- 0
.gitignore Voir le fichier

@ -0,0 +1,2 @@
*.beam

+ 1
- 1
ebin/ibrowse.app Voir le fichier

@ -1,6 +1,6 @@
{application, ibrowse, {application, ibrowse,
[{description, "HTTP client application"}, [{description, "HTTP client application"},
{vsn, "1.5.1"},
{vsn, "1.5.3"},
{modules, [ ibrowse, {modules, [ ibrowse,
ibrowse_http_client, ibrowse_http_client,
ibrowse_app, ibrowse_app,

+ 20
- 4
src/ibrowse_http_client.erl Voir le fichier

@ -413,15 +413,31 @@ handle_sock_closed(#state{reply_buffer = Buf, reqs = Reqs, http_status_code = SC
State State
end. end.
do_connect(Host, Port, _Options, #state{is_ssl=true, ssl_options=SSLOptions}, Timeout) ->
do_connect(Host, Port, Options, #state{is_ssl=true, ssl_options=SSLOptions}, Timeout) ->
Caller_socket_options = get_value(socket_options, Options, []),
Other_sock_options = filter_sock_options(SSLOptions ++ Caller_socket_options),
ssl:connect(Host, Port, ssl:connect(Host, Port,
[binary, {nodelay, true}, {active, false} | SSLOptions],
[binary, {nodelay, true}, {active, false} | Other_sock_options],
Timeout); Timeout);
do_connect(Host, Port, _Options, _State, Timeout) ->
do_connect(Host, Port, Options, _State, Timeout) ->
Caller_socket_options = get_value(socket_options, Options, []),
Other_sock_options = filter_sock_options(Caller_socket_options),
gen_tcp:connect(Host, Port, gen_tcp:connect(Host, Port,
[binary, {nodelay, true}, {active, false}],
[binary, {nodelay, true}, {active, false} | Other_sock_options],
Timeout). Timeout).
%% We don't want the caller to specify certain options
filter_sock_options(Opts) ->
lists:filter(fun({active, _}) ->
false;
({packet, _}) ->
false;
(list) ->
false;
(_) ->
true
end, Opts).
do_send(Req, #state{socket = Sock, is_ssl = true}) -> ssl:send(Sock, Req); do_send(Req, #state{socket = Sock, is_ssl = true}) -> ssl:send(Sock, Req);
do_send(Req, #state{socket = Sock, is_ssl = false}) -> gen_tcp:send(Sock, Req). do_send(Req, #state{socket = Sock, is_ssl = false}) -> gen_tcp:send(Sock, Req).

Chargement…
Annuler
Enregistrer