use of io.vertx.core.Handler in project vert.x by eclipse.
the class SocksProxy method start.
/**
* Start the server.
*
* @param vertx
* Vertx instance to use for creating the server and client
* @param finishedHandler
* will be called when the start has started
*/
@Override
public void start(Vertx vertx, Handler<Void> finishedHandler) {
NetServerOptions options = new NetServerOptions();
options.setHost("localhost").setPort(PORT);
server = vertx.createNetServer(options);
server.connectHandler(socket -> {
socket.handler(buffer -> {
Buffer expectedInit = username == null ? clientInit : clientInitAuth;
if (!buffer.equals(expectedInit)) {
throw new IllegalStateException("expected " + toHex(expectedInit) + ", got " + toHex(buffer));
}
boolean useAuth = buffer.equals(clientInitAuth);
log.debug("got request: " + toHex(buffer));
final Handler<Buffer> handler = buffer2 -> {
if (!buffer2.getBuffer(0, clientRequest.length()).equals(clientRequest)) {
throw new IllegalStateException("expected " + toHex(clientRequest) + ", got " + toHex(buffer2));
}
int stringLen = buffer2.getUnsignedByte(4);
log.debug("string len " + stringLen);
if (buffer2.length() != 7 + stringLen) {
throw new IllegalStateException("format error in client request, got " + toHex(buffer2));
}
String host = buffer2.getString(5, 5 + stringLen);
int port = buffer2.getUnsignedShort(5 + stringLen);
log.debug("got request: " + toHex(buffer2));
log.debug("connect: " + host + ":" + port);
socket.handler(null);
lastUri = host + ":" + port;
if (forceUri != null) {
host = forceUri.substring(0, forceUri.indexOf(':'));
port = Integer.valueOf(forceUri.substring(forceUri.indexOf(':') + 1));
}
log.debug("connecting to " + host + ":" + port);
NetClient netClient = vertx.createNetClient(new NetClientOptions());
netClient.connect(port, host, result -> {
if (result.succeeded()) {
log.debug("writing: " + toHex(connectResponse));
socket.write(connectResponse);
log.debug("connected, starting pump");
NetSocket clientSocket = result.result();
socket.closeHandler(v -> clientSocket.close());
clientSocket.closeHandler(v -> socket.close());
Pump.pump(socket, clientSocket).start();
Pump.pump(clientSocket, socket).start();
} else {
log.error("exception", result.cause());
socket.handler(null);
log.debug("writing: " + toHex(errorResponse));
socket.write(errorResponse);
socket.close();
}
});
};
if (useAuth) {
socket.handler(buffer3 -> {
log.debug("auth handler");
log.debug("got request: " + toHex(buffer3));
Buffer authReply = Buffer.buffer(new byte[] { 1, (byte) username.length() });
authReply.appendString(username);
authReply.appendByte((byte) username.length());
authReply.appendString(username);
if (!buffer3.equals(authReply)) {
log.debug("expected " + toHex(authReply) + ", got " + toHex(buffer3));
socket.handler(null);
log.debug("writing: " + toHex(authFailed));
socket.write(authFailed);
socket.close();
} else {
socket.handler(handler);
log.debug("writing: " + toHex(authSuccess));
socket.write(authSuccess);
}
});
log.debug("writing: " + toHex(serverReplyAuth));
socket.write(serverReplyAuth);
} else {
socket.handler(handler);
log.debug("writing: " + toHex(serverReply));
socket.write(serverReply);
}
});
});
server.listen(result -> {
log.debug("socks5 server started");
finishedHandler.handle(null);
});
}
use of io.vertx.core.Handler in project vert.x by eclipse.
the class ProxyErrorTest method proxyTest.
private void proxyTest(int error, String username, String url, Handler<HttpClientResponse> assertResponse, boolean completeOnException) throws Exception {
startProxy(error, username);
final HttpClientOptions options = new HttpClientOptions().setSsl(url.startsWith("https")).setProxyOptions(new ProxyOptions().setType(ProxyType.HTTP).setHost("localhost").setPort(proxy.getPort()));
HttpClient client = vertx.createHttpClient(options);
client.getAbs(url, assertResponse).exceptionHandler(e -> {
if (completeOnException) {
testComplete();
} else {
fail(e);
}
}).end();
await();
}
use of io.vertx.core.Handler in project vert.x by eclipse.
the class RecordParserTest method doTestDelimited.
private void doTestDelimited(final Buffer input, Buffer delim, Integer[] chunkSizes, final Buffer... expected) {
final Buffer[] results = new Buffer[expected.length];
Handler<Buffer> out = new Handler<Buffer>() {
int pos;
public void handle(Buffer buff) {
results[pos++] = buff;
}
};
RecordParser parser = RecordParser.newDelimited(delim, out);
feedChunks(input, parser, chunkSizes);
checkResults(expected, results);
}
use of io.vertx.core.Handler in project vert.x by eclipse.
the class RecordParserTest method testMixed.
@Test
public /*
Test mixture of fixed and delimited
*/
void testMixed() {
final int lines = 8;
final List<Object> types = new ArrayList<Object>();
class MyHandler implements Handler<Buffer> {
RecordParser parser = RecordParser.newFixed(10, this);
int pos;
public void handle(Buffer buff) {
if (pos < lines) {
Object type = types.get(pos);
if (type instanceof byte[]) {
byte[] bytes = (byte[]) type;
parser.delimitedMode(Buffer.buffer(bytes));
} else {
int length = (Integer) type;
parser.fixedSizeMode(length);
}
}
}
}
MyHandler out = new MyHandler();
Buffer[] expected = new Buffer[lines];
Buffer input = Buffer.buffer(100);
expected[0] = TestUtils.randomBuffer(10);
input.appendBuffer(expected[0]);
types.add(expected[0].length());
expected[1] = TestUtils.randomBuffer(100);
input.appendBuffer(expected[1]);
types.add(expected[1].length());
byte[] delim = new byte[] { 23, -120, 100, 3 };
expected[2] = TestUtils.randomBuffer(50, true, delim[0]);
input.appendBuffer(expected[2]);
types.add(delim);
input.appendBuffer(Buffer.buffer(delim));
expected[3] = TestUtils.randomBuffer(1000);
input.appendBuffer(expected[3]);
types.add(expected[3].length());
expected[4] = TestUtils.randomBuffer(230, true, delim[0]);
input.appendBuffer(expected[4]);
types.add(delim);
input.appendBuffer(Buffer.buffer(delim));
delim = new byte[] { 17 };
expected[5] = TestUtils.randomBuffer(341, true, delim[0]);
input.appendBuffer(expected[5]);
types.add(delim);
input.appendBuffer(Buffer.buffer(delim));
delim = new byte[] { 54, -32, 0 };
expected[6] = TestUtils.randomBuffer(1234, true, delim[0]);
input.appendBuffer(expected[6]);
types.add(delim);
input.appendBuffer(Buffer.buffer(delim));
expected[7] = TestUtils.randomBuffer(100);
input.appendBuffer(expected[7]);
types.add(expected[7].length());
feedChunks(input, out.parser, new Integer[] { 50, 10, 3 });
}
use of io.vertx.core.Handler in project vert.x by eclipse.
the class TimerTest method periodic.
private void periodic(long delay) throws Exception {
final int numFires = 10;
final AtomicLong id = new AtomicLong(-1);
id.set(vertx.setPeriodic(delay, new Handler<Long>() {
int count;
public void handle(Long timerID) {
assertEquals(id.get(), timerID.longValue());
count++;
if (count == numFires) {
vertx.cancelTimer(timerID);
setEndTimer();
}
if (count > numFires) {
fail("Fired too many times");
}
}
}));
await();
}
Aggregations