1 #include "sharedmemory.h"
\r
2 #include "sharedmemory_global.h"
\r
4 void Sharedmemory_init(void)
\r
7 int bindport = getIntConf(BINDPORT); //MJP BUG commandline option for address and port dont work this way going to have
\r
8 int server_max_clients = getIntConf(MAX_CLIENTS); //to bring them across as prameters to Sharedmemory_init(void)
\r
9 int shmptr_size = sizeof( shm_t ) + (sizeof( shmclient_t ) * server_max_clients);
\r
13 sprintf( shm_file_name, "umurmurd:%i", bindport );
\r
15 Log_info("SHM_FD: %s", shm_file_name );
\r
17 shm_fd = shm_open( shm_file_name, O_CREAT | O_RDWR, 0666 );
\r
20 fprintf(stderr, "Open failed:%s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working
\r
24 if( ftruncate( shm_fd, shmptr_size ) == -1 )
\r
26 fprintf(stderr, "ftruncate : %s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working
\r
30 shmptr = mmap(0, shmptr_size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
\r
31 if (shmptr == (void *) -1)
\r
33 fprintf(stderr, "mmap failed : %s\n", strerror(errno)); //MJP BUG make this Log_ calls once I get this working
\r
38 memset( shmptr, 0, shmptr_size );
\r
40 shmptr->umurmurd_pid = getpid();
\r
41 shmptr->server_max_clients = server_max_clients;
\r
44 void Sharedmemory_update(void)
\r
48 unsigned int cc = 0;
\r
49 client_t *client_itr = NULL;
\r
51 memset( &shmptr->client[0], 0, sizeof( shmclient_t ) * shmptr->server_max_clients );
\r
52 shmptr->clientcount = Client_count();
\r
54 if( shmptr->clientcount )
\r
57 while( Client_iterate(&client_itr) != NULL )
\r
59 if( client_itr->authenticated )
\r
61 channel_t *channel = client_itr->channel;
\r
63 strncpy( shmptr->client[cc].username, client_itr->username, 120 );
\r
64 strncpy( shmptr->client[cc].ipaddress, Util_clientAddressToString( client_itr ), 45 );
\r
65 strncpy( shmptr->client[cc].channel, channel->name, 120 );
\r
67 strncpy( shmptr->client[cc].os, client_itr->os, 120 );
\r
68 strncpy( shmptr->client[cc].release, client_itr->release, 120 );
\r
69 strncpy( shmptr->client[cc].os_version, client_itr->os_version, 120 );
\r
71 shmptr->client[cc].tcp_port = Util_clientAddressToPortTCP( client_itr );
\r
72 shmptr->client[cc].udp_port = Util_clientAddressToPortUDP( client_itr );
\r
74 shmptr->client[cc].online_secs = ( now - client_itr->connectTime ) / 1000000LL;
\r
75 shmptr->client[cc].idle_secs = ( now - client_itr->idleTime ) / 1000000LL;
\r
77 shmptr->client[cc].bUDP = client_itr->bUDP;
\r
78 shmptr->client[cc].deaf = client_itr->deaf;
\r
79 shmptr->client[cc].mute = client_itr->mute;
\r
80 shmptr->client[cc].bOpus = client_itr->bOpus;
\r
81 shmptr->client[cc].self_deaf = client_itr->self_deaf;
\r
82 shmptr->client[cc].self_mute = client_itr->self_mute;
\r
83 shmptr->client[cc].recording = client_itr->recording;
\r
84 shmptr->client[cc].authenticated = client_itr->authenticated;
\r
86 shmptr->client[cc].availableBandwidth = client_itr->availableBandwidth;
\r
88 shmptr->client[cc].UDPPingAvg = client_itr->UDPPingAvg;
\r
89 shmptr->client[cc].UDPPingVar = client_itr->UDPPingVar;
\r
90 shmptr->client[cc].TCPPingAvg = client_itr->TCPPingAvg;
\r
91 shmptr->client[cc].TCPPingVar = client_itr->TCPPingVar;
\r
93 shmptr->client[cc].isAdmin = client_itr->isAdmin;
\r
94 shmptr->client[cc].isSuppressed = client_itr->isSuppressed;
\r
96 shmptr->client[cc].UDPPackets = client_itr->UDPPackets;
\r
97 shmptr->client[cc].TCPPackets = client_itr->TCPPackets;
\r
104 void Sharedmemory_alivetick(void)
\r
109 void Sharedmemory_deinit(void)
\r
112 unlink( shm_file_name );
\r
113 shmptr->umurmurd_pid = 0;
\r