Search in sources :

Example 1 with Pump

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;
}
Also used : OpenOptions(io.vertx.core.file.OpenOptions) Pump(io.vertx.core.streams.Pump)

Example 2 with Pump

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());
    }
}
Also used : ArrayList(java.util.ArrayList) Pump(io.vertx.core.streams.Pump) Test(org.junit.Test)

Example 3 with Pump

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);
    }
}
Also used : ArrayList(java.util.ArrayList) Pump(io.vertx.core.streams.Pump) Test(org.junit.Test)

Example 4 with Pump

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);
    });
}
Also used : Buffer(io.vertx.core.buffer.Buffer) NetServerOptions(io.vertx.core.net.NetServerOptions) Buffer(io.vertx.core.buffer.Buffer) NetServer(io.vertx.core.net.NetServer) Vertx(io.vertx.core.Vertx) Pump(io.vertx.core.streams.Pump) Handler(io.vertx.core.Handler) Logger(io.vertx.core.logging.Logger) NetClient(io.vertx.core.net.NetClient) LoggerFactory(io.vertx.core.logging.LoggerFactory) NetClientOptions(io.vertx.core.net.NetClientOptions) NetSocket(io.vertx.core.net.NetSocket) NetSocket(io.vertx.core.net.NetSocket) NetClientOptions(io.vertx.core.net.NetClientOptions) NetClient(io.vertx.core.net.NetClient) NetServerOptions(io.vertx.core.net.NetServerOptions)

Example 5 with Pump

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();
}
Also used : OpenOptions(io.vertx.core.file.OpenOptions) ReadStream(io.vertx.core.streams.ReadStream) WriteStream(io.vertx.core.streams.WriteStream) IOException(java.io.IOException) Pump(io.vertx.core.streams.Pump) Test(org.junit.Test)

Aggregations

Pump (io.vertx.core.streams.Pump)6 Test (org.junit.Test)3 OpenOptions (io.vertx.core.file.OpenOptions)2 ArrayList (java.util.ArrayList)2 Handler (io.vertx.core.Handler)1 Vertx (io.vertx.core.Vertx)1 Buffer (io.vertx.core.buffer.Buffer)1 Logger (io.vertx.core.logging.Logger)1 LoggerFactory (io.vertx.core.logging.LoggerFactory)1 NetClient (io.vertx.core.net.NetClient)1 NetClientOptions (io.vertx.core.net.NetClientOptions)1 NetServer (io.vertx.core.net.NetServer)1 NetServerOptions (io.vertx.core.net.NetServerOptions)1 NetSocket (io.vertx.core.net.NetSocket)1 ReadStream (io.vertx.core.streams.ReadStream)1 WriteStream (io.vertx.core.streams.WriteStream)1 IOException (java.io.IOException)1