Changeset 25:67ca08d5bc48 in freeDiameter for include/freeDiameter/freeDiameter.h
- Timestamp:
- Oct 26, 2009, 4:00:49 PM (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
include/freeDiameter/freeDiameter.h
r24 r25 152 152 struct fd_event { 153 153 int code; /* codespace depends on the queue */ 154 size_t size; 154 155 void *data; 155 156 }; 156 157 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 */ 179 159 enum { 180 FDEV_TERMINATE 160 FDEV_TERMINATE = 1000 /* request to terminate */ 181 161 ,FDEV_DUMP_DICT /* Dump the content of the dictionary */ 182 162 ,FDEV_DUMP_EXT /* Dump state of extensions */ … … 186 166 ,FDEV_DUMP_PEERS /* Dump the list of peers */ 187 167 }; 168 169 static __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 } 179 static __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 } 192 static __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 } 216 static __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 } 188 227 const char * fd_ev_str(int event); /* defined in freeDiameter/main.c */ 189 228
Note: See TracChangeset
for help on using the changeset viewer.