samer@56
|
1 :- op(200,fy,@). % Shouldn't really need this...
|
daniel@54
|
2
|
daniel@54
|
3 colour_terminal :-
|
daniel@54
|
4 stream_property(user_output, tty(true)),
|
daniel@54
|
5 getenv('TERM',Term),
|
daniel@54
|
6 member(Term,[xterm,screen,'screen-256color','xterm-256color','xterm-color']).
|
daniel@54
|
7
|
daniel@54
|
8 :- dynamic http_proxy/3.
|
daniel@54
|
9
|
daniel@54
|
10 get_http_proxy(Host,Port,basic(User,Pwd)) :-
|
daniel@54
|
11 getenv(use_proxy,yes),
|
daniel@54
|
12 getenv(http_proxy,Proxy),
|
daniel@54
|
13 % proxy looks like http://User:Password@Host:Port
|
daniel@54
|
14 atom_concat('http://',Proxy1,Proxy), % strip off protocol
|
daniel@54
|
15 split_atom(Proxy1,Auth,'@',HostPort),
|
daniel@54
|
16 split_atom(Auth,User,':',Pwd),
|
daniel@54
|
17 split_atom(HostPort,Host,':',APort),
|
daniel@54
|
18 atom_number(APort,Port).
|
daniel@54
|
19
|
daniel@54
|
20 split_atom(Atom,Pre,Mid,Post) :-
|
daniel@54
|
21 sub_atom(Atom,LPre,_,LPost,Mid),
|
daniel@54
|
22 sub_atom(Atom,0,LPre,_,Pre),
|
daniel@54
|
23 sub_atom(Atom,_,LPost,0,Post).
|
daniel@54
|
24
|
daniel@54
|
25 internal_host(localhost).
|
samer@65
|
26 internal_host(Proxy) :- http_proxy(Proxy,_,_).
|
samer@65
|
27 %internal_host(Host) :- sub_atom(Host,_,_,0,'bl.uk').
|
daniel@54
|
28
|
samer@65
|
29 % New scheme for proxy handling (>=7.3.0)
|
samer@65
|
30 % :- multifile socket:proxy_for_url/3.
|
samer@65
|
31 % socket:proxy_for_url(_, Target, proxy(Host,Port)) :-
|
samer@65
|
32 % http_proxy(Host,Port,_),
|
samer@65
|
33 % \+internal_host(Target),
|
samer@65
|
34 % debug(proxy,'Using socketproxy ~w:~w for ~w',[Host,Port,Target]).
|
samer@65
|
35
|
samer@65
|
36 % Old scheme, still required to provide authorisation details
|
daniel@54
|
37 :- multifile http:open_options/2.
|
samer@65
|
38 http:open_options(Parts,[proxy(Host:Port),proxy_authorization(Auth)]) :-
|
daniel@54
|
39 http_proxy(Host,Port,Auth),
|
daniel@54
|
40 option(host(Target),Parts),
|
daniel@54
|
41 \+internal_host(Target),
|
samer@65
|
42 debug(proxy,'Using HTTP proxy ~w:~w for ~w',[Host,Port,Target]).
|
daniel@54
|
43
|
samer@56
|
44 :- (colour_terminal -> load_files(library(ansi_term), [silent(true)]); true),
|
daniel@54
|
45 set_prolog_flag(prompt_alternatives_on, determinism),
|
daniel@54
|
46 set_prolog_flag(editor, '$EDITOR'),
|
daniel@54
|
47 load_files(library(url), [silent(true)]),
|
daniel@54
|
48 load_files(library(http/http_ssl_plugin), [silent(true)]),
|
samer@65
|
49 retractall(http_proxy(_,_,_)),
|
daniel@54
|
50 ( get_http_proxy(Host,Port,Auth)
|
daniel@54
|
51 -> assert(http_proxy(Host,Port,Auth))
|
daniel@54
|
52 ; true
|
daniel@54
|
53 ).
|
daniel@54
|
54
|