2020import com .google .common .base .Strings ;
2121
2222import org .asynchttpclient .Dsl ;
23+ import org .asynchttpclient .Realm ;
2324import org .asynchttpclient .Request ;
2425import org .asynchttpclient .RequestBuilder ;
2526import org .asynchttpclient .Response ;
27+ import org .asynchttpclient .proxy .ProxyServer ;
2628import org .openqa .selenium .Credentials ;
2729import org .openqa .selenium .UsernameAndPassword ;
2830import org .openqa .selenium .remote .http .AddSeleniumUserAgent ;
31+ import org .openqa .selenium .remote .http .ClientConfig ;
2932import org .openqa .selenium .remote .http .HttpMethod ;
3033import org .openqa .selenium .remote .http .HttpRequest ;
3134import org .openqa .selenium .remote .http .HttpResponse ;
3235
36+ import java .net .InetSocketAddress ;
3337import java .net .URI ;
3438
3539import static org .asynchttpclient .Dsl .request ;
3640import static org .openqa .selenium .remote .http .Contents .empty ;
3741import static org .openqa .selenium .remote .http .Contents .memoize ;
42+ import static org .openqa .selenium .remote .http .netty .NettyClient .toClampedInt ;
3843
3944class NettyMessages {
4045
4146 private NettyMessages () {
4247 // Utility classes.
4348 }
4449
45- protected static Request toNettyRequest (
46- URI baseUrl ,
47- int readTimeout ,
48- int requestTimeout ,
49- Credentials credentials ,
50- HttpRequest request ) {
50+ protected static Request toNettyRequest (ClientConfig config ,
51+ HttpRequest request ) {
52+
53+ URI baseUrl = config . baseUri ();
54+ int timeout = toClampedInt ( config . readTimeout (). toMillis ());
55+ Credentials credentials = config . credentials ();
5156
5257 String rawUrl = getRawUrl (baseUrl , request .getUri ());
5358
5459 RequestBuilder builder = request (request .getMethod ().toString (), rawUrl )
55- .setReadTimeout (readTimeout )
56- .setRequestTimeout (requestTimeout );
60+ .setReadTimeout (timeout )
61+ .setRequestTimeout (timeout );
5762
5863 for (String name : request .getQueryParameterNames ()) {
5964 for (String value : request .getQueryParameters (name )) {
@@ -75,19 +80,31 @@ protected static Request toNettyRequest(
7580 builder .addHeader ("User-Agent" , AddSeleniumUserAgent .USER_AGENT );
7681 }
7782
83+ Realm .Builder realmBuilder = null ;
7884 String info = baseUrl .getUserInfo ();
7985 if (!Strings .isNullOrEmpty (info )) {
8086 String [] parts = info .split (":" , 2 );
8187 String user = parts [0 ];
8288 String pass = parts .length > 1 ? parts [1 ] : null ;
83-
84- builder .setRealm (Dsl . basicAuthRealm ( user , pass ). setUsePreemptiveAuth ( true ) );
89+ realmBuilder = Dsl . basicAuthRealm ( user , pass ). setUsePreemptiveAuth ( true );
90+ builder .setRealm (realmBuilder );
8591 } else if (credentials != null ) {
8692 if (!(credentials instanceof UsernameAndPassword )) {
8793 throw new IllegalArgumentException ("Credentials must be a user name and password" );
8894 }
8995 UsernameAndPassword uap = (UsernameAndPassword ) credentials ;
90- builder .setRealm (Dsl .basicAuthRealm (uap .username (), uap .password ()).setUsePreemptiveAuth (true ));
96+ realmBuilder = Dsl .basicAuthRealm (uap .username (), uap .password ()).setUsePreemptiveAuth (true );
97+ builder .setRealm (realmBuilder );
98+ }
99+
100+ if (config .proxy () != null ) {
101+ InetSocketAddress address = (InetSocketAddress ) config .proxy ().address ();
102+ ProxyServer .Builder proxyBuilder = new ProxyServer .Builder (
103+ address .getHostName (), address .getPort ());
104+ if (realmBuilder != null ) {
105+ proxyBuilder .setRealm (realmBuilder );
106+ }
107+ builder .setProxyServer (proxyBuilder );
91108 }
92109
93110 if (request .getMethod ().equals (HttpMethod .POST )) {
0 commit comments