do not activate clients without redirection via POST
update 4573deb8cb3 to skip clients without redirection after receiving POST notification.master
parent
21e905a387
commit
44287f9e67
|
@ -51,7 +51,7 @@ static void tip_client_release(struct ev_loop *loop, struct tip_client *cli)
|
||||||
if (cli->method == TIP_METHOD_GET) {
|
if (cli->method == TIP_METHOD_GET) {
|
||||||
if (tip_client_large_file(cli)) {
|
if (tip_client_large_file(cli)) {
|
||||||
num_clients--;
|
num_clients--;
|
||||||
tip_client_activate_pending();
|
tip_client_activate_pending(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,15 +351,18 @@ void tip_client_pending(struct tip_client *cli)
|
||||||
cli->state = TIP_CLIENT_PENDING;
|
cli->state = TIP_CLIENT_PENDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tip_client_activate_pending(void)
|
void tip_client_activate_pending(bool redirect_only)
|
||||||
{
|
{
|
||||||
struct tip_client *cli, *next;
|
struct tip_client *cli, *next;
|
||||||
|
bool redirected;
|
||||||
|
|
||||||
list_for_each_entry_safe(cli, next, &client_list, list) {
|
list_for_each_entry_safe(cli, next, &client_list, list) {
|
||||||
if (cli->state != TIP_CLIENT_PENDING)
|
if (cli->state != TIP_CLIENT_PENDING)
|
||||||
continue;
|
continue;
|
||||||
|
redirected = tip_client_redirect(cli);
|
||||||
|
if (!redirected && redirect_only)
|
||||||
|
continue;
|
||||||
|
|
||||||
tip_client_redirect(cli);
|
|
||||||
ev_io_set(&cli->io, tip_client_socket(cli), EV_READ | EV_WRITE);
|
ev_io_set(&cli->io, tip_client_socket(cli), EV_READ | EV_WRITE);
|
||||||
ev_io_start(tip_main_loop, &cli->io);
|
ev_io_start(tip_main_loop, &cli->io);
|
||||||
ev_timer_again(tip_main_loop, &cli->timer);
|
ev_timer_again(tip_main_loop, &cli->timer);
|
||||||
|
|
|
@ -71,7 +71,7 @@ static inline bool tip_client_large_file(const struct tip_client *cli)
|
||||||
void tip_client_pending(struct tip_client *cli);
|
void tip_client_pending(struct tip_client *cli);
|
||||||
bool tip_client_redirect(struct tip_client *cli);
|
bool tip_client_redirect(struct tip_client *cli);
|
||||||
int tip_client_redirect_create(const struct tip_client *cli);
|
int tip_client_redirect_create(const struct tip_client *cli);
|
||||||
void tip_client_activate_pending(void);
|
void tip_client_activate_pending(bool redirect_only);
|
||||||
|
|
||||||
extern struct ev_loop *tip_main_loop;
|
extern struct ev_loop *tip_main_loop;
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ int tip_client_state_process_payload(struct tip_client *cli)
|
||||||
case TIP_METHOD_POST:
|
case TIP_METHOD_POST:
|
||||||
cli->allow_redirect = true;
|
cli->allow_redirect = true;
|
||||||
tip_client_redirect_create(cli);
|
tip_client_redirect_create(cli);
|
||||||
tip_client_activate_pending();
|
tip_client_activate_pending(true);
|
||||||
cli->state = TIP_CLIENT_PROCESSING_REQUEST_2;
|
cli->state = TIP_CLIENT_PROCESSING_REQUEST_2;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue