src/server/daemon/configmanager.c

changeset 77
f1cff81e425a
parent 74
5bc6d078fb2c
child 85
b62e77d8e80c
equal deleted inserted replaced
76:5f7660fe1562 77:f1cff81e425a
61 61
62 ConfigFile* cfgmgr_get_file(sstr_t name) { 62 ConfigFile* cfgmgr_get_file(sstr_t name) {
63 return ucx_map_sstr_get(config_files, name); 63 return ucx_map_sstr_get(config_files, name);
64 } 64 }
65 65
66 // copy functions
67 static void* copy_listener(HttpListener *ls, ServerConfiguration *cfg) {
68 /*
69 * we reuse the old listener, but change the
70 * ServerConfiguration and VirtualServer
71 */
72 http_listener_ref(ls);
73
74 // TODO: this is non atomar
75 sstr_t vsname = ls->default_vs.vs->name;
76 ls->default_vs.vs = ucx_map_sstr_get(cfg->host_vs, vsname);
77 ls->cfg = cfg;
78
79 return ls;
80 }
81
82 static void* copy_vs(void *vserver, void *pool) {
83 VirtualServer *vs = vs_copy(vserver, pool);
84
85 /*
86 * this function is executed on configuration reload, so some
87 * VS configs may be changed
88 *
89 * vs
90 * objects
91 */
92 ConfigFile *objectfile = cfgmgr_get_file(vs->objectfile);
93 vs->objects = objectfile->data;
94 return vs;
95 }
96
97 int cfgmgr_reload_file(ConfigFile *f, ServerConfiguration *conf, int *reload) { 66 int cfgmgr_reload_file(ConfigFile *f, ServerConfiguration *conf, int *reload) {
98 struct stat s; 67 struct stat s;
99 if(stat(f->file.ptr, &s) != 0) { 68 if(stat(f->file.ptr, &s) != 0) {
100 fprintf( 69 fprintf(
101 stderr, 70 stderr,
150 fprintf(stderr, "Cannot load server.conf\n"); 119 fprintf(stderr, "Cannot load server.conf\n");
151 return -1; 120 return -1;
152 } 121 }
153 122
154 sc_last_modified = s.st_mtime; 123 sc_last_modified = s.st_mtime;
155 } else if(0) {
156 /* copy configuration */
157 printf("cfgmgr copy server.conf\n");
158
159 /* TODO: copy */
160 /*
161 config = load_server_conf(
162 current_config,
163 "config/server.conf");
164 */
165 config = malloc(sizeof(ServerConfiguration));
166 config->ref = 1;
167 config->pool = pool_create();
168 config->user = sstrdup_pool(config->pool, current_config->user);
169 config->tmp = sstrdup_pool(config->pool, current_config->tmp);
170
171 // copy configuration
172 config->host_vs = ucx_map_clone(
173 current_config->host_vs,
174 copy_vs,
175 config->pool);
176
177 config->listeners = ucx_list_clone(
178 current_config->listeners,
179 (copy_func)copy_listener,
180 config);
181
182 // TODO: we need to get the mime map from the configfile data
183 config->mimetypes = current_config->mimetypes;
184
185 if(config == NULL) {
186 fprintf(stderr, "Cannot load server.conf\n");
187 return -1;
188 }
189
190 } else { 124 } else {
191 printf("no reconfig required!\n"); 125 printf("no reconfig required!\n");
192 config = current_config; 126 config = current_config;
193 } 127 }
194 128

mercurial