use of io.vertx.core.streams.Pump in project vert.x by eclipse.
the class HttpServerFileUploadImpl method streamToFileSystem.
@Override
public HttpServerFileUpload streamToFileSystem(String filename) {
pause();
vertx.fileSystem().open(filename, new OpenOptions(), ar -> {
if (ar.succeeded()) {
file = ar.result();
Pump p = Pump.pump(HttpServerFileUploadImpl.this, ar.result());
p.start();
resume();
} else {
notifyExceptionHandler(ar.cause());
}
});
return this;
}
use of io.vertx.core.streams.Pump in project vert.x by eclipse.
the class PumpTest method testPumpBasic.
@Test
public void testPumpBasic() throws Exception {
FakeReadStream<MyClass> rs = new FakeReadStream<>();
FakeWriteStream<MyClass> ws = new FakeWriteStream<>();
Pump p = Pump.pump(rs, ws, 1001);
for (int i = 0; i < 10; i++) {
// Repeat a few times
p.start();
List<MyClass> inp = new ArrayList<>();
for (int j = 0; j < 10; j++) {
MyClass myClass = new MyClass();
inp.add(myClass);
rs.addData(myClass);
}
assertEquals(inp, ws.received);
assertFalse(rs.paused);
assertEquals(0, rs.pauseCount);
assertEquals(0, rs.resumeCount);
p.stop();
ws.clearReceived();
MyClass myClass = new MyClass();
rs.addData(myClass);
assertEquals(0, ws.received.size());
}
}
use of io.vertx.core.streams.Pump in project vert.x by eclipse.
the class PumpTest method testPumpPauseResume.
@Test
public void testPumpPauseResume() throws Exception {
FakeReadStream<MyClass> rs = new FakeReadStream<>();
FakeWriteStream<MyClass> ws = new FakeWriteStream<>();
Pump p = Pump.pump(rs, ws, 5);
p.start();
for (int i = 0; i < 10; i++) {
// Repeat a few times
List<MyClass> inp = new ArrayList<>();
for (int j = 0; j < 4; j++) {
MyClass myClass = new MyClass();
inp.add(myClass);
rs.addData(myClass);
assertFalse(rs.paused);
assertEquals(i, rs.pauseCount);
assertEquals(i, rs.resumeCount);
}
MyClass myClass = new MyClass();
inp.add(myClass);
rs.addData(myClass);
assertTrue(rs.paused);
assertEquals(i + 1, rs.pauseCount);
assertEquals(i, rs.resumeCount);
assertEquals(inp, ws.received);
ws.clearReceived();
assertFalse(rs.paused);
assertEquals(i + 1, rs.pauseCount);
assertEquals(i + 1, rs.resumeCount);
}
}
use of io.vertx.core.streams.Pump 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.streams.Pump in project vert.x by eclipse.
the class FileSystemTest method testPumpFileStreams.
@Test
@SuppressWarnings("unchecked")
public void testPumpFileStreams() throws Exception {
String fileName1 = "some-file.dat";
String fileName2 = "some-other-file.dat";
//Non integer multiple of buffer size
int fileSize = (int) (AsyncFileImpl.DEFAULT_READ_BUFFER_SIZE * 1000.3);
byte[] content = TestUtils.randomByteArray(fileSize);
createFile(fileName1, content);
vertx.fileSystem().open(testDir + pathSep + fileName1, new OpenOptions(), arr -> {
if (arr.succeeded()) {
ReadStream rs = arr.result();
vertx.fileSystem().open(testDir + pathSep + fileName2, new OpenOptions(), ar -> {
if (ar.succeeded()) {
WriteStream ws = ar.result();
Pump p = Pump.pump(rs, ws);
p.start();
rs.endHandler(v -> {
arr.result().close(car -> {
if (car.failed()) {
fail(ar.cause().getMessage());
} else {
ar.result().close(ar2 -> {
if (ar2.failed()) {
fail(ar2.cause().getMessage());
} else {
assertTrue(fileExists(fileName2));
byte[] readBytes;
try {
readBytes = Files.readAllBytes(Paths.get(testDir + pathSep + fileName2));
} catch (IOException e) {
fail(e.getMessage());
return;
}
assertEquals(Buffer.buffer(content), Buffer.buffer(readBytes));
testComplete();
}
});
}
});
});
} else {
fail(ar.cause().getMessage());
}
});
} else {
fail(arr.cause().getMessage());
}
});
await();
}
Aggregations