Annotation of embedaddon/mpd/src/event.c, revision 1.1.1.1
1.1 misho 1: /*
2: * See ``COPYRIGHT.mpd''
3: *
4: * $Id: event.c,v 1.21 2011/07/11 09:09:22 dmitryluhtionov Exp $
5: *
6: */
7:
8: #include "ppp.h"
9: #include "event.h"
10:
11: /*
12: * DEFINITIONS
13: */
14:
15: struct pevent_ctx *gPeventCtx = NULL;
16:
17: /*
18: * INTERNAL FUNCTIONS
19: */
20:
21: static void EventHandler(void *arg);
22:
23: /*
24: * EventInit()
25: *
26: */
27:
28: int
29: EventInit(void)
30: {
31:
32: gPeventCtx = pevent_ctx_create(MB_EVENT, NULL);
33: if (!gPeventCtx) {
34: Log(LG_ERR, ("%s: error pevent_ctx_create: %d", __FUNCTION__, errno));
35: return(-1);
36: }
37:
38: return(0);
39: }
40:
41: /*
42: * EventStop()
43: *
44: * Stop servicing events
45: */
46:
47: void
48: EventStop(void)
49: {
50: pevent_ctx_destroy(&gPeventCtx);
51: }
52:
53: /*
54: * EventDump()
55: */
56:
57: void
58: EventDump(Context ctx, const char *msg)
59: {
60: u_int n;
61:
62: n = pevent_ctx_count(gPeventCtx);
63: Printf("%d Events registered\r\n", n);
64: }
65:
66: /*
67: * EventRegister()
68: */
69:
70: int
71: EventRegister2(EventRef *refp, int type, int val, int flags,
72: void (*action)(int type, void *cookie), void *cookie, const char *dbg,
73: const char *file, int line)
74: {
75: Log(LG_EVENTS, ("EVENT: Registering event %s at %s:%d", dbg, file, line));
76: if (!gPeventCtx)
77: EventInit();
78:
79: refp->arg = cookie;
80: refp->handler = action;
81: refp->type = type;
82: refp->pe = NULL;
83: refp->dbg = dbg;
84:
85: if (pevent_register(gPeventCtx, &refp->pe, flags, &gGiantMutex, EventHandler,
86: refp, type, val) == -1) {
87: Perror("%s: error pevent_register", __FUNCTION__);
88: return(-1);
89: }
90:
91: Log(LG_EVENTS, ("EVENT: Registering event %s done at %s:%d", dbg, file, line));
92: return(0);
93: }
94:
95: /*
96: * EventUnRegister()
97: */
98:
99: int
100: EventUnRegister2(EventRef *refp, const char *file, int line)
101: {
102: Log(LG_EVENTS, ("EVENT: Unregistering event %s at %s:%d", refp->dbg, file, line));
103: pevent_unregister(&refp->pe);
104: Log(LG_EVENTS, ("EVENT: Unregistering event %s done at %s:%d", refp->dbg, file, line));
105: return(0);
106: }
107:
108: /*
109: * EventIsRegistered()
110: */
111:
112: int
113: EventIsRegistered(EventRef *ref)
114: {
115: if (ref->pe == NULL)
116: return FALSE;
117:
118: return TRUE;
119: }
120:
121: /*
122: * EventTimerRemain()
123: *
124: * Returns the number of milliseconds remaining on a timer.
125: * Returns -1 if the timer is not registered or is not a timer event.
126: */
127:
128: int
129: EventTimerRemain(EventRef *refp)
130: {
131: struct pevent_info info;
132:
133: if (pevent_get_info(refp->pe, &info) == -1)
134: return(-1);
135:
136: return(info.u.millis);
137: }
138:
139: static void
140: EventHandler(void *arg)
141: {
142: EventRef *refp = (EventRef *) arg;
143: const char *dbg = refp->dbg;
144:
145: Log(LG_EVENTS, ("EVENT: Processing event %s", dbg));
146: (refp->handler)(refp->type, refp->arg);
147: Log(LG_EVENTS, ("EVENT: Processing event %s done", dbg));
148: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>