/**
* Copyright (C) 2012 FuseSource, Inc.
* http://fusesource.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.fusesource.hawtdispatch.transport;
import org.fusesource.hawtdispatch.Task;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import java.net.URI;
import java.security.NoSuchAlgorithmException;
/**
* @author <a href="http://hiramchirino.com">Hiram Chirino</a>
*/
public class SslTransportServer extends TcpTransportServer {
public static SslTransportServer createTransportServer(URI uri) throws Exception {
return new SslTransportServer(uri);
}
protected KeyManager[] keyManagers;
private TrustManager[] trustManagers;
protected String protocol = "TLS";
protected SSLContext sslContext;
private String clientAuth = "want";
private String disabledCypherSuites = null;
public SslTransportServer(URI location) throws Exception {
super(location);
setSSLContext(SSLContext.getInstance(SslTransport.protocol(location.getScheme())));
}
public void setKeyManagers(KeyManager[] keyManagers) {
this.keyManagers = keyManagers;
}
public void setTrustManagers(TrustManager[] trustManagers) {
this.trustManagers = trustManagers;
}
public void start(Task onCompleted) throws Exception {
if( keyManagers!=null ) {
sslContext.init(keyManagers, trustManagers, null);
} else {
sslContext = SSLContext.getDefault();
}
super.start(onCompleted);
}
protected TcpTransport createTransport() {
SslTransport rc = new SslTransport();
rc.setDispatchQueue(dispatchQueue);
rc.setBlockingExecutor(blockingExecutor);
rc.setSSLContext(sslContext);
rc.setClientAuth(clientAuth);
rc.setDisabledCypherSuites(disabledCypherSuites);
return rc;
}
public SslTransportServer protocol(String value) throws NoSuchAlgorithmException {
this.protocol = value;
sslContext = SSLContext.getInstance(protocol);
return this;
}
public SSLContext getSSLContext() {
return sslContext;
}
public void setSSLContext(SSLContext sslContext) {
this.sslContext = sslContext;
}
public String getClientAuth() {
return clientAuth;
}
public void setClientAuth(String clientAuth) {
this.clientAuth = clientAuth;
}
public String getDisabledCypherSuites() {
return disabledCypherSuites;
}
public void setDisabledCypherSuites(String disabledCypherSuites) {
this.disabledCypherSuites = disabledCypherSuites;
}
}