added GnuTLS USE flag
[umurmur.git] / src / sharedmemory.c
index 46f54f2b095d54311f82028cd7d8f36b648559b2..c2b703ab5ba0697d13a7f7ffe5d0cefc661f0014 100644 (file)
@@ -1,40 +1,50 @@
 #include "sharedmemory.h"\r
-#include "sharedmemory_global.h"\r
 \r
-void Sharedmemory_init(void) \r
+int shm_fd;\r
+shm_t *shmptr = NULL;\r
+char shm_file_name[128];\r
+\r
+void Sharedmemory_init( int bindport, int bindport6 ) \r
 {\r
+                 \r
+  int server_max_clients = getIntConf(MAX_CLIENTS);  \r
+  int shmtotal_size =  sizeof( shm_t  ) + (sizeof( shmclient_t ) * server_max_clients);\r
 \r
-  int bindport = getIntConf(BINDPORT);                //MJP BUG commandline option for address and port dont work this way going to have \r
-  int server_max_clients = getIntConf(MAX_CLIENTS);   //to bring them across as prameters to Sharedmemory_init(void)\r
-  int shmptr_size =  sizeof( shm_t  ) + (sizeof( shmclient_t ) * server_max_clients);\r
+  if( !bindport )\r
+  {\r
+    bindport = getIntConf(BINDPORT);  \r
+  }\r
 \r
-  sprintf( shm_file_name, "umurmurd:%i", bindport );\r
+  sprintf( shm_file_name, "/umurmurd:%i", bindport );\r
   Log_info("SHM_API: shm_fd=\"%s\"", shm_file_name  );\r
 \r
-               shm_fd = shm_open( shm_file_name, O_CREAT | O_RDWR, 0660 );\r
-                               if(shm_fd == -1)\r
-                               {\r
-                               Log_fatal( "SHM_API: Open failed:%s\n", strerror(errno));\r
-                               exit(1);\r
-                               }  \r
+    shm_fd = shm_open( shm_file_name, O_CREAT | O_RDWR, 0660 );\r
+        if(shm_fd == -1)\r
+        {\r
+            Log_fatal( "SHM_API: Open failed:%s\n", strerror(errno));\r
+            exit(EXIT_FAILURE);\r
+        }  \r
+\r
+        if( ftruncate( shm_fd, shmtotal_size ) == -1 )\r
+        {\r
+            Log_fatal( "SHM_API: ftruncate : %s\n", strerror(errno));  \r
+            exit(EXIT_FAILURE);\r
+        }\r
 \r
-                               if( ftruncate( shm_fd, shmptr_size ) == -1 )\r
-                               {\r
-                               Log_fatal( "SHM_API: ftruncate : %s\n", strerror(errno));  \r
-                               exit(1);\r
-                               }\r
+        shmptr = mmap( 0, shmtotal_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0 );\r
+        if (shmptr == MAP_FAILED) \r
+        {\r
+            Log_fatal( "SHM_API: mmap failed : %s\n", strerror(errno));\r
+            exit(EXIT_FAILURE);\r
+        } \r
 \r
-                       shmptr = mmap(0, shmptr_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);\r
-                       if (shmptr == (void *) -1) \r
-                       {\r
-                               Log_fatal( "SHM_API: mmap failed : %s\n", strerror(errno));\r
-                               exit(1);\r
-                       } \r
+  memset( shmptr, 0, shmtotal_size );\r
 \r
-  memset( shmptr, 0, shmptr_size );\r
-                                       \r
   shmptr->umurmurd_pid = getpid();\r
-  shmptr->server_max_clients = server_max_clients;  \r
+  shmptr->server_max_clients = server_max_clients;   \r
+  shmptr->shmtotal_size = shmtotal_size;\r
+  shmptr->shmclient_size = sizeof( shmclient_t ) * shmptr->server_max_clients;                           \r
\r
 }\r
 \r
 void Sharedmemory_update(void) \r
@@ -44,7 +54,7 @@ void Sharedmemory_update(void)
   unsigned int cc = 0;\r
   client_t *client_itr = NULL;\r
 \r
-    memset( &shmptr->client[0], 0, sizeof( shmclient_t ) * shmptr->server_max_clients );\r
+    memset( &shmptr->client[0], 0, shmptr->shmclient_size );\r
     shmptr->clientcount = Client_count();\r
     \r
       if( shmptr->clientcount )\r
@@ -57,7 +67,7 @@ void Sharedmemory_update(void)
               channel_t *channel = client_itr->channel;\r
         \r
                 strncpy( shmptr->client[cc].username, client_itr->username, 120 );\r
-                strncpy( shmptr->client[cc].ipaddress, Util_clientAddressToString( client_itr ), 45 );\r
+                strncpy( shmptr->client[cc].ipaddress, Util_clientAddressToString( client_itr ), INET6_ADDRSTRLEN - 1 );\r
                 strncpy( shmptr->client[cc].channel, channel->name, 120 );\r
                 \r
                 strncpy( shmptr->client[cc].os, client_itr->os, 120 );\r