freeswitchカーネル研究ノート(継続更新)



 Freeswitchカーネル研究交流グループを建設しました。45211986、参加を歓迎します。また、SIPベースの通信サーバとクライアントソリューションを提供します。
 
ばらばらなので、先にこの足跡を残して、ゆっくりと整理を加えます。
1. freeswitchの内線番号は全部conf/directoryディレクトリの下に保存されています。
システム起動時に分機情報をメモリにロードし、登録パケットを受信するとdirectoryディレクトリの下のusrが検索され、登録要求のto、fromヘッダドメインのドメイン名はシステム所在のドメイン名であり、
分機配置ファイルの階層構造:
  domain 
       グループ
            グループ
              
                  アメリカ
  
                  アメリカ
             
            グループ 
        グループ         
  domain
directoryディレクトリの下にいくつかのxmlファイルが含まれています。各ユーザに対してxml profileができます。システム起動時に動的にロードします。
文書配置用の屋外以外にも、mod_を通すことができます。xml_curlモジュールアクセスweb server,web serverは
データベースにアクセスして、大量の内線の追加を実現します。
このユーザに付加された変数は、ユーザのプロファイルに設定できます。
directoryディレクトリの内容をロードすると、システムのすべてのモジュールに獲得され、データの冗長性を減らすことができます。
dialplanグローバル変数は$ アクセス、チャネル変数は$
conf/var.xmlファイルはシステムのグローバル変数を定義しています。
単一ユーザのプロファイルテンプレート
<include>
<パラms>

<param name=「realm」value=「iptel.org」/>
<!--iptel.org requires a'proxy'parameter-->

>>

設定を有効にする:
cli実行:
sofia profile external retart reloadxml(このコマンドは通話中の内線を切って、より安全な方法はsofia profile efile external realcan reloadxml)
cli実行sofia status 
 システムの設定情報を返します。
 主に2種類に分けます。1.ゲートウェイ(gateway)2.ローカル登録ユーザ(profile)
mod xml ucurl:
このモジュールはAsterisk realtimeとほぼ同じ構造であり、このモードによってfreeswitchが必要な時に外部データベースまたはWeb Serverに動的にアクセスできるようにすることで、動的制御freeswitchのコアを実現することができる。
例えば、分機の追加はデータベースで構成され、freeswitchはこのモジュールで分機をロードすることができます。
このモジュールでバインディングできます。
1.dialplan 
 
<param name=「gateway-url」value=「http://localhost:8080「bindings=」Dialplan「/」
呼び出しごとに、システムは8080に先にアクセスします。

2.プロファイル
sofia.com nfファイル:
global_settingノード:
  サブノード: 
        log-level
トラック
        debug-presence
debug-sla
aut-retart
rewrite-multicated-fs-path
 
トシホスト
オリジナリティ
オリジナリティナ
profilesノード: conf/sipuplofiles/*.xml
   デフォルトは二つあります 
   インターナールx.ml
            external.xml
freeswitch高性能技術特性:memory pool、task queue、event driven、multihread、hash、state Machine、メモリプール、マルチスレッド、タスクキュー、イベントドライブ、ハッシュ、ステートマシン。
カーネル起動フロー:2つの関数
スウィッチコアの初期化を担当しています。
       apper canitialize()
       switch(ucore)ionuinit、
       スウィッチウォッチ、
       switch sonit、
       switch-uevent_init、
       スウィッチ、
switch_log_init、
スウィッチ
switch Ucheduler Uutaskh readtart
switch Uunt、
スウィッチ、
switch_loadableumoduleuinit 各モジュールの初期化。
コールフロー:呼び出し
 sipプロトコルスタックはトランスポート層からsipメッセージを受信して、最終的にSIPUA層に移り、sofia_uevent_ucallback->sofia_uqueue_umesgeに入る。
sofia_msggghreadtart->sofiaggurun->
ソフィア・プランク---------------------           
->ourchoffia-uevent ucallback->sofia_handlesip invite->switch
              
switch-switch-switch-usessitiongh read-ulaunch->switch-switch-s witch-usessision-uth read-ulaunch->switch
その他にも:  fifo、conferrance、switch
     enterpressity-uoriginated-s witgoingnal->s witch-s witch-ucore-usessitiongggment->sofiatgonnel->s witch-s witchort
freeswitchカーネルのいくつかの概念:session、chanle、tecuplivate、イベント、
コアは、コール中の各状態に対応するコールバックを有限状態マシンによって管理する。
一つの呼び出しがシステムに入った後に、一つのチャンネルを作ります。このchanleはserverメンテナンスのsessionに属しています。コアは状態マシンを通じてsessionをスケジュールして、イベントの流れを実現します。
典型的な呼の流れはuac 1-uals、ualc 2、ual c 1-bridge-ual c 2、呼はシステムに入り、sessionを確立してからswitchを起動します。状態に応じて対応するコールバックを呼び出します。もちろん、ここの状態マシンは状態が限られています。freestch以下の状態です。
ワンガルイニ、
オン・クロウティンググ、
onuuexecute、
ワンハング、
オンナチャンジ
オンオフセット、
onuconsumemoedia、
オンナベルナ、
オンレセット、
onuplark、
one porting
オハイスト
実際の呼び出しプロセスは、これらの状態の流れです。
ual c 1-uals:呼入システム、システム確立session:
ソフィア·ハンドル·ヴィテ->switch
解析要求後はCSuNEW->CSuINITから、 初期化後にdialplanに入ります。CSuINIT->CSuROUTING、ステータスマシンフィードバックswitch。
システムは、メインの呼び出しに従って、被呼されたsip設定は、その対応するdialplanを検索し、メモリにロードし、
コール状態変換:CSuROUTING->CSuEXECUT、状態マシーンはSwitchを呼び出し、必要に応じてコールサービスを提供します。bridactionに実行すると、システムの呼び出しが開始されます。を選択して、ual 2のサーバー端でのsession、chanelを作成します。
最後に状態マシンスレッドswitchを起動して、CSuNEW->CSuROUTING->CSuCONSUMEDIA、
usc 2最終応答200 okは、サーバが200 ok sdpメッセージに基づいてuc 1から提供されたsdpと協議し、成功後に200 okをuc 1に送信し、呼び出しブリッジに成功しました。
ステートマシンのフローノード:
/*!
  \enum switch_channel_state_t
  \brief Channel States (these are the defaults, CS_SOFT_EXECUTE, CS_EXCHANGE_MEDIA, and CS_CONSUME_MEDIA 
            are often overridden by specific apps)
<pre>
CS_NEW       - Channel is newly created.
CS_INIT      - Channel has been initilized.
CS_ROUTING   - Channel is looking for an extension to execute.
CS_SOFT_EXECUTE  - Channel is ready to execute from 3rd party control.
CS_EXECUTE   - Channel is executing it's dialplan.
CS_EXCHANGE_MEDIA  - Channel is exchanging media with another channel.
CS_PARK      - Channel is accepting media awaiting commands.
CS_CONSUME_MEDIA         - Channel is consuming all media and dropping it.
CS_HIBERNATE - Channel is in a sleep state.
CS_RESET      - Channel is in a reset state.
CS_HANGUP    - Channel is flagged for hangup and ready to end.
CS_REPORTING - Channel is ready to collect call detail.
CS_DESTROY      - Channel is ready to be destroyed and out of the state machine
</pre>
 */