partial read or recv for openresty stream-lua-nginx-module, receive('*p') introduced.
June 7, 2016 ยท View on GitHub
diff --git a/src/ngx_stream_lua_socket_tcp.c b/src/ngx_stream_lua_socket_tcp.c index 4680811..4da1ac6 100644 --- a/src/ngx_stream_lua_socket_tcp.c +++ b/src/ngx_stream_lua_socket_tcp.c @@ -88,6 +88,7 @@ static int ngx_stream_lua_socket_write_error_retval_handler( ngx_stream_session_t *s, ngx_stream_lua_socket_tcp_upstream_t *u, lua_State *L); static ngx_int_t ngx_stream_lua_socket_read_all(void *data, ssize_t bytes); +static ngx_int_t ngx_stream_lua_socket_read_partial(void *data, ssize_t bytes); static ngx_int_t ngx_stream_lua_socket_read_until(void *data, ssize_t bytes); static ngx_int_t ngx_stream_lua_socket_read_chunk(void *data, ssize_t bytes); static int ngx_stream_lua_socket_tcp_receiveuntil(lua_State *L); @@ -1736,6 +1737,10 @@ ngx_stream_lua_socket_tcp_receive(lua_State *L) u->input_filter = ngx_stream_lua_socket_read_all; break;
-
case 'p': -
u->input_filter = ngx_stream_lua_socket_read_partial; -
break; -
default: return luaL_argerror(L, 2, "bad pattern argument"); break;
@@ -1918,6 +1923,35 @@ ngx_stream_lua_socket_read_all(void *data, ssize_t bytes)
static ngx_int_t +ngx_stream_lua_socket_read_partial(void *data, ssize_t bytes) +{
- ngx_stream_lua_socket_tcp_upstream_t *u = data;
- ngx_buf_t *b; +#if (NGX_DEBUG)
- ngx_stream_session_t *s;
- s = u->request; +#endif
- ngx_log_debug0(NGX_LOG_DEBUG_STREAM, s->connection->log, 0,
-
"stream lua tcp socket read partial"); - if (bytes == 0) {
-
u->ft_type |= NGX_STREAM_LUA_SOCKET_FT_CLOSED; -
return NGX_ERROR; - }
- b = &u->buffer;
- u->buf_in->buf->last += bytes;
- b->pos += bytes;
- return NGX_OK; +}
+static ngx_int_t ngx_stream_lua_socket_read_line(void *data, ssize_t bytes) { ngx_stream_lua_socket_tcp_upstream_t *u = data;