📄 sip_incall_state.hxx
字号:
//====================================================================// // Copyright (C) 2006-2008, Frank.Ning// // Filename: sip_incall_state.hxx// Author: Frank.Ning <zegong.ning@dinglicom.com>// Description: // // $Id:$// //====================================================================#ifndef __SIP_INCALL_STATE_HXX__#define __SIP_INCALL_STATE_HXX__static const char* const sip_incall_state_hxx_version = "$Id:$";#include "state.hxx"struct sip_incall_state : public fsm::state<sip_incall_state, FetionInviteStateList, bool>{ bool on_process( shared_ptr<sip_cmd> cmd , ua_agent* parent ) { ua_callctl& ua = ua_callctl::instance( ); parent->set_last_sip_cmd_msg( cmd ); if( cmd->get_method( ) == "A" || cmd->get_method( ) == "ACK" ) { return true ; } if( cmd->get_method( ) == "C" || cmd->get_method( ) == "CANCEL" ) { shared_ptr<sip_status> status = parent->build_ok_msg( cmd ); parent->set_last_sip_status_msg( status ); ua.get_output_channel( )->add( shared_ptr<sip_event>( status ) ); parent->stop( ); return true ; } if( cmd->get_method( ) == "B" || cmd->get_method( ) == "BYE" ) { shared_ptr<sip_status > status = parent->build_ok_msg( cmd ); parent->set_last_sip_status_msg( status ); ua.get_output_channel( )->add( shared_ptr<sip_event>( status ) ); parent->stop( ); return true ; } return false ; } bool on_process( shared_ptr<sip_status> status , ua_agent* parent ) { if( status->get_status_code( ) == 200 ) { return true ; } return false ; } bool on_process( shared_ptr<keyboard_msg> msg, ua_agent* parent ) { bool result = false ; ua_callctl& ua = ua_callctl::instance( ); switch( msg->get_cmd( ) ) { case "CANCEL": { shared_ptr<sip_cmd> cancel = parent->build_cancel_msg( parent->get_last_sip_cmd_msg( ) ); parent->set_last_sip_cmd_msg( cancel ); ua.get_output_cahnncel( )->add( shared_ptr<sip_event>( cancel ) ); switch_to<sip_cancel_state>( ); result = true ; } break ; case "BYE": { shared_ptr<sip_cmd> bye = parent->build_bye_msg( parent->get_last_sip_cmd_msg( ) ); parent->set_last_sip_cmd_msg( bye ); ua.get_output_channel( )->add( shared_ptr<sip_event>( bye ) ); switch_to<sip_bye_state>( ); result = true ; } break ; default: break ; } return result; }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -