FreeSWITCH代码分析之状态机

1 switch_core_state_machine 状态机部分概要
  • 状态机部分实现在switch_core_state_machine.c文件,处理函数是switch_core_session_run()
  • 状态机状态的跳转条件主要是外围逻辑控制,并不是状态机内置好固定的跳转条件,也有跳转条件是状态机内部设定,例如由CS_ROUTING->CS_EXECUTE
  • 改变状态机通过调用: switch_channel_set_state()
  • 当状态发送变化后,状态机内部通过switch_channel_set_running_state()改变running_state,并执行相关的回调来通知其状态已经发生改变了。


2 状态发生改变时,依次执行下面回调
  • endpoint_interface->io_routines->state_run()
  • session->event_hooks.state_run()   //可以通过switch_core_event_hook_add_state()获得
  • endpoint_interface->state_handler  //在STATE_MACRO()
  • switch_event_fire()  //触发SWITCH_EVENT_CHANNEL_CREATE之类的事件,可以通过switch_event_bind()获得

      
3 mod_sofia的状态机跳转
  • CS_NEW ->  CS_INIT : 收到nua_callstate_received时,有SDP
  • CS_INIT -> CS_ROUTING : sofia_on_init()
  • CS_ROUTING -> CS_EXEUTE:
  • CS_EXEUTE ->...


  ...继续

你可能感兴趣的:(状态机,State Machine,freeswitch)