Ejemplo n.º 1
0
static void iaxc_handle_network_event(struct iax_event *e, int callNo)
{
	if ( callNo < 0 )
		return;

	iaxc_note_activity(callNo);

	switch ( e->etype )
	{
	case IAX_EVENT_NULL:
		break;
	case IAX_EVENT_HANGUP:
		iaxci_usermsg(IAXC_STATUS, "Call disconnected by remote");
		// XXX does the session go away now?
		iaxc_clear_call(callNo);
		break;
	case IAX_EVENT_REJECT:
		iaxci_usermsg(IAXC_STATUS, "Call rejected by remote");
		iaxc_clear_call(callNo);
		break;
	case IAX_EVENT_ACCEPT:
		calls[callNo].format = e->ies.format & IAXC_AUDIO_FORMAT_MASK;
		calls[callNo].vformat = e->ies.format & IAXC_VIDEO_FORMAT_MASK;
		if ( !(e->ies.format & IAXC_VIDEO_FORMAT_MASK) )
		{
			iaxci_usermsg(IAXC_NOTICE,
					"Failed video codec negotiation.");
		}
		iaxci_usermsg(IAXC_STATUS,"Call %d accepted", callNo);
		break;
	case IAX_EVENT_ANSWER:
		calls[callNo].state &= ~IAXC_CALL_STATE_RINGING;
		calls[callNo].state |= IAXC_CALL_STATE_COMPLETE;
		iaxci_do_state_callback(callNo);
		iaxci_usermsg(IAXC_STATUS,"Call %d answered", callNo);
		//iaxc_answer_call(callNo);
		// notify the user?
		break;
	case IAX_EVENT_BUSY:
		calls[callNo].state &= ~IAXC_CALL_STATE_RINGING;
		calls[callNo].state |= IAXC_CALL_STATE_BUSY;
		iaxci_do_state_callback(callNo);
		iaxci_usermsg(IAXC_STATUS, "Call %d busy", callNo);
		break;
	case IAX_EVENT_VOICE:
		handle_audio_event(e, callNo);
		if ( (calls[callNo].state & IAXC_CALL_STATE_OUTGOING) &&
		     (calls[callNo].state & IAXC_CALL_STATE_RINGING) )
		{
			calls[callNo].state &= ~IAXC_CALL_STATE_RINGING;
			calls[callNo].state |= IAXC_CALL_STATE_COMPLETE;
			iaxci_do_state_callback(callNo);
			iaxci_usermsg(IAXC_STATUS,"Call %d progress",
				     callNo);
		}
		break;
#ifdef USE_VIDEO
	case IAX_EVENT_VIDEO:
		handle_video_event(e, callNo);
		break;
#endif
	case IAX_EVENT_TEXT:
		handle_text_event(e, callNo);
		break;
	case IAX_EVENT_RINGA:
		calls[callNo].state |= IAXC_CALL_STATE_RINGING;
		iaxci_do_state_callback(callNo);
		iaxci_usermsg(IAXC_STATUS,"Call %d ringing", callNo);
		break;
	case IAX_EVENT_PONG:
		generate_netstat_event(callNo);
		break;
	case IAX_EVENT_URL:
		handle_url_event(e, callNo);
		break;
	case IAX_EVENT_CNG:
		/* ignore? */
		break;
	case IAX_EVENT_TIMEOUT:
		iax_hangup(e->session, "Call timed out");
		iaxci_usermsg(IAXC_STATUS, "Call %d timed out.", callNo);
		iaxc_clear_call(callNo);
		break;
	case IAX_EVENT_TRANSFER:
		calls[callNo].state |= IAXC_CALL_STATE_TRANSFER;
		iaxci_do_state_callback(callNo);
		iaxci_usermsg(IAXC_STATUS,"Call %d transfer released", callNo);
		break;
	case IAX_EVENT_DTMF:
		iaxci_do_dtmf_callback(callNo,e->subclass);
		iaxci_usermsg(IAXC_STATUS, "DTMF digit %c received", e->subclass);
        	break;
	default:
		iaxci_usermsg(IAXC_STATUS, "Unknown event: %d for call %d", e->etype, callNo);
		break;
	}
}
Ejemplo n.º 2
0
void handle_events(const SDL_Event& event)
{
    switch (event.type)
    {
#ifdef USE_SDL2
    case SDL_WINDOWEVENT:   
        handle_window_event(event);
    break;
    case SDL_TEXTINPUT:
        handle_text_event(event);
        break;
    case SDL_MOUSEWHEEL:
        handle_mouse_event(event);
        break;
    case SDL_FINGERMOTION:
        handle_mouse_event(event);
        break;
    case SDL_FINGERUP:
        handle_mouse_event(event);
        break;
    case SDL_FINGERDOWN:
        handle_mouse_event(event);
        break;
#endif
    case SDL_KEYDOWN:
        handle_key_event(event);
        break;
    case SDL_KEYUP:
        handle_key_event(event);
        break;
    case SDL_MOUSEMOTION:
        handle_mouse_event(event);
        break;
    case SDL_MOUSEBUTTONUP:
        handle_mouse_event(event);
        break;
    case SDL_MOUSEBUTTONDOWN:
        handle_mouse_event(event);
        break;
    case SDL_JOYAXISMOTION:
        handle_joy_event(event);
        break;
    case SDL_JOYBUTTONDOWN:
        handle_joy_event(event);
        break;
    case SDL_JOYBUTTONUP:
        handle_joy_event(event);
        break;
    case SDL_QUIT:
        quit(0);
        break;
    default:
    #ifdef OUYA
        if(event.type == OuyaControllerManager::BUTTON_DOWN_EVENT)
        {
            if(OuyaController::ButtonEnum(int(event.user.data1)) == OuyaController::BUTTON_O)
                input_continue = true;
            else if(OuyaController::ButtonEnum(int(event.user.data1)) == OuyaController::BUTTON_DPAD_UP)
                scroll_amount = 5;
            else if(OuyaController::ButtonEnum(int(event.user.data1)) == OuyaController::BUTTON_DPAD_DOWN)
                scroll_amount = -5;
            else if(OuyaController::ButtonEnum(int(event.user.data1)) == OuyaController::BUTTON_MENU)
                sendFakeKeyDownEvent(SDLK_ESCAPE);
            key_press_event = 1;
        }
        else if(event.type == OuyaControllerManager::AXIS_EVENT)
        {
            const OuyaController& c = OuyaControllerManager::getController(event.user.code);
            
            // This should not be in an event or else it's jerky.
            float v = c.getAxisValue(OuyaController::AXIS_LS_Y) + c.getAxisValue(OuyaController::AXIS_RS_Y);
            if(fabs(v) > OuyaController::DEADZONE)
                scroll_amount = -5*v;
        }
    #endif
        break;
    }
}