static void file_release (client_t *client) { fh_node *fh = client->shared_data; int ret = -1; if (fh->finfo.limit && (client->flags & CLIENT_AUTHENTICATED)) stats_event_dec (NULL, "listeners"); client_set_queue (client, NULL); if (client->flags & CLIENT_AUTHENTICATED && client->parser->req_type == httpp_req_get) { const char *m = NULL; if (fh->finfo.flags & FS_FALLBACK) m = httpp_getvar (client->parser, HTTPP_VAR_URI); else if (client->mount) m = client->mount; else m = fh->finfo.mount; if (m) { ice_config_t *config; char *mount = strdup (m); mount_proxy *mountinfo; remove_from_fh (fh, client); client->shared_data = NULL; config = config_get_config (); mountinfo = config_find_mount (config, mount); if (mountinfo && mountinfo->access_log.name) logging_access_id (&mountinfo->access_log, client); ret = auth_release_listener (client, mount, mountinfo); config_release_config(); free (mount); } else remove_from_fh (fh, client); } else remove_from_fh (fh, client); if (ret < 0) { client->shared_data = NULL; client->flags &= ~CLIENT_AUTHENTICATED; client_destroy (client); } global_reduce_bitrate_sampling (global.out_bitrate); }
static int fserve_move_listener (client_t *client) { fh_node *fh = client->shared_data; int ret = 0; fbinfo f; memset (&f, 0, sizeof (f)); if (client->refbuf && client->pos < client->refbuf->len) client->flags |= CLIENT_HAS_INTRO_CONTENT; // treat it as a partial write needing completion else client_set_queue (client, NULL); f.flags = fh->finfo.flags & (~FS_DELETE); f.limit = fh->finfo.limit; f.mount = fh->finfo.fallback; f.type = fh->finfo.type; if (move_listener (client, &f) < 0) { WARN1 ("moved failed, terminating listener on %s", fh->finfo.mount); ret = -1; } else { DEBUG3 ("moved %s from %s (%d)", client->connection.ip, fh->finfo.mount, fh->finfo.flags); ret = 0; remove_from_fh (fh, client); } return ret; }
static int fserve_move_listener (client_t *client) { fh_node *fh = client->shared_data; int ret = 0; fbinfo f; memset (&f, 0, sizeof (f)); client_set_queue (client, NULL); f.flags = fh->finfo.flags & (~FS_DELETE); f.limit = fh->finfo.limit; f.mount = fh->finfo.fallback; f.type = fh->finfo.type; if (move_listener (client, &f) < 0) { WARN1 ("moved failed, terminating listener on %s", fh->finfo.mount); ret = -1; } else { DEBUG3 ("moved %s from %s (%d)", client->connection.ip, fh->finfo.mount, fh->finfo.flags); ret = 0; remove_from_fh (fh, client); } return ret; }