void MinionRadioHandler::handle() { MinionRadioMessage* msg = radio->receive(); if (msg == NULL) return; if (msg->minionId == minionId || msg->minionId == MinionRadioMessageType.BROADCAST_ID) { switch (msg->messageType) { case MinionRadioMessageType.NEW_MINION_REQ: { newMinionRequest(*msg); break; } case MinionRadioMessageType.UPD_MINION_ID_REQ: { updateMinionIdRequest(*msg); break; } case MinionRadioMessageType.PING_REQ: { pingRequest(*msg); break; } case MinionRadioMessageType.INFO_REQ: { infoRequest(*msg); break; } case MinionRadioMessageType.TURN_OFF_REQ: { turnOffRequest(*msg); break; } case MinionRadioMessageType.TURN_ON_REQ: { turnOnRequest(*msg); break; } case MinionRadioMessageType.STATUS_REQ: { statusRequest(*msg); break; } case MinionRadioMessageType.SET_OFF_TIME_REQ: { scheduleOffTimeRequest(*msg); break; } case MinionRadioMessageType.SET_ON_TIME_REQ: { scheduleOnTimeRequest(*msg); break; } case MinionRadioMessageType.CLR_SCHED_TIME_REQ: { clearScheduledTimesRequest(*msg); break; } default: { if (msg->messageType > MinionRadioMessageType.MAX_UNIVERSAL_TYPE) { otherMessage(*msg); } break; } } } delete msg; }
OsStatus SipRedirectorPresenceRouting::pingOpenfire( void ) { OsStatus rc = OS_FAILED; UtlString presenceMonitorUrlAsString = mLocalPresenceMonitorServerUrl.toString(); XmlRpcRequest pingRequest( mOpenFirePresenceServerUrl, PING_METHOD ); pingRequest.addParam( &mLogName ); XmlRpcResponse pingResponse; if( pingRequest.execute( pingResponse ) == true ) { UtlContainable* pValue = NULL; if ( !pingResponse.getResponse( pValue ) || !pValue ) { OsSysLog::add(FAC_NAT, PRI_CRIT, "SipRedirectorPresenceRouting::pingOpenfire response had no result."); } else { UtlString keyName; UtlHashMap* pMap = dynamic_cast<UtlHashMap*>( pValue ); if ( !pMap ) { OsSysLog::add(FAC_NAT, PRI_ERR, "SipRedirectorPresenceRouting::pingOpenfire response result had unexpected type: %s", pValue->getContainableType() ); } else { // extract status code and check it. keyName = STATUS_CODE; UtlString* pStatusCode = dynamic_cast<UtlString*>( pMap->findValue( &keyName ) ); if( pStatusCode->compareTo( STATUS_CODE_VALUE_OK, UtlString::ignoreCase ) == 0 ) { keyName = INSTANCE_HANDLE; UtlString* pInstanceHandle = dynamic_cast<UtlString*>( pMap->findValue( &keyName ) ); if( pInstanceHandle ) { if( mOpenfireInstanceHandle.compareTo( NIL_INSTANCE_HANDLE_VALUE ) == 0 ) { // This is the first instance handle we get from openfire, save it mOpenfireInstanceHandle = *pInstanceHandle; rc = OS_SUCCESS; } else { // check if the openfire handle we received matches the one we have on record if( mOpenfireInstanceHandle.compareTo( *pInstanceHandle ) == 0 ) { // there is a match; everything is fine. rc = OS_SUCCESS; } else { // mistmatch - likely caused by openfire resetting behind our back. // fail the ping to cause a re-register with openfire mOpenfireInstanceHandle = *pInstanceHandle; rc = OS_FAILED; // rc already set to OS_FAILED; added for readability } } } } } } } return rc; }