FreeSWITCH mod_xml_radiusモジュールのドキュメント

ネットワークを掘り下げたところ、ドキュメントが見つかりませんでした。 タスクは、このモジュールを構成して、後でサポートに転送できるようにすることです。 したがって、ソースは調査され、テキストは以下に書かれています。 彼が誰かを助けることを願っています。 このテキストは、FreeSWITCHですでに機能していることが理解できるように書かれています。 したがって、このテキストでFreeSWITCHの紹介を始めることはお勧めしません。



これとは別に、モジュールのソースコードにいくつかの(非常に小さな)変更が加えられたことに注意したいと思います。詳細は、発行の最後にあります。



現在、モジュール(2014年10月14日)には、ドキュメントはほとんどありません。 以下のすべての情報は、ソースコード、テーマメーリングリスト、およびその他のドキュメント(変更履歴を含む) wiki.freeswitch.org/wiki/Mod_xml_radiusを学習することで得られます。



デバッグはコンソールからオンになりません(理由-HZ、理解できませんでした)。 ソースに含まれる例をモジュール構成ファイルに含めるには、セクションを追加します。



<global> <param name="debug" value="7"/> </global>
      
      



値は0以外の値にすることができます(ブール変数としてチェックされます)。



モジュールの構成ファイルでauth_inviteやauth_regなどのセクションが定義されている場合(ソースモジュールでauth_inviteセクションのみがチェックされ、パラメーターが明らかに異常にロードおよびチェックされる場合、コピーアンドペーストブロックを作成し、 2つの場所)、モジュールbinditはグローバル構成の処理セクションを要求します
 <param name="xml-handler-bindings" value="directory"/>
      
      



標準のmod_xml_curlメカニズムを使用してイベントおよびリクエストを処理する独自の関数(frisvich Webサイトの対応するドキュメントを参照) この場合、処理されるイベントのsip_auth_methodフィールドが定義され、値が「INVITE」または「REGISTER」である場合にのみ、実際の作業が発生します。 この場合、スイッチはそれ自体を認証できるXML構成を返します。



モジュールは、提供された独自の構成と辞書に従ってRADIUS要求を入力します。 パラメータ文字列の名前の各値には、フォーマット文字列に従って、変数値で指定されたチャネル変数からの値が割り当てられます(そのようなチャネル変数がない場合、variable_secondaryからの値)。



モジュールは、スイッチ.on_routingおよび.on_reportingのグローバルイベント用の独自のハンドラーを定義します。



 1135 static const switch_state_handler_table_t state_handlers = { 1136 /*.on_init */ NULL, 1137 /*.on_routing */ mod_xml_radius_accounting_start, 1138 /*.on_execute */ NULL, 1139 /*.on_hangup */ NULL, 1140 /*.on_exchange_media */ NULL, 1141 /*.on_soft_execute */ NULL, 1142 /*.on_consume_media */ NULL, 1143 /*.on_hibernate */ NULL, 1144 /*.on_reset */ NULL, 1145 /*.on_park */ NULL, 1146 /*.on_reporting */ mod_xml_radius_accounting_end 1147 };
      
      





チャネル状態がそれぞれROUTINGおよびREPORTINGに変化すると、イベントが生成されます。 設定ファイルのacct_startセクションとacct_endセクションで少なくとも1つのトリガー条件(condition)を定義する必要があります。そうしないと、configセクションの読み込み時にエラーが生成されます(コードはこれを確認しないため、確認する必要があります。この情報はネットワーク)。 これらのハンドラーは、チャネル変数から取得したこれらのスイッチイベントに関する情報をRADIUSに送信します。 構成ファイルの対応するセクションのパラメーター文字列の各名前の値には、フォーマット値に従って、変数値で指定されたチャネル変数からの値が割り当てられます(チャネル変数にない場合は、variable_secondaryから)。



radius_auth(構成ファイルから呼び出すことができるアプリケーション)を呼び出す場合、RADIUSの認証結果が(テキストとして)返されます:認証が成功した場合は0、失敗した場合は負の値(RADIUSが返した)。 実行結果は、radius_auth_resultチャネル変数に書き込まれます。 また、RADIUSの応答でAVペアのセットが受信された場合、アプリケーションは、変数の名前に先頭のradius_sを追加せずに 、対応するチャネル変数作成して入力します(少なくともradius_ addコードが見つかりませんでした)。



個別に、モジュールのソースコードへの私の変更によると。 メッセージをデバッグするために表面的な変更を行い、私見が作者のタイプミスであるという事実を修正します。 以下のモジュールとの差分。 残念ながら、どのバージョンのソースで作業しているかを言うことはできません(gitの使用が苦手です)。 執筆時点では、バージョンは最新であり、ルートソースフォルダーのgit diffを使用してdiffが生成されます。



 diff --git a/src/mod/xml_int/mod_xml_radius/mod_xml_radius.cb/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c index bc75843..94e127a 100644 --- a/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c +++ b/src/mod/xml_int/mod_xml_radius/mod_xml_radius.c @@ -201,7 +201,7 @@ switch_status_t do_config() goto err; } } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Could not find 'auth_invite' section in config file.\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Could not find 'auth_reg' section in config file.\n"); } if ((tmp = switch_xml_child(cfg, "global")) != NULL ) { @@ -741,7 +741,7 @@ switch_xml_t mod_xml_radius_auth_reg(switch_event_t *params) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mod_xml_radius: starting registration authentication\n"); } - if ( mod_xml_radius_new_handle(&new_handle, globals.auth_invite_configs) != SWITCH_STATUS_SUCCESS ) { + if ( mod_xml_radius_new_handle(&new_handle, globals.auth_reg_configs) != SWITCH_STATUS_SUCCESS ) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to load radius handle for registration authentication\n"); goto err; } @@ -849,7 +849,7 @@ static switch_xml_t mod_xml_radius_directory_search(const char *section, const c switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mod_xml_radius: starting authentication\n"); switch_event_serialize(params, &event_buf, SWITCH_TRUE); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Event: %s \n", event_buf); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Section: %s \nTag: %s\nKey_name: %s\nKey_value: %s\n", + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "\nSection: %s \nTag: %s\nKey_name: %s\nKey_value: %s\n", section, tag_name, key_name, key_value); } @@ -1087,7 +1087,7 @@ SWITCH_STANDARD_APP(radius_auth_handle) temp = NULL; if ( result != 0 ) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mod_xml_radius: Failed to authenticate\n"); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mod_xml_radius: Failed to authenticate, authentication result: %d \n", result); goto err; } @@ -1169,7 +1169,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_radius_load) return SWITCH_STATUS_TERM; } - if ( globals.auth_invite_configs ) { + if ( globals.auth_invite_configs && globals.auth_reg_configs ) { status = switch_xml_bind_search_function(mod_xml_radius_directory_search, switch_xml_parse_section_string("directory"), NULL); }
      
      






All Articles