#include "s_misc.h"
#include "s_stats.h"
#include "send.h"
+#include "ssl.h"
#include "sys.h" /* MAXCLIENTS */
/* #include <assert.h> -- Now using assert in ircd_log.h */
char* param)
{
struct Listener *listener = 0;
- char flags[8];
+ char flags[9];
int show_hidden = IsOper(sptr);
int count = (IsOper(sptr) || MyUser(sptr)) ? 100 : 8;
int port = 0;
continue;
len = 0;
flags[len++] = listener_server(listener) ? 'S' : 'C';
- if (show_hidden && FlagHas(&listener->flags, LISTEN_HIDDEN))
+
+ if (FlagHas(&listener->flags, LISTEN_SSL))
+ {
+ flags[len++] = 'E';
+ }
+ if (FlagHas(&listener->flags, LISTEN_HIDDEN))
+ {
+ if (!show_hidden)
+ continue;
flags[len++] = 'H';
+ }
+ if (FlagHas(&listener->flags, LISTEN_IPV4))
+ {
+ flags[len++] = '4';
+ if (listener->fd_v4 < 0)
+ flags[len++] = '-';
+ }
+ if (FlagHas(&listener->flags, LISTEN_IPV6))
+ {
+ flags[len++] = '6';
+ if (listener->fd_v6 < 0)
+ flags[len++] = '-';
+ }
flags[len] = '\0';
send_reply(sptr, RPL_STATSPLINE, listener->addr.port, listener->ref_count,
{
new_listener = 1;
listener = make_listener(port, &vaddr);
+
+
}
memcpy(&listener->flags, flags, sizeof(listener->flags));
+
+ if(FlagHas(&listener->flags, LISTEN_SSL) && !listener->ssl_listener) {
+ listener->ssl_listener = ssl_create_listener();
+ } else if(!FlagHas(&listener->flags, LISTEN_SSL) && listener->ssl_listener) {
+ ssl_free_listener(listener->ssl_listener);
+ listener->ssl_listener = NULL;
+ }
+
FlagSet(&listener->flags, LISTEN_ACTIVE);
if (mask)
ipmask_parse(mask, &listener->mask, &listener->mask_bits);
listener->mask_bits = 0;
#ifdef IPV6
- if (FlagHas(&listener->flags, LISTEN_IPV6)) {
+ if (FlagHas(&listener->flags, LISTEN_IPV6)
+ && (irc_in_addr_unspec(&vaddr) || !irc_in_addr_is_ipv4(&vaddr))) {
if (listener->fd_v6 >= 0) {
set_listener_options(listener, listener->fd_v6);
okay = 1;
}
#endif
- if (FlagHas(&listener->flags, LISTEN_IPV4)) {
+ if (FlagHas(&listener->flags, LISTEN_IPV4)
+ && (irc_in_addr_unspec(&vaddr) || irc_in_addr_is_ipv4(&vaddr))) {
if (listener->fd_v4 >= 0) {
set_listener_options(listener, listener->fd_v4);
okay = 1;