IOReturn SATSMARTUserClient::message ( UInt32 type, IOService * provider, void * arg ) { IOReturn status = kIOReturnSuccess; DEBUG_LOG("%s[%p]::%s type = %u, provider = %p\n", getClassName(), this, __FUNCTION__, (unsigned int)type, provider ); switch ( type ) { case kIOMessageServiceIsRequestingClose: break; case kIOMessageServiceIsTerminated: status = HandleTerminate ( provider ); break; default: status = super::message ( type, provider, arg ); break; } DEBUG_LOG("%s[%p]::%s result %d\n", getClassName(), this, __FUNCTION__, status); return status; }
IOReturn SATSMARTUserClient::clientClose ( void ) { DEBUG_LOG("%s[%p]::%s\n", getClassName(), this, __FUNCTION__); if ( fProvider != NULL ) HandleTerminate ( fProvider ); return super::clientClose ( ); }
//============================================================================= void Metaserver::Process() { SAIN clientAddr; socklen_t clientAddrLen = sizeof(clientAddr); unsigned char mesg[MAXLINE]; int bytes; SignalManager::GetInstance().RegisterHandler(SIGALRM, mSigalrmHandler); alarm(REAP_INTERVAL); for( ; ; ) { if(mSigintHandler->GetGracefulQuit()) Interrupted(); if(mSigalrmHandler->GetAlarm()) { mSigalrmHandler->SetAlarm(0); Reaper(); } if((bytes = recvfrom(mListenSocket, mesg, MAXLINE, 0, (SA *)&clientAddr, &clientAddrLen)) < 0) continue; NetMsg netmsg((const unsigned char *)mesg, bytes); switch(netmsg.GetType()) { case NMT_SERVERKEEPALIVE: { HandleServerKeepalive((SA *)&clientAddr, clientAddrLen); break; } case NMT_CLIENTKEEPALIVE: { HandleClientKeepalive((SA *)&clientAddr, clientAddrLen); break; } case NMT_SERVERSHAKE: { ServerShakeMsg msg(mesg, bytes); HandleServerShake((SA *)&clientAddr, msg); break; } case NMT_CLIENTSHAKE: { ClientShakeMsg msg(mesg, bytes); HandleClientShake((SA *)&clientAddr, msg); break; } case NMT_TERMINATE: { TerminateMsg msg(mesg, bytes); if(msg.Good()) { HandleTerminate((SA *)&clientAddr); } break; } case NMT_LISTREQ: { ListRequestMsg msg(mesg, bytes); if(msg.Good()) { HandleListRequest((SA *)&clientAddr, clientAddrLen, msg); } break; } case NMT_NULL: case NMT_HANDSHAKE: case NMT_LISTRESP: case NMT_PROTO_ERANGE: default: #ifdef DEBUG printf("Ignoring unknown message type: %d\n", netmsg.GetType()); #endif break; } mPacketCount++; } }