ZyklonB: factor out plugin_process_ipc()
This commit is contained in:
parent
ac466d5ac9
commit
20a3f25211
96
zyklonb.c
96
zyklonb.c
|
@ -853,6 +853,55 @@ plugin_send (struct plugin *plugin, const char *format, ...)
|
|||
plugin_queue_write (plugin);
|
||||
}
|
||||
|
||||
static void
|
||||
plugin_process_ipc (struct plugin *plugin, const struct irc_message *msg)
|
||||
{
|
||||
// Replies are sent in the order in which they came in, so there's
|
||||
// no need to attach a special identifier to them. It might be
|
||||
// desirable in some cases, though.
|
||||
|
||||
if (msg->params.len < 1)
|
||||
return;
|
||||
|
||||
const char *command = msg->params.vector[0];
|
||||
if (!plugin->initialized && !strcasecmp (command, "register"))
|
||||
{
|
||||
// Register for relaying of IRC traffic
|
||||
plugin->initialized = true;
|
||||
|
||||
// Flush any queued up traffic here. The point of queuing it in
|
||||
// the first place is so that we don't have to wait for plugin
|
||||
// initialization during startup.
|
||||
//
|
||||
// Note that if we start filtering data coming to the plugins e.g.
|
||||
// based on what it tells us upon registration, we might need to
|
||||
// filter `queued_output' as well.
|
||||
str_append_str (&plugin->write_buffer, &plugin->queued_output);
|
||||
str_free (&plugin->queued_output);
|
||||
|
||||
// NOTE: this may trigger the buffer length check
|
||||
plugin_queue_write (plugin);
|
||||
}
|
||||
else if (!strcasecmp (command, "get_config"))
|
||||
{
|
||||
if (msg->params.len < 2)
|
||||
return;
|
||||
|
||||
const char *value =
|
||||
str_map_find (&plugin->ctx->config, msg->params.vector[1]);
|
||||
// TODO: escape the value (although there's no need to ATM)
|
||||
plugin_send (plugin, "%s :%s",
|
||||
plugin_ipc_command, value ? value : "");
|
||||
}
|
||||
else if (!strcasecmp (command, "print"))
|
||||
{
|
||||
if (msg->params.len < 2)
|
||||
return;
|
||||
|
||||
printf ("%s\n", msg->params.vector[1]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
plugin_process_message (const struct irc_message *msg,
|
||||
const char *raw, void *user_data)
|
||||
|
@ -864,52 +913,7 @@ plugin_process_message (const struct irc_message *msg,
|
|||
fprintf (stderr, "[%s] --> \"%s\"\n", plugin->name, raw);
|
||||
|
||||
if (!strcasecmp (msg->command, plugin_ipc_command))
|
||||
{
|
||||
// Replies are sent in the order in which they came in, so there's
|
||||
// no need to attach a special identifier to them. It might be
|
||||
// desirable in some cases, though.
|
||||
|
||||
if (msg->params.len < 1)
|
||||
return;
|
||||
|
||||
const char *command = msg->params.vector[0];
|
||||
if (!plugin->initialized && !strcasecmp (command, "register"))
|
||||
{
|
||||
// Register for relaying of IRC traffic
|
||||
plugin->initialized = true;
|
||||
|
||||
// Flush any queued up traffic here. The point of queuing it in
|
||||
// the first place is so that we don't have to wait for plugin
|
||||
// initialization during startup.
|
||||
//
|
||||
// Note that if we start filtering data coming to the plugins e.g.
|
||||
// based on what it tells us upon registration, we might need to
|
||||
// filter `queued_output' as well.
|
||||
str_append_str (&plugin->write_buffer, &plugin->queued_output);
|
||||
str_free (&plugin->queued_output);
|
||||
|
||||
// NOTE: this may trigger the buffer length check
|
||||
plugin_queue_write (plugin);
|
||||
}
|
||||
else if (!strcasecmp (command, "get_config"))
|
||||
{
|
||||
if (msg->params.len < 2)
|
||||
return;
|
||||
|
||||
const char *value =
|
||||
str_map_find (&ctx->config, msg->params.vector[1]);
|
||||
// TODO: escape the value (although there's no need to ATM)
|
||||
plugin_send (plugin, "%s :%s",
|
||||
plugin_ipc_command, value ? value : "");
|
||||
}
|
||||
else if (!strcasecmp (command, "print"))
|
||||
{
|
||||
if (msg->params.len < 2)
|
||||
return;
|
||||
|
||||
printf ("%s\n", msg->params.vector[1]);
|
||||
}
|
||||
}
|
||||
plugin_process_ipc (plugin, msg);
|
||||
else if (plugin->initialized && ctx->irc_registered)
|
||||
{
|
||||
// Pass everything else through to the IRC server
|
||||
|
|
Loading…
Reference in New Issue