Navigation



Ignore:
Timestamp:
Oct 26, 2009, 4:00:49 PM (15 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Completed connection context files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • include/freeDiameter/freeDiameter.h

    r24 r25  
    152152struct fd_event {
    153153        int      code; /* codespace depends on the queue */
     154        size_t   size;
    154155        void    *data;
    155156};
    156157
    157 static __inline__ int fd_event_send(struct fifo *queue, int code, void * data)
    158 {
    159         struct fd_event * ev;
    160         CHECK_MALLOC( ev = malloc(sizeof(struct fd_event)) );
    161         ev->code = code;
    162         ev->data = data;
    163         CHECK_FCT( fd_fifo_post(queue, &ev) );
    164         return 0;
    165 }
    166 static __inline__ int fd_event_get(struct fifo *queue, int *code, void ** data)
    167 {
    168         struct fd_event * ev;
    169         CHECK_FCT( fd_fifo_get(queue, &ev) );
    170         if (code)
    171                 *code = ev->code;
    172         if (data)
    173                 *data = ev->data;
    174         free(ev);
    175         return 0;
    176 }
    177 
    178 /* Events codespace for fd_g_config->cnf_main_ev */
     158/* Daemon's codespace: 1000->1999 */
    179159enum {
    180          FDEV_TERMINATE = 1000  /* request to terminate */
     160         FDEV_TERMINATE = 1000  /* request to terminate */
    181161        ,FDEV_DUMP_DICT         /* Dump the content of the dictionary */
    182162        ,FDEV_DUMP_EXT          /* Dump state of extensions */
     
    186166        ,FDEV_DUMP_PEERS        /* Dump the list of peers */
    187167};
     168
     169static __inline__ int fd_event_send(struct fifo *queue, int code, size_t datasz, void * data)
     170{
     171        struct fd_event * ev;
     172        CHECK_MALLOC( ev = malloc(sizeof(struct fd_event)) );
     173        ev->code = code;
     174        ev->size = datasz;
     175        ev->data = data;
     176        CHECK_FCT( fd_fifo_post(queue, &ev) );
     177        return 0;
     178}
     179static __inline__ int fd_event_get(struct fifo *queue, int *code, size_t *datasz, void ** data)
     180{
     181        struct fd_event * ev;
     182        CHECK_FCT( fd_fifo_get(queue, &ev) );
     183        if (code)
     184                *code = ev->code;
     185        if (datasz)
     186                *datasz = ev->size;
     187        if (data)
     188                *data = ev->data;
     189        free(ev);
     190        return 0;
     191}
     192static __inline__ int fd_event_timedget(struct fifo *queue, struct timespec * timeout, int timeoutcode, int *code, size_t *datasz, void ** data)
     193{
     194        struct fd_event * ev;
     195        int ret = 0;
     196        ret = fd_fifo_timedget(queue, &ev, timeout);
     197        if (ret == ETIMEDOUT) {
     198                if (code)
     199                        *code = timeoutcode;
     200                if (datasz)
     201                        *datasz = 0;
     202                if (data)
     203                        *data = NULL;
     204        } else {
     205                CHECK_FCT( ret );
     206                if (code)
     207                        *code = ev->code;
     208                if (datasz)
     209                        *datasz = ev->size;
     210                if (data)
     211                        *data = ev->data;
     212                free(ev);
     213        }
     214        return 0;
     215}
     216static __inline__ void fd_event_destroy(struct fifo **queue, void (*free_cb)(void * data))
     217{
     218        struct fd_event * ev;
     219        /* Purge all events, and free the associated data if any */
     220        while (fd_fifo_tryget( *queue, &ev ) == 0) {
     221                (*free_cb)(ev->data);
     222                free(ev);
     223        }
     224        CHECK_FCT_DO( fd_fifo_del(queue), /* continue */ );
     225        return ;
     226
    188227const char * fd_ev_str(int event); /* defined in freeDiameter/main.c */
    189228
Note: See TracChangeset for help on using the changeset viewer.