private Realm ntlmChallenge(List<String> wwwAuth, Request request, ProxyServer proxyServer, FluentCaseInsensitiveStringsMap headers,
Realm realm, NettyResponseFuture<?> future, boolean proxyInd) throws NTLMEngineException {
boolean useRealm = proxyServer == null && realm != null;
String ntlmDomain = useRealm ? realm.getNtlmDomain() : proxyServer.getNtlmDomain();
String ntlmHost = useRealm ? realm.getNtlmHost() : proxyServer.getHost();
String principal = useRealm ? realm.getPrincipal() : proxyServer.getPrincipal();
String password = useRealm ? realm.getPassword() : proxyServer.getPassword();
UriComponents uri = request.getURI();
if (realm != null && !realm.isNtlmMessageType2Received()) {
String challengeHeader = NTLMEngine.INSTANCE.generateType1Msg(ntlmDomain, ntlmHost);
addNTLMAuthorizationHeader(headers, challengeHeader, proxyInd);
future.getAndSetAuth(false);
return newRealmBuilder(realm)
.setScheme(realm.getAuthScheme())
.setUri(uri)
.setMethodName(request.getMethod())
.setNtlmMessageType2Received(true)
.build();
} else {
addType3NTLMAuthorizationHeader(wwwAuth, headers, principal, password, ntlmDomain, ntlmHost, proxyInd);
Realm.AuthScheme authScheme = realm != null ? realm.getAuthScheme() : Realm.AuthScheme.NTLM;
return newRealmBuilder(realm)
.setScheme(authScheme)
.setUri(uri)
.setMethodName(request.getMethod())
.build();
}
}