int relay_buffer_input_cb (const void *pointer, void *data, struct t_gui_buffer *buffer, const char *input_data) { struct t_relay_client *client, *ptr_client, *next_client; /* make C compiler happy */ (void) pointer; (void) data; if (buffer == relay_raw_buffer) { if (weechat_strcasecmp (input_data, "q") == 0) weechat_buffer_close (buffer); } else if (buffer == relay_buffer) { client = relay_client_search_by_number (relay_buffer_selected_line); /* disconnect client */ if (weechat_strcasecmp (input_data, "d") == 0) { if (client && !RELAY_CLIENT_HAS_ENDED(client)) { relay_client_disconnect (client); relay_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } } /* purge old clients */ else if (weechat_strcasecmp (input_data, "p") == 0) { ptr_client = relay_clients; while (ptr_client) { next_client = ptr_client->next_client; if (RELAY_CLIENT_HAS_ENDED(ptr_client)) relay_client_free (ptr_client); ptr_client = next_client; } relay_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } /* quit relay buffer (close it) */ else if (weechat_strcasecmp (input_data, "q") == 0) { weechat_buffer_close (buffer); } /* remove client */ else if (weechat_strcasecmp (input_data, "r") == 0) { if (client && RELAY_CLIENT_HAS_ENDED(client)) { relay_client_free (client); relay_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } } } return WEECHAT_RC_OK; }
int exec_buffer_input_cb (const void *pointer, void *data, struct t_gui_buffer *buffer, const char *input_data) { char **argv, **argv_eol; int argc; /* make C compiler happy */ (void) pointer; (void) data; /* close buffer */ if (strcmp (input_data, "q") == 0) { weechat_buffer_close (buffer); return WEECHAT_RC_OK; } argv = weechat_string_split (input_data, " ", 0, 0, &argc); argv_eol = weechat_string_split (input_data, " ", 1, 0, NULL); if (argv && argv_eol) exec_command_run (buffer, argc, argv, argv_eol, 0); if (argv) weechat_string_free_split (argv); if (argv_eol) weechat_string_free_split (argv_eol); return WEECHAT_RC_OK; }
int weechat_plugin_end (struct t_weechat_plugin *plugin) { /* make C compiler happy */ (void) plugin; if (relay_hook_timer) weechat_unhook (relay_hook_timer); relay_config_write (); if (relay_signal_upgrade_received) relay_upgrade_save (); else { relay_raw_message_free_all (); relay_server_free_all (); relay_client_disconnect_all (); if (relay_buffer) weechat_buffer_close (relay_buffer); relay_client_free_all (); } relay_network_end (); relay_config_free (); return WEECHAT_RC_OK; }
int command_silc_connect(void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { char *servername; struct t_gui_buffer *server_buffer; SilcPluginServerList server; if (argc < 3) { weechat_printf(buffer, "you need to specify a servername to connect to"); return WEECHAT_RC_ERROR; } servername = argv[2]; // create a new buffer for this connection but merge it into the main window server_buffer = weechat_buffer_new(servername, NULL, NULL, NULL, NULL); weechat_printf(server_buffer, "SILC: trying to connect to %s", servername); weechat_buffer_merge(server_buffer, weechat_buffer_search_main()); if (!silc_client_connect_to_server(silc_plugin->client, NULL, silc_plugin->public_key, silc_plugin->private_key, servername, 706, silc_plugin_connected, server_buffer)) { weechat_printf(server_buffer, "%sSILC: connection to server failed", weechat_prefix("error")); weechat_buffer_close(server_buffer); } server = add_server(servername, NULL, NULL, server_buffer); return WEECHAT_RC_OK; }
void silc_plugin_connected(SilcClient client, SilcClientConnection conn, SilcClientConnectionStatus status, SilcStatus error, const char *message, void *context) { SilcConnectionContext connContext; SilcPluginServerList server; server = find_server_for_buffer(context); if (status == SILC_CLIENT_CONN_DISCONNECTED) { weechat_log_printf("Disconnected: %s", message ? message : ""); weechat_buffer_close(context); remove_server(server); return; } if (status != SILC_CLIENT_CONN_SUCCESS && status != SILC_CLIENT_CONN_SUCCESS_RESUME) { weechat_log_printf("Error connecting to server: %d", status); return; } connContext = malloc(sizeof(SilcConnectionContext)); connContext->server_buffer = context; conn->context = connContext; server->connection = conn; weechat_log_printf("connection successfull"); }
int xfer_buffer_input_cb (void *data, struct t_gui_buffer *buffer, const char *input_data) { struct t_xfer *xfer, *ptr_xfer, *next_xfer; /* make C compiler happy */ (void) data; xfer = xfer_search_by_number (xfer_buffer_selected_line); /* accept xfer */ if (weechat_strcasecmp (input_data, "a") == 0) { if (xfer && XFER_IS_RECV(xfer->type) && (xfer->status == XFER_STATUS_WAITING)) { xfer_network_accept (xfer); } } /* cancel xfer */ else if (weechat_strcasecmp (input_data, "c") == 0) { if (xfer && !XFER_HAS_ENDED(xfer->status)) { xfer_close (xfer, XFER_STATUS_ABORTED); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } } /* purge old xfer */ else if (weechat_strcasecmp (input_data, "p") == 0) { ptr_xfer = xfer_list; while (ptr_xfer) { next_xfer = ptr_xfer->next_xfer; if (XFER_HAS_ENDED(ptr_xfer->status)) xfer_free (ptr_xfer); ptr_xfer = next_xfer; } xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } /* quit xfer buffer (close it) */ else if (weechat_strcasecmp (input_data, "q") == 0) { weechat_buffer_close (buffer); } /* remove xfer */ else if (weechat_strcasecmp (input_data, "r") == 0) { if (xfer && XFER_HAS_ENDED(xfer->status)) { xfer_free (xfer); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); } } return WEECHAT_RC_OK; }
int irc_input_data (struct t_gui_buffer *buffer, const char *input_data, int flags) { const char *ptr_data; char *data_with_colors, *msg; IRC_BUFFER_GET_SERVER_CHANNEL(buffer); if (buffer == irc_raw_buffer) { if (weechat_strcasecmp (input_data, "q") == 0) weechat_buffer_close (buffer); } else { /* * if send unknown commands is enabled and that input data is a * command, then send this command to IRC server */ if (weechat_config_boolean (irc_config_network_send_unknown_commands) && !weechat_string_input_for_buffer (input_data)) { if (ptr_server) { irc_server_sendf (ptr_server, flags, NULL, "%s", weechat_utf8_next_char (input_data)); } return WEECHAT_RC_OK; } if (ptr_channel) { ptr_data = weechat_string_input_for_buffer (input_data); if (!ptr_data) ptr_data = input_data; data_with_colors = irc_color_encode ( ptr_data, weechat_config_boolean (irc_config_network_colors_send)); msg = strdup ((data_with_colors) ? data_with_colors : ptr_data); if (msg) { irc_input_send_user_message (buffer, flags, NULL, msg); free (msg); } if (data_with_colors) free (data_with_colors); } else { weechat_printf (buffer, _("%s%s: this buffer is not a channel!"), weechat_prefix ("error"), IRC_PLUGIN_NAME); } } return WEECHAT_RC_OK; }
int irc_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_irc_channel *next_channel; IRC_BUFFER_GET_SERVER_CHANNEL(buffer); /* make C compiler happy */ (void) data; if (buffer == irc_raw_buffer) { irc_raw_buffer = NULL; } else { if (ptr_channel) { /* send PART for channel if its buffer is closed */ if ((ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL) && (ptr_channel->nicks)) { irc_command_part_channel (ptr_server, ptr_channel->name, NULL); } irc_channel_free (ptr_server, ptr_channel); } else { if (ptr_server) { if (!ptr_server->disconnected) { /* send QUIT to server, then disconnect */ irc_command_quit_server (ptr_server, NULL); irc_server_disconnect (ptr_server, 0, 0); } ptr_channel = ptr_server->channels; while (ptr_channel) { next_channel = ptr_channel->next_channel; if (ptr_channel->buffer != buffer) weechat_buffer_close (ptr_channel->buffer); ptr_channel = next_channel; } ptr_server->buffer = NULL; } } } return WEECHAT_RC_OK; }
int script_buffer_input_cb (void *data, struct t_gui_buffer *buffer, const char *input_data) { char *actions[][2] = { { "A", "toggleautoload" }, { "l", "load" }, { "u", "unload" }, { "L", "reload" }, { "i", "install" }, { "r", "remove" }, { "h", "hold" }, { "v", "show" }, { "d", "showdiff" }, { NULL, NULL } }; char str_command[64]; int i; /* make C compiler happy */ (void) data; /* close buffer */ if (strcmp (input_data, "q") == 0) { weechat_buffer_close (buffer); return WEECHAT_RC_OK; } if (!script_buffer_detail_script) { /* change sort keys on buffer */ if (strncmp (input_data, "s:", 2) == 0) { if (input_data[2]) weechat_config_option_set (script_config_look_sort, input_data + 2, 1); else weechat_config_option_reset (script_config_look_sort, 1); return WEECHAT_RC_OK; } /* refresh buffer */ if (strcmp (input_data, "$") == 0) { script_get_loaded_plugins_and_scripts (); script_repo_remove_all (); script_repo_file_read (1); script_buffer_refresh (1); return WEECHAT_RC_OK; } } /* execute action on a script */ for (i = 0; actions[i][0]; i++) { if (strcmp (input_data, actions[i][0]) == 0) { snprintf (str_command, sizeof (str_command), "/script %s", actions[i][1]); weechat_command (buffer, str_command); return WEECHAT_RC_OK; } } /* filter scripts with given text */ if (!script_buffer_detail_script) script_repo_filter_scripts (input_data); return WEECHAT_RC_OK; }