Changeset fa271b8 in code for icbd.c


Ignore:
Timestamp:
Mar 4, 2014, 10:34:15 AM (11 years ago)
Author:
Mike Belopuhov <mike@…>
Branches:
master
Children:
b4049f9
Parents:
a202ff1
Message:

Introduce session IDs and associated tree linkage

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icbd.c

    ra202ff1 rfa271b8  
    2020#include <sys/socket.h>
    2121#include <sys/stat.h>
     22#include <sys/tree.h>
    2223#include <netinet/in_systm.h>
    2324#include <netinet/in.h>
     
    4445extern char *__progname;
    4546
     47uint64_t sessionid;
    4648char modtab[ICB_MTABLEN][ICB_MAXNICKLEN];
    4749int  modtabcnt;
     
    6365void icbd_write(struct icb_session *, char *, ssize_t);
    6466
     67static inline int icbd_session_cmp(struct icb_session *, struct icb_session *);
     68
     69RB_HEAD(icbd_sessions, icb_session) icbd_sessions;
     70RB_PROTOTYPE(icbd_sessions, icb_session, node, icbd_session_cmp);
     71RB_GENERATE(icbd_sessions, icb_session, node, icbd_session_cmp);
     72
    6573int
    6674main(int argc, char *argv[])
     
    7078        int ch, nsocks = 0, save_errno = 0;
    7179        int inet4 = 0, inet6 = 0;
     80
     81        RB_INIT(&icbd_sessions);
    7282
    7383        /* init group lists before calling icb_addgroup */
     
    234244}
    235245
     246static inline int
     247icbd_session_cmp(struct icb_session *a, struct icb_session *b)
     248{
     249        if (a->id > b->id)
     250                return (1);
     251        if (a->id < b->id)
     252                return (-1);
     253        return (0);
     254}
     255
     256inline struct icb_session *
     257icbd_session_lookup(uint64_t sid)
     258{
     259        struct icb_session key;
     260
     261        key.id = sid;
     262        return (RB_FIND(icbd_sessions, &icbd_sessions, &key));
     263}
     264
    236265void
    237266icbd_accept(int fd, short event __attribute__((__unused__)),
     
    270299                return;
    271300        }
     301
     302        is->id = sessionid++;
     303        RB_INSERT(icbd_sessions, &icbd_sessions, is);
    272304
    273305        /* save host information */
     
    354386        (void)close(EVBUFFER_FD(is->bev));
    355387        bufferevent_free(is->bev);
     388        RB_REMOVE(icbd_sessions, &icbd_sessions, is);
    356389        free(is);
    357390}
Note: See TracChangeset for help on using the changeset viewer.