/*
 * Copyright 2014 Red Hat, Inc.
 *
 * Red Hat licenses this file to you 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 io.vertx.reactivex.core.http;

import io.vertx.reactivex.RxHelper;
import io.vertx.reactivex.ObservableHelper;
import io.vertx.reactivex.FlowableHelper;
import io.vertx.reactivex.impl.AsyncResultMaybe;
import io.vertx.reactivex.impl.AsyncResultSingle;
import io.vertx.reactivex.impl.AsyncResultCompletable;
import io.vertx.reactivex.WriteStreamObserver;
import io.vertx.reactivex.WriteStreamSubscriber;
import java.util.Map;
import java.util.Set;
import java.util.List;
import java.util.Iterator;
import java.util.function.Function;
import java.util.stream.Collectors;
import io.vertx.core.Handler;
import io.vertx.core.AsyncResult;
import io.vertx.core.json.JsonObject;
import io.vertx.core.json.JsonArray;
import io.vertx.lang.rx.RxGen;
import io.vertx.lang.rx.TypeArg;
import io.vertx.lang.rx.MappingIterator;

Represents a server-side HTTP request.

Instances are created for each request and passed to the user via a handler.

Each instance of this class is associated with a corresponding HttpServerResponse instance via response.

It implements ReadStream so it can be used with Pipe to pipe data with flow control.

NOTE: This class has been automatically generated from the original non RX-ified interface using Vert.x codegen.
/** * Represents a server-side HTTP request. * <p> * Instances are created for each request and passed to the user via a handler. * <p> * Each instance of this class is associated with a corresponding {@link io.vertx.reactivex.core.http.HttpServerResponse} instance via * {@link io.vertx.reactivex.core.http.HttpServerRequest#response}.<p> * It implements {@link io.vertx.reactivex.core.streams.ReadStream} so it can be used with * {@link io.vertx.reactivex.core.streams.Pipe} to pipe data with flow control. * <p> * * <p/> * NOTE: This class has been automatically generated from the {@link io.vertx.core.http.HttpServerRequest original} non RX-ified interface using Vert.x codegen. */
@RxGen(io.vertx.core.http.HttpServerRequest.class) public class HttpServerRequest implements io.vertx.reactivex.core.streams.ReadStream<io.vertx.reactivex.core.buffer.Buffer> { @Override public String toString() { return delegate.toString(); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; HttpServerRequest that = (HttpServerRequest) o; return delegate.equals(that.delegate); } @Override public int hashCode() { return delegate.hashCode(); } public static final TypeArg<HttpServerRequest> __TYPE_ARG = new TypeArg<>( obj -> new HttpServerRequest((io.vertx.core.http.HttpServerRequest) obj), HttpServerRequest::getDelegate ); private final io.vertx.core.http.HttpServerRequest delegate; public HttpServerRequest(io.vertx.core.http.HttpServerRequest delegate) { this.delegate = delegate; } public HttpServerRequest(Object delegate) { this.delegate = (io.vertx.core.http.HttpServerRequest)delegate; } public io.vertx.core.http.HttpServerRequest getDelegate() { return delegate; } private io.reactivex.Observable<io.vertx.reactivex.core.buffer.Buffer> observable; private io.reactivex.Flowable<io.vertx.reactivex.core.buffer.Buffer> flowable; public synchronized io.reactivex.Observable<io.vertx.reactivex.core.buffer.Buffer> toObservable() { if (observable == null) { Function<io.vertx.core.buffer.Buffer, io.vertx.reactivex.core.buffer.Buffer> conv = io.vertx.reactivex.core.buffer.Buffer::newInstance; observable = ObservableHelper.toObservable(delegate, conv); } return observable; } public synchronized io.reactivex.Flowable<io.vertx.reactivex.core.buffer.Buffer> toFlowable() { if (flowable == null) { Function<io.vertx.core.buffer.Buffer, io.vertx.reactivex.core.buffer.Buffer> conv = io.vertx.reactivex.core.buffer.Buffer::newInstance; flowable = FlowableHelper.toFlowable(delegate, conv); } return flowable; } private static final TypeArg<io.vertx.reactivex.core.buffer.Buffer> TYPE_ARG_0 = new TypeArg<io.vertx.reactivex.core.buffer.Buffer>(o1 -> io.vertx.reactivex.core.buffer.Buffer.newInstance((io.vertx.core.buffer.Buffer)o1), o1 -> o1.getDelegate()); private static final TypeArg<io.vertx.reactivex.core.http.Cookie> TYPE_ARG_1 = new TypeArg<io.vertx.reactivex.core.http.Cookie>(o1 -> io.vertx.reactivex.core.http.Cookie.newInstance((io.vertx.core.http.Cookie)o1), o1 -> o1.getDelegate());
Pause this stream and return a to transfer the elements of this stream to a destination .

The stream will be resumed when the pipe will be wired to a WriteStream.
Returns:a pipe
/** * Pause this stream and return a to transfer the elements of this stream to a destination . * <p/> * The stream will be resumed when the pipe will be wired to a <code>WriteStream</code>. * @return a pipe */
public io.vertx.reactivex.core.streams.Pipe<io.vertx.reactivex.core.buffer.Buffer> pipe() { io.vertx.reactivex.core.streams.Pipe<io.vertx.reactivex.core.buffer.Buffer> ret = io.vertx.reactivex.core.streams.Pipe.newInstance((io.vertx.core.streams.Pipe)delegate.pipe(), TYPE_ARG_0); return ret; }
Pipe this ReadStream to the WriteStream.

Elements emitted by this stream will be written to the write stream until this stream ends or fails.

Once this stream has ended or failed, the write stream will be ended and the handler will be called with the result.

Params:
  • dst – the destination write stream
  • handler –
/** * Pipe this <code>ReadStream</code> to the <code>WriteStream</code>. * <p> * Elements emitted by this stream will be written to the write stream until this stream ends or fails. * <p> * Once this stream has ended or failed, the write stream will be ended and the <code>handler</code> will be * called with the result. * @param dst the destination write stream * @param handler */
public void pipeTo(io.vertx.reactivex.core.streams.WriteStream<io.vertx.reactivex.core.buffer.Buffer> dst, Handler<AsyncResult<Void>> handler) { delegate.pipeTo(dst.getDelegate(), handler); }
Pipe this ReadStream to the WriteStream.

Elements emitted by this stream will be written to the write stream until this stream ends or fails.

Once this stream has ended or failed, the write stream will be ended and the handler will be called with the result.

Params:
  • dst – the destination write stream
/** * Pipe this <code>ReadStream</code> to the <code>WriteStream</code>. * <p> * Elements emitted by this stream will be written to the write stream until this stream ends or fails. * <p> * Once this stream has ended or failed, the write stream will be ended and the <code>handler</code> will be * called with the result. * @param dst the destination write stream */
public void pipeTo(io.vertx.reactivex.core.streams.WriteStream<io.vertx.reactivex.core.buffer.Buffer> dst) { pipeTo(dst, ar -> { }); }
Pipe this ReadStream to the WriteStream.

Elements emitted by this stream will be written to the write stream until this stream ends or fails.

Once this stream has ended or failed, the write stream will be ended and the handler will be called with the result.

Params:
  • dst – the destination write stream
Returns:
/** * Pipe this <code>ReadStream</code> to the <code>WriteStream</code>. * <p> * Elements emitted by this stream will be written to the write stream until this stream ends or fails. * <p> * Once this stream has ended or failed, the write stream will be ended and the <code>handler</code> will be * called with the result. * @param dst the destination write stream * @return */
public io.reactivex.Completable rxPipeTo(io.vertx.reactivex.core.streams.WriteStream<io.vertx.reactivex.core.buffer.Buffer> dst) { return AsyncResultCompletable.toCompletable($handler -> { pipeTo(dst, $handler); }); } public io.vertx.reactivex.core.http.HttpServerRequest exceptionHandler(Handler<java.lang.Throwable> handler) { delegate.exceptionHandler(handler); return this; } public io.vertx.reactivex.core.http.HttpServerRequest handler(Handler<io.vertx.reactivex.core.buffer.Buffer> handler) { delegate.handler(new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { handler.handle(io.vertx.reactivex.core.buffer.Buffer.newInstance((io.vertx.core.buffer.Buffer)event)); } }); return this; } public io.vertx.reactivex.core.http.HttpServerRequest pause() { delegate.pause(); return this; } public io.vertx.reactivex.core.http.HttpServerRequest resume() { delegate.resume(); return this; } public io.vertx.reactivex.core.http.HttpServerRequest fetch(long amount) { delegate.fetch(amount); return this; } public io.vertx.reactivex.core.http.HttpServerRequest endHandler(Handler<Void> endHandler) { delegate.endHandler(endHandler); return this; }
Returns:the HTTP version of the request
/** * @return the HTTP version of the request */
public io.vertx.core.http.HttpVersion version() { io.vertx.core.http.HttpVersion ret = delegate.version(); return ret; }
Returns:the HTTP method for the request.
/** * @return the HTTP method for the request. */
public io.vertx.core.http.HttpMethod method() { io.vertx.core.http.HttpMethod ret = delegate.method(); return ret; }
Returns:true if this NetSocket is encrypted via SSL/TLS
/** * @return true if this {@link io.vertx.reactivex.core.net.NetSocket} is encrypted via SSL/TLS */
public boolean isSSL() { boolean ret = delegate.isSSL(); return ret; }
Returns:the scheme of the request
/** * @return the scheme of the request */
public String scheme() { String ret = delegate.scheme(); return ret; }
Returns:the URI of the request. This is usually a relative URI
/** * @return the URI of the request. This is usually a relative URI */
public String uri() { String ret = delegate.uri(); return ret; }
Returns:The path part of the uri. For example /somepath/somemorepath/someresource.foo
/** * @return The path part of the uri. For example /somepath/somemorepath/someresource.foo */
public String path() { String ret = delegate.path(); return ret; }
Returns:the query part of the uri. For example someparam=32&someotherparam=x
/** * @return the query part of the uri. For example someparam=32&amp;someotherparam=x */
public String query() { String ret = delegate.query(); return ret; }
Returns:the request host. For HTTP2 it returns the pseudo header otherwise it returns the header
/** * @return the request host. For HTTP2 it returns the pseudo header otherwise it returns the header */
public String host() { String ret = delegate.host(); return ret; }
Returns:the total number of bytes read for the body of the request.
/** * @return the total number of bytes read for the body of the request. */
public long bytesRead() { long ret = delegate.bytesRead(); return ret; }
Returns:the response. Each instance of this class has an HttpServerResponse instance attached to it. This is used to send the response back to the client.
/** * @return the response. Each instance of this class has an {@link io.vertx.reactivex.core.http.HttpServerResponse} instance attached to it. This is used to send the response back to the client. */
public io.vertx.reactivex.core.http.HttpServerResponse response() { if (cached_0 != null) { return cached_0; } io.vertx.reactivex.core.http.HttpServerResponse ret = io.vertx.reactivex.core.http.HttpServerResponse.newInstance((io.vertx.core.http.HttpServerResponse)delegate.response()); cached_0 = ret; return ret; }
Returns:the headers in the request.
/** * @return the headers in the request. */
public io.vertx.reactivex.core.MultiMap headers() { if (cached_1 != null) { return cached_1; } io.vertx.reactivex.core.MultiMap ret = io.vertx.reactivex.core.MultiMap.newInstance((io.vertx.core.MultiMap)delegate.headers()); cached_1 = ret; return ret; }
Return the first header value with the specified name
Params:
  • headerName – the header name
Returns:the header value
/** * Return the first header value with the specified name * @param headerName the header name * @return the header value */
public String getHeader(String headerName) { String ret = delegate.getHeader(headerName); return ret; }
Returns:the query parameters in the request
/** * @return the query parameters in the request */
public io.vertx.reactivex.core.MultiMap params() { if (cached_2 != null) { return cached_2; } io.vertx.reactivex.core.MultiMap ret = io.vertx.reactivex.core.MultiMap.newInstance((io.vertx.core.MultiMap)delegate.params()); cached_2 = ret; return ret; }
Return the first param value with the specified name
Params:
  • paramName – the param name
Returns:the param value
/** * Return the first param value with the specified name * @param paramName the param name * @return the param value */
public String getParam(String paramName) { String ret = delegate.getParam(paramName); return ret; }
Returns:the remote address for this connection, possibly null (e.g a server bound on a domain socket). If useProxyProtocol is set to true, the address returned will be of the actual connecting client.
/** * @return the remote address for this connection, possibly <code>null</code> (e.g a server bound on a domain socket). If <code>useProxyProtocol</code> is set to <code>true</code>, the address returned will be of the actual connecting client. */
public io.vertx.reactivex.core.net.SocketAddress remoteAddress() { if (cached_3 != null) { return cached_3; } io.vertx.reactivex.core.net.SocketAddress ret = io.vertx.reactivex.core.net.SocketAddress.newInstance((io.vertx.core.net.SocketAddress)delegate.remoteAddress()); cached_3 = ret; return ret; }
Returns:the local address for this connection, possibly null (e.g a server bound on a domain socket) If useProxyProtocol is set to true, the address returned will be of the proxy.
/** * @return the local address for this connection, possibly <code>null</code> (e.g a server bound on a domain socket) If <code>useProxyProtocol</code> is set to <code>true</code>, the address returned will be of the proxy. */
public io.vertx.reactivex.core.net.SocketAddress localAddress() { if (cached_4 != null) { return cached_4; } io.vertx.reactivex.core.net.SocketAddress ret = io.vertx.reactivex.core.net.SocketAddress.newInstance((io.vertx.core.net.SocketAddress)delegate.localAddress()); cached_4 = ret; return ret; }
Returns:the absolute URI corresponding to the the HTTP request
/** * @return the absolute URI corresponding to the the HTTP request */
public String absoluteURI() { String ret = delegate.absoluteURI(); return ret; }
Convenience method for receiving the entire request body in one piece.

This saves the user having to manually setting a data and end handler and append the chunks of the body until the whole body received. Don't use this if your request body is large - you could potentially run out of RAM.

Params:
  • bodyHandler – This handler will be called after all the body has been received
Returns:
/** * Convenience method for receiving the entire request body in one piece. * <p> * This saves the user having to manually setting a data and end handler and append the chunks of the body until * the whole body received. Don't use this if your request body is large - you could potentially run out of RAM. * @param bodyHandler This handler will be called after all the body has been received * @return */
public io.vertx.reactivex.core.http.HttpServerRequest bodyHandler(Handler<io.vertx.reactivex.core.buffer.Buffer> bodyHandler) { delegate.bodyHandler(new Handler<io.vertx.core.buffer.Buffer>() { public void handle(io.vertx.core.buffer.Buffer event) { bodyHandler.handle(io.vertx.reactivex.core.buffer.Buffer.newInstance((io.vertx.core.buffer.Buffer)event)); } }); return this; }
Same as body but with an handler called when the operation completes
Params:
  • handler –
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpServerRequest#body} but with an <code>handler</code> called when the operation completes * @param handler * @return */
public io.vertx.reactivex.core.http.HttpServerRequest body(Handler<AsyncResult<io.vertx.reactivex.core.buffer.Buffer>> handler) { io.vertx.reactivex.core.http.HttpServerRequest ret = io.vertx.reactivex.core.http.HttpServerRequest.newInstance((io.vertx.core.http.HttpServerRequest)delegate.body(new Handler<AsyncResult<io.vertx.core.buffer.Buffer>>() { public void handle(AsyncResult<io.vertx.core.buffer.Buffer> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.buffer.Buffer.newInstance((io.vertx.core.buffer.Buffer)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } })); return ret; }
Same as end but with an handler called when the operation completes
Params:
  • handler –
/** * Same as {@link io.vertx.reactivex.core.http.HttpServerRequest#end} but with an <code>handler</code> called when the operation completes * @param handler */
public void end(Handler<AsyncResult<Void>> handler) { delegate.end(handler); }
Same as end but with an handler called when the operation completes
/** * Same as {@link io.vertx.reactivex.core.http.HttpServerRequest#end} but with an <code>handler</code> called when the operation completes */
public void end() { end(ar -> { }); }
Same as end but with an handler called when the operation completes
Returns:
/** * Same as {@link io.vertx.reactivex.core.http.HttpServerRequest#end} but with an <code>handler</code> called when the operation completes * @return */
public io.reactivex.Completable rxEnd() { return AsyncResultCompletable.toCompletable($handler -> { end($handler); }); }
Establish a TCP tunnel with the client.

This must be called only for CONNECT HTTP method and before any response is sent.

Calling this sends a 200 response with no content-length header set and then provides the NetSocket for handling the created tunnel. Any HTTP header set on the response before calling this method will be sent.

server.requestHandler(req -> {
  if (req.method() == HttpMethod.CONNECT) {
    // Send a 200 response to accept the connect
    NetSocket socket = req.netSocket();
    socket.handler(buff -> {
      socket.write(buff);
    });
  }
  ...
});
Params:
  • handler – the completion handler
/** * Establish a TCP <a href="https://tools.ietf.org/html/rfc7231#section-4.3.6">tunnel<a/> with the client. * * <p> This must be called only for <code>CONNECT</code> HTTP method and before any response is sent. * * <p> Calling this sends a <code>200</code> response with no <code>content-length</code> header set and * then provides the <code>NetSocket</code> for handling the created tunnel. Any HTTP header set on the * response before calling this method will be sent. * * <pre> * server.requestHandler(req -> { * if (req.method() == HttpMethod.CONNECT) { * // Send a 200 response to accept the connect * NetSocket socket = req.netSocket(); * socket.handler(buff -> { * socket.write(buff); * }); * } * ... * }); * </pre> * @param handler the completion handler */
public void toNetSocket(Handler<AsyncResult<io.vertx.reactivex.core.net.NetSocket>> handler) { delegate.toNetSocket(new Handler<AsyncResult<io.vertx.core.net.NetSocket>>() { public void handle(AsyncResult<io.vertx.core.net.NetSocket> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.net.NetSocket.newInstance((io.vertx.core.net.NetSocket)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Establish a TCP tunnel with the client.

This must be called only for CONNECT HTTP method and before any response is sent.

Calling this sends a 200 response with no content-length header set and then provides the NetSocket for handling the created tunnel. Any HTTP header set on the response before calling this method will be sent.

server.requestHandler(req -> {
  if (req.method() == HttpMethod.CONNECT) {
    // Send a 200 response to accept the connect
    NetSocket socket = req.netSocket();
    socket.handler(buff -> {
      socket.write(buff);
    });
  }
  ...
});
/** * Establish a TCP <a href="https://tools.ietf.org/html/rfc7231#section-4.3.6">tunnel<a/> with the client. * * <p> This must be called only for <code>CONNECT</code> HTTP method and before any response is sent. * * <p> Calling this sends a <code>200</code> response with no <code>content-length</code> header set and * then provides the <code>NetSocket</code> for handling the created tunnel. Any HTTP header set on the * response before calling this method will be sent. * * <pre> * server.requestHandler(req -> { * if (req.method() == HttpMethod.CONNECT) { * // Send a 200 response to accept the connect * NetSocket socket = req.netSocket(); * socket.handler(buff -> { * socket.write(buff); * }); * } * ... * }); * </pre> */
public void toNetSocket() { toNetSocket(ar -> { }); }
Establish a TCP tunnel with the client.

This must be called only for CONNECT HTTP method and before any response is sent.

Calling this sends a 200 response with no content-length header set and then provides the NetSocket for handling the created tunnel. Any HTTP header set on the response before calling this method will be sent.

server.requestHandler(req -> {
  if (req.method() == HttpMethod.CONNECT) {
    // Send a 200 response to accept the connect
    NetSocket socket = req.netSocket();
    socket.handler(buff -> {
      socket.write(buff);
    });
  }
  ...
});
Returns:
/** * Establish a TCP <a href="https://tools.ietf.org/html/rfc7231#section-4.3.6">tunnel<a/> with the client. * * <p> This must be called only for <code>CONNECT</code> HTTP method and before any response is sent. * * <p> Calling this sends a <code>200</code> response with no <code>content-length</code> header set and * then provides the <code>NetSocket</code> for handling the created tunnel. Any HTTP header set on the * response before calling this method will be sent. * * <pre> * server.requestHandler(req -> { * if (req.method() == HttpMethod.CONNECT) { * // Send a 200 response to accept the connect * NetSocket socket = req.netSocket(); * socket.handler(buff -> { * socket.write(buff); * }); * } * ... * }); * </pre> * @return */
public io.reactivex.Single<io.vertx.reactivex.core.net.NetSocket> rxToNetSocket() { return AsyncResultSingle.toSingle($handler -> { toNetSocket($handler); }); }
Call this with true if you are expecting a multi-part body to be submitted in the request. This must be called before the body of the request has been received
Params:
  • expect – true - if you are expecting a multi-part body
Returns:a reference to this, so the API can be used fluently
/** * Call this with true if you are expecting a multi-part body to be submitted in the request. * This must be called before the body of the request has been received * @param expect true - if you are expecting a multi-part body * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpServerRequest setExpectMultipart(boolean expect) { delegate.setExpectMultipart(expect); return this; }
Returns:true if we are expecting a multi-part body for this request. See setExpectMultipart.
/** * @return true if we are expecting a multi-part body for this request. See {@link io.vertx.reactivex.core.http.HttpServerRequest#setExpectMultipart}. */
public boolean isExpectMultipart() { boolean ret = delegate.isExpectMultipart(); return ret; }
Set an upload handler. The handler will get notified once a new file upload was received to allow you to deal with the file upload.
Params:
  • uploadHandler –
Returns:a reference to this, so the API can be used fluently
/** * Set an upload handler. The handler will get notified once a new file upload was received to allow you to deal * with the file upload. * @param uploadHandler * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpServerRequest uploadHandler(Handler<io.vertx.reactivex.core.http.HttpServerFileUpload> uploadHandler) { delegate.uploadHandler(new Handler<io.vertx.core.http.HttpServerFileUpload>() { public void handle(io.vertx.core.http.HttpServerFileUpload event) { uploadHandler.handle(io.vertx.reactivex.core.http.HttpServerFileUpload.newInstance((io.vertx.core.http.HttpServerFileUpload)event)); } }); return this; }
Returns a map of all form attributes in the request.

Be aware that the attributes will only be available after the whole body has been received, i.e. after the request end handler has been called.

setExpectMultipart must be called first before trying to get the form attributes.

Returns:the form attributes
/** * Returns a map of all form attributes in the request. * <p> * Be aware that the attributes will only be available after the whole body has been received, i.e. after * the request end handler has been called. * <p> * {@link io.vertx.reactivex.core.http.HttpServerRequest#setExpectMultipart} must be called first before trying to get the form attributes. * @return the form attributes */
public io.vertx.reactivex.core.MultiMap formAttributes() { if (cached_5 != null) { return cached_5; } io.vertx.reactivex.core.MultiMap ret = io.vertx.reactivex.core.MultiMap.newInstance((io.vertx.core.MultiMap)delegate.formAttributes()); cached_5 = ret; return ret; }
Return the first form attribute value with the specified name
Params:
  • attributeName – the attribute name
Returns:the attribute value
/** * Return the first form attribute value with the specified name * @param attributeName the attribute name * @return the attribute value */
public String getFormAttribute(String attributeName) { String ret = delegate.getFormAttribute(attributeName); return ret; }
Upgrade the connection of the current request to a WebSocket.

This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the HttpServer, and can only be used during the upgrade request during the WebSocket handshake.

Both handler and endHandler will be set to get the full body of the request that is necessary to perform the WebSocket handshake.

If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, you need to pause the request in order to not lose HTTP events necessary to upgrade the request.

Params:
  • handler – the completion handler
/** * Upgrade the connection of the current request to a WebSocket. * <p> * This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the * <code>HttpServer</code>, and can only be used during the upgrade request during the WebSocket handshake. * * <p> Both {@link io.vertx.reactivex.core.http.HttpServerRequest#handler} and {@link io.vertx.reactivex.core.http.HttpServerRequest#endHandler} will be set to get the full body of the * request that is necessary to perform the WebSocket handshake. * * <p> If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, * you need to {@link io.vertx.reactivex.core.http.HttpServerRequest#pause} the request in order to not lose HTTP events necessary to upgrade the * request. * @param handler the completion handler */
public void toWebSocket(Handler<AsyncResult<io.vertx.reactivex.core.http.ServerWebSocket>> handler) { delegate.toWebSocket(new Handler<AsyncResult<io.vertx.core.http.ServerWebSocket>>() { public void handle(AsyncResult<io.vertx.core.http.ServerWebSocket> ar) { if (ar.succeeded()) { handler.handle(io.vertx.core.Future.succeededFuture(io.vertx.reactivex.core.http.ServerWebSocket.newInstance((io.vertx.core.http.ServerWebSocket)ar.result()))); } else { handler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } }); }
Upgrade the connection of the current request to a WebSocket.

This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the HttpServer, and can only be used during the upgrade request during the WebSocket handshake.

Both handler and endHandler will be set to get the full body of the request that is necessary to perform the WebSocket handshake.

If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, you need to pause the request in order to not lose HTTP events necessary to upgrade the request.

/** * Upgrade the connection of the current request to a WebSocket. * <p> * This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the * <code>HttpServer</code>, and can only be used during the upgrade request during the WebSocket handshake. * * <p> Both {@link io.vertx.reactivex.core.http.HttpServerRequest#handler} and {@link io.vertx.reactivex.core.http.HttpServerRequest#endHandler} will be set to get the full body of the * request that is necessary to perform the WebSocket handshake. * * <p> If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, * you need to {@link io.vertx.reactivex.core.http.HttpServerRequest#pause} the request in order to not lose HTTP events necessary to upgrade the * request. */
public void toWebSocket() { toWebSocket(ar -> { }); }
Upgrade the connection of the current request to a WebSocket.

This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the HttpServer, and can only be used during the upgrade request during the WebSocket handshake.

Both handler and endHandler will be set to get the full body of the request that is necessary to perform the WebSocket handshake.

If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, you need to pause the request in order to not lose HTTP events necessary to upgrade the request.

Returns:
/** * Upgrade the connection of the current request to a WebSocket. * <p> * This is an alternative way of handling WebSockets and can only be used if no WebSocket handler is set on the * <code>HttpServer</code>, and can only be used during the upgrade request during the WebSocket handshake. * * <p> Both {@link io.vertx.reactivex.core.http.HttpServerRequest#handler} and {@link io.vertx.reactivex.core.http.HttpServerRequest#endHandler} will be set to get the full body of the * request that is necessary to perform the WebSocket handshake. * * <p> If you need to do an asynchronous upgrade, i.e not performed immediately in your request handler, * you need to {@link io.vertx.reactivex.core.http.HttpServerRequest#pause} the request in order to not lose HTTP events necessary to upgrade the * request. * @return */
public io.reactivex.Single<io.vertx.reactivex.core.http.ServerWebSocket> rxToWebSocket() { return AsyncResultSingle.toSingle($handler -> { toWebSocket($handler); }); }
Has the request ended? I.e. has the entire request, including the body been read?
Returns:true if ended
/** * Has the request ended? I.e. has the entire request, including the body been read? * @return true if ended */
public boolean isEnded() { boolean ret = delegate.isEnded(); return ret; }
Set a custom frame handler. The handler will get notified when the http stream receives an custom HTTP/2 frame. HTTP/2 permits extension of the protocol.
Params:
  • handler –
Returns:a reference to this, so the API can be used fluently
/** * Set a custom frame handler. The handler will get notified when the http stream receives an custom HTTP/2 * frame. HTTP/2 permits extension of the protocol. * @param handler * @return a reference to this, so the API can be used fluently */
public io.vertx.reactivex.core.http.HttpServerRequest customFrameHandler(Handler<io.vertx.reactivex.core.http.HttpFrame> handler) { delegate.customFrameHandler(new Handler<io.vertx.core.http.HttpFrame>() { public void handle(io.vertx.core.http.HttpFrame event) { handler.handle(io.vertx.reactivex.core.http.HttpFrame.newInstance((io.vertx.core.http.HttpFrame)event)); } }); return this; }
Returns:the HttpConnection associated with this request
/** * @return the {@link io.vertx.reactivex.core.http.HttpConnection} associated with this request */
public io.vertx.reactivex.core.http.HttpConnection connection() { if (cached_6 != null) { return cached_6; } io.vertx.reactivex.core.http.HttpConnection ret = io.vertx.reactivex.core.http.HttpConnection.newInstance((io.vertx.core.http.HttpConnection)delegate.connection()); cached_6 = ret; return ret; }
Returns:the priority of the associated HTTP/2 stream for HTTP/2 otherwise null
/** * @return the priority of the associated HTTP/2 stream for HTTP/2 otherwise <code>null</code> */
public io.vertx.core.http.StreamPriority streamPriority() { io.vertx.core.http.StreamPriority ret = delegate.streamPriority(); return ret; }
Set an handler for stream priority changes

This is not implemented for HTTP/1.x.

Params:
  • handler – the handler to be called when stream priority changes
Returns:
/** * Set an handler for stream priority changes * <p> * This is not implemented for HTTP/1.x. * @param handler the handler to be called when stream priority changes * @return */
public io.vertx.reactivex.core.http.HttpServerRequest streamPriorityHandler(Handler<io.vertx.core.http.StreamPriority> handler) { delegate.streamPriorityHandler(handler); return this; }
Get the cookie with the specified name.
Params:
  • name – the cookie name
Returns:the cookie
/** * Get the cookie with the specified name. * @param name the cookie name * @return the cookie */
public io.vertx.reactivex.core.http.Cookie getCookie(String name) { io.vertx.reactivex.core.http.Cookie ret = io.vertx.reactivex.core.http.Cookie.newInstance((io.vertx.core.http.Cookie)delegate.getCookie(name)); return ret; }
Returns:the number of cookieMap.
/** * @return the number of cookieMap. */
public int cookieCount() { int ret = delegate.cookieCount(); return ret; }
Returns:a map of all the cookies.
/** * @return a map of all the cookies. */
public java.util.Map<String, io.vertx.reactivex.core.http.Cookie> cookieMap() { java.util.Map<String, io.vertx.reactivex.core.http.Cookie> ret = delegate.cookieMap().entrySet().stream().collect(Collectors.toMap(_e -> _e.getKey(), _e -> io.vertx.reactivex.core.http.Cookie.newInstance((io.vertx.core.http.Cookie)_e.getValue()))); return ret; }
Marks this request as being routed to the given route. This is purely informational and is being provided to metrics.
Params:
  • route – The route this request has been routed to.
Returns:
/** * Marks this request as being routed to the given route. This is purely informational and is * being provided to metrics. * @param route The route this request has been routed to. * @return */
public io.vertx.reactivex.core.http.HttpServerRequest routed(String route) { delegate.routed(route); return this; }
Return the first header value with the specified name
Params:
  • headerName – the header name
Returns:the header value
/** * Return the first header value with the specified name * @param headerName the header name * @return the header value */
public String getHeader(java.lang.CharSequence headerName) { String ret = delegate.getHeader(headerName); return ret; }
Returns:SSLSession associated with the underlying socket. Returns null if connection is not SSL.
/** * @return SSLSession associated with the underlying socket. Returns null if connection is not SSL. */
public javax.net.ssl.SSLSession sslSession() { javax.net.ssl.SSLSession ret = delegate.sslSession(); return ret; } private io.vertx.reactivex.core.http.HttpServerResponse cached_0; private io.vertx.reactivex.core.MultiMap cached_1; private io.vertx.reactivex.core.MultiMap cached_2; private io.vertx.reactivex.core.net.SocketAddress cached_3; private io.vertx.reactivex.core.net.SocketAddress cached_4; private io.vertx.reactivex.core.MultiMap cached_5; private io.vertx.reactivex.core.http.HttpConnection cached_6; public static HttpServerRequest newInstance(io.vertx.core.http.HttpServerRequest arg) { return arg != null ? new HttpServerRequest(arg) : null; } }