/*----------------------------------------------------------------------------*/ void logMsg(int priority, int sockfd, char* message, size_t length) { static char strTime[45]; time_t now; struct tm * localTime; char *priorityString; /** Allow logging before log_open() called */ if(0 == logFileDescriptor) { logFileDescriptor = stderr; } switch(priority) { case 0: priorityString = "INFO"; break; case 1: priorityString = "WARN"; break; default: priorityString = "ERROR"; }; now = time(NULL); localTime = localtime(&now); strftime(strTime, 45, "%c", localTime); message[length] = 0; if(0 > sockfd) { fprintf(logFileDescriptor, " [%30s] %5s - %50s\n", strTime, priorityString, message); } else { struct sockaddr addr; socklen_t addrLength = sizeof(addr); memset(&addr, addrLength, 0); if(0 != getpeername(sockfd, &addr, &addrLength)) { fprintf(logFileDescriptor, " [%30s] %5s - %50s\n", strTime, priorityString, message); return; } fprintf(logFileDescriptor, " [%30s] %5s - %50s - %50s\n", strTime, priorityString, message, sockaddrToString(&addr)); } }
status_t CommonTimeServer::dumpConfigInterface(int fd, const Vector<String16>& /* args */) { AutoMutex _lock(&mLock); const size_t SIZE = 256; char buffer[SIZE]; if (checkCallingPermission(String16("android.permission.DUMP")) == false) { snprintf(buffer, SIZE, "Permission Denial: " "can't dump CommonTimeConfigService from pid=%d, uid=%d\n", IPCThreadState::self()->getCallingPid(), IPCThreadState::self()->getCallingUid()); write(fd, buffer, strlen(buffer)); } else { char meStr[64]; sockaddrToString(mMasterElectionEP, true, meStr, sizeof(meStr)); dump_printf("Common Time Config Service Status\n" "Bound Interface : %s\n", mBindIfaceValid ? mBindIface.string() : "<unbound>"); dump_printf("Master Election Endpoint : %s\n", meStr); dump_printf("Master Election Group ID : %016" PRIu64 "\n", mSyncGroupID); dump_printf("Master Announce Interval : %d mSec\n", mMasterAnnounceIntervalMs); dump_printf("Client Sync Interval : %d mSec\n", mSyncRequestIntervalMs); dump_printf("Panic Threshold : %d uSec\n", mPanicThresholdUsec); dump_printf("Base ME Prio : 0x%02x\n", static_cast<uint32_t>(mMasterPriority)); dump_printf("Effective ME Prio : 0x%02x\n", static_cast<uint32_t>(effectivePriority())); dump_printf("Auto Disable Allowed : %s\n", mAutoDisable ? "yes" : "no"); dump_printf("Auto Disable Engaged : %s\n", shouldAutoDisable() ? "yes" : "no"); } return NO_ERROR; }
status_t CommonTimeServer::dumpClockInterface(int fd, const Vector<String16>& /* args */, size_t activeClients) { AutoMutex _lock(&mLock); const size_t SIZE = 256; char buffer[SIZE]; if (checkCallingPermission(String16("android.permission.DUMP")) == false) { snprintf(buffer, SIZE, "Permission Denial: " "can't dump CommonClockService from pid=%d, uid=%d\n", IPCThreadState::self()->getCallingPid(), IPCThreadState::self()->getCallingUid()); write(fd, buffer, strlen(buffer)); } else { int64_t commonTime; int64_t localTime; bool synced; char maStr[64]; localTime = mLocalClock.getLocalTime(); synced = (OK == mCommonClock.localToCommon(localTime, &commonTime)); sockaddrToString(mMasterEP, mMasterEPValid, maStr, sizeof(maStr)); dump_printf("Common Clock Service Status\nLocal time : %" PRId64 "\n", localTime); if (synced) dump_printf("Common time : %" PRId64 "\n", commonTime); else dump_printf("Common time : %s\n", "not synced"); dump_printf("Timeline ID : %016" PRIu64 "\n", mTimelineID); dump_printf("State : %s\n", stateToString(mState)); dump_printf("Master Addr : %s\n", maStr); if (synced) { int32_t est = (ICommonClock::STATE_MASTER != mState) ? mClockRecovery.getLastErrorEstimate() : 0; dump_printf("Error Est. : %.3f msec\n", static_cast<float>(est) / 1000.0); } else { dump_printf("Error Est. : %s\n", "unknown"); } dump_printf("Syncs TXes : %u\n", mClient_SyncsSentToCurMaster); dump_printf("Syncs RXes : %u (%.2f%%)\n", mClient_SyncRespsRXedFromCurMaster, checked_percentage( mClient_SyncRespsRXedFromCurMaster, mClient_SyncsSentToCurMaster)); dump_printf("RXs Expired : %u (%.2f%%)\n", mClient_ExpiredSyncRespsRXedFromCurMaster, checked_percentage( mClient_ExpiredSyncRespsRXedFromCurMaster, mClient_SyncsSentToCurMaster)); if (!mClient_LastGoodSyncRX) { dump_printf("Last Good RX : %s\n", "unknown"); } else { int64_t localDelta, usecDelta; localDelta = localTime - mClient_LastGoodSyncRX; usecDelta = mCommonClock.localDurationToCommonDuration(localDelta); dump_printf("Last Good RX : %" PRId64 " uSec ago\n", usecDelta); } dump_printf("Active Clients : %zu\n", activeClients); mClient_PacketRTTLog.dumpLog(fd, mCommonClock); mStateChangeLog.dumpLog(fd); mElectionLog.dumpLog(fd); mBadPktLog.dumpLog(fd); } return NO_ERROR; }