/******************************************************************************* * Copyright (c) 2009 EclipseSource and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * EclipseSource - initial API and implementation * Thomas Joiner - changed to work with HttpClient 4.1 and added SPNEGO detection ******************************************************************************/ package org.eclipse.ecf.provider.filetransfer.httpclient4; import org.apache.http.auth.AuthScheme; import org.apache.http.auth.AuthState; import org.apache.http.client.protocol.ClientContext; import org.apache.http.protocol.HttpContext; public class NTLMProxyDetector { private static final String PROXY_SPNEGO_VALUE = "NEGOTIATE"; //$NON-NLS-1$ private static final String PROXY_NTLM_VALUE = "NTLM"; //$NON-NLS-1$ /** * This method will detect if the request connected to a NTLM proxy * given the HttpContext provided to one of the HttpClient#execute() * methods. * * @param context the HttpContext given to the HttpClient at execution time * @return true if it connected to an NTLM proxy * @since 5.0 */ public static boolean detectNTLMProxy(HttpContext context) { return isProxyType(context, PROXY_NTLM_VALUE); } private static boolean isProxyType(HttpContext context, String scheme) { if (context == null) return false; AuthState authState = (AuthState) context.getAttribute(ClientContext.PROXY_AUTH_STATE); if (authState == null) return false; AuthScheme authScheme = authState.getAuthScheme(); if (authScheme == null) return false; String schemeName = authScheme.getSchemeName(); if (schemeName == null) return false; return schemeName.equalsIgnoreCase(scheme); } /** * This method will detect if the request connected to a SPNEGO proxy * given the HttpContext provided to one of the HttpClient#execute() * methods. * * @param context the HttpContext given to the HttpClient at execution time * @return true if it connected to an SPNEGO proxy * @since 5.0 */ public static boolean detectSPNEGOProxy(HttpContext context) { return isProxyType(context, PROXY_SPNEGO_VALUE); } }