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 |