1 /* 2 * ngIRCd -- The Next Generation IRC Daemon 3 * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * Please read the file COPYING, README and AUTHORS for more information. 10 */ 11 12 #ifndef __conn_h__ 13 #define __conn_h__ 14 15 /** 16 * @file 17 * Connection management (header) 18 */ 19 20 #include <time.h> /* for time_t, see below */ 21 22 /* 23 * connection state flags. this is a bitmask -- all values must 24 * be unique and a power of two. 25 * 26 * If you introduce new ones in between, make sure to adjust all 27 * remaining ones. 28 */ 29 #define CONN_ISCLOSING 1 /* Conn_Close() already called */ 30 #define CONN_ISCONNECTING 2 /* connect() in progress */ 31 #define CONN_RFC1459 4 /* RFC 1459 compatibility mode */ 32 #ifdef ZLIB 33 #define CONN_ZIP 8 /* zlib compressed link */ 34 #endif 35 36 #include "conf-ssl.h" 37 38 #ifdef SSL_SUPPORT 39 #define CONN_SSL_CONNECT 16 /* wait for ssl connect to finish */ 40 #define CONN_SSL 32 /* this connection is SSL encrypted */ 41 #define CONN_SSL_WANT_WRITE 64 /* SSL/TLS library needs to write protocol data */ 42 #define CONN_SSL_WANT_READ 128 /* SSL/TLS library needs to read protocol data */ 43 #define CONN_SSL_FLAGS_ALL (CONN_SSL_CONNECT|CONN_SSL|CONN_SSL_WANT_WRITE|CONN_SSL_WANT_READ) 44 #endif 45 typedef int CONN_ID; 46 47 #include "client.h" 48 #include "proc.h" 49 50 #ifdef CONN_MODULE 51 52 #include "defines.h" 53 #include "array.h" 54 #include "tool.h" 55 #include "ng_ipaddr.h" 56 57 #ifdef ICONV 58 # include <iconv.h> 59 #endif 60 61 #ifdef ZLIB 62 #include <zlib.h> 63 typedef struct _ZipData 64 { 65 z_stream in; /* "Handle" for input stream */ 66 z_stream out; /* "Handle" for output stream */ 67 array rbuf; /* Read buffer (compressed) */ 68 array wbuf; /* Write buffer (uncompressed) */ 69 long bytes_in, bytes_out; /* Counter for statistics (uncompressed!) */ 70 } ZIPDATA; 71 #endif /* ZLIB */ 72 73 typedef struct _Connection 74 { 75 int sock; /* Socket handle */ 76 ng_ipaddr_t addr; /* Client address */ 77 PROC_STAT proc_stat; /* Status of resolver process */ 78 char host[HOST_LEN]; /* Hostname */ 79 char *pwd; /* password received of the client */ 80 array rbuf; /* Read buffer */ 81 array wbuf; /* Write buffer */ 82 time_t signon; /* Signon ("connect") time */ 83 time_t lastdata; /* Last activity */ 84 time_t lastping; /* Last PING */ 85 time_t lastprivmsg; /* Last PRIVMSG */ 86 time_t delaytime; /* Ignore link ("penalty") */ 87 long bytes_in, bytes_out; /* Received and sent bytes */ 88 long msg_in, msg_out; /* Received and sent IRC messages */ 89 int flag; /* Flag (see "irc-write" module) */ 90 UINT16 options; /* Link options / connection state */ 91 UINT16 bps; /* bytes processed within last second */ 92 CLIENT *client; /* pointer to client structure */ 93 #ifdef ZLIB 94 ZIPDATA zip; /* Compression information */ 95 #endif /* ZLIB */ 96 #ifdef SSL_SUPPORT 97 struct ConnSSL_State ssl_state; /* SSL/GNUTLS state information */ 98 #endif 99 #ifndef STRICT_RFC 100 long auth_ping; /** PING response expected on login */ 101 #endif 102 #ifdef ICONV 103 iconv_t iconv_from; /** iconv: convert from client to server */ 104 iconv_t iconv_to; /** iconv: convert from server to client */ 105 #endif 106 } CONNECTION; 107 108 109 #ifdef CONN_MODULE_GLOBAL_INIT 110 CONNECTION *My_Connections; 111 CONN_ID Pool_Size; 112 long WCounter; 113 #else 114 extern CONNECTION *My_Connections; 115 extern CONN_ID Pool_Size; 116 extern long WCounter; 117 #endif 118 119 120 #define CONNECTION2ID(x) (long)(x - My_Connections) 121 122 #endif /* CONN_MODULE */ 123 124 125 GLOBAL void Conn_Init PARAMS((void )); 126 GLOBAL void Conn_Exit PARAMS(( void )); 127 128 GLOBAL void Conn_CloseAllSockets PARAMS((int ExceptOf)); 129 130 GLOBAL unsigned int Conn_InitListeners PARAMS(( void )); 131 GLOBAL void Conn_ExitListeners PARAMS(( void )); 132 133 GLOBAL void Conn_StartLogin PARAMS((CONN_ID Idx)); 134 135 GLOBAL void Conn_Handler PARAMS(( void )); 136 137 GLOBAL bool Conn_WriteStr PARAMS(( CONN_ID Idx, const char *Format, ... )); 138 139 GLOBAL char* Conn_Password PARAMS(( CONN_ID Idx )); 140 GLOBAL void Conn_SetPassword PARAMS(( CONN_ID Idx, const char *Pwd )); 141 142 GLOBAL void Conn_Close PARAMS(( CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClient )); 143 144 GLOBAL void Conn_SyncServerStruct PARAMS(( void )); 145 146 GLOBAL CONN_ID Conn_GetFromProc PARAMS((int fd)); 147 GLOBAL CLIENT* Conn_GetClient PARAMS((CONN_ID i)); 148 GLOBAL PROC_STAT* Conn_GetProcStat PARAMS((CONN_ID i)); 149 150 GLOBAL char *Conn_GetCertFp PARAMS((CONN_ID Idx)); 151 GLOBAL bool Conn_SetCertFp PARAMS((CONN_ID Idx, const char *fingerprint)); 152 GLOBAL bool Conn_UsesSSL PARAMS((CONN_ID Idx)); 153 154 #ifdef SSL_SUPPORT 155 GLOBAL bool Conn_GetCipherInfo PARAMS((CONN_ID Idx, char *buf, size_t len)); 156 #endif 157 158 GLOBAL const char *Conn_GetIPAInfo PARAMS((CONN_ID Idx)); 159 160 GLOBAL long Conn_Count PARAMS((void)); 161 GLOBAL long Conn_CountMax PARAMS((void)); 162 GLOBAL long Conn_CountAccepted PARAMS((void)); 163 164 #ifndef STRICT_RFC 165 GLOBAL long Conn_GetAuthPing PARAMS((CONN_ID Idx)); 166 GLOBAL void Conn_SetAuthPing PARAMS((CONN_ID Idx, long ID)); 167 #endif 168 169 #ifdef DEBUG 170 GLOBAL void Conn_DebugDump PARAMS((void)); 171 #endif 172 173 #endif 174 175 /* -eof- */ 176