whitelist: Read multiple commands until client closes connection

This restores the same behavior we had before e11c02c8, and fixes the whitelist
add/remove-from command.
This commit is contained in:
Martin Willi 2013-10-29 14:11:41 +01:00
parent 348b9d82b4
commit d402e87d16
1 changed files with 28 additions and 30 deletions

View File

@ -99,39 +99,37 @@ static bool on_accept(private_whitelist_control_t *this, stream_t *stream)
identification_t *id;
whitelist_msg_t msg;
if (!stream->read_all(stream, &msg, sizeof(msg)))
while (stream->read_all(stream, &msg, sizeof(msg)))
{
return FALSE;
msg.id[sizeof(msg.id) - 1] = 0;
id = identification_create_from_string(msg.id);
switch (ntohl(msg.type))
{
case WHITELIST_ADD:
this->listener->add(this->listener, id);
break;
case WHITELIST_REMOVE:
this->listener->remove(this->listener, id);
break;
case WHITELIST_LIST:
list(this, stream, id);
break;
case WHITELIST_FLUSH:
this->listener->flush(this->listener, id);
break;
case WHITELIST_ENABLE:
this->listener->set_active(this->listener, TRUE);
break;
case WHITELIST_DISABLE:
this->listener->set_active(this->listener, FALSE);
break;
default:
DBG1(DBG_CFG, "received unknown whitelist command");
break;
}
id->destroy(id);
}
msg.id[sizeof(msg.id) - 1] = 0;
id = identification_create_from_string(msg.id);
switch (ntohl(msg.type))
{
case WHITELIST_ADD:
this->listener->add(this->listener, id);
break;
case WHITELIST_REMOVE:
this->listener->remove(this->listener, id);
break;
case WHITELIST_LIST:
list(this, stream, id);
break;
case WHITELIST_FLUSH:
this->listener->flush(this->listener, id);
break;
case WHITELIST_ENABLE:
this->listener->set_active(this->listener, TRUE);
break;
case WHITELIST_DISABLE:
this->listener->set_active(this->listener, FALSE);
break;
default:
DBG1(DBG_CFG, "received unknown whitelist command");
break;
}
id->destroy(id);
return FALSE;
}