|
|
|
@ -28,8 +28,8 @@
|
|
|
|
|
static jmp_buf exceptionjmp;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
buffer *url_raw;
|
|
|
|
|
buffer *physical_path;
|
|
|
|
|
array *url_raw;
|
|
|
|
|
array *physical_path;
|
|
|
|
|
} plugin_config;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
@ -72,8 +72,8 @@ FREE_FUNC(mod_magnet_free) {
|
|
|
|
|
|
|
|
|
|
if (!s) continue;
|
|
|
|
|
|
|
|
|
|
buffer_free(s->url_raw);
|
|
|
|
|
buffer_free(s->physical_path);
|
|
|
|
|
array_free(s->url_raw);
|
|
|
|
|
array_free(s->physical_path);
|
|
|
|
|
|
|
|
|
|
free(s);
|
|
|
|
|
}
|
|
|
|
@ -95,8 +95,8 @@ SETDEFAULTS_FUNC(mod_magnet_set_defaults) {
|
|
|
|
|
size_t i = 0;
|
|
|
|
|
|
|
|
|
|
config_values_t cv[] = {
|
|
|
|
|
{ MAGNET_CONFIG_RAW_URL, NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
|
|
|
|
|
{ MAGNET_CONFIG_PHYSICAL_PATH, NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
|
|
|
|
|
{ MAGNET_CONFIG_RAW_URL, NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
|
|
|
|
|
{ MAGNET_CONFIG_PHYSICAL_PATH, NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
|
|
|
|
|
{ NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -108,8 +108,8 @@ SETDEFAULTS_FUNC(mod_magnet_set_defaults) {
|
|
|
|
|
plugin_config *s;
|
|
|
|
|
|
|
|
|
|
s = calloc(1, sizeof(plugin_config));
|
|
|
|
|
s->url_raw = buffer_init();
|
|
|
|
|
s->physical_path = buffer_init();
|
|
|
|
|
s->url_raw = array_init();
|
|
|
|
|
s->physical_path = array_init();
|
|
|
|
|
|
|
|
|
|
cv[0].destination = s->url_raw;
|
|
|
|
|
cv[1].destination = s->physical_path;
|
|
|
|
@ -682,16 +682,35 @@ static handler_t magnet_attract(server *srv, connection *con, plugin_data *p, bu
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static handler_t magnet_attract_array(server *srv, connection *con, plugin_data *p, array *files) {
|
|
|
|
|
size_t i;
|
|
|
|
|
|
|
|
|
|
/* no filename set */
|
|
|
|
|
if (files->used == 0) return HANDLER_GO_ON;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* execute all files and jump out on the first !HANDLER_GO_ON
|
|
|
|
|
*/
|
|
|
|
|
for (i = 0; i < files->used; i++) {
|
|
|
|
|
data_string *ds = (data_string *)files->data[i];
|
|
|
|
|
handler_t ret;
|
|
|
|
|
|
|
|
|
|
if (buffer_is_empty(ds->value)) continue;
|
|
|
|
|
|
|
|
|
|
ret = magnet_attract(srv, con, p, ds->value);
|
|
|
|
|
|
|
|
|
|
if (ret != HANDLER_GO_ON) return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HANDLER_GO_ON;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
URIHANDLER_FUNC(mod_magnet_uri_handler) {
|
|
|
|
|
plugin_data *p = p_d;
|
|
|
|
|
|
|
|
|
|
mod_magnet_patch_connection(srv, con, p);
|
|
|
|
|
|
|
|
|
|
if (buffer_is_empty(p->conf.url_raw)) return HANDLER_GO_ON;
|
|
|
|
|
|
|
|
|
|
/* looks like we have a handler for this request */
|
|
|
|
|
|
|
|
|
|
return magnet_attract(srv, con, p, p->conf.url_raw);
|
|
|
|
|
return magnet_attract_array(srv, con, p, p->conf.url_raw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
URIHANDLER_FUNC(mod_magnet_physical) {
|
|
|
|
@ -699,11 +718,7 @@ URIHANDLER_FUNC(mod_magnet_physical) {
|
|
|
|
|
|
|
|
|
|
mod_magnet_patch_connection(srv, con, p);
|
|
|
|
|
|
|
|
|
|
if (buffer_is_empty(p->conf.physical_path)) return HANDLER_GO_ON;
|
|
|
|
|
|
|
|
|
|
/* looks like we have a handler for this request */
|
|
|
|
|
|
|
|
|
|
return magnet_attract(srv, con, p, p->conf.physical_path);
|
|
|
|
|
return magnet_attract_array(srv, con, p, p->conf.physical_path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|