struct http_client *hc, *tmp;
const char *err_msg;
+ if (server_fd < 0)
+ return;
list_for_each_entry_safe(hc, tmp, &clients, node) {
i++;
// PARA_DEBUG_LOG("handling client %d: %s\n", i, remote_name(hc->fd));
err_msg = "server full";
goto err_out;
}
- match = host_in_acl(hc->fd, &http_acl);
- PARA_DEBUG_LOG("host_in_acl: %d\n", match);
+ match = acl_lookup(hc->fd, &http_acl);
+ PARA_DEBUG_LOG("acl lookup returned %d\n", match);
if ((match && !conf.http_default_deny_given) ||
(!match && conf.http_default_deny_given)) {
err_msg = "permission denied";
}
}
-static int open_tcp_port(int port)
+static int http_open(int port)
{
int ret;
server_fd = para_listen(AF_UNSPEC, IPPROTO_TCP, port);
if (server_fd < 0) {
http_shutdown_clients();
- self->status = SENDER_OFF;
return server_fd;
}
ret = mark_fd_nonblocking(server_fd);
PARA_EMERG_LOG("%s\n", para_strerror(-ret));
exit(EXIT_FAILURE);
}
- self->status = SENDER_ON;
add_close_on_fork_list(server_fd);
return 1;
}
static int http_com_on(__a_unused struct sender_command_data *scd)
{
- if (self->status == SENDER_ON)
+ if (server_fd >= 0)
return 1;
- return open_tcp_port(conf.http_port_arg);
+ return http_open(conf.http_port_arg);
}
static int http_com_off(__a_unused struct sender_command_data *scd)
{
- self->status = SENDER_OFF;
- if (server_fd > 0) {
- close(server_fd);
- del_close_on_fork_list(server_fd);
- server_fd = -1;
- }
+ if (server_fd < 0)
+ return 1;
+ PARA_NOTICE_LOG("closing http port %d\n", conf.http_port_arg);
+ close(server_fd);
+ del_close_on_fork_list(server_fd);
http_shutdown_clients();
+ server_fd = -1;
return 1;
}
static int http_com_deny(struct sender_command_data *scd)
{
if (conf.http_default_deny_given)
- del_acl_entry(&http_acl, scd->addr, scd->netmask);
+ acl_del_entry(&http_acl, scd->addr, scd->netmask);
else
- add_acl_entry(&http_acl, scd->addr, scd->netmask);
+ acl_add_entry(&http_acl, scd->addr, scd->netmask);
return 1;
}
static int http_com_allow(struct sender_command_data *scd)
{
if (conf.http_default_deny_given)
- add_acl_entry(&http_acl, scd->addr, scd->netmask);
+ acl_add_entry(&http_acl, scd->addr, scd->netmask);
else
- del_acl_entry(&http_acl, scd->addr, scd->netmask);
+ acl_del_entry(&http_acl, scd->addr, scd->netmask);
return 1;
}
char *clnts = NULL, *ret;
struct http_client *hc, *tmp_hc;
- char *acl_contents = get_acl_contents(&http_acl);
+ char *acl_contents = acl_get_contents(&http_acl);
list_for_each_entry_safe(hc, tmp_hc, &clients, node) {
char *tmp = make_message("%s%s ", clnts? clnts : "", hc->name);
free(clnts);
"http maximal number of clients: %d%s\n"
"http connected clients: %s\n"
"http access %s list: %s\n",
- (self->status == SENDER_ON)? "on" : "off",
+ (server_fd >= 0)? "on" : "off",
conf.http_port_arg,
numclients,
conf.http_max_clients_arg,
s->client_cmds[SENDER_ADD] = NULL;
s->client_cmds[SENDER_DELETE] = NULL;
self = s;
- init_acl(&http_acl, conf.http_access_arg, conf.http_access_given);
+ acl_init(&http_acl, conf.http_access_arg, conf.http_access_given);
if (!conf.http_no_autostart_given)
- open_tcp_port(conf.http_port_arg); /* ignore errors */
+ http_open(conf.http_port_arg); /* ignore errors */
PARA_DEBUG_LOG("%s", "http sender init complete\n");
}