167 size_t len = luaL_checkinteger(L, 2); |
168 size_t len = luaL_checkinteger(L, 2); |
168 evbuffer_drain(buf->buffer, len); |
169 evbuffer_drain(buf->buffer, len); |
169 return 0; |
170 return 0; |
170 } |
171 } |
171 |
172 |
|
173 /* LUA: buffer:write |
|
174 (integer/lightuserdata fd) - Attempts to write all the data out to the FD |
|
175 (socket) - Attempts to write all the data out to the socket object |
|
176 */ |
|
177 static int event_buffer_write(lua_State* L) { |
|
178 le_buffer* buf = event_buffer_check(L, 1); |
|
179 int ret; |
|
180 if(lua_isnumber(L, 2)) { |
|
181 ret = evbuffer_write(buf->buffer, lua_tointeger(L, 2)); |
|
182 } else if(lua_islightuserdata(L, 2)) { |
|
183 ret = evbuffer_write(buf->buffer, (int)(long)lua_touserdata(L, 2)); |
|
184 } else if(lua_isuserdata(L, 2)) { |
|
185 ret = evbuffer_write(buf->buffer, getSocketFd(L, 2)); |
|
186 } else { |
|
187 luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket"); |
|
188 } |
|
189 lua_pushinteger(L, ret); |
|
190 return 1; |
|
191 } |
|
192 |
|
193 /* LUA: buffer:read |
|
194 (integer/lightuserdata fd, len) - Attempts to read up to 'len' out of the FD |
|
195 (socket, len) - Attempts to read up to 'len' out of the socket object |
|
196 */ |
|
197 static int event_buffer_read(lua_State* L) { |
|
198 le_buffer* buf = event_buffer_check(L, 1); |
|
199 int len = luaL_checkinteger(L, 3); |
|
200 int ret; |
|
201 if(lua_isnumber(L, 2)) { |
|
202 ret = evbuffer_read(buf->buffer, lua_tointeger(L, 2), len); |
|
203 } else if(lua_islightuserdata(L, 2)) { |
|
204 ret = evbuffer_read(buf->buffer, (int)(long)lua_touserdata(L, 2), len); |
|
205 } else if(lua_isuserdata(L, 2)) { |
|
206 ret = evbuffer_read(buf->buffer, getSocketFd(L, 2), len); |
|
207 } else { |
|
208 luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket"); |
|
209 } |
|
210 lua_pushinteger(L, ret); |
|
211 return 1; |
|
212 } |
172 static luaL_Reg buffer_funcs[] = { |
213 static luaL_Reg buffer_funcs[] = { |
173 {"add", event_buffer_add}, |
214 {"add", event_buffer_add}, |
174 {"length", event_buffer_get_length}, |
215 {"length", event_buffer_get_length}, |
175 {"get_data", event_buffer_get_data}, |
216 {"get_data", event_buffer_get_data}, |
176 {"readline", event_buffer_readline}, |
217 {"readline", event_buffer_readline}, |
177 {"drain", event_buffer_drain}, |
218 {"drain", event_buffer_drain}, |
178 {"close", event_buffer_gc}, |
219 {"close", event_buffer_gc}, |
|
220 {"read", event_buffer_read}, |
|
221 {"write", event_buffer_write}, |
179 {NULL, NULL} |
222 {NULL, NULL} |
180 }; |
223 }; |
181 static luaL_Reg funcs[] = { |
224 static luaL_Reg funcs[] = { |
182 {"new", event_buffer_push_new}, |
225 {"new", event_buffer_push_new}, |
183 {NULL, NULL} |
226 {NULL, NULL} |