Thu, 06 Sep 2007 23:55:48 -0400
event_buffer:get_data learned (len) and (begin,len) API
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
1 | /* LuaEvent - Copyright (C) 2007 Thomas Harning <harningt@gmail.com> |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
2 | * Licensed as LGPL - See doc/COPYING for details */ |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
3 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
4 | #include "event_buffer.h" |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
5 | #include <lauxlib.h> |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
6 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
7 | #define EVENT_BUFFER_MT "EVENT_BUFFER_MT" |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
8 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
9 | #define BUFFER_ADD_CHECK_INPUT_FIRST 1 |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
10 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
11 | static le_buffer* event_buffer_get(lua_State* L, int idx) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
12 | return (le_buffer*)luaL_checkudata(L, idx, EVENT_BUFFER_MT); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
13 | } |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
14 | static le_buffer* event_buffer_check(lua_State* L, int idx) { |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
15 | le_buffer* buf = (le_buffer*)luaL_checkudata(L, idx, EVENT_BUFFER_MT); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
16 | if(!buf->buffer) |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
17 | luaL_argerror(L, idx, "Attempt to use closed event_buffer object"); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
18 | return buf; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
19 | } |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
20 | static int is_event_buffer(lua_State* L, int idx) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
21 | int ret; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
22 | lua_getmetatable(L, idx); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
23 | luaL_getmetatable(L, EVENT_BUFFER_MT); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
24 | ret = lua_rawequal(L, -2, -1); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
25 | lua_pop(L, 2); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
26 | return ret; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
27 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
28 | |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
29 | /* TODO: Use lightuserdata mapping to locate hanging object instances */ |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
30 | static int event_buffer_push(lua_State* L, struct evbuffer* buffer) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
31 | le_buffer *buf = (le_buffer*)lua_newuserdata(L, sizeof(le_buffer)); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
32 | buf->buffer = buffer; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
33 | luaL_getmetatable(L, EVENT_BUFFER_MT); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
34 | lua_setmetatable(L, -2); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
35 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
36 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
37 | |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
38 | static int event_buffer_push_new(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
39 | return event_buffer_push(L, evbuffer_new()); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
40 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
41 | |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
42 | static int event_buffer_gc(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
43 | le_buffer* buf = event_buffer_get(L, 1); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
44 | if(buf->buffer) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
45 | evbuffer_free(buf->buffer); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
46 | buf->buffer = NULL; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
47 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
48 | return 0; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
49 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
50 | |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
51 | /* LUA: buffer:add(...) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
52 | progressively adds items to the buffer |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
53 | if arg[*] is string, treat as a string:format call |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
54 | if arg[*] is a buffer, perform event_add_buffer |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
55 | returns number of bytes added |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
56 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
57 | static int event_buffer_add(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
58 | le_buffer* buf = event_buffer_check(L, 1); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
59 | struct evbuffer* buffer = buf->buffer; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
60 | int oldLength = EVBUFFER_LENGTH(buffer); |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
61 | int last = lua_gettop(L); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
62 | int i; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
63 | for(i = 2; i <= last; i++) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
64 | if(!lua_isstring(L, i) && !is_event_buffer(L, i)) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
65 | luaL_argerror(L, i, "Argument is not a string or buffer object"); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
66 | /* Optionally perform checks and data loading separately to avoid overfilling the buffer */ |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
67 | #if BUFFER_ADD_CHECK_INPUT_FIRST |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
68 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
69 | for(i = 2; i <= last; i++) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
70 | #endif |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
71 | if(lua_isstring(L, i)) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
72 | size_t len; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
73 | const char* data = lua_tolstring(L, i, &len); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
74 | if(0 != evbuffer_add(buffer, data, len)) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
75 | luaL_error(L, "Failed to add data to the buffer"); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
76 | } else { |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
77 | le_buffer* buf2 = event_buffer_check(L, i); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
78 | if(0 != evbuffer_add_buffer(buffer, buf2->buffer)) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
79 | luaL_error(L, "Failed to move buffer-data to the buffer"); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
80 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
81 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
82 | lua_pushinteger(L, EVBUFFER_LENGTH(buffer) - oldLength); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
83 | return 1; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
84 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
85 | |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
86 | static int event_buffer_get_length(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
87 | le_buffer* buf = event_buffer_check(L, 1); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
88 | lua_pushinteger(L, EVBUFFER_LENGTH(buf->buffer)); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
89 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
90 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
91 | |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
92 | /* MAYBE: Could add caching */ |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
93 | static int event_buffer_get_data(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
94 | le_buffer* buf = event_buffer_check(L, 1); |
29
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
95 | int begin, len; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
96 | switch(lua_gettop(L)) { |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
97 | case 1: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
98 | /* Obtain full data */ |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
99 | begin = 0; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
100 | len = EVBUFFER_LENGTH(buf->buffer); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
101 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
102 | case 2: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
103 | begin = 0; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
104 | len = luaL_checkinteger(L, 2); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
105 | if(len > EVBUFFER_LENGTH(buf->buffer)) |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
106 | len = EVBUFFER_LENGTH(buf->buffer); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
107 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
108 | case 3: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
109 | default: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
110 | begin = luaL_checkinteger(L, 2); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
111 | len = luaL_checkinteger(L, 3); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
112 | if(begin > EVBUFFER_LENGTH(buf->buffer)) |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
113 | begin = EVBUFFER_LENGTH(buf->buffer); |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
114 | if(begin + len > EVBUFFER_LENGTH(buf->buffer)) |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
115 | len = EVBUFFER_LENGTH(buf->buffer) - begin; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
116 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
117 | } |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
118 | lua_pushlstring(L, (const char*)EVBUFFER_DATA(buf->buffer) + begin, len); |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
119 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
120 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
121 | |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
122 | static int event_buffer_drain(lua_State* L) { |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
123 | le_buffer* buf = event_buffer_check(L, 1); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
124 | size_t len = luaL_checkinteger(L, 2); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
125 | evbuffer_drain(buf->buffer, len); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
126 | return 0; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
127 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
128 | |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
129 | static luaL_Reg buffer_funcs[] = { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
130 | {"add",event_buffer_add}, |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
131 | {"length",event_buffer_get_length}, |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
132 | {"get_data",event_buffer_get_data}, |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
133 | {"drain",event_buffer_drain}, |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
134 | {"close",event_buffer_gc}, |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
135 | {NULL, NULL} |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
136 | }; |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
137 | static luaL_Reg funcs[] = { |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
138 | {"new",event_buffer_push_new}, |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
139 | {NULL, NULL} |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
140 | }; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
141 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
142 | int event_buffer_register(lua_State* L) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
143 | luaL_newmetatable(L, EVENT_BUFFER_MT); |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
144 | lua_pushcfunction(L, event_buffer_gc); |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
145 | lua_setfield(L, -2, "__gc"); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
146 | lua_newtable(L); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
147 | luaL_register(L, NULL, buffer_funcs); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
148 | lua_setfield(L, -2, "__index"); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
149 | lua_pop(L, 1); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
150 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
151 | luaL_register(L, "luaevent.core.buffer", funcs); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
152 | return 0; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
153 | } |