mirror of
https://github.com/irssi/irssi.git
synced 2024-12-04 14:46:39 -05:00
/connect ircnet doesn't fail anymore if there's no ircnet servers in
server list but just tries to connect to server in address "ircnet".. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@581 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
2ae366c997
commit
4145834a4f
@ -93,8 +93,8 @@ void server_setup_fill_conn(IRC_SERVER_CONNECT_REC *conn, SETUP_SERVER_REC *sser
|
|||||||
|
|
||||||
/* Create server connection record. `address' is required, rest can be NULL */
|
/* Create server connection record. `address' is required, rest can be NULL */
|
||||||
static IRC_SERVER_CONNECT_REC *
|
static IRC_SERVER_CONNECT_REC *
|
||||||
create_addr_conn(const char *address, int port, const char *password,
|
create_addr_conn(const char *address, int port, const
|
||||||
const char *nick)
|
char *password, const char *nick)
|
||||||
{
|
{
|
||||||
IRC_SERVER_CONNECT_REC *conn;
|
IRC_SERVER_CONNECT_REC *conn;
|
||||||
SETUP_SERVER_REC *sserver;
|
SETUP_SERVER_REC *sserver;
|
||||||
@ -170,37 +170,57 @@ create_addr_conn(const char *address, int port, const char *password,
|
|||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create server connection record. `dest' is required, rest can be NULL.
|
/* Connect to server where last connect succeeded (or we haven't tried to
|
||||||
`dest' is either a server address or irc network */
|
connect yet). If there's no such server, connect to server where we
|
||||||
IRC_SERVER_CONNECT_REC *
|
haven't connected for the longest time */
|
||||||
irc_server_create_conn(const char *dest, int port, const char *password, const char *nick)
|
static IRC_SERVER_CONNECT_REC *
|
||||||
|
create_ircnet_conn(const char *dest, int port,
|
||||||
|
const char *password, const char *nick)
|
||||||
{
|
{
|
||||||
|
SETUP_SERVER_REC *bestrec;
|
||||||
GSList *tmp;
|
GSList *tmp;
|
||||||
time_t now;
|
time_t now, besttime;
|
||||||
int n;
|
|
||||||
|
|
||||||
g_return_val_if_fail(dest != NULL, NULL);
|
|
||||||
|
|
||||||
/* check if `dest' is IRC network */
|
|
||||||
if (ircnet_find(dest) == NULL)
|
|
||||||
return create_addr_conn(dest, port, password, nick);
|
|
||||||
|
|
||||||
/* first try to find a server that hasn't had any connection failures
|
|
||||||
for the past half an hour. If that isn't found, try any server. */
|
|
||||||
now = time(NULL);
|
now = time(NULL);
|
||||||
for (n = 0; n < 2; n++) {
|
bestrec = NULL; besttime = now;
|
||||||
for (tmp = setupservers; tmp != NULL; tmp = tmp->next) {
|
for (tmp = setupservers; tmp != NULL; tmp = tmp->next) {
|
||||||
SETUP_SERVER_REC *rec = tmp->data;
|
SETUP_SERVER_REC *rec = tmp->data;
|
||||||
|
|
||||||
if (rec->ircnet == NULL || g_strcasecmp(rec->ircnet, dest) != 0)
|
if (rec->ircnet == NULL || g_strcasecmp(rec->ircnet, dest) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (n == 1 || !rec->last_failed || rec->last_connect < now-FAILED_RECONNECT_WAIT)
|
if (!rec->last_failed) {
|
||||||
return create_addr_conn(rec->address, port, password, nick);
|
bestrec = rec;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bestrec == NULL || besttime > rec->last_connect) {
|
||||||
|
bestrec = rec;
|
||||||
|
besttime = rec->last_connect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return bestrec == NULL ? NULL :
|
||||||
|
create_addr_conn(bestrec->address, port, password, nick);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create server connection record. `dest' is required, rest can be NULL.
|
||||||
|
`dest' is either a server address or irc network */
|
||||||
|
IRC_SERVER_CONNECT_REC *
|
||||||
|
irc_server_create_conn(const char *dest, int port,
|
||||||
|
const char *password, const char *nick)
|
||||||
|
{
|
||||||
|
IRC_SERVER_CONNECT_REC *rec;
|
||||||
|
|
||||||
|
g_return_val_if_fail(dest != NULL, NULL);
|
||||||
|
|
||||||
|
if (ircnet_find(dest) != NULL) {
|
||||||
|
rec = create_ircnet_conn(dest, port, password, nick);
|
||||||
|
if (rec != NULL)
|
||||||
|
return rec;
|
||||||
|
}
|
||||||
|
|
||||||
|
return create_addr_conn(dest, port, password, nick);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find matching server from setup. Set port to -1 if you don't care about it */
|
/* Find matching server from setup. Set port to -1 if you don't care about it */
|
||||||
|
Loading…
Reference in New Issue
Block a user