UtlBoolean SipXMessageObserver::handleMessage(OsMsg& rMsg)
{
    UtlBoolean bRet = FALSE ;

    if (rMsg.getMsgType() == OsMsg::OS_EVENT)
    {
        OsEventMsg* pEventMsg = (OsEventMsg*) &rMsg ;
        intptr_t eventType ;
        pEventMsg->getUserData(eventType) ;

        switch (eventType)
        {
            case SIPXMO_NOTIFICATION_STUN:
                handleStunOutcome(pEventMsg) ;
                bRet = TRUE ;
                break ;
            default:
               if (rMsg.getMsgSubType() == OsEventMsg::NOTIFY)
               {
                  // this shouldn't be used at all
                  assert(false);
               }
               break;
        }                
    }
    else
    {
	    SipMessage* pSipMessage = (SipMessage*) ((SipMessageEvent&)rMsg).getMessage() ;
        UtlString method;
    
        pSipMessage->getRequestMethod(&method);
        
        if (pSipMessage && pSipMessage->isResponse())
        {
            int messageType = ((SipMessageEvent&)rMsg).getMessageStatus();

            // ok, the phone has received a response to a sent INFO message.
            bRet = handleIncomingInfoStatus(pSipMessage, messageType);
        }
        else if (pSipMessage && !pSipMessage->isResponse())
        {
            if (method == SIP_INFO_METHOD)
            {
                // ok, the phone has received an INFO message.
                bRet = handleIncomingInfoMessage(pSipMessage);
            }
        }        
    }
    return bRet;
}
UtlBoolean SipXMessageObserver::handleMessage(OsMsg& rMsg)
{
    UtlBoolean bRet = FALSE ;

    switch (rMsg.getMsgType())
    {
       case OsMsg::OS_EVENT:
       {
           OsEventMsg* pEventMsg = (OsEventMsg*) &rMsg ;
           void* eventType ;
           pEventMsg->getUserData(eventType) ;

           switch ((intptr_t)eventType)
           {
               case SIPXMO_NOTIFICATION_STUN:
                   handleStunOutcome(pEventMsg) ;
                   bRet = TRUE ;
                   break ;
           }
           break ;
        }
        case OsMsg::PHONE_APP:
        {
           SipMessage* pSipMessage = (SipMessage*) ((SipMessageEvent&)rMsg).getMessage() ;
           UtlString method;

           pSipMessage->getRequestMethod(&method);

           if (pSipMessage && pSipMessage->isResponse())
           {
               // ok, the phone has received a response to a sent INFO message.
               bRet = handleIncomingInfoStatus(pSipMessage);
           }
           else if (pSipMessage && !pSipMessage->isResponse())
           {
               if (method == SIP_INFO_METHOD)
               {
                   // ok, the phone has received an INFO message.
                   bRet = handleIncomingInfoMessage(pSipMessage);
               }
           }
           break ;
       }
       default:
          break ;
    }
    return bRet;
}