assert( Data != NULL );
assert( Len > 0 );
- c = Conn_GetClient(Idx);
- assert( c != NULL);
-
- /* Servers do get special write buffer limits, so they can generate
- * all the messages that are required while peering. */
- if (Client_Type(c) == CLIENT_SERVER)
- writebuf_limit = WRITEBUFFER_SLINK_LEN;
-
/* Is the socket still open? A previous call to Conn_Write()
* may have closed the connection due to a fatal error.
* In this case it is sufficient to return an error, as well. */
- if( My_Connections[Idx].sock <= NONE ) {
+ if (My_Connections[Idx].sock <= NONE) {
LogDebug("Skipped write on closed socket (connection %d).", Idx);
return false;
}
+ /* Make sure that there still exists a CLIENT structure associated
+ * with this connection and check if this is a server or not: */
+ c = Conn_GetClient(Idx);
+ if (c) {
+ /* Servers do get special write buffer limits, so they can
+ * generate all the messages that are required while peering. */
+ if (Client_Type(c) == CLIENT_SERVER)
+ writebuf_limit = WRITEBUFFER_SLINK_LEN;
+ } else
+ LogDebug("Write on socket without client (connection %d)!?", Idx);
+
#ifdef ZLIB
if ( Conn_OPTION_ISSET( &My_Connections[Idx], CONN_ZIP )) {
/* Compressed link:
} /* SyncServerStruct */
+/**
+ * Get IP address string of a connection.
+ *
+ * @param Idx Connection index.
+ * @return Pointer to a global buffer containing the IP address as string.
+ */
+GLOBAL const char *
+Conn_GetIPAInfo(CONN_ID Idx)
+{
+ assert(Idx > NONE);
+ return ng_ipaddr_tostr(&My_Connections[Idx].addr);
+}
+
+
/**
* Send out data of write buffer; connect new sockets.
*
time(NULL) - Conf_PingTimeout) {
/* We need to send a PING ... */
LogDebug("Connection %d: sending PING ...", i);
- My_Connections[i].lastping = time(NULL);
+ Conn_UpdatePing(i);
Conn_WriteStr(i, "PING :%s",
Client_ID(Client_ThisServer()));
}
"NOTICE AUTH :*** No ident response");
}
#endif
+ Class_HandleServerBans(c);
}
#ifdef DEBUG
else Log( LOG_DEBUG, "Resolver: discarding result for already registered connection %d.", i );