added basic ssl support to ircu
[ircu2.10.12-pk.git] / ircd / listener.c
index a3c9e93785e2fd3ce4a302c3a3ca99323e9d8d94..5339fd9f52896cfc4f28c280a31fe70be750564f 100644 (file)
@@ -40,6 +40,7 @@
 #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 */
@@ -131,7 +132,7 @@ void show_ports(struct Client* sptr, const struct StatDesc* sd,
                 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;
@@ -147,6 +148,11 @@ void show_ports(struct Client* sptr, const struct StatDesc* sd,
       continue;
     len = 0;
     flags[len++] = listener_server(listener) ? 'S' : 'C';
+    
+    if (FlagHas(&listener->flags, LISTEN_SSL))
+    {
+      flags[len++] = 'E';
+    }
     if (FlagHas(&listener->flags, LISTEN_HIDDEN))
     {
       if (!show_hidden)
@@ -310,8 +316,18 @@ void add_listener(int port, const char* vhost_ip, const char* mask,
   {
     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);