152
set_option(Key, Value) ->
153
set_option(Key, Value, default_profile()).
155
set_option(Key, Value, Profile) ->
156
set_options([{Key, Value}], Profile).
140
159
%%--------------------------------------------------------------------------
141
160
%% set_options(Options [, Profile]) -> ok | {error, Reason}
142
161
%% Options - [Option]
143
162
%% Profile - atom()
144
163
%% Option - {proxy, {Proxy, NoProxy}} | {max_sessions, MaxSessions} |
145
164
%% {max_pipeline_length, MaxPipeline} |
146
%% {pipeline_timeout, PipelineTimeout} | {cookies, CookieMode}
147
%% | {ipv6, Ipv6Mode}
165
%% {pipeline_timeout, PipelineTimeout} | {cookies, CookieMode} |
166
%% {ipfamily, IpFamily}
148
167
%% Proxy - {Host, Port}
149
168
%% NoProxy - [Domain | HostName | IPAddress]
150
169
%% MaxSessions, MaxPipeline, PipelineTimeout = integer()
151
170
%% CookieMode - enabled | disabled | verify
152
%% Ipv6Mode - enabled | disabled
171
%% IpFamily - inet | inet6 | inet6fb4
153
172
%% Description: Informs the httpc_manager of the new settings.
154
173
%%-------------------------------------------------------------------------
155
174
set_options(Options) ->
156
set_options(Options, default).
175
set_options(Options, default_profile()).
157
176
set_options(Options, Profile) ->
158
177
case validate_options(Options) of
160
try httpc_manager:set_options(Options, profile_name(Profile)) of
179
try httpc_manager:set_options(Opts, profile_name(Profile)) of
348
373
http_options([], Acc) ->
350
375
http_options([{timeout, Val} | Settings], Acc)
351
when is_integer(Val), Val >= 0->
376
when is_integer(Val) andalso (Val >= 0) ->
352
377
http_options(Settings, Acc#http_options{timeout = Val});
353
378
http_options([{timeout, infinity} | Settings], Acc) ->
354
379
http_options(Settings, Acc#http_options{timeout = infinity});
355
380
http_options([{autoredirect, Val} | Settings], Acc)
356
when Val == true; Val == false ->
381
when (Val =:= true) orelse (Val =:= false) ->
357
382
http_options(Settings, Acc#http_options{autoredirect = Val});
358
383
http_options([{ssl, Val} | Settings], Acc) ->
359
384
http_options(Settings, Acc#http_options{ssl = Val});
360
385
http_options([{relaxed, Val} | Settings], Acc)
361
when Val == true; Val == false ->
386
when (Val =:= true) orelse (Val =:= false) ->
362
387
http_options(Settings, Acc#http_options{relaxed = Val});
363
388
http_options([{proxy_auth, Val = {User, Passwd}} | Settings], Acc)
389
when is_list(User) andalso is_list(Passwd) ->
366
390
http_options(Settings, Acc#http_options{proxy_auth = Val});
367
391
http_options([{version, Val} | Settings], Acc)
393
http_options(Settings, Acc#http_options{version = atom_to_list(Val)});
394
http_options([{version, Val} | Settings], Acc)
369
396
http_options(Settings, Acc#http_options{version = Val});
370
397
http_options([Option | Settings], Acc) ->
371
398
Report = io_lib:format("Invalid option ~p ignored ~n", [Option]),
372
399
error_logger:info_report(Report),
373
400
http_options(Settings, Acc).
375
validate_options([]) ->
403
validate_options(Options) ->
404
(catch validate_options(Options, [])).
406
validate_options([], ValidateOptions) ->
407
{ok, lists:reverse(ValidateOptions)};
409
validate_options([{proxy, Proxy} = Opt| Tail], Acc) ->
410
validate_proxy(Proxy),
411
validate_options(Tail, [Opt | Acc]);
413
validate_options([{max_sessions, Value} = Opt| Tail], Acc) ->
414
validate_max_sessions(Value),
415
validate_options(Tail, [Opt | Acc]);
417
validate_options([{keep_alive_timeout, Value} = Opt| Tail], Acc) ->
418
validate_keep_alive_timeout(Value),
419
validate_options(Tail, [Opt | Acc]);
421
validate_options([{max_keep_alive_length, Value} = Opt| Tail], Acc) ->
422
validate_max_keep_alive_length(Value),
423
validate_options(Tail, [Opt | Acc]);
425
validate_options([{pipeline_timeout, Value} = Opt| Tail], Acc) ->
426
validate_pipeline_timeout(Value),
427
validate_options(Tail, [Opt | Acc]);
429
validate_options([{max_pipeline_length, Value} = Opt| Tail], Acc) ->
430
validate_max_pipeline_length(Value),
431
validate_options(Tail, [Opt | Acc]);
433
validate_options([{cookies, Value} = Opt| Tail], Acc) ->
434
validate_cookies(Value),
435
validate_options(Tail, [Opt | Acc]);
437
validate_options([{ipfamily, Value} = Opt| Tail], Acc) ->
438
validate_ipfamily(Value),
439
validate_options(Tail, [Opt | Acc]);
441
%% For backward compatibillity
442
validate_options([{ipv6, Value}| Tail], Acc) ->
443
NewValue = validate_ipv6(Value),
444
Opt = {ipfamily, NewValue},
445
validate_options(Tail, [Opt | Acc]);
447
validate_options([{ip, Value} = Opt| Tail], Acc) ->
449
validate_options(Tail, [Opt | Acc]);
451
validate_options([{port, Value} = Opt| Tail], Acc) ->
452
validate_port(Value),
453
validate_options(Tail, [Opt | Acc]);
455
validate_options([{verbose, Value} = Opt| Tail], Acc) ->
456
validate_verbose(Value),
457
validate_options(Tail, [Opt | Acc]);
459
validate_options([{_, _} = Opt| _], _Acc) ->
460
{error, {not_an_option, Opt}}.
463
validate_proxy({{ProxyHost, ProxyPort}, NoProxy} = Proxy)
464
when is_list(ProxyHost) andalso
465
is_integer(ProxyPort) andalso
468
validate_proxy(BadProxy) ->
469
bad_option(proxy, BadProxy).
471
validate_max_sessions(Value) when is_integer(Value) andalso (Value >= 0) ->
473
validate_max_sessions(BadValue) ->
474
bad_option(max_sessions, BadValue).
476
validate_keep_alive_timeout(Value) when is_integer(Value) andalso (Value >= 0) ->
478
validate_keep_alive_timeout(infinity = Value) ->
480
validate_keep_alive_timeout(BadValue) ->
481
bad_option(keep_alive_timeout, BadValue).
483
validate_max_keep_alive_length(Value) when is_integer(Value) andalso (Value >= 0) ->
485
validate_max_keep_alive_length(BadValue) ->
486
bad_option(max_keep_alive_length, BadValue).
488
validate_pipeline_timeout(Value) when is_integer(Value) ->
490
validate_pipeline_timeout(infinity = Value) ->
492
validate_pipeline_timeout(BadValue) ->
493
bad_option(pipeline_timeout, BadValue).
495
validate_max_pipeline_length(Value) when is_integer(Value) ->
497
validate_max_pipeline_length(BadValue) ->
498
bad_option(max_pipeline_length, BadValue).
500
validate_cookies(Value)
501
when ((Value =:= enabled) orelse
502
(Value =:= disabled) orelse
503
(Value =:= verify)) ->
505
validate_cookies(BadValue) ->
506
bad_option(cookies, BadValue).
508
validate_ipv6(Value) when (Value =:= enabled) orelse (Value =:= disabled) ->
515
validate_ipv6(BadValue) ->
516
bad_option(ipv6, BadValue).
518
validate_ipfamily(Value)
519
when (Value =:= inet) orelse (Value =:= inet6) orelse (Value =:= inet6fb4) ->
521
validate_ipfamily(BadValue) ->
522
bad_option(ipfamily, BadValue).
525
when is_tuple(Value) andalso ((size(Value) =:= 4) orelse (size(Value) =:= 8)) ->
527
validate_ip(BadValue) ->
528
bad_option(ip, BadValue).
530
validate_port(Value) when is_integer(Value) ->
532
validate_port(BadValue) ->
533
bad_option(port, BadValue).
535
validate_verbose(Value)
536
when ((Value =:= false) orelse
537
(Value =:= verbose) orelse
538
(Value =:= debug) orelse
539
(Value =:= trace)) ->
377
validate_options([{proxy, {{ProxyHost, ProxyPort}, NoProxy}}| Tail]) when
378
is_list(ProxyHost), is_integer(ProxyPort),
380
validate_options(Tail);
381
validate_options([{pipeline_timeout, Value}| Tail]) when is_integer(Value) ->
382
validate_options(Tail);
383
validate_options([{pipeline_timeout, infinity}| Tail]) ->
384
validate_options(Tail);
385
validate_options([{keep_alive_timeout, Value}| Tail]) when is_integer(Value) ->
386
validate_options(Tail);
387
validate_options([{keep_alive_timeout, infinity}| Tail]) ->
388
validate_options(Tail);
389
validate_options([{max_pipeline_length, Value}| Tail])
390
when is_integer(Value) ->
391
validate_options(Tail);
392
validate_options([{max_pipeline_length, Value}| Tail])
393
when is_integer(Value) ->
394
validate_options(Tail);
395
validate_options([{max_sessions, Value}| Tail]) when is_integer(Value) ->
396
validate_options(Tail);
397
validate_options([{cookies, Value}| Tail])
398
when Value == enabled; Value == disabled; Value == verify ->
399
validate_options(Tail);
400
validate_options([{ipv6, Value}| Tail])
401
when Value == enabled; Value == disabled ->
402
validate_options(Tail);
403
validate_options([{verbose, Value}| Tail]) when Value == false;
407
validate_options(Tail);
408
validate_options([{_, _} = Opt| _]) ->
409
{error, {not_an_option, Opt}}.
541
validate_verbose(BadValue) ->
542
bad_option(verbose, BadValue).
544
bad_option(Option, BadValue) ->
545
throw({error, {bad_option, Option, BadValue}}).
411
549
header_record([], RequestHeaders, Host, Version) ->
412
550
validate_headers(RequestHeaders, Host, Version);