1 #include <fcntl.h> /* For O_* constants */
\r
7 #include <sys/mman.h>
\r
8 #include <sys/types.h>
\r
9 #include "../../src/sharedmemory.h"
\r
10 #include "../../src/sharedmemory_global.h"
\r
12 enum{ NOP_SHM, WAIT_ATTACH_SHM, TRY_ATTACH_SHM, MAT_SHM, CLEAN_UP_SHM, RUN_SHM };
\r
15 uint8_t last, shm_statem = TRY_ATTACH_SHM;
\r
19 int main(int argc, char **argv)
\r
23 while ( (opt = getopt(argc, argv, "w")) != -1 )
\r
31 fprintf(stderr, "Usage: %s [-w]\n", argv[0]);
\r
32 fprintf(stderr, "\t-w - Wait for umurmurd to create shm area. useful if you need to start from init.d script\n" );
\r
39 sprintf( shm_file_name, "/umurmurd:%i", 64738 );
\r
42 shm_statem = WAIT_ATTACH_SHM;
\r
46 switch( shm_statem )
\r
51 case WAIT_ATTACH_SHM:
\r
52 printf( "Waiting for umurmurd to be run\n\r"); fflush(stdout);
\r
53 while( ( shm_fd = shm_open( shm_file_name, O_RDONLY, 0666 ) ) == -1 )
\r
55 shm_statem = MAT_SHM;
\r
57 case TRY_ATTACH_SHM:
\r
58 if( ( shm_fd = shm_open( shm_file_name, O_RDONLY, 0666 ) ) == -1 )
\r
60 printf( "umurmurd doesn't seem to be running\n\r" );
\r
63 shm_statem = MAT_SHM;
\r
66 if( ( shmptr = mmap(0, 1, PROT_READ, MAP_SHARED, shm_fd, 0) ) == (void *) (-1) ) //MJP BUG?
\r
71 printf( "umumurd PID: %u\n\r", shmptr->umurmurd_pid );
\r
72 shm_statem = RUN_SHM;
\r
84 uint8_t check_serverTick(void)
\r
86 last = shmptr->alive;
\r
87 sleep( 1 ); // Sleep for 1 sec
\r
88 return(shmptr->alive - last);
\r
96 printf( "\033[2J\033[H" ); //clear screen VT100
\r
99 for( cc = 0 ; cc < shmptr->server_max_clients ; cc++ )
\r
102 if( !shmptr->client[cc].authenticated )
\r
105 printf( "%s@%s:%i in channel: %s\n\
\r
106 \tclient_OS: %s %s\n\
\r
107 \tclient_info: %s\n\
\r
108 \tavailableBandwidth: %i\n\
\r
109 \tOnline(secs): %lu Idle(secs): %lu\n\
\r
111 \tdeaf=%i, mute=%i\n\
\r
112 \tself_deaf=%i, self_mute=%i\n\
\r
116 \tisSuppressed=%i\n\
\r
117 \tUDP_Avg/Var: %3.2f/%3.2f\n\
\r
118 \tTCP_Avg/Var: %3.2f/%3.2f\n\
\r
119 \tUDP_C/TCP_C: %lu/%lu\n",
\r
120 shmptr->client[cc].username,
\r
121 shmptr->client[cc].ipaddress,
\r
122 shmptr->client[cc].udp_port,
\r
123 shmptr->client[cc].channel,
\r
124 shmptr->client[cc].os,
\r
125 shmptr->client[cc].os_version,
\r
126 shmptr->client[cc].release,
\r
127 shmptr->client[cc].availableBandwidth,
\r
128 shmptr->client[cc].online_secs,
\r
129 shmptr->client[cc].idle_secs,
\r
131 shmptr->client[cc].bUDP,
\r
132 shmptr->client[cc].deaf,
\r
133 shmptr->client[cc].mute,
\r
134 shmptr->client[cc].self_deaf,
\r
135 shmptr->client[cc].self_mute,
\r
136 shmptr->client[cc].recording,
\r
137 shmptr->client[cc].bOpus,
\r
139 shmptr->client[cc].isAdmin,
\r
140 shmptr->client[cc].isSuppressed,
\r
142 shmptr->client[cc].UDPPingAvg,
\r
143 shmptr->client[cc].UDPPingVar,
\r
144 shmptr->client[cc].TCPPingAvg,
\r
145 shmptr->client[cc].TCPPingVar,
\r
146 shmptr->client[cc].UDPPackets,
\r
147 shmptr->client[cc].TCPPackets ); fflush(stdout); // fflush need because of sleep() call
\r
149 if( !check_serverTick() )
\r
151 exit(EXIT_FAILURE); //You dont have to exit you could just report the fact that the data is not valid
\r