void Log_info_client(client_t *client, const char *logstring, ...) { va_list argp; char buf[STRSIZE + 1]; int offset = 0; if (termprint || logfile) offset = sprintf(buf, "INFO: "); va_start(argp, logstring); offset += vsnprintf(&buf[offset], STRSIZE - offset, logstring, argp); va_end(argp); char *clientAddressString = Util_clientAddressToString(client); offset += snprintf(&buf[offset], STRSIZE - offset, " - [%d] %s@%s:%d", client->sessionId, client->username == NULL ? "" : client->username, clientAddressString, Util_clientAddressToPortTCP(client)); free(clientAddressString); if (termprint) fprintf(stderr, "%s\n", buf); else if (logfile) fprintf(logfile, "%s %s\n", timestring(), buf); else syslog(LOG_INFO, "%s", buf); }
void Sharedmemory_update(void) { uint64_t now; unsigned int cc = 0; client_t *client_itr = NULL; memset( &shmptr->client[0], 0, shmptr->shmclient_size ); shmptr->clientcount = Client_count(); if( shmptr->clientcount ) { Timer_init( &now ); while( Client_iterate(&client_itr) != NULL ) { if( client_itr->authenticated ) { channel_t *channel = client_itr->channel; strncpy( shmptr->client[cc].username, client_itr->username, 120 ); strncpy( shmptr->client[cc].ipaddress, Util_clientAddressToString( client_itr ), INET6_ADDRSTRLEN - 1 ); strncpy( shmptr->client[cc].channel, channel->name, 120 ); strncpy( shmptr->client[cc].os, client_itr->os, 120 ); strncpy( shmptr->client[cc].release, client_itr->release, 120 ); strncpy( shmptr->client[cc].os_version, client_itr->os_version, 120 ); shmptr->client[cc].tcp_port = Util_clientAddressToPortTCP( client_itr ); shmptr->client[cc].udp_port = Util_clientAddressToPortUDP( client_itr ); shmptr->client[cc].online_secs = ( now - client_itr->connectTime ) / 1000000LL; shmptr->client[cc].idle_secs = ( now - client_itr->idleTime ) / 1000000LL; shmptr->client[cc].bUDP = client_itr->bUDP; shmptr->client[cc].deaf = client_itr->deaf; shmptr->client[cc].mute = client_itr->mute; shmptr->client[cc].bOpus = client_itr->bOpus; shmptr->client[cc].self_deaf = client_itr->self_deaf; shmptr->client[cc].self_mute = client_itr->self_mute; shmptr->client[cc].recording = client_itr->recording; shmptr->client[cc].authenticated = client_itr->authenticated; shmptr->client[cc].availableBandwidth = client_itr->availableBandwidth; shmptr->client[cc].UDPPingAvg = client_itr->UDPPingAvg; shmptr->client[cc].UDPPingVar = client_itr->UDPPingVar; shmptr->client[cc].TCPPingAvg = client_itr->TCPPingAvg; shmptr->client[cc].TCPPingVar = client_itr->TCPPingVar; shmptr->client[cc].isAdmin = client_itr->isAdmin; shmptr->client[cc].isSuppressed = client_itr->isSuppressed; shmptr->client[cc].UDPPackets = client_itr->UDPPackets; shmptr->client[cc].TCPPackets = client_itr->TCPPackets; } cc++; } } }