#include "sharedmemory.h"\r
-#include "sharedmemory_global.h"\r
\r
-void Sharedmemory_init(void) \r
-{\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
- \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
- sprintf( shm_file_name, "umurmurd:%i", bindport );\r
+ if( !bindport )\r
+ {\r
+ bindport = getIntConf(BINDPORT); \r
+ }\r
\r
- Log_info("SHM_FD: %s", shm_file_name );\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, 0666 );\r
-if(shm_fd == -1)\r
-{\r
- fprintf(stderr, "Open failed:%s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working\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, shmptr_size ) == -1 )\r
-{\r
- fprintf(stderr, "ftruncate : %s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working\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(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
- fprintf(stderr, "mmap failed : %s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working\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
+ 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
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
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
void Sharedmemory_deinit(void) \r
{\r
close( shm_fd );\r
- unlink( shm_file_name );\r
+ shm_unlink( shm_file_name );\r
shmptr->umurmurd_pid = 0;\r
-}
\ No newline at end of file
+}\r