diff --git a/src/AsyncSocket.h b/src/AsyncSocket.h index c1fddd919..26534ddae 100644 --- a/src/AsyncSocket.h +++ b/src/AsyncSocket.h @@ -77,6 +77,26 @@ struct AsyncSocket { us_socket_shutdown(SSL, (us_socket_t *) this); } + /* Experimental pause (todo: move to uSockets as us_socket_pause) */ + us_socket_t *uv_pause() { + struct us_poll_t *p = (struct us_poll_t *) this; + struct us_loop_t *loop = us_socket_context_loop(SSL, us_socket_context(SSL, (us_socket_t *) this)); + //int events = us_poll_events(p); + us_poll_change(p, loop, 0); + return (us_socket_t *) this; + } + + /* Experimental resume (kind of needs to know the size of write buffer) */ + us_socket_t *uv_resume() { + struct us_poll_t *p = (struct us_poll_t *) this; + struct us_loop_t *loop = us_socket_context_loop(SSL, us_socket_context(SSL, (us_socket_t *) this)); + // only valid for libuv + int events = getBufferedAmount() ? 1 | 2 : 1; + + us_poll_change(p, loop, events); + return (us_socket_t *) this; + } + /* Immediately close socket */ us_socket_t *close() { return us_socket_close(SSL, (us_socket_t *) this, 0, nullptr); diff --git a/src/HttpResponse.h b/src/HttpResponse.h index 71111f3db..3af8903e4 100644 --- a/src/HttpResponse.h +++ b/src/HttpResponse.h @@ -330,6 +330,16 @@ struct HttpResponse : public AsyncSocket { using Super::getRemoteAddressAsText; using Super::getNativeHandle; + HttpResponse *pause() { + Super::uv_pause(); + return this; + } + + HttpResponse *resume() { + Super::uv_resume(); + return this; + } + /* Note: Headers are not checked in regards to timeout. * We only check when you actively push data or end the request */