Added /server command

v2.8-utf8proc
Sebastien Helleu 2003-09-28 11:17:16 +00:00
parent a353a6d228
commit a5ae266ee4
14 changed files with 624 additions and 172 deletions

View File

@ -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
*/

View File

@ -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 **);

View File

@ -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);

View 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 ("");

View File

@ -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 *);

View File

@ -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 ();

View File

@ -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"

View File

@ -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
*/

View File

@ -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 **);

View File

@ -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);

View 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 ("");

View File

@ -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 *);

View File

@ -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 ();

View File

@ -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"