Annotation of embedaddon/mpd/src/event.c, revision 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>