/*
GNU GENERAL PUBLIC LICENSE
Copyright (C) 2006 The Lobo Project
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
verion 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Contact info: lobochief@users.sourceforge.net
*/
/*
* Created on Apr 16, 2005
*/
package org.lobobrowser.request;
import java.net.URL;
import java.util.Map;
import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import org.eclipse.jdt.annotation.NonNull;
import org.lobobrowser.clientlet.ClientletException;
import org.lobobrowser.clientlet.ClientletRequest;
import org.lobobrowser.clientlet.ClientletResponse;
import org.lobobrowser.ua.ProgressType;
import org.lobobrowser.ua.RequestType;
import org.lobobrowser.ua.UserAgentContext;
/**
* Request handler used by request().
*
* @author J. H. S.
*/
public abstract class SimpleRequestHandler implements RequestHandler {
private static final Logger logger = Logger.getLogger(SimpleRequestHandler.class.getName());
private final ClientletRequest request;
private final UserAgentContext uaContext;
@Override
public UserAgentContext getContext() {
return uaContext;
}
public SimpleRequestHandler(final @NonNull URL url, final RequestType requestType, final UserAgentContext uaContext) {
this.request = new ClientletRequestImpl(url, requestType);
this.uaContext = uaContext;
}
public SimpleRequestHandler(final @NonNull URL url, final String method, final String altPostData, final RequestType requestType,
final UserAgentContext uaContext) {
this.request = new ClientletRequestImpl(url, method, altPostData, requestType);
this.uaContext = uaContext;
}
public boolean isNewNavigationEntry() {
return false;
}
public String getCacheFileSuffix() {
return null;
}
public HostnameVerifier getHostnameVerifier() {
return new LocalHostnameVerifier();
}
public String getLatestRequestMethod() {
return this.request.getMethod();
}
public @NonNull URL getLatestRequestURL() {
return this.request.getRequestURL();
}
public ClientletRequest getRequest() {
return this.request;
}
public void handleProgress(final ProgressType progressType, final @NonNull URL url, final String method, final int value, final int max) {
// nop
}
public boolean handleException(final ClientletResponse response, final Throwable exception, final RequestType requestType)
throws ClientletException {
logger.log(Level.WARNING, "handleException(): Error processing response=[" + response + "]", exception);
return true;
}
private volatile boolean cancelled;
public void cancel() {
this.cancelled = true;
}
public boolean isCancelled() {
return this.cancelled;
}
private class LocalHostnameVerifier implements HostnameVerifier {
/*
* (non-Javadoc)
*
* @see javax.net.ssl.HostnameVerifier#verify(java.lang.String,
* javax.net.ssl.SSLSession)
*/
public boolean verify(final String host, final SSLSession session) {
if (OkHostnameVerifier.INSTANCE.verify(host, session)) {
return true;
} else {
final VerifiedHostsStore vhs = VerifiedHostsStore.getInstance();
if (vhs.contains(host)) {
return true;
}
// Does not ask user.
return false;
}
}
}
public Optional<Map<String, String>> getRequestedHeaders() {
return Optional.empty();
}
}