00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _SR_XAVP_H_
00026 #define _SR_XAVP_H_
00027
00028 #ifdef WITH_XAVP
00029
00030 #include <time.h>
00031 #include "str.h"
00032
00033 struct _sr_xavp;
00034
00035 typedef enum {
00036 SR_XTYPE_NULL=0,
00037 SR_XTYPE_INT,
00038 SR_XTYPE_STR,
00039 SR_XTYPE_TIME,
00040 SR_XTYPE_LONG,
00041 SR_XTYPE_LLONG,
00042 SR_XTYPE_XAVP,
00043 SR_XTYPE_DATA
00044 } sr_xtype_t;
00045
00046 typedef void (*sr_xavp_sfree_f)(void *d);
00047 typedef void (*sr_data_free_f)(void *d, sr_xavp_sfree_f sfree);
00048
00049 typedef struct _sr_data {
00050 void *p;
00051 sr_data_free_f pfree;
00052 } sr_data_t;
00053
00054 typedef struct _sr_xval {
00055 sr_xtype_t type;
00056 union {
00057 int i;
00058 str s;
00059 time_t t;
00060 long l;
00061 long long ll;
00062 struct _sr_xavp *xavp;
00063 sr_data_t *data;
00064 } v;
00065 } sr_xval_t;
00066
00067 typedef struct _sr_xavp {
00068 unsigned int id;
00069 str name;
00070 sr_xval_t val;
00071 struct _sr_xavp *next;
00072 } sr_xavp_t;
00073
00074 int xavp_init_head(void);
00075 void avpx_free(sr_xavp_t *xa);
00076
00077 sr_xavp_t *xavp_add_value(str *name, sr_xval_t *val, sr_xavp_t **list);
00078 sr_xavp_t *xavp_set_value(str *name, int idx, sr_xval_t *val, sr_xavp_t **list);
00079 sr_xavp_t *xavp_get(str *name, sr_xavp_t *start);
00080 sr_xavp_t *xavp_get_by_index(str *name, int idx, sr_xavp_t **start);
00081 sr_xavp_t *xavp_get_next(sr_xavp_t *start);
00082 int xavp_rm_by_name(str *name, int all, sr_xavp_t **head);
00083 int xavp_rm_by_index(str *name, int idx, sr_xavp_t **head);
00084 int xavp_rm(sr_xavp_t *xa, sr_xavp_t **head);
00085 int xavp_count(str *name, sr_xavp_t **start);
00086 void xavp_destroy_list_unsafe(sr_xavp_t **head);
00087 void xavp_destroy_list(sr_xavp_t **head);
00088 void xavp_reset_list(void);
00089 sr_xavp_t **xavp_set_list(sr_xavp_t **head);
00090 sr_xavp_t **xavp_get_crt_list(void);
00091
00092 void xavp_print_list(sr_xavp_t **head);
00093 #endif
00094
00095 #endif