org.fusesource.hawtdispatch.example.SSLClientExample Maven / Gradle / Ivy
/**
* 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.example;
import org.fusesource.hawtbuf.AsciiBuffer;
import org.fusesource.hawtbuf.Buffer;
import org.fusesource.hawtdispatch.Dispatch;
import org.fusesource.hawtdispatch.Task;
import org.fusesource.hawtdispatch.transport.AbstractProtocolCodec;
import org.fusesource.hawtdispatch.transport.DefaultTransportListener;
import org.fusesource.hawtdispatch.transport.SslTransport;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.URI;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
/**
*/
public class SSLClientExample {
// A fake trust manager to accept self signed certs.
static final TrustManager[] TRUST_ALL_CERTS = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
};
// A very simple codec that just passes along byte buffers..
// A more realistic example can be found at:
// https://github.com/fusesource/stompjms/blob/master/stompjms-client/src/main/java/org/fusesource/stomp/codec/StompProtocolCodec.java
private static class BufferProtocolCodec extends AbstractProtocolCodec {
@Override
protected void encode(Object value) throws IOException {
Buffer buffer = (Buffer) value;
nextWriteBuffer.write(buffer);
}
@Override
protected Action initialDecodeAction() {
return readCommand();
}
protected Action readCommand() {
return new Action() {
public Object apply() throws IOException {
int length = readBuffer.position() - readStart;
if (length > 0) {
int offset = readStart;
readEnd = offset + length;
readStart = readEnd;
return new Buffer(readBuffer.array(), offset, length);
} else {
return null;
}
}
};
}
}
public static void main(String[] args) throws Exception {
// Setup an SSLContext that accepts self signed certs.
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, TRUST_ALL_CERTS, new SecureRandom());
final SslTransport client = new SslTransport();
client.setDispatchQueue(Dispatch.createQueue());
client.setSSLContext(sslContext);
client.setBlockingExecutor(Executors.newCachedThreadPool());
client.setProtocolCodec(new BufferProtocolCodec());
client.connecting(new URI("ssl://localhost:61614"), null);
final CountDownLatch done = new CountDownLatch(1);
final Task onClose = new Task() {
public void run() {
System.out.println("Client closed.");
done.countDown();
}
};
client.setTransportListener(new DefaultTransportListener() {
@Override
public void onTransportConnected() {
System.out.println("Connected");
client.resumeRead();
// Once we are connected send some data..
client.offer(new AsciiBuffer(
"CONNECT\n" +
"login:admin\n" +
"passcode:password\n" +
"\n\u0000\n"
));
}
// all we do is echo back the request, but change the frame,
// command to RESPONSE.
@Override
public void onTransportCommand(Object command) {
Buffer frame = (Buffer) command;
System.out.println("Received :" + frame.ascii());
client.stop(onClose);
}
@Override
public void onTransportFailure(IOException error) {
System.out.println("Transport failure :" + error);
client.stop(onClose);
}
});
client.start(Dispatch.NOOP);
done.await();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy