Last bit of code clean up, and bug fixes. Release?
authorMichael J. Pounders <snowblind@bellsouth.net>
Sun, 30 Nov 2014 07:04:43 +0000 (02:04 -0500)
committerMichael J. Pounders <snowblind@bellsouth.net>
Sun, 30 Nov 2014 07:04:43 +0000 (02:04 -0500)
shm_utils/mon-umurmurd/mon-umurmurd.c
src/main.c
src/sharedmemory.c
src/sharedmemory.h
src/sharedmemory_struct.h

index 18a8a97b5e8de923e259e364107bf3405bd725b3..931a34dcf2d54bed9f6300bafbade01e3072d7f8 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdlib.h>\r
 #include <string.h>\r
 #include <unistd.h>\r
+#include <sys/stat.h>\r
 #include <sys/mman.h>\r
 #include <sys/types.h>\r
 #include "../../src/sharedmemory.h"\r
@@ -18,25 +19,35 @@ void run_shm(void);
 \r
 int main(int argc, char **argv) \r
 {\r
-\r
-\r
-    while ( (opt = getopt(argc, argv, "w")) != -1 ) \r
+  struct stat buf;\r
+  int bindport = 0;\r
+  \r
+    while ( (opt = getopt(argc, argv, "wb:")) != -1 ) \r
     {\r
         switch(opt) \r
         {\r
            case 'w':\r
               wait = 1;\r
               break;\r
-           default: \r
-              fprintf(stderr, "Usage: %s [-w]\n", argv[0]);\r
+           case 'b':\r
+              bindport = atoi(optarg);\r
+              break;              \r
+           default:                                                     \r
+              fprintf(stderr, "Usage: %s [-w] [-b <port>]\n", argv[0]);\r
               fprintf(stderr, "\t-w         - Wait for umurmurd to create shm area. useful if you need to start from init.d script\n" );\r
+              fprintf(stderr, "\t-b <port>  - Change this to the port used when starting umurmurd. Defaults to \"/umurmurd:64738\" \n");\r
               exit(EXIT_FAILURE);\r
         }\r
     }\r
 \r
       shmptr = NULL;\r
       \r
-      sprintf( shm_file_name, "/umurmurd:%i", 64738 );\r
+      if( !bindport )\r
+      {\r
+        bindport = 64738;\r
+      }\r
+      \r
+      sprintf( shm_file_name, "/umurmurd:%i", bindport );\r
             \r
       if( wait )\r
           shm_statem = WAIT_ATTACH_SHM;\r
@@ -62,10 +73,10 @@ int main(int argc, char **argv)
                     }\r
                     shm_statem = MAT_SHM;\r
                     break;\r
-             case MAT_SHM:                                       \r
-                    if( ( shmptr = mmap(0, 1, PROT_READ, MAP_SHARED, shm_fd, 0) ) == (void *) (-1) )   //MJP BUG? \r
+             case MAT_SHM:                  \r
+                    fstat( shm_fd, &buf);                                       \r
+                    if( ( shmptr = mmap(0, buf.st_size, PROT_READ, MAP_SHARED, shm_fd, 0) ) == (void *) (-1) )   //MJP BUG? \r
                     {\r
-                        \r
                         exit(EXIT_FAILURE);\r
                     }                    \r
                     printf( "umumurd PID: %u\n\r", shmptr->umurmurd_pid );\r
@@ -94,7 +105,7 @@ void run_shm(void)
 int cc;\r
 \r
     printf( "\033[2J\033[H" ); fflush(stdout); //clear screen VT100\r
-          \r
+    printf( "%s  Clients(CONECTED/MAX)  %i/%i\n\n", shm_file_name, shmptr->clientcount, shmptr->server_max_clients );      \r
           \r
         for( cc = 0 ; cc < shmptr->server_max_clients ; cc++ )\r
         {\r
@@ -150,4 +161,4 @@ int cc;
         {\r
             exit(EXIT_FAILURE); //You dont have to exit you could just report the fact that the data is not valid \r
         }\r
-}\r
+}
\ No newline at end of file
index ceebd02f07ff7399cfe71c6db74c7ed5c2a3946f..89ca28024745e137e504be65de504c120c1011a1 100644 (file)
@@ -352,7 +352,7 @@ int main(int argc, char **argv)
                Ban_init();
     
 #ifdef USE_SHAREDMEMORY_API    
-    Sharedmemory_init();
+    Sharedmemory_init( bindport, bindport6 );
 #endif
    
 #ifdef POSIX_PRIORITY_SCHEDULING
index 46f54f2b095d54311f82028cd7d8f36b648559b2..b4bfee58604de774280b083dfcdf32c5259c0470 100644 (file)
@@ -1,40 +1,47 @@
 #include "sharedmemory.h"\r
 #include "sharedmemory_global.h"\r
 \r
-void Sharedmemory_init(void\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(1);\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
+        if( ftruncate( shm_fd, shmtotal_size ) == -1 )\r
+        {\r
+            Log_fatal( "SHM_API: ftruncate : %s\n", strerror(errno));  \r
+            exit(1);\r
+        }\r
+\r
+        shmptr = mmap(0, shmtotal_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
 \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 +51,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
@@ -107,4 +114,4 @@ void Sharedmemory_deinit(void)
   close( shm_fd );\r
   shm_unlink( shm_file_name );\r
   shmptr->umurmurd_pid = 0;\r
-}\r
+}
\ No newline at end of file
index fd9c1209b3ec8aac38c614cf7104c1d63698f797..16573eaf83ba4b330a2d06e05625ad574973c2f9 100644 (file)
@@ -14,7 +14,7 @@
 #include "channel.h"\r
 #include "sharedmemory_struct.h" \r
 \r
-void Sharedmemory_init(void);\r
+void Sharedmemory_init( int bindport, int bindport6 );\r
 void Sharedmemory_update(void);\r
 void Sharedmemory_alivetick(void);\r
 void Sharedmemory_deinit(void);\r
index d1453fbe5de24b8b71e9f1788cc3fadaeecba5ff..c1f443008ba7a709e063b00f01b590894ed38023 100644 (file)
@@ -7,7 +7,7 @@ typedef struct
   char os[121], release[121], os_version[121];\r
   int tcp_port, udp_port;\r
   bool_t bUDP, authenticated, deaf, mute, self_deaf, self_mute, recording, bOpus;\r
-       int availableBandwidth;\r
+  int availableBandwidth;\r
   uint32_t online_secs, idle_secs;\r
   bool_t isAdmin;\r
   bool_t isSuppressed;\r
@@ -19,9 +19,10 @@ typedef struct
 typedef struct\r
 {\r
 \r
+  int shmtotal_size, shmclient_size;\r
   int clientcount, server_max_clients;\r
   unsigned int umurmurd_pid;\r
-       uint8_t alive; \r
-  shmclient_t client[];    \r
-  \r
+  uint8_t alive;\r
+  shmclient_t client[];\r
+\r
 }shm_t;\r