* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
- *
- * $Id$
*/
-#include <ratbox_lib.h>
+#include <rb_lib.h>
#include "stdinc.h"
rb_dlink_list writeq;
uint8_t shutdown;
uint8_t dead;
+ char version[256];
};
static void send_new_ssl_certs_one(ssl_ctl_t * ctl, const char *ssl_cert,
rb_close(F2);
rb_close(P1);
ctl = allocate_ssl_daemon(F1, P2, pid);
- if(ssl_ok)
+ if(ircd_ssl_ok)
{
send_init_prng(ctl, RB_PRNG_DEFAULT, NULL);
send_certfp_method(ctl, ConfigFileEntry.certfp_method);
static const char *no_ssl_or_zlib = "ssld has neither SSL/TLS or zlib support killing all sslds";
rb_dlink_node *ptr, *next;
ssl_ctl_buf_t *ctl_buf;
+ int len;
+
if(ctl->dead)
return;
+
RB_DLINK_FOREACH_SAFE(ptr, next, ctl->readq.head)
{
ctl_buf = ptr->data;
switch (*ctl_buf->buf)
{
case 'N':
- ssl_ok = 0; /* ssld says it can't do ssl/tls */
+ ircd_ssl_ok = false; /* ssld says it can't do ssl/tls */
break;
case 'D':
ssl_process_dead_fd(ctl, ctl_buf);
ssl_process_zipstats(ctl, ctl_buf);
break;
case 'I':
- ssl_ok = 0;
+ ircd_ssl_ok = false;
ilog(L_MAIN, "%s", cannot_setup_ssl);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", cannot_setup_ssl);
break;
case 'U':
zlib_ok = 0;
- ssl_ok = 0;
+ ircd_ssl_ok = false;
ilog(L_MAIN, "%s", no_ssl_or_zlib);
sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", no_ssl_or_zlib);
ssl_killall();
- break;
+ return;
+ case 'V':
+ len = ctl_buf->buflen - 1;
+ if (len > sizeof(ctl->version) - 1)
+ len = sizeof(ctl->version) - 1;
+ strncpy(ctl->version, &ctl_buf->buf[1], len);
case 'z':
zlib_ok = 0;
break;
rb_dlink_node *ptr;
if(ssl_cert == NULL || ssl_private_key == NULL || ssl_dh_params == NULL)
{
- ssl_ok = 0;
+ ircd_ssl_ok = false;
return;
}
RB_DLINK_FOREACH(ptr, ssl_daemons.head)
F[0] = server->localClient->F;
F[1] = xF1;
- del_from_cli_connid_hash(server);
+ del_from_zconnid_hash(server);
server->localClient->F = xF2;
/* need to redo as what we did before isn't valid now */
- uint32_to_buf(&buf[1], rb_get_fd(server->localClient->F));
- add_to_cli_connid_hash(server);
+ uint32_to_buf(&buf[1], server->localClient->zconnid);
+ add_to_zconnid_hash(server);
server->localClient->z_ctl = which_ssld();
if(!server->localClient->z_ctl)
return ssld_count;
}
+void
+ssld_foreach_info(void (*func)(void *data, pid_t pid, int cli_count, enum ssld_status status, const char *version), void *data)
+{
+ rb_dlink_node *ptr, *next;
+ ssl_ctl_t *ctl;
+ RB_DLINK_FOREACH_SAFE(ptr, next, ssl_daemons.head)
+ {
+ ctl = ptr->data;
+ func(data, ctl->pid, ctl->cli_count,
+ ctl->dead ? SSLD_DEAD :
+ (ctl->shutdown ? SSLD_SHUTDOWN : SSLD_ACTIVE),
+ ctl->version);
+ }
+}
+
void
init_ssld(void)
{