ZyklonB: factor out plugin_process_ipc()
This commit is contained in:
		
							
								
								
									
										96
									
								
								zyklonb.c
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								zyklonb.c
									
									
									
									
									
								
							@@ -853,6 +853,55 @@ plugin_send (struct plugin *plugin, const char *format, ...)
 | 
				
			|||||||
	plugin_queue_write (plugin);
 | 
						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
 | 
					static void
 | 
				
			||||||
plugin_process_message (const struct irc_message *msg,
 | 
					plugin_process_message (const struct irc_message *msg,
 | 
				
			||||||
	const char *raw, void *user_data)
 | 
						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);
 | 
							fprintf (stderr, "[%s] --> \"%s\"\n", plugin->name, raw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!strcasecmp (msg->command, plugin_ipc_command))
 | 
						if (!strcasecmp (msg->command, plugin_ipc_command))
 | 
				
			||||||
	{
 | 
							plugin_process_ipc (plugin, 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 (&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]);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else if (plugin->initialized && ctx->irc_registered)
 | 
						else if (plugin->initialized && ctx->irc_registered)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Pass everything else through to the IRC server
 | 
							// Pass everything else through to the IRC server
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user