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; } }
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; } }