mirror of
https://github.com/EnergyMech/energymech.git
synced 2025-12-17 15:36:50 +00:00
commit
8fb7ecc692
2
VERSIONS
2
VERSIONS
@ -1,5 +1,7 @@
|
|||||||
3.1 -- WORK IN PROGRESS (~May, 2018)
|
3.1 -- WORK IN PROGRESS (~May, 2018)
|
||||||
|
|
||||||
|
* Fixed: If the network interface goes down, the mech will mark all servers as unconnectable,
|
||||||
|
permanently, so even when the network comes back up... Fixed!
|
||||||
* Fixed: Bug with bigsay characters defined with blank lines.
|
* Fixed: Bug with bigsay characters defined with blank lines.
|
||||||
* Changed: Session config is saved to "filename.sessiontemp" and once the save is complete
|
* Changed: Session config is saved to "filename.sessiontemp" and once the save is complete
|
||||||
its moved to "filename.session", just in case something happens that might create a corrupt
|
its moved to "filename.session", just in case something happens that might create a corrupt
|
||||||
|
|||||||
54
src/core.c
54
src/core.c
@ -216,7 +216,7 @@ int write_session(void)
|
|||||||
|
|
||||||
#ifdef DYNCMD
|
#ifdef DYNCMD
|
||||||
/*
|
/*
|
||||||
* because of "chaccess XXX disable" its best to save chaccess last
|
* because of "chaccess ___ disable" its best to save chaccess last
|
||||||
*/
|
*/
|
||||||
for(j=0;mcmd[j].name;j++)
|
for(j=0;mcmd[j].name;j++)
|
||||||
{
|
{
|
||||||
@ -689,7 +689,7 @@ void connect_to_server(void)
|
|||||||
{
|
{
|
||||||
if ((!sptry) || (sp->usenum < sptry->usenum))
|
if ((!sptry) || (sp->usenum < sptry->usenum))
|
||||||
{
|
{
|
||||||
if (sp->err == 0)
|
if (sp->err == 0 || sp->err == SP_ERRCONN)
|
||||||
sptry = sp;
|
sptry = sp;
|
||||||
else
|
else
|
||||||
if (
|
if (
|
||||||
@ -1130,12 +1130,7 @@ void process_server_input(void)
|
|||||||
sp = find_server(current->server);
|
sp = find_server(current->server);
|
||||||
if (!sp)
|
if (!sp)
|
||||||
{
|
{
|
||||||
#ifdef IDWRAP
|
goto breaksock2;
|
||||||
unlink_identfile();
|
|
||||||
#endif /* IDWRAP */
|
|
||||||
close(current->sock);
|
|
||||||
current->sock = -1;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
debug("[PSI] Connecting via WinGate proxy...\n");
|
debug("[PSI] Connecting via WinGate proxy...\n");
|
||||||
@ -1152,6 +1147,7 @@ void process_server_input(void)
|
|||||||
}
|
}
|
||||||
current->connect = CN_WINGATEWAIT;
|
current->connect = CN_WINGATEWAIT;
|
||||||
current->conntry = now;
|
current->conntry = now;
|
||||||
|
current->heartbeat = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif /* WINGATE */
|
#endif /* WINGATE */
|
||||||
@ -1184,16 +1180,12 @@ get_line:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef IDWRAP
|
goto breaksock2;
|
||||||
unlink_identfile();
|
|
||||||
#endif /* IDWRAP */
|
|
||||||
close(current->sock);
|
|
||||||
current->sock = -1;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* WINGATE */
|
#endif /* WINGATE */
|
||||||
current->conntry = now;
|
current->conntry = now;
|
||||||
|
current->heartbeat = 0;
|
||||||
parse_server_input(linebuf);
|
parse_server_input(linebuf);
|
||||||
goto get_line;
|
goto get_line;
|
||||||
}
|
}
|
||||||
@ -1203,9 +1195,39 @@ get_line:
|
|||||||
case EAGAIN:
|
case EAGAIN:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
goto breaksock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* server has been quiet for too long */
|
||||||
|
if (current->conntry + SERVERSILENCETIMEOUT <= now && current->heartbeat == 0)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
debug("[PSI] {%i} server has been quiet for too long (%is)...\n",current->sock,SERVERSILENCETIMEOUT);
|
||||||
|
#endif /* DEBUG */
|
||||||
|
/* push something to the server to test the socket, this should break a zombie socket */
|
||||||
|
to_server("PING :LT%lu\n",current->conntry);
|
||||||
|
current->heartbeat = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* server has been quiet for WAY too long */
|
||||||
|
if (current->conntry + (SERVERSILENCETIMEOUT*2) <= now)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
debug("[PSI] {%i} server has been quiet for WAY too long (%is), forcing reconnect...\n",current->sock,SERVERSILENCETIMEOUT*2);
|
||||||
|
#endif /* DEBUG */
|
||||||
|
errno = 110; /* connection timed out */
|
||||||
|
goto breaksock;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* situation normal */
|
||||||
|
return;
|
||||||
|
|
||||||
|
breaksock:
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
debug("[PSI] {%i} errno = %i; closing server socket\n",current->sock,errno);
|
debug("[PSI] {%i} errno = %i; closing server socket\n",current->sock,errno);
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
breaksock2:
|
||||||
*current->sockdata = 0;
|
*current->sockdata = 0;
|
||||||
#ifdef IDWRAP
|
#ifdef IDWRAP
|
||||||
unlink_identfile();
|
unlink_identfile();
|
||||||
@ -1213,9 +1235,7 @@ get_line:
|
|||||||
close(current->sock);
|
close(current->sock);
|
||||||
current->sock = -1;
|
current->sock = -1;
|
||||||
current->connect = CN_NOSOCK;
|
current->connect = CN_NOSOCK;
|
||||||
break;
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -260,6 +260,8 @@ LS const DEFstruct CNdefs[] =
|
|||||||
{ CN_DISCONNECT, "CN_DISCONNECT" },
|
{ CN_DISCONNECT, "CN_DISCONNECT" },
|
||||||
{ CN_BOTDIE, "CN_BOTDIE" },
|
{ CN_BOTDIE, "CN_BOTDIE" },
|
||||||
{ CN_NEXTSERV, "CN_NEXTSERV" },
|
{ CN_NEXTSERV, "CN_NEXTSERV" },
|
||||||
|
{ CN_WINGATEWAIT, "CN_WINGATEWAIT" },
|
||||||
|
{ CN_SPINNING, "CN_SPINNING" },
|
||||||
{ 0, }};
|
{ 0, }};
|
||||||
|
|
||||||
LS const DEFstruct SPdefs[] =
|
LS const DEFstruct SPdefs[] =
|
||||||
|
|||||||
10
src/main.c
10
src/main.c
@ -665,6 +665,7 @@ doit_jumptonext:
|
|||||||
}
|
}
|
||||||
#endif /* RAWDNS */
|
#endif /* RAWDNS */
|
||||||
}
|
}
|
||||||
|
/* not an else block since previous block might set sock to != -1 */
|
||||||
if (current->sock != -1)
|
if (current->sock != -1)
|
||||||
{
|
{
|
||||||
if (current->ip.s_addr == 0)
|
if (current->ip.s_addr == 0)
|
||||||
@ -785,15 +786,6 @@ restart_dcc:
|
|||||||
|
|
||||||
if (current->connect == CN_ONLINE)
|
if (current->connect == CN_ONLINE)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Its possible to get stuck waiting forever if a FIN packet is lost
|
|
||||||
* unless you do this...
|
|
||||||
*/
|
|
||||||
if ((current->conntry - now) > SERVERSILENCETIMEOUT)
|
|
||||||
{
|
|
||||||
to_server("PING :%lu\n",now);
|
|
||||||
current->conntry += 10; /* send more unless an answer is received in <10 seconds */
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
* Keep server idle-timer low to seem like you are chatting
|
* Keep server idle-timer low to seem like you are chatting
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -884,9 +884,9 @@ void do_seen(COMMAND_ARGS)
|
|||||||
}
|
}
|
||||||
if (h || d)
|
if (h || d)
|
||||||
{
|
{
|
||||||
sprintf(ago,"%s%i hour%s and ",ago,h,EXTRA_CHAR(h));
|
sprintf(ago+strlen(ago),"%i hour%s and ",h,EXTRA_CHAR(h));
|
||||||
}
|
}
|
||||||
sprintf(ago,"%s%i minute%s",ago,m,EXTRA_CHAR(m));
|
sprintf(ago+strlen(ago),"%i minute%s",m,EXTRA_CHAR(m));
|
||||||
|
|
||||||
n = seen->nick;
|
n = seen->nick;
|
||||||
u = seen->userhost;
|
u = seen->userhost;
|
||||||
|
|||||||
@ -579,6 +579,7 @@ typedef struct Mech
|
|||||||
|
|
||||||
time_t conntry; /* when connect try started */
|
time_t conntry; /* when connect try started */
|
||||||
/* re-used for server activity once connected */
|
/* re-used for server activity once connected */
|
||||||
|
int heartbeat; /* handle server timeout stuff */
|
||||||
time_t activity; /* Away timer (AAWAY) */
|
time_t activity; /* Away timer (AAWAY) */
|
||||||
|
|
||||||
time_t ontime; /* how long the bot has been connected */
|
time_t ontime; /* how long the bot has been connected */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user