Navigation


Changeset 639:95a784729cac in freeDiameter for libfreeDiameter/sessions.c


Ignore:
Timestamp:
Dec 20, 2010, 1:07:06 PM (13 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfreeDiameter/sessions.c

    r557 r639  
    6969        int               eyec; /* An eye catcher also used to ensure the object is valid, must be SH_EYEC */
    7070        int               id;   /* A unique integer to identify this handler */
    71         void            (*cleanup)(session_state *, char *); /* The cleanup function to be called for cleaning a state */
     71        void            (*cleanup)(session_state *, char *, void *); /* The cleanup function to be called for cleaning a state */
     72        void             *opaque; /* a value that is passed as is to the cleanup callback */
    7273};
    7374
     
    253254
    254255/* Create a new handler */
    255 int fd_sess_handler_create_internal ( struct session_handler ** handler, void (*cleanup)(session_state * state, char * sid) )
     256int fd_sess_handler_create_internal ( struct session_handler ** handler, void (*cleanup)(session_state * state, char * sid, void * opaque), void * opaque )
    256257{
    257258        struct session_handler *new;
     
    270271        new->eyec = SH_EYEC;
    271272        new->cleanup = cleanup;
     273        new->opaque = opaque;
    272274       
    273275        *handler = new;
     
    277279/* Destroy a handler, and all states attached to this handler. This operation is very slow but we don't care since it's rarely used.
    278280 * Note that it's better to call this function after all sessions have been deleted... */
    279 int fd_sess_handler_destroy ( struct session_handler ** handler )
     281int fd_sess_handler_destroy ( struct session_handler ** handler, void ** opaque )
    280282{
    281283        struct session_handler * del;
     
    323325                struct state * st = (struct state *)(deleted_states.next->o);
    324326                TRACE_DEBUG(FULL, "Calling cleanup handler for session '%s' and data %p", st->sid, st->state);
    325                 (*del->cleanup)(st->state, st->sid);
     327                (*del->cleanup)(st->state, st->sid, del->opaque);
    326328                free(st->sid);
    327329                fd_list_unlink(&st->chain);
    328330                free(st);
    329331        }
     332       
     333        if (opaque)
     334                *opaque = del->opaque;
    330335       
    331336        /* Free the handler */
     
    583588                fd_list_unlink(&st->chain);
    584589                TRACE_DEBUG(FULL, "Calling handler %p cleanup for state registered with session '%s'", st->hdl, sess->sid);
    585                 (*st->hdl->cleanup)(st->state, sess->sid);
     590                (*st->hdl->cleanup)(st->state, sess->sid, st->hdl->opaque);
    586591                free(st);
    587592        }
     
    805810                fd_log_debug("\t  %*s  Invalid session handler object\n", level, "");
    806811        } else {
    807                 fd_log_debug("\t  %*s  id %d, cleanup %p\n", level, "", handler->id, handler->cleanup);
     812                fd_log_debug("\t  %*s  id %d, cleanup %p, opaque %p\n", level, "", handler->id, handler->cleanup, handler->opaque);
    808813        }
    809814        fd_log_debug("\t  %*s -- end of handler @%p --\n", level, "", handler);
Note: See TracChangeset for help on using the changeset viewer.