src/luaevent.c

Thu, 25 Feb 2010 14:50:55 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 25 Feb 2010 14:50:55 +0000
changeset 87
6ff44e01aa5b
parent 82
01408cb4d74f
permissions
-rw-r--r--

luaevent.c: Fix potential overflow in converting seconds to timeval

13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
1 /* LuaEvent - Copyright (C) 2007 Thomas Harning <harningt@gmail.com>
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
2 * Licensed as LGPL - See doc/COPYING for details */
19
cbaa6e6ef285 Unlearned get/setMainThread functions since they were unused.
Thomas Harning Jr <harningt@gmail.com>
parents: 13
diff changeset
3
20
71bc2e49366c Beginning refactoring of the event_callback outside of the core
Thomas Harning Jr <harningt@gmail.com>
parents: 19
diff changeset
4 #include "event_callback.h"
26
a117895e867c Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents: 24
diff changeset
5 #include "event_buffer.h"
41
fce1995f0db8 buffer_event is born, albeit w/ deformities. Can construct instances but not use, yet.
Thomas Harning Jr <harningt@gmail.com>
parents: 26
diff changeset
6 #include "buffer_event.h"
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
7
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
8 #include <lauxlib.h>
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
9 #include <assert.h>
82
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
10 #include <string.h>
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
11
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
12 #define EVENT_BASE_MT "EVENT_BASE_MT"
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
13
22
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
14 le_base* event_base_get(lua_State* L, int idx) {
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
15 return (le_base*)luaL_checkudata(L, idx, EVENT_BASE_MT);
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
16 }
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
17
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
18 int luaevent_newbase(lua_State* L) {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
19 le_base *base = (le_base*)lua_newuserdata(L, sizeof(le_base));
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
20 base->loop_L = NULL; /* No running loop */
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
21 base->base = event_init();
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
22 luaL_getmetatable(L, EVENT_BASE_MT);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
23 lua_setmetatable(L, -2);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
24 return 1;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
25 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
26
69
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
27 int luaevent_libevent_version(lua_State* L) {
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
28 lua_pushstring(L, event_get_version());
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
29 return 1;
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
30 }
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
31
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
32 static int luaevent_base_gc(lua_State* L) {
22
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
33 le_base *base = event_base_get(L, 1);
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
34 if(base->base) {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
35 event_base_free(base->base);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
36 base->base = NULL;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
37 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
38 return 0;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
39 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
40
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
41 int getSocketFd(lua_State* L, int idx) {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
42 int fd;
72
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
43 if(lua_isnumber(L, idx)) {
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
44 fd = lua_tonumber(L, idx);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
45 } else {
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
46 luaL_checktype(L, idx, LUA_TUSERDATA);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
47 lua_getfield(L, idx, "getfd");
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
48 if(lua_isnil(L, -1))
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
49 return luaL_error(L, "Socket type missing 'getfd' method");
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
50 lua_pushvalue(L, idx);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
51 lua_call(L, 1, 1);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
52 fd = lua_tointeger(L, -1);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
53 lua_pop(L, 1);
adb5fa9ea85a base:addevent(): Accept integer as fd parameter
Matthew Wild <mwild1@gmail.com>
parents: 69
diff changeset
54 }
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
55 return fd;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
56 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
57
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
58 void load_timeval(double time, struct timeval *tv) {
87
6ff44e01aa5b luaevent.c: Fix potential overflow in converting seconds to timeval
Matthew Wild <mwild1@gmail.com>
parents: 82
diff changeset
59 tv->tv_sec = (int) time;
6ff44e01aa5b luaevent.c: Fix potential overflow in converting seconds to timeval
Matthew Wild <mwild1@gmail.com>
parents: 82
diff changeset
60 tv->tv_usec = (int)( (time - tv->tv_sec) * 1000000 );
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
61 }
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
62
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
63 /* sock, event, callback, timeout */
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
64 static int luaevent_addevent(lua_State* L) {
22
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
65 int fd, event;
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
66 le_callback* arg = event_callback_push(L, 1, 4);
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
67 struct timeval *tv = &arg->timeout;
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
68 if(lua_isnil(L, 2) && lua_isnumber(L, 5)) {
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
69 fd = -1; /* Per event_timer_set.... */
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
70 } else {
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
71 fd = getSocketFd(L, 2);
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
72 }
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
73 event = luaL_checkinteger(L, 3);
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
74 if(lua_isnumber(L, 5)) {
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
75 double time = lua_tonumber(L, 5);
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
76 load_timeval(time, tv);
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
77 } else {
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
78 tv = NULL;
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
79 }
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
80
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
81 /* Setup event... */
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
82 event_set(&arg->ev, fd, event | EV_PERSIST, luaevent_callback, arg);
22
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
83 event_base_set(arg->base->base, &arg->ev);
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
84 event_add(&arg->ev, tv);
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
85 return 1;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
86 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
87
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
88 static int luaevent_loop(lua_State* L) {
75
5a5f46aed0c1 luaevent.c: Make ANSI C compatible.
Waqas Hussain <waqas20@gmail.com>
parents: 72
diff changeset
89 int ret;
22
48a109847dce Completely refactored event_callback creation out into event_callback.
Thomas Harning Jr <harningt@gmail.com>
parents: 20
diff changeset
90 le_base *base = event_base_get(L, 1);
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
91 base->loop_L = L;
75
5a5f46aed0c1 luaevent.c: Make ANSI C compatible.
Waqas Hussain <waqas20@gmail.com>
parents: 72
diff changeset
92 ret = event_base_loop(base->base, 0);
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
93 lua_pushinteger(L, ret);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
94 return 1;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
95 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
96
66
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
97 static int luaevent_loopexit(lua_State*L) {
75
5a5f46aed0c1 luaevent.c: Make ANSI C compatible.
Waqas Hussain <waqas20@gmail.com>
parents: 72
diff changeset
98 int ret;
66
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
99 le_base *base = event_base_get(L, 1);
67
7fd8dbfb54d5 base:loopexit(): Support for specifying the timeout before exit
Matthew Wild <mwild1@gmail.com>
parents: 66
diff changeset
100 struct timeval tv = { 0, 0 };
7fd8dbfb54d5 base:loopexit(): Support for specifying the timeout before exit
Matthew Wild <mwild1@gmail.com>
parents: 66
diff changeset
101 if(lua_gettop(L) >= 2) /* Optional timeout before exiting the loop */
7fd8dbfb54d5 base:loopexit(): Support for specifying the timeout before exit
Matthew Wild <mwild1@gmail.com>
parents: 66
diff changeset
102 load_timeval(luaL_checknumber(L, 2), &tv);
75
5a5f46aed0c1 luaevent.c: Make ANSI C compatible.
Waqas Hussain <waqas20@gmail.com>
parents: 72
diff changeset
103 ret = event_base_loopexit(base->base, &tv);
66
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
104 lua_pushinteger(L, ret);
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
105 return 1;
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
106 }
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
107
68
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
108 static int luaevent_method(lua_State* L) {
82
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
109 #ifdef _EVENT_VERSION
68
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
110 le_base *base = event_base_get(L, 1);
82
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
111 if(strcmp(_EVENT_VERSION, "1.3")<0)
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
112 lua_pushstring(L, event_base_get_method(base->base));
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
113 else
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
114 #endif
01408cb4d74f luaevent.c: Fix for backwards-compatibility with 1.3
Matthew Wild <mwild1@gmail.com>
parents: 78
diff changeset
115 lua_pushstring(L, event_get_method());
68
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
116 return 1;
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
117 }
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
118
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
119 static luaL_Reg base_funcs[] = {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
120 { "addevent", luaevent_addevent },
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
121 { "loop", luaevent_loop },
66
0173c0fc0cf0 Add base:loopexit() method
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
122 { "loopexit", luaevent_loopexit },
68
9e119bf833ae Add base:method() to return string identifying the current libevent backend in use
Matthew Wild <mwild1@gmail.com>
parents: 67
diff changeset
123 { "method", luaevent_method },
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
124 { NULL, NULL }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
125 };
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
126
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
127 static luaL_Reg funcs[] = {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
128 { "new", luaevent_newbase },
69
da7e8688a2b5 Add core.libevent_version() function to get version of libevent in use
Matthew Wild <mwild1@gmail.com>
parents: 68
diff changeset
129 { "libevent_version", luaevent_libevent_version },
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
130 { NULL, NULL }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
131 };
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
132
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
133 typedef struct {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
134 const char* name;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
135 int value;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
136 } namedInteger;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
137
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
138 static namedInteger consts[] = {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
139 {"LEAVE", -1},
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
140 {"EV_READ", EV_READ},
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
141 {"EV_WRITE", EV_WRITE},
23
897150985f13 Added support for timeouts and timers.
Thomas Harning Jr <harningt@gmail.com>
parents: 22
diff changeset
142 {"EV_TIMEOUT", EV_TIMEOUT},
50
739e353c4e97 Added EV_SIGNAL and EV_PERSIST flags to the registered values
Thomas Harning Jr <harningt@gmail.com>
parents: 45
diff changeset
143 {"EV_SIGNAL", EV_SIGNAL},
739e353c4e97 Added EV_SIGNAL and EV_PERSIST flags to the registered values
Thomas Harning Jr <harningt@gmail.com>
parents: 45
diff changeset
144 {"EV_PERSIST", EV_PERSIST},
45
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
145 /* bufferevent */
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
146 {"EVBUFFER_READ", EVBUFFER_READ},
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
147 {"EVBUFFER_WRITE", EVBUFFER_WRITE},
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
148 {"EVBUFFER_EOF", EVBUFFER_EOF},
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
149 {"EVBUFFER_ERROR", EVBUFFER_ERROR},
9c8104d5fa65 Added EVBUFFER_* constants to luaevent.core
Thomas Harning Jr <harningt@gmail.com>
parents: 41
diff changeset
150 {"EVBUFFER_TIMEOUT", EVBUFFER_TIMEOUT},
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
151 {NULL, 0}
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
152 };
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
153
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
154 void setNamedIntegers(lua_State* L, namedInteger* p) {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
155 while(p->name) {
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
156 lua_pushinteger(L, p->value);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
157 lua_setfield(L, -2, p->name);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
158 p++;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
159 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
160 }
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
161
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
162 /* Verified ok */
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
163 int luaopen_luaevent_core(lua_State* L) {
63
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
164 #ifdef _WIN32
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
165 WORD wVersionRequested = MAKEWORD(2, 2);
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
166 WSADATA wsaData;
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
167 WSAStartup(wVersionRequested, &wsaData);
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
168 #endif
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
169 event_init( );
20
71bc2e49366c Beginning refactoring of the event_callback outside of the core
Thomas Harning Jr <harningt@gmail.com>
parents: 19
diff changeset
170 /* Register external items */
71bc2e49366c Beginning refactoring of the event_callback outside of the core
Thomas Harning Jr <harningt@gmail.com>
parents: 19
diff changeset
171 event_callback_register(L);
26
a117895e867c Added event_buffer object + 'add' functionality
Thomas Harning Jr <harningt@gmail.com>
parents: 24
diff changeset
172 event_buffer_register(L);
41
fce1995f0db8 buffer_event is born, albeit w/ deformities. Can construct instances but not use, yet.
Thomas Harning Jr <harningt@gmail.com>
parents: 26
diff changeset
173 buffer_event_register(L);
fce1995f0db8 buffer_event is born, albeit w/ deformities. Can construct instances but not use, yet.
Thomas Harning Jr <harningt@gmail.com>
parents: 26
diff changeset
174 lua_settop(L, 0);
13
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
175 /* Setup metatable */
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
176 luaL_newmetatable(L, EVENT_BASE_MT);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
177 lua_newtable(L);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
178 luaL_register(L, NULL, base_funcs);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
179 lua_setfield(L, -2, "__index");
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
180 lua_pushcfunction(L, luaevent_base_gc);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
181 lua_setfield(L, -2, "__gc");
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
182 lua_pop(L, 1);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
183
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
184 luaL_register(L, "luaevent.core", funcs);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
185 setNamedIntegers(L, consts);
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
186 return 1;
3e2ea1e7b2e8 Reformed project layout from 'luaevent/*' -> '*'
Thomas Harning Jr <harningt@gmail.com>
parents:
diff changeset
187 }
63
1b8cbf640378 base: add patch to get luaevent working on mingw
blastbeat <blastbeat@arcor.de>
parents: 26
diff changeset
188

mercurial