mirror of
https://github.com/osmarks/ngircd.git
synced 2024-10-28 04:46:17 +00:00
- Modul an neues Connection-Handling angepasst.
This commit is contained in:
parent
0d32a3b4fe
commit
601f0ede61
@ -9,7 +9,7 @@
|
|||||||
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
* Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
|
||||||
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
* der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
|
||||||
*
|
*
|
||||||
* $Id: irc-write.c,v 1.9 2002/10/04 11:21:46 alex Exp $
|
* $Id: irc-write.c,v 1.10 2002/11/02 22:59:41 alex Exp $
|
||||||
*
|
*
|
||||||
* irc-write.c: IRC-Texte und Befehle ueber Netzwerk versenden
|
* irc-write.c: IRC-Texte und Befehle ueber Netzwerk versenden
|
||||||
*/
|
*/
|
||||||
@ -146,11 +146,11 @@ CHAR *Format;
|
|||||||
va_dcl
|
va_dcl
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
BOOLEAN sock[MAX_CONNECTIONS], is_server[MAX_CONNECTIONS], ok = CONNECTED;
|
BOOLEAN ok = CONNECTED;
|
||||||
CHAR buffer[1000];
|
CHAR buffer[1000];
|
||||||
CL2CHAN *cl2chan;
|
CL2CHAN *cl2chan;
|
||||||
|
CONN_ID conn;
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT s, i;
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
@ -166,7 +166,7 @@ va_dcl
|
|||||||
vsnprintf( buffer, 1000, Format, ap );
|
vsnprintf( buffer, 1000, Format, ap );
|
||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
for( i = 0; i < MAX_CONNECTIONS; i++ ) sock[i] = FALSE;
|
Conn_ClearFlags( );
|
||||||
|
|
||||||
/* An alle Clients, die in den selben Channels sind.
|
/* An alle Clients, die in den selben Channels sind.
|
||||||
* Dabei aber nur einmal je Remote-Server */
|
* Dabei aber nur einmal je Remote-Server */
|
||||||
@ -184,26 +184,29 @@ va_dcl
|
|||||||
if( c && ( c != Client ))
|
if( c && ( c != Client ))
|
||||||
{
|
{
|
||||||
/* Ok, anderer Client */
|
/* Ok, anderer Client */
|
||||||
s = Client_Conn( c );
|
conn = Client_Conn( c );
|
||||||
assert( s >= 0 );
|
Conn_SetFlag( conn );
|
||||||
assert( s < MAX_CONNECTIONS );
|
|
||||||
sock[s] = TRUE;
|
|
||||||
if( Client_Type( c ) == CLIENT_SERVER ) is_server[s] = TRUE;
|
|
||||||
else is_server[s] = FALSE;
|
|
||||||
}
|
}
|
||||||
cl2chan = Channel_NextMember( Chan, cl2chan );
|
cl2chan = Channel_NextMember( Chan, cl2chan );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Senden ... */
|
/* Senden ... */
|
||||||
for( i = 0; i < MAX_CONNECTIONS; i++ )
|
conn = Conn_First( );
|
||||||
|
while( conn != NONE )
|
||||||
{
|
{
|
||||||
if( sock[i] )
|
if( Conn_Flag( conn ))
|
||||||
{
|
{
|
||||||
if( is_server[i] ) ok = Conn_WriteStr( i, ":%s %s", Client_ID( Prefix ), buffer );
|
if( Client_Type( Client_GetFromConn( conn )) == CLIENT_SERVER )
|
||||||
else ok = Conn_WriteStr( i, ":%s %s", Client_Mask( Prefix ), buffer );
|
{
|
||||||
|
/* Ziel-Client ist ein anderer Server */
|
||||||
|
ok = Conn_WriteStr( conn, ":%s %s", Client_ID( Prefix ), buffer );
|
||||||
|
}
|
||||||
|
else ok = Conn_WriteStr( conn, ":%s %s", Client_Mask( Prefix ), buffer );
|
||||||
if( ! ok ) break;
|
if( ! ok ) break;
|
||||||
}
|
}
|
||||||
|
conn = Conn_Next( conn );
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
} /* IRC_WriteStrChannelPrefix */
|
} /* IRC_WriteStrChannelPrefix */
|
||||||
|
|
||||||
@ -321,13 +324,13 @@ CHAR *Format;
|
|||||||
va_dcl
|
va_dcl
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
BOOLEAN sock[MAX_CONNECTIONS], is_server[MAX_CONNECTIONS], ok = CONNECTED;
|
BOOLEAN ok = CONNECTED;
|
||||||
CL2CHAN *chan_cl2chan, *cl2chan;
|
CL2CHAN *chan_cl2chan, *cl2chan;
|
||||||
CHAR buffer[1000];
|
CHAR buffer[1000];
|
||||||
CHANNEL *chan;
|
CHANNEL *chan;
|
||||||
|
CONN_ID conn;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
CLIENT *c;
|
CLIENT *c;
|
||||||
INT i, s;
|
|
||||||
|
|
||||||
assert( Client != NULL );
|
assert( Client != NULL );
|
||||||
assert( Prefix != NULL );
|
assert( Prefix != NULL );
|
||||||
@ -342,7 +345,7 @@ va_dcl
|
|||||||
va_end( ap );
|
va_end( ap );
|
||||||
|
|
||||||
/* initialisieren */
|
/* initialisieren */
|
||||||
for( i = 0; i < MAX_CONNECTIONS; i++ ) sock[i] = FALSE;
|
Conn_ClearFlags( );
|
||||||
|
|
||||||
/* An alle Clients, die in einem Channel mit dem "Ausloeser" sind,
|
/* An alle Clients, die in einem Channel mit dem "Ausloeser" sind,
|
||||||
* den Text schicken. An Remote-Server aber jeweils nur einmal. */
|
* den Text schicken. An Remote-Server aber jeweils nur einmal. */
|
||||||
@ -365,12 +368,8 @@ va_dcl
|
|||||||
if( c && ( c != Client ))
|
if( c && ( c != Client ))
|
||||||
{
|
{
|
||||||
/* Ok, anderer Client */
|
/* Ok, anderer Client */
|
||||||
s = Client_Conn( c );
|
conn = Client_Conn( c );
|
||||||
assert( s >= 0 );
|
Conn_Flag( conn );
|
||||||
assert( s < MAX_CONNECTIONS );
|
|
||||||
sock[s] = TRUE;
|
|
||||||
if( Client_Type( c ) == CLIENT_SERVER ) is_server[s] = TRUE;
|
|
||||||
else is_server[s] = FALSE;
|
|
||||||
}
|
}
|
||||||
cl2chan = Channel_NextMember( chan, cl2chan );
|
cl2chan = Channel_NextMember( chan, cl2chan );
|
||||||
}
|
}
|
||||||
@ -380,14 +379,20 @@ va_dcl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Senden ... */
|
/* Senden ... */
|
||||||
for( i = 0; i < MAX_CONNECTIONS; i++ )
|
conn = Conn_First( );
|
||||||
|
while( conn != NONE )
|
||||||
{
|
{
|
||||||
if( sock[i] )
|
if( Conn_Flag( conn ))
|
||||||
{
|
{
|
||||||
if( is_server[i] ) ok = Conn_WriteStr( i, ":%s %s", Client_ID( Prefix ), buffer );
|
if( Client_Type( Client_GetFromConn( conn )) == CLIENT_SERVER )
|
||||||
else ok = Conn_WriteStr( i, ":%s %s", Client_Mask( Prefix ), buffer );
|
{
|
||||||
|
/* Ziel ist ein anderer Server */
|
||||||
|
ok = Conn_WriteStr( conn, ":%s %s", Client_ID( Prefix ), buffer );
|
||||||
|
}
|
||||||
|
else ok = Conn_WriteStr( conn, ":%s %s", Client_Mask( Prefix ), buffer );
|
||||||
if( ! ok ) break;
|
if( ! ok ) break;
|
||||||
}
|
}
|
||||||
|
conn = Conn_Next( conn );
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
} /* IRC_WriteStrRelatedPrefix */
|
} /* IRC_WriteStrRelatedPrefix */
|
||||||
|
Loading…
Reference in New Issue
Block a user