Added /server command
This commit is contained in:
parent
a353a6d228
commit
a5ae266ee4
230
src/command.c
230
src/command.c
@ -28,8 +28,8 @@
|
||||
|
||||
#include "weechat.h"
|
||||
#include "command.h"
|
||||
#include "irc/irc.h"
|
||||
#include "config.h"
|
||||
#include "irc/irc.h"
|
||||
#include "gui/gui.h"
|
||||
|
||||
|
||||
@ -48,6 +48,21 @@ t_weechat_command weechat_commands[] =
|
||||
{ "help", N_("display help about commands"),
|
||||
N_("[command]"), N_("command: name of a " WEECHAT_NAME " or IRC command"),
|
||||
0, 1, weechat_cmd_help, NULL },
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[[add] servername [-auto | -noauto] hostname [-port port] [-pwd password] [-nicks nick1 "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname]] | "
|
||||
"[del servername]"),
|
||||
N_("servername: server name, for internal & display use\n"
|
||||
"hostname: name or IP address of server\n"
|
||||
"port: port for server (integer)\n"
|
||||
"password: password for server\n"
|
||||
"nick1: first nick for server\n"
|
||||
"nick2: alternate nick for server\n"
|
||||
"nick3: second alternate nick for server\n"
|
||||
"username: user name\n"
|
||||
"realname: real name of user\n"),
|
||||
0, MAX_ARGS, weechat_cmd_server, NULL },
|
||||
{ "set", N_("set config parameters"),
|
||||
N_("[option [value]]"), N_("option: name of an option\nvalue: value for option"),
|
||||
0, 2, weechat_cmd_set, NULL },
|
||||
@ -578,6 +593,219 @@ weechat_cmd_help (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_server: list, add or remove server(s)
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_server (int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
t_irc_server server, *ptr_server, *server_found;
|
||||
|
||||
if ((argc == 0) || ((argc == 1) && (strcasecmp (argv[0], "list") == 0)))
|
||||
{
|
||||
/* list all servers */
|
||||
if (irc_servers)
|
||||
{
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_("Server: "));
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s", ptr_server->name);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" [");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s",
|
||||
(ptr_server->is_connected) ?
|
||||
_("connected") : _("not connected"));
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
"]\n");
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
" Autoconnect: %s\n",
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
" Hostname : %s\n",
|
||||
ptr_server->address);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Port : %d\n"),
|
||||
ptr_server->port);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->password && ptr_server->password[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Password : (hidden)\n"));
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Password : (none)\n"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Nicks : %s"),
|
||||
ptr_server->nick1);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" / ");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s", ptr_server->nick2);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" / ");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s\n", ptr_server->nick3);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Username : %s\n"),
|
||||
ptr_server->username);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Realname : %s\n"),
|
||||
ptr_server->realname);
|
||||
}
|
||||
}
|
||||
else
|
||||
gui_printf (NULL, _("No server.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcasecmp (argv[0], "del") == 0)
|
||||
{
|
||||
if (argc == 1)
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing servername for \"/server del\" command\n"),
|
||||
WEECHAT_ERROR);
|
||||
return -1;
|
||||
}
|
||||
if (argc > 2)
|
||||
gui_printf (NULL,
|
||||
_("%s too much arguments for \"/server del\" command, ignoring arguments\n"),
|
||||
WEECHAT_WARNING);
|
||||
|
||||
/* look for server by name */
|
||||
server_found = NULL;
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (strcmp (ptr_server->name, argv[1]) == 0)
|
||||
{
|
||||
server_found = ptr_server;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!server_found)
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s server \"%s\" not found for \"/server del\" command\n"),
|
||||
WEECHAT_ERROR, argv[1]);
|
||||
return -1;
|
||||
}
|
||||
server_free (server_found);
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/* init server struct */
|
||||
server_init (&server);
|
||||
|
||||
/* parse arguments */
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] == '-')
|
||||
{
|
||||
if (strcasecmp (argv[0], "-auto") == 0)
|
||||
server.autoconnect = 1;
|
||||
if (strcasecmp (argv[0], "-noauto") == 0)
|
||||
server.autoconnect = 0;
|
||||
if (strcasecmp (argv[0], "-port") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing port for \"-port\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.port = atoi (argv[i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-pwd") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-pwd\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.password = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-nicks") == 0)
|
||||
{
|
||||
if (i >= (argc - 3))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing nick(s) for \"-nicks\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.nick1 = strdup (argv[++i]);
|
||||
server.nick2 = strdup (argv[++i]);
|
||||
server.nick3 = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-username") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-username\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.username = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-realname") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-realname\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.realname = strdup (argv[++i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_set: set options
|
||||
*/
|
||||
|
@ -57,6 +57,7 @@ extern void user_command (t_irc_server *, char *);
|
||||
extern int weechat_cmd_alias(int, char **);
|
||||
extern int weechat_cmd_clear(int, char **);
|
||||
extern int weechat_cmd_help (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_set (int, char **);
|
||||
extern int weechat_cmd_unalias (int, char **);
|
||||
|
||||
|
52
src/config.c
52
src/config.c
@ -441,6 +441,10 @@ t_config_option weechat_options_server[] =
|
||||
N_("name associated to IRC server (for display only)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.name), NULL },
|
||||
{ "server_autoconnect", N_("automatically connect to server"),
|
||||
N_("automatically connect to server when " WEECHAT_NAME " is starting"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &(cfg_server.autoconnect), NULL, NULL },
|
||||
{ "server_address", N_("server address or hostname"),
|
||||
N_("IP address or hostname of IRC server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
@ -506,24 +510,6 @@ get_pos_array_values (char **array, char *string)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_init_server: init server struct
|
||||
*/
|
||||
|
||||
void
|
||||
config_init_server ()
|
||||
{
|
||||
cfg_server.name = NULL;
|
||||
cfg_server.address = NULL;
|
||||
cfg_server.port = -1;
|
||||
cfg_server.password = NULL;
|
||||
cfg_server.nick1 = NULL;
|
||||
cfg_server.nick2 = NULL;
|
||||
cfg_server.nick3 = NULL;
|
||||
cfg_server.username = NULL;
|
||||
cfg_server.realname = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_allocate_server: allocate a new server
|
||||
*/
|
||||
@ -556,9 +542,9 @@ config_allocate_server (char *filename, int line_number)
|
||||
return 0;
|
||||
}
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.address, cfg_server.port, cfg_server.password,
|
||||
cfg_server.nick1, cfg_server.nick2, cfg_server.nick3,
|
||||
cfg_server.username, cfg_server.realname))
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname))
|
||||
{
|
||||
server_free_all ();
|
||||
gui_printf (NULL,
|
||||
@ -566,26 +552,9 @@ config_allocate_server (char *filename, int line_number)
|
||||
WEECHAT_WARNING, filename, line_number);
|
||||
return 0;
|
||||
}
|
||||
if (cfg_server.name)
|
||||
free (cfg_server.name);
|
||||
if (cfg_server.address)
|
||||
free (cfg_server.address);
|
||||
if (cfg_server.password)
|
||||
free (cfg_server.password);
|
||||
if (cfg_server.nick1)
|
||||
free (cfg_server.nick1);
|
||||
if (cfg_server.nick2)
|
||||
free (cfg_server.nick2);
|
||||
if (cfg_server.nick3)
|
||||
free (cfg_server.nick3);
|
||||
if (cfg_server.username)
|
||||
free (cfg_server.username);
|
||||
if (cfg_server.realname)
|
||||
free (cfg_server.realname);
|
||||
if (cfg_server.nick)
|
||||
free (cfg_server.nick);
|
||||
|
||||
config_init_server ();
|
||||
server_destroy (&cfg_server);
|
||||
server_init (&cfg_server);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -670,7 +639,7 @@ config_read ()
|
||||
}
|
||||
|
||||
config_default_values ();
|
||||
config_init_server ();
|
||||
server_init (&cfg_server);
|
||||
|
||||
/* read config file */
|
||||
section = CONFIG_SECTION_NONE;
|
||||
@ -996,6 +965,7 @@ config_create_default ()
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
fputs ("server_name=freenode\n", file);
|
||||
fputs ("server_autoconnect=on\n", file);
|
||||
fputs ("server_address=irc.freenode.net\n", file);
|
||||
fputs ("server_port=6667\n", file);
|
||||
fputs ("server_password=\n", file);
|
||||
|
@ -49,6 +49,34 @@ t_irc_message *recv_msgq, *msgq_last_msg;
|
||||
char *unterminated_message = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* server_init: init server struct with default values
|
||||
*/
|
||||
|
||||
void
|
||||
server_init (t_irc_server *server)
|
||||
{
|
||||
server->name = NULL;
|
||||
server->autoconnect = 0;
|
||||
server->address = NULL;
|
||||
server->port = -1;
|
||||
server->password = NULL;
|
||||
server->nick1 = NULL;
|
||||
server->nick2 = NULL;
|
||||
server->nick3 = NULL;
|
||||
server->username = NULL;
|
||||
server->realname = NULL;
|
||||
server->nick = NULL;
|
||||
server->is_connected = 0;
|
||||
server->sock4 = -1;
|
||||
server->is_away = 0;
|
||||
server->server_read = -1;
|
||||
server->server_write = -1;
|
||||
server->window = NULL;
|
||||
server->channels = NULL;
|
||||
server->last_channel = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_alloc: allocate a new server and add it to the servers queue
|
||||
*/
|
||||
@ -70,23 +98,7 @@ server_alloc ()
|
||||
}
|
||||
|
||||
/* initialize new server */
|
||||
new_server->name = NULL;
|
||||
new_server->address = NULL;
|
||||
new_server->password = NULL;
|
||||
new_server->nick1 = NULL;
|
||||
new_server->nick2 = NULL;
|
||||
new_server->nick3 = NULL;
|
||||
new_server->username = NULL;
|
||||
new_server->realname = NULL;
|
||||
new_server->nick = NULL;
|
||||
new_server->is_connected = 0;
|
||||
new_server->sock4 = -1;
|
||||
new_server->is_away = 0;
|
||||
new_server->server_read = -1;
|
||||
new_server->server_write = -1;
|
||||
new_server->window = NULL;
|
||||
new_server->channels = NULL;
|
||||
new_server->last_channel = NULL;
|
||||
server_init (new_server);
|
||||
|
||||
/* add new server to queue */
|
||||
new_server->prev_server = last_irc_server;
|
||||
@ -118,26 +130,12 @@ server_create_window (t_irc_server *server)
|
||||
}
|
||||
|
||||
/*
|
||||
* server_free: free a server and remove it from servers queue
|
||||
* server_destroy: free server data (not struct himself)
|
||||
*/
|
||||
|
||||
void
|
||||
server_free (t_irc_server *server)
|
||||
server_destroy (t_irc_server *server)
|
||||
{
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
new_irc_servers = irc_servers;
|
||||
}
|
||||
else
|
||||
new_irc_servers = server->next_server;
|
||||
|
||||
if (server->next_server)
|
||||
(server->next_server)->prev_server = server->prev_server;
|
||||
|
||||
/* free data */
|
||||
if (server->name)
|
||||
free (server->name);
|
||||
@ -159,8 +157,30 @@ server_free (t_irc_server *server)
|
||||
free (server->nick);
|
||||
if (server->channels)
|
||||
channel_free_all (server);
|
||||
/* TODO: free weechat window (???) */
|
||||
/* (...) */
|
||||
}
|
||||
|
||||
/*
|
||||
* server_free: free a server and remove it from servers queue
|
||||
*/
|
||||
|
||||
void
|
||||
server_free (t_irc_server *server)
|
||||
{
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
new_irc_servers = irc_servers;
|
||||
}
|
||||
else
|
||||
new_irc_servers = server->next_server;
|
||||
|
||||
if (server->next_server)
|
||||
(server->next_server)->prev_server = server->prev_server;
|
||||
|
||||
server_destroy (server);
|
||||
free (server);
|
||||
irc_servers = new_irc_servers;
|
||||
}
|
||||
@ -182,8 +202,8 @@ server_free_all ()
|
||||
*/
|
||||
|
||||
t_irc_server *
|
||||
server_new (char *name, char *address, int port, char *password,
|
||||
char *nick1, char *nick2, char *nick3,
|
||||
server_new (char *name, int autoconnect, char *address, int port,
|
||||
char *password, char *nick1, char *nick2, char *nick3,
|
||||
char *username, char *realname)
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
@ -202,6 +222,7 @@ server_new (char *name, char *address, int port, char *password,
|
||||
if ((new_server = server_alloc ()))
|
||||
{
|
||||
new_server->name = strdup (name);
|
||||
new_server->autoconnect = autoconnect;
|
||||
new_server->address = strdup (address);
|
||||
new_server->port = port;
|
||||
new_server->password = (password) ? strdup (password) : strdup ("");
|
||||
|
@ -78,6 +78,7 @@ struct t_irc_server
|
||||
{
|
||||
/* user choices */
|
||||
char *name; /* name of server (only for display) */
|
||||
int autoconnect; /* = 1 if auto connect at startup */
|
||||
char *address; /* address of server (IP or name) */
|
||||
int port; /* port for server (6667 by default) */
|
||||
char *password; /* password for server */
|
||||
@ -137,12 +138,14 @@ extern t_irc_channel *current_channel;
|
||||
|
||||
/* server functions (irc-server.c) */
|
||||
|
||||
extern void server_init (t_irc_server *);
|
||||
extern t_irc_server *server_alloc ();
|
||||
extern void server_create_window (t_irc_server *);
|
||||
extern void server_destroy (t_irc_server *);
|
||||
extern void server_free (t_irc_server *);
|
||||
extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, char *, int, char *, char *, char *,
|
||||
char *, char *, char *);
|
||||
extern t_irc_server *server_new (char *, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
|
@ -292,13 +292,16 @@ main (int argc, char *argv[])
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
|
||||
/* connect to all servers */
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
server_create_window (ptr_server);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
server_create_window (ptr_server);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
gui_main_loop ();
|
||||
server_disconnect_all ();
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define N_(string) (string)
|
||||
|
||||
#define WEECHAT_NAME "WeeChat"
|
||||
#define WEECHAT_VERSION "0.0.2-pre1"
|
||||
#define WEECHAT_VERSION "0.0.2-pre2"
|
||||
|
||||
#define WEECHAT_NAME_AND_VERSION WEECHAT_NAME " " WEECHAT_VERSION
|
||||
#define WEECHAT_COPYRIGHT WEECHAT_NAME " (c) 2003 by Wee Team"
|
||||
|
@ -28,8 +28,8 @@
|
||||
|
||||
#include "weechat.h"
|
||||
#include "command.h"
|
||||
#include "irc/irc.h"
|
||||
#include "config.h"
|
||||
#include "irc/irc.h"
|
||||
#include "gui/gui.h"
|
||||
|
||||
|
||||
@ -48,6 +48,21 @@ t_weechat_command weechat_commands[] =
|
||||
{ "help", N_("display help about commands"),
|
||||
N_("[command]"), N_("command: name of a " WEECHAT_NAME " or IRC command"),
|
||||
0, 1, weechat_cmd_help, NULL },
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[[add] servername [-auto | -noauto] hostname [-port port] [-pwd password] [-nicks nick1 "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname]] | "
|
||||
"[del servername]"),
|
||||
N_("servername: server name, for internal & display use\n"
|
||||
"hostname: name or IP address of server\n"
|
||||
"port: port for server (integer)\n"
|
||||
"password: password for server\n"
|
||||
"nick1: first nick for server\n"
|
||||
"nick2: alternate nick for server\n"
|
||||
"nick3: second alternate nick for server\n"
|
||||
"username: user name\n"
|
||||
"realname: real name of user\n"),
|
||||
0, MAX_ARGS, weechat_cmd_server, NULL },
|
||||
{ "set", N_("set config parameters"),
|
||||
N_("[option [value]]"), N_("option: name of an option\nvalue: value for option"),
|
||||
0, 2, weechat_cmd_set, NULL },
|
||||
@ -578,6 +593,219 @@ weechat_cmd_help (int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_server: list, add or remove server(s)
|
||||
*/
|
||||
|
||||
int
|
||||
weechat_cmd_server (int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
t_irc_server server, *ptr_server, *server_found;
|
||||
|
||||
if ((argc == 0) || ((argc == 1) && (strcasecmp (argv[0], "list") == 0)))
|
||||
{
|
||||
/* list all servers */
|
||||
if (irc_servers)
|
||||
{
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_("Server: "));
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s", ptr_server->name);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" [");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s",
|
||||
(ptr_server->is_connected) ?
|
||||
_("connected") : _("not connected"));
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
"]\n");
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
" Autoconnect: %s\n",
|
||||
(ptr_server->autoconnect) ? _("yes") : _("no"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
" Hostname : %s\n",
|
||||
ptr_server->address);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Port : %d\n"),
|
||||
ptr_server->port);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->password && ptr_server->password[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Password : (hidden)\n"));
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Password : (none)\n"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Nicks : %s"),
|
||||
ptr_server->nick1);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" / ");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s", ptr_server->nick2);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT_DARK,
|
||||
" / ");
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
"%s\n", ptr_server->nick3);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Username : %s\n"),
|
||||
ptr_server->username);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Realname : %s\n"),
|
||||
ptr_server->realname);
|
||||
}
|
||||
}
|
||||
else
|
||||
gui_printf (NULL, _("No server.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcasecmp (argv[0], "del") == 0)
|
||||
{
|
||||
if (argc == 1)
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing servername for \"/server del\" command\n"),
|
||||
WEECHAT_ERROR);
|
||||
return -1;
|
||||
}
|
||||
if (argc > 2)
|
||||
gui_printf (NULL,
|
||||
_("%s too much arguments for \"/server del\" command, ignoring arguments\n"),
|
||||
WEECHAT_WARNING);
|
||||
|
||||
/* look for server by name */
|
||||
server_found = NULL;
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (strcmp (ptr_server->name, argv[1]) == 0)
|
||||
{
|
||||
server_found = ptr_server;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!server_found)
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s server \"%s\" not found for \"/server del\" command\n"),
|
||||
WEECHAT_ERROR, argv[1]);
|
||||
return -1;
|
||||
}
|
||||
server_free (server_found);
|
||||
gui_redraw_window (gui_current_window);
|
||||
}
|
||||
|
||||
/* init server struct */
|
||||
server_init (&server);
|
||||
|
||||
/* parse arguments */
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (argv[i][0] == '-')
|
||||
{
|
||||
if (strcasecmp (argv[0], "-auto") == 0)
|
||||
server.autoconnect = 1;
|
||||
if (strcasecmp (argv[0], "-noauto") == 0)
|
||||
server.autoconnect = 0;
|
||||
if (strcasecmp (argv[0], "-port") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing port for \"-port\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.port = atoi (argv[i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-pwd") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-pwd\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.password = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-nicks") == 0)
|
||||
{
|
||||
if (i >= (argc - 3))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing nick(s) for \"-nicks\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.nick1 = strdup (argv[++i]);
|
||||
server.nick2 = strdup (argv[++i]);
|
||||
server.nick3 = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-username") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-username\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.username = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-realname") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-realname\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.realname = strdup (argv[++i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_cmd_set: set options
|
||||
*/
|
||||
|
@ -57,6 +57,7 @@ extern void user_command (t_irc_server *, char *);
|
||||
extern int weechat_cmd_alias(int, char **);
|
||||
extern int weechat_cmd_clear(int, char **);
|
||||
extern int weechat_cmd_help (int, char **);
|
||||
extern int weechat_cmd_server (int, char **);
|
||||
extern int weechat_cmd_set (int, char **);
|
||||
extern int weechat_cmd_unalias (int, char **);
|
||||
|
||||
|
@ -441,6 +441,10 @@ t_config_option weechat_options_server[] =
|
||||
N_("name associated to IRC server (for display only)"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.name), NULL },
|
||||
{ "server_autoconnect", N_("automatically connect to server"),
|
||||
N_("automatically connect to server when " WEECHAT_NAME " is starting"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
NULL, NULL, &(cfg_server.autoconnect), NULL, NULL },
|
||||
{ "server_address", N_("server address or hostname"),
|
||||
N_("IP address or hostname of IRC server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
@ -506,24 +510,6 @@ get_pos_array_values (char **array, char *string)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_init_server: init server struct
|
||||
*/
|
||||
|
||||
void
|
||||
config_init_server ()
|
||||
{
|
||||
cfg_server.name = NULL;
|
||||
cfg_server.address = NULL;
|
||||
cfg_server.port = -1;
|
||||
cfg_server.password = NULL;
|
||||
cfg_server.nick1 = NULL;
|
||||
cfg_server.nick2 = NULL;
|
||||
cfg_server.nick3 = NULL;
|
||||
cfg_server.username = NULL;
|
||||
cfg_server.realname = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* config_allocate_server: allocate a new server
|
||||
*/
|
||||
@ -556,9 +542,9 @@ config_allocate_server (char *filename, int line_number)
|
||||
return 0;
|
||||
}
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.address, cfg_server.port, cfg_server.password,
|
||||
cfg_server.nick1, cfg_server.nick2, cfg_server.nick3,
|
||||
cfg_server.username, cfg_server.realname))
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname))
|
||||
{
|
||||
server_free_all ();
|
||||
gui_printf (NULL,
|
||||
@ -566,26 +552,9 @@ config_allocate_server (char *filename, int line_number)
|
||||
WEECHAT_WARNING, filename, line_number);
|
||||
return 0;
|
||||
}
|
||||
if (cfg_server.name)
|
||||
free (cfg_server.name);
|
||||
if (cfg_server.address)
|
||||
free (cfg_server.address);
|
||||
if (cfg_server.password)
|
||||
free (cfg_server.password);
|
||||
if (cfg_server.nick1)
|
||||
free (cfg_server.nick1);
|
||||
if (cfg_server.nick2)
|
||||
free (cfg_server.nick2);
|
||||
if (cfg_server.nick3)
|
||||
free (cfg_server.nick3);
|
||||
if (cfg_server.username)
|
||||
free (cfg_server.username);
|
||||
if (cfg_server.realname)
|
||||
free (cfg_server.realname);
|
||||
if (cfg_server.nick)
|
||||
free (cfg_server.nick);
|
||||
|
||||
config_init_server ();
|
||||
server_destroy (&cfg_server);
|
||||
server_init (&cfg_server);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -670,7 +639,7 @@ config_read ()
|
||||
}
|
||||
|
||||
config_default_values ();
|
||||
config_init_server ();
|
||||
server_init (&cfg_server);
|
||||
|
||||
/* read config file */
|
||||
section = CONFIG_SECTION_NONE;
|
||||
@ -996,6 +965,7 @@ config_create_default ()
|
||||
/* default server is freenode */
|
||||
fputs ("\n[server]\n", file);
|
||||
fputs ("server_name=freenode\n", file);
|
||||
fputs ("server_autoconnect=on\n", file);
|
||||
fputs ("server_address=irc.freenode.net\n", file);
|
||||
fputs ("server_port=6667\n", file);
|
||||
fputs ("server_password=\n", file);
|
||||
|
@ -49,6 +49,34 @@ t_irc_message *recv_msgq, *msgq_last_msg;
|
||||
char *unterminated_message = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* server_init: init server struct with default values
|
||||
*/
|
||||
|
||||
void
|
||||
server_init (t_irc_server *server)
|
||||
{
|
||||
server->name = NULL;
|
||||
server->autoconnect = 0;
|
||||
server->address = NULL;
|
||||
server->port = -1;
|
||||
server->password = NULL;
|
||||
server->nick1 = NULL;
|
||||
server->nick2 = NULL;
|
||||
server->nick3 = NULL;
|
||||
server->username = NULL;
|
||||
server->realname = NULL;
|
||||
server->nick = NULL;
|
||||
server->is_connected = 0;
|
||||
server->sock4 = -1;
|
||||
server->is_away = 0;
|
||||
server->server_read = -1;
|
||||
server->server_write = -1;
|
||||
server->window = NULL;
|
||||
server->channels = NULL;
|
||||
server->last_channel = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_alloc: allocate a new server and add it to the servers queue
|
||||
*/
|
||||
@ -70,23 +98,7 @@ server_alloc ()
|
||||
}
|
||||
|
||||
/* initialize new server */
|
||||
new_server->name = NULL;
|
||||
new_server->address = NULL;
|
||||
new_server->password = NULL;
|
||||
new_server->nick1 = NULL;
|
||||
new_server->nick2 = NULL;
|
||||
new_server->nick3 = NULL;
|
||||
new_server->username = NULL;
|
||||
new_server->realname = NULL;
|
||||
new_server->nick = NULL;
|
||||
new_server->is_connected = 0;
|
||||
new_server->sock4 = -1;
|
||||
new_server->is_away = 0;
|
||||
new_server->server_read = -1;
|
||||
new_server->server_write = -1;
|
||||
new_server->window = NULL;
|
||||
new_server->channels = NULL;
|
||||
new_server->last_channel = NULL;
|
||||
server_init (new_server);
|
||||
|
||||
/* add new server to queue */
|
||||
new_server->prev_server = last_irc_server;
|
||||
@ -118,26 +130,12 @@ server_create_window (t_irc_server *server)
|
||||
}
|
||||
|
||||
/*
|
||||
* server_free: free a server and remove it from servers queue
|
||||
* server_destroy: free server data (not struct himself)
|
||||
*/
|
||||
|
||||
void
|
||||
server_free (t_irc_server *server)
|
||||
server_destroy (t_irc_server *server)
|
||||
{
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
new_irc_servers = irc_servers;
|
||||
}
|
||||
else
|
||||
new_irc_servers = server->next_server;
|
||||
|
||||
if (server->next_server)
|
||||
(server->next_server)->prev_server = server->prev_server;
|
||||
|
||||
/* free data */
|
||||
if (server->name)
|
||||
free (server->name);
|
||||
@ -159,8 +157,30 @@ server_free (t_irc_server *server)
|
||||
free (server->nick);
|
||||
if (server->channels)
|
||||
channel_free_all (server);
|
||||
/* TODO: free weechat window (???) */
|
||||
/* (...) */
|
||||
}
|
||||
|
||||
/*
|
||||
* server_free: free a server and remove it from servers queue
|
||||
*/
|
||||
|
||||
void
|
||||
server_free (t_irc_server *server)
|
||||
{
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
new_irc_servers = irc_servers;
|
||||
}
|
||||
else
|
||||
new_irc_servers = server->next_server;
|
||||
|
||||
if (server->next_server)
|
||||
(server->next_server)->prev_server = server->prev_server;
|
||||
|
||||
server_destroy (server);
|
||||
free (server);
|
||||
irc_servers = new_irc_servers;
|
||||
}
|
||||
@ -182,8 +202,8 @@ server_free_all ()
|
||||
*/
|
||||
|
||||
t_irc_server *
|
||||
server_new (char *name, char *address, int port, char *password,
|
||||
char *nick1, char *nick2, char *nick3,
|
||||
server_new (char *name, int autoconnect, char *address, int port,
|
||||
char *password, char *nick1, char *nick2, char *nick3,
|
||||
char *username, char *realname)
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
@ -202,6 +222,7 @@ server_new (char *name, char *address, int port, char *password,
|
||||
if ((new_server = server_alloc ()))
|
||||
{
|
||||
new_server->name = strdup (name);
|
||||
new_server->autoconnect = autoconnect;
|
||||
new_server->address = strdup (address);
|
||||
new_server->port = port;
|
||||
new_server->password = (password) ? strdup (password) : strdup ("");
|
||||
|
@ -78,6 +78,7 @@ struct t_irc_server
|
||||
{
|
||||
/* user choices */
|
||||
char *name; /* name of server (only for display) */
|
||||
int autoconnect; /* = 1 if auto connect at startup */
|
||||
char *address; /* address of server (IP or name) */
|
||||
int port; /* port for server (6667 by default) */
|
||||
char *password; /* password for server */
|
||||
@ -137,12 +138,14 @@ extern t_irc_channel *current_channel;
|
||||
|
||||
/* server functions (irc-server.c) */
|
||||
|
||||
extern void server_init (t_irc_server *);
|
||||
extern t_irc_server *server_alloc ();
|
||||
extern void server_create_window (t_irc_server *);
|
||||
extern void server_destroy (t_irc_server *);
|
||||
extern void server_free (t_irc_server *);
|
||||
extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, char *, int, char *, char *, char *,
|
||||
char *, char *, char *);
|
||||
extern t_irc_server *server_new (char *, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
|
@ -292,13 +292,16 @@ main (int argc, char *argv[])
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_PREFIX1,
|
||||
"-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
|
||||
|
||||
/* connect to all servers */
|
||||
/* connect to all servers (with autoconnect flag) */
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
server_create_window (ptr_server);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
if (ptr_server->autoconnect)
|
||||
{
|
||||
server_create_window (ptr_server);
|
||||
if (server_connect (ptr_server))
|
||||
irc_login (ptr_server);
|
||||
}
|
||||
}
|
||||
gui_main_loop ();
|
||||
server_disconnect_all ();
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define N_(string) (string)
|
||||
|
||||
#define WEECHAT_NAME "WeeChat"
|
||||
#define WEECHAT_VERSION "0.0.2-pre1"
|
||||
#define WEECHAT_VERSION "0.0.2-pre2"
|
||||
|
||||
#define WEECHAT_NAME_AND_VERSION WEECHAT_NAME " " WEECHAT_VERSION
|
||||
#define WEECHAT_COPYRIGHT WEECHAT_NAME " (c) 2003 by Wee Team"
|
||||
|
Loading…
x
Reference in New Issue
Block a user