Fri, 07 Sep 2007 00:34:10 -0400
event_buffer learned how to read/write from/to sockets/file-descriptors
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" |
34
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
5 | #include "luaevent.h" |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
6 | #include <lauxlib.h> |
31
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
7 | #include <malloc.h> |
26
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 EVENT_BUFFER_MT "EVENT_BUFFER_MT" |
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 | #define BUFFER_ADD_CHECK_INPUT_FIRST 1 |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
12 | |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
13 | /* Obtains an le_buffer structure from a given index */ |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
14 | 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
|
15 | 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
|
16 | } |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
17 | |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
18 | /* Obtains an le_buffer structure from a given index |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
19 | AND checks that it hadn't been prematurely freed |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
20 | */ |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
21 | 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
|
22 | 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
|
23 | 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
|
24 | 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
|
25 | return buf; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
26 | } |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
27 | |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
28 | /* Checks if the given index contains an le_buffer object */ |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
29 | 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
|
30 | int ret; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
31 | lua_getmetatable(L, idx); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
32 | luaL_getmetatable(L, EVENT_BUFFER_MT); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
33 | ret = lua_rawequal(L, -2, -1); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
34 | lua_pop(L, 2); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
35 | return ret; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
36 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
37 | |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
38 | /* TODO: Use lightuserdata mapping to locate hanging object instances */ |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
39 | /* Pushes the specified evbuffer object onto the stack, attaching a metatable to it */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
40 | 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
|
41 | 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
|
42 | 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
|
43 | 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
|
44 | 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
|
45 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
46 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
47 | |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
48 | /* LUA: new() |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
49 | Pushes a new evbuffer instance on the stack |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
50 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
51 | 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
|
52 | 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
|
53 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
54 | |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
55 | /* LUA: __gc and buffer:close() |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
56 | Releases the buffer resources |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
57 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
58 | 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
|
59 | 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
|
60 | 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
|
61 | 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
|
62 | 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
|
63 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
64 | return 0; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
65 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
66 | |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
67 | /* LUA: buffer:add(...) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
68 | progressively adds items to the buffer |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
69 | 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
|
70 | 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
|
71 | returns number of bytes added |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
72 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
73 | 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
|
74 | 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
|
75 | struct evbuffer* buffer = buf->buffer; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
76 | int oldLength = EVBUFFER_LENGTH(buffer); |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
77 | int last = lua_gettop(L); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
78 | int i; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
79 | for(i = 2; i <= last; i++) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
80 | 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
|
81 | luaL_argerror(L, i, "Argument is not a string or buffer object"); |
32
22976b4e5ffd
event_buffer:add learned not to append to itself...
Thomas Harning Jr <harningt@gmail.com>
parents:
31
diff
changeset
|
82 | if(lua_equal(L, 1, i)) |
22976b4e5ffd
event_buffer:add learned not to append to itself...
Thomas Harning Jr <harningt@gmail.com>
parents:
31
diff
changeset
|
83 | luaL_argerror(L, i, "Cannot add buffer to itself"); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
84 | /* 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
|
85 | #if BUFFER_ADD_CHECK_INPUT_FIRST |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
86 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
87 | for(i = 2; i <= last; i++) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
88 | #endif |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
89 | if(lua_isstring(L, i)) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
90 | size_t len; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
91 | const char* data = lua_tolstring(L, i, &len); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
92 | if(0 != evbuffer_add(buffer, data, len)) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
93 | 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
|
94 | } else { |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
95 | 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
|
96 | if(0 != evbuffer_add_buffer(buffer, buf2->buffer)) |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
97 | 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
|
98 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
99 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
100 | lua_pushinteger(L, EVBUFFER_LENGTH(buffer) - oldLength); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
101 | return 1; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
102 | } |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
103 | |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
104 | /* LUA: buffer:length() |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
105 | Returns the length of the buffer contents |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
106 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
107 | 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
|
108 | 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
|
109 | 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
|
110 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
111 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
112 | |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
113 | /* MAYBE: Could add caching */ |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
114 | /* LUA: buffer:get_data |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
115 | () - Returns all data in buffer |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
116 | (len) - Returns data up to 'len' bytes long |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
117 | (begin,len) - Returns data beginning at 'begin' up to 'len' bytes long |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
118 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
119 | 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
|
120 | 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
|
121 | int begin, len; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
122 | 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
|
123 | case 1: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
124 | /* Obtain full data */ |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
125 | begin = 0; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
126 | 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
|
127 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
128 | case 2: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
129 | begin = 0; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
130 | 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
|
131 | 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
|
132 | 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
|
133 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
134 | case 3: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
135 | default: |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
136 | 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
|
137 | 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
|
138 | 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
|
139 | 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
|
140 | 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
|
141 | 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
|
142 | break; |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
143 | } |
f6d0eb94ca6c
event_buffer:get_data learned (len) and (begin,len) API
Thomas Harning Jr <harningt@gmail.com>
parents:
28
diff
changeset
|
144 | 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
|
145 | return 1; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
146 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
147 | |
31
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
148 | /* LUA: buffer:readline() |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
149 | Returns a line terminated by either '\r\n','\n\r' or '\r' or '\n' |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
150 | Returns nil and leaves data alone if no terminator is found |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
151 | TODO: Evaluate whether or not the newline is included |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
152 | */ |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
153 | static int event_buffer_readline(lua_State* L) { |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
154 | le_buffer* buf = event_buffer_check(L, 1); |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
155 | char* line = evbuffer_readline(buf->buffer); |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
156 | if(!line) |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
157 | return 0; |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
158 | lua_pushstring(L, line); |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
159 | free(line); |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
160 | return 1; |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
161 | } |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
162 | |
30
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
163 | /* LUA: buffer:drain(amt) |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
164 | Drains 'amt' bytes from the buffer |
d5b6c8abaaeb
Documented event_buffer functions
Thomas Harning Jr <harningt@gmail.com>
parents:
29
diff
changeset
|
165 | */ |
27
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
166 | 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
|
167 | 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
|
168 | 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
|
169 | 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
|
170 | return 0; |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
171 | } |
0d82e4f49a56
Updated changelog. event_buffer learned `get_data`,`length`,`drain`,`close`,`new`
Thomas Harning Jr <harningt@gmail.com>
parents:
26
diff
changeset
|
172 | |
34
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
173 | /* LUA: buffer:write |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
174 | (integer/lightuserdata fd) - Attempts to write all the data out to the FD |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
175 | (socket) - Attempts to write all the data out to the socket object |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
176 | */ |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
177 | static int event_buffer_write(lua_State* L) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
178 | le_buffer* buf = event_buffer_check(L, 1); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
179 | int ret; |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
180 | if(lua_isnumber(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
181 | ret = evbuffer_write(buf->buffer, lua_tointeger(L, 2)); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
182 | } else if(lua_islightuserdata(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
183 | ret = evbuffer_write(buf->buffer, (int)(long)lua_touserdata(L, 2)); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
184 | } else if(lua_isuserdata(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
185 | ret = evbuffer_write(buf->buffer, getSocketFd(L, 2)); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
186 | } else { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
187 | luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket"); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
188 | } |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
189 | lua_pushinteger(L, ret); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
190 | return 1; |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
191 | } |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
192 | |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
193 | /* LUA: buffer:read |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
194 | (integer/lightuserdata fd, len) - Attempts to read up to 'len' out of the FD |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
195 | (socket, len) - Attempts to read up to 'len' out of the socket object |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
196 | */ |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
197 | static int event_buffer_read(lua_State* L) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
198 | le_buffer* buf = event_buffer_check(L, 1); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
199 | int len = luaL_checkinteger(L, 3); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
200 | int ret; |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
201 | if(lua_isnumber(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
202 | ret = evbuffer_read(buf->buffer, lua_tointeger(L, 2), len); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
203 | } else if(lua_islightuserdata(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
204 | ret = evbuffer_read(buf->buffer, (int)(long)lua_touserdata(L, 2), len); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
205 | } else if(lua_isuserdata(L, 2)) { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
206 | ret = evbuffer_read(buf->buffer, getSocketFd(L, 2), len); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
207 | } else { |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
208 | luaL_argerror(L, 2, "Unexpected data type. Expects: integer/lightuserdata/socket"); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
209 | } |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
210 | lua_pushinteger(L, ret); |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
211 | return 1; |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
212 | } |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
213 | static luaL_Reg buffer_funcs[] = { |
31
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
214 | {"add", event_buffer_add}, |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
215 | {"length", event_buffer_get_length}, |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
216 | {"get_data", event_buffer_get_data}, |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
217 | {"readline", event_buffer_readline}, |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
218 | {"drain", event_buffer_drain}, |
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
219 | {"close", event_buffer_gc}, |
34
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
220 | {"read", event_buffer_read}, |
64a79d8ee224
event_buffer learned how to read/write from/to sockets/file-descriptors
Thomas Harning Jr <harningt@gmail.com>
parents:
33
diff
changeset
|
221 | {"write", event_buffer_write}, |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
222 | {NULL, NULL} |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
223 | }; |
28
f7b864b661f4
Quick compilation-fixes.
Thomas Harning Jr <harningt@gmail.com>
parents:
27
diff
changeset
|
224 | static luaL_Reg funcs[] = { |
31
1956a957c613
event_buffer learned readline and cleaned fn-list.
Thomas Harning Jr <harningt@gmail.com>
parents:
30
diff
changeset
|
225 | {"new", event_buffer_push_new}, |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
226 | {NULL, NULL} |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
227 | }; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
228 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
229 | int event_buffer_register(lua_State* L) { |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
230 | 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
|
231 | 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
|
232 | lua_setfield(L, -2, "__gc"); |
33
0d750f302d66
event_buffer learned to manage '#' and the __tostring metafield
Thomas Harning Jr <harningt@gmail.com>
parents:
32
diff
changeset
|
233 | lua_pushcfunction(L, event_buffer_get_length); |
0d750f302d66
event_buffer learned to manage '#' and the __tostring metafield
Thomas Harning Jr <harningt@gmail.com>
parents:
32
diff
changeset
|
234 | lua_setfield(L, -2, "__len"); |
0d750f302d66
event_buffer learned to manage '#' and the __tostring metafield
Thomas Harning Jr <harningt@gmail.com>
parents:
32
diff
changeset
|
235 | lua_pushcfunction(L, event_buffer_get_data); |
0d750f302d66
event_buffer learned to manage '#' and the __tostring metafield
Thomas Harning Jr <harningt@gmail.com>
parents:
32
diff
changeset
|
236 | lua_setfield(L, -2, "__tostring"); |
26
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
237 | lua_newtable(L); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
238 | luaL_register(L, NULL, buffer_funcs); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
239 | lua_setfield(L, -2, "__index"); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
240 | lua_pop(L, 1); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
241 | |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
242 | luaL_register(L, "luaevent.core.buffer", funcs); |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
243 | return 0; |
a117895e867c
Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents:
diff
changeset
|
244 | } |