src/server/daemon/func.c

changeset 84
afd57ce39ec9
parent 54
3a1d5a52adfc
child 92
382bff43c6eb
equal deleted inserted replaced
83:28433f06d5ee 84:afd57ce39ec9
40 void func_init() { 40 void func_init() {
41 function_map = ucx_map_new(1337); 41 function_map = ucx_map_new(1337);
42 } 42 }
43 43
44 void add_function(FuncStruct *func) { 44 void add_function(FuncStruct *func) {
45 printf("add_function %s\n", func->name);
46 struct FuncStruct *f = malloc(sizeof(FuncStruct)); 45 struct FuncStruct *f = malloc(sizeof(FuncStruct));
47 *f = *func; 46 *f = *func;
47 char *name = strdup(func->name);
48 for(int i=0;name[i]!='\0';i++) {
49 if(name[i] == '_') {
50 name[i] = '-';
51 }
52 }
53 f->name = name;
54 printf("add_function %s\n", f->name);
48 ucx_map_cstr_put(function_map, (char*)f->name, f); 55 ucx_map_cstr_put(function_map, (char*)f->name, f);
49 } 56 }
50 57
51 void add_functions(FuncStruct *funcs) { 58 void add_functions(FuncStruct *funcs) {
52 int i = 0; 59 int i = 0;
55 i++; 62 i++;
56 } 63 }
57 } 64 }
58 65
59 FuncStruct* get_function(char *name) { 66 FuncStruct* get_function(char *name) {
67 for(int i=0;name[i]!='\0';i++) {
68 if(name[i] == '_') {
69 name[i] = '-';
70 }
71 }
60 return ucx_map_cstr_get(function_map, name); 72 return ucx_map_cstr_get(function_map, name);
61 } 73 }
62 74
63 FuncStruct* func_resolve(pblock *pb, Session *sn, Request *rq) { 75 FuncStruct* func_resolve(pblock *pb, Session *sn, Request *rq) {
64 char *name = pblock_findkeyval(pb_key_fn, pb); 76 char *name = pblock_findkeyval(pb_key_fn, pb);
80 return REQ_ABORTED; 92 return REQ_ABORTED;
81 } 93 }
82 return func->func(pb, sn, rq); 94 return func->func(pb, sn, rq);
83 } 95 }
84 96
97
98
99
100 // public API
101
102 struct FuncStruct func_insert(char *name, FuncPtr fn) {
103 struct FuncStruct fc;
104 ZERO(&fc, sizeof(FuncStruct));
105 fc.func = fn;
106 fc.name = strdup(name);
107 add_function(&fc);
108 return *get_function(name);
109 }

mercurial