void script_action_list () { int i, scripts_loaded; char hdata_name[128]; const char *ptr_name; struct t_hdata *hdata; void *ptr_script; dogechat_printf (NULL, ""); dogechat_printf (NULL, _("Scripts loaded:")); scripts_loaded = 0; for (i = 0; i < SCRIPT_NUM_LANGUAGES; i++) { snprintf (hdata_name, sizeof (hdata_name), "%s_script", script_language[i]); hdata = dogechat_hdata_get (hdata_name); ptr_script = dogechat_hdata_get_list (hdata, "scripts"); while (ptr_script) { ptr_name = dogechat_hdata_string (hdata, ptr_script, "name"); dogechat_printf (NULL, " %s %s%s%s.%s %s%s %s(%s%s%s)", script_repo_get_status_for_display (script_repo_search_by_name (ptr_name), "*?iaHN", 0), dogechat_color (dogechat_config_string (script_config_color_text_name)), ptr_name, dogechat_color (dogechat_config_string (script_config_color_text_extension)), script_extension[i], dogechat_color (dogechat_config_string (script_config_color_text_version)), dogechat_hdata_string (hdata, ptr_script, "version"), dogechat_color ("chat_delimiters"), dogechat_color (dogechat_config_string (script_config_color_text_description)), dogechat_hdata_string (hdata, ptr_script, "description"), dogechat_color ("chat_delimiters")); scripts_loaded++; ptr_script = dogechat_hdata_move (hdata, ptr_script, 1); } } if (scripts_loaded == 0) { dogechat_printf (NULL, _(" (none)")); } }
void exec_config_change_command_default_options (void *data, struct t_config_option *option) { /* make C compiler happy */ (void) data; (void) option; if (exec_config_cmd_options) dogechat_string_free_split (exec_config_cmd_options); exec_config_cmd_options = dogechat_string_split ( dogechat_config_string (exec_config_command_default_options), " ", 0, 0, &exec_config_cmd_num_options); }
int relay_server_create_socket (struct t_relay_server *server) { int domain, set, max_clients, addr_size; struct sockaddr_in server_addr; struct sockaddr_in6 server_addr6; const char *bind_address; void *ptr_addr; bind_address = dogechat_config_string (relay_config_network_bind_address); if (server->ipv6) { domain = AF_INET6; memset (&server_addr6, 0, sizeof (struct sockaddr_in6)); server_addr6.sin6_family = domain; server_addr6.sin6_port = htons (server->port); server_addr6.sin6_addr = in6addr_any; if (bind_address && bind_address[0]) { if (!inet_pton (domain, bind_address, &server_addr6.sin6_addr)) { dogechat_printf (NULL, /* TRANSLATORS: second "%s" is "IPv4" or "IPv6" */ _("%s%s: invalid bind address \"%s\" for %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, bind_address, "IPv6"); return 0; } } ptr_addr = &server_addr6; addr_size = sizeof (struct sockaddr_in6); } else { domain = AF_INET; memset (&server_addr, 0, sizeof (struct sockaddr_in)); server_addr.sin_family = domain; server_addr.sin_port = htons (server->port); server_addr.sin_addr.s_addr = INADDR_ANY; if (bind_address && bind_address[0]) { if (!inet_pton (domain, bind_address, &server_addr.sin_addr)) { dogechat_printf (NULL, /* TRANSLATORS: second "%s" is "IPv4" or "IPv6" */ _("%s%s: invalid bind address \"%s\" for %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, bind_address, "IPv4"); return 0; } } ptr_addr = &server_addr; addr_size = sizeof (struct sockaddr_in); } /* create socket */ server->sock = socket (domain, SOCK_STREAM, 0); if (server->sock < 0) { dogechat_printf (NULL, _("%s%s: cannot create socket: error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, errno, strerror (errno)); if (errno == EAFNOSUPPORT) { dogechat_printf (NULL, _("%s%s: try /set relay.network.ipv6 off"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME); } return 0; } #ifdef IPV6_V6ONLY /* set option IPV6_V6ONLY to 0 or 1 */ if (server->ipv6) { set = (server->ipv4) ? 0 : 1; if (setsockopt (server->sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *) &set, sizeof (set)) < 0) { dogechat_printf (NULL, _("%s%s: cannot set socket option \"%s\" " "to %d: error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, "IPV6_V6ONLY", set, errno, strerror (errno)); close (server->sock); server->sock = -1; return 0; } } #endif /* IPV6_V6ONLY */ /* set option SO_REUSEADDR to 1 */ set = 1; if (setsockopt (server->sock, SOL_SOCKET, SO_REUSEADDR, (void *) &set, sizeof (set)) < 0) { dogechat_printf (NULL, _("%s%s: cannot set socket option \"%s\" to %d: " "error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, "SO_REUSEADDR", set, errno, strerror (errno)); close (server->sock); server->sock = -1; return 0; } /* set option SO_KEEPALIVE to 1 */ set = 1; if (setsockopt (server->sock, SOL_SOCKET, SO_KEEPALIVE, (void *) &set, sizeof (set)) < 0) { dogechat_printf (NULL, _("%s%s: cannot set socket option \"%s\" to %d: " "error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, "SO_KEEPALIVE", set, errno, strerror (errno)); close (server->sock); server->sock = -1; return 0; } /* bind */ if (bind (server->sock, (struct sockaddr *)ptr_addr, addr_size) < 0) { dogechat_printf (NULL, _("%s%s: cannot \"bind\" on port %d (%s): error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, server->port, server->protocol_string, errno, strerror (errno)); close (server->sock); server->sock = -1; return 0; } max_clients = dogechat_config_integer (relay_config_network_max_clients); if (listen (server->sock, max_clients) != 0) { dogechat_printf (NULL, _("%s%s: cannot \"listen\" on port %d (%s): error %d %s"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, server->port, server->protocol_string, errno, strerror (errno)); close (server->sock); server->sock = -1; return 0; } dogechat_printf (NULL, _("%s: listening on port %d (relay: %s, %s, max %d clients)"), RELAY_PLUGIN_NAME, server->port, server->protocol_string, ((server->ipv4 && server->ipv6) ? "IPv4+6" : ((server->ipv6) ? "IPv6" : "IPv4")), max_clients); server->hook_fd = dogechat_hook_fd (server->sock, 1, 0, 0, &relay_server_sock_cb, server); server->start_time = time (NULL); return 1; }
void xfer_command_xfer_list (int full) { struct t_xfer *ptr_xfer; int i; char date[128]; unsigned long long pct_complete; struct tm *date_tmp; if (xfer_list) { dogechat_printf (NULL, ""); dogechat_printf (NULL, _("Xfer list:")); i = 1; for (ptr_xfer = xfer_list; ptr_xfer; ptr_xfer = ptr_xfer->next_xfer) { /* xfer info */ if (XFER_IS_FILE(ptr_xfer->type)) { if (ptr_xfer->size == 0) { if (ptr_xfer->status == XFER_STATUS_DONE) pct_complete = 100; else pct_complete = 0; } else pct_complete = (unsigned long long)(((float)(ptr_xfer->pos)/(float)(ptr_xfer->size)) * 100); dogechat_printf (NULL, _("%3d. %s (%s), file: \"%s\" (local: " "\"%s\"), %s %s, status: %s%s%s " "(%llu %%)"), i, xfer_type_string[ptr_xfer->type], xfer_protocol_string[ptr_xfer->protocol], ptr_xfer->filename, ptr_xfer->local_filename, (XFER_IS_SEND(ptr_xfer->type)) ? _("sent to") : _("received from"), ptr_xfer->remote_nick, dogechat_color ( dogechat_config_string ( xfer_config_color_status[ptr_xfer->status])), _(xfer_status_string[ptr_xfer->status]), dogechat_color ("chat"), pct_complete); } else { date[0] = '\0'; date_tmp = localtime (&(ptr_xfer->start_time)); if (date_tmp) { strftime (date, sizeof (date), "%a, %d %b %Y %H:%M:%S", date_tmp); } dogechat_printf (NULL, /* TRANSLATORS: "%s" after "started on" is a date */ _("%3d. %s, chat with %s (local nick: %s), " "started on %s, status: %s%s"), i, xfer_type_string[ptr_xfer->type], ptr_xfer->remote_nick, ptr_xfer->local_nick, date, dogechat_color( dogechat_config_string( xfer_config_color_status[ptr_xfer->status])), _(xfer_status_string[ptr_xfer->status])); } if (full) { /* second line of xfer info */ if (XFER_IS_FILE(ptr_xfer->type)) { dogechat_printf (NULL, _(" plugin: %s (id: %s), file: %llu " "bytes (position: %llu), address: " "%s (port %d)"), ptr_xfer->plugin_name, ptr_xfer->plugin_id, ptr_xfer->size, ptr_xfer->pos, ptr_xfer->remote_address_str, ptr_xfer->port); date[0] = '\0'; date_tmp = localtime (&(ptr_xfer->start_transfer)); if (date_tmp) { strftime (date, sizeof (date), "%a, %d %b %Y %H:%M:%S", date_tmp); } dogechat_printf (NULL, /* TRANSLATORS: "%s" after "started on" is a date */ _(" fast_send: %s, blocksize: %d, " "started on %s"), (ptr_xfer->fast_send) ? _("yes") : _("no"), ptr_xfer->blocksize, date); } } i++; } } else dogechat_printf (NULL, _("No xfer")); }
void exec_command_list () { struct t_exec_cmd *ptr_exec_cmd; char str_elapsed[32], str_time1[256], str_time2[256]; time_t elapsed_time; struct tm *local_time; dogechat_printf (NULL, ""); if (!exec_cmds) { dogechat_printf (NULL, _("No command is running")); return; } dogechat_printf (NULL, _("Commands:")); for (ptr_exec_cmd = exec_cmds; ptr_exec_cmd; ptr_exec_cmd = ptr_exec_cmd->next_cmd) { elapsed_time = (ptr_exec_cmd->end_time == 0) ? time (NULL) - ptr_exec_cmd->start_time : ptr_exec_cmd->end_time - ptr_exec_cmd->start_time; if (elapsed_time >= 3600) { snprintf (str_elapsed, sizeof (str_elapsed), /* TRANSLATORS: format: hours + minutes, for example: 3h59 */ _("%dh%02d"), elapsed_time / 3600, elapsed_time % 3600); } else if (elapsed_time >= 60) { snprintf (str_elapsed, sizeof (str_elapsed), /* TRANSLATORS: format: minutes + seconds, for example: 3m59 */ _("%dm%02d"), elapsed_time / 60, elapsed_time % 60); } else { snprintf (str_elapsed, sizeof (str_elapsed), /* TRANSLATORS: format: seconds, for example: 59s */ _("%ds"), elapsed_time); } if (ptr_exec_cmd->end_time == 0) { /* running command */ dogechat_printf (NULL, /* TRANSLATORS: %s before "ago" is elapsed time, for example: "3m59" */ _(" %s%s%s %d%s%s%s: %s\"%s%s%s\"%s (pid: %d, " "started %s ago)"), dogechat_color (dogechat_config_string (exec_config_color_flag_running)), ">>", dogechat_color ("reset"), ptr_exec_cmd->number, (ptr_exec_cmd->name) ? " (" : "", (ptr_exec_cmd->name) ? ptr_exec_cmd->name : "", (ptr_exec_cmd->name) ? ")" : "", dogechat_color ("chat_delimiters"), dogechat_color ("reset"), ptr_exec_cmd->command, dogechat_color ("chat_delimiters"), dogechat_color ("reset"), ptr_exec_cmd->pid, str_elapsed); } else { /* process has ended */ local_time = localtime (&ptr_exec_cmd->start_time); strftime (str_time1, sizeof (str_time1), "%Y-%m-%d %H:%M:%S", local_time); local_time = localtime (&ptr_exec_cmd->end_time); strftime (str_time2, sizeof (str_time2), "%Y-%m-%d %H:%M:%S", local_time); dogechat_printf (NULL, " %s%s%s %d%s%s%s: %s\"%s%s%s\"%s (%s -> %s, %s)", dogechat_color (dogechat_config_string (exec_config_color_flag_finished)), "[]", dogechat_color ("reset"), ptr_exec_cmd->number, (ptr_exec_cmd->name) ? " (" : "", (ptr_exec_cmd->name) ? ptr_exec_cmd->name : "", (ptr_exec_cmd->name) ? ")" : "", dogechat_color ("chat_delimiters"), dogechat_color ("reset"), ptr_exec_cmd->command, dogechat_color ("chat_delimiters"), dogechat_color ("reset"), str_time1, str_time2, str_elapsed); } } }