void irc_redirect_free_all (struct t_irc_server *server) { while (server->redirects) { irc_redirect_free (server->redirects); } }
void irc_redirect_stop (struct t_irc_redirect *redirect, const char *error) { struct t_hashtable *hashtable; char signal_name[1024], str_int[64]; redirect->current_count++; if (error || (redirect->current_count > redirect->count)) { /* * error or max count reached, then we run callback and remove * redirect */ hashtable = weechat_hashtable_new (32, WEECHAT_HASHTABLE_STRING, WEECHAT_HASHTABLE_STRING, NULL, NULL); if (hashtable) { /* set error and output (main fields) */ weechat_hashtable_set (hashtable, "error", (error) ? (char *)error : ""); weechat_hashtable_set (hashtable, "output", (redirect->output) ? redirect->output : ""); snprintf (str_int, sizeof (str_int), "%d", redirect->output_size); weechat_hashtable_set (hashtable, "output_size", str_int); /* set some other fields with values from redirect */ weechat_hashtable_set (hashtable, "server", redirect->server->name); weechat_hashtable_set (hashtable, "pattern", redirect->pattern); weechat_hashtable_set (hashtable, "signal", redirect->signal); weechat_hashtable_set (hashtable, "command", redirect->command); } snprintf (signal_name, sizeof (signal_name), "irc_redirection_%s_%s", redirect->signal, redirect->pattern); (void) weechat_hook_hsignal_send (signal_name, hashtable); if (hashtable) weechat_hashtable_free (hashtable); irc_redirect_free (redirect); } else { /* * max count not yet reached, then we prepare redirect to continue * redirection */ redirect->cmd_start_received = 0; redirect->cmd_stop_received = 0; } }