「Extension Macro To Gosub」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(基本的な記述)
(MacroからGosubへの移行)
 
(同じ利用者による、間の15版が非表示)
1行目: 1行目:
 
==MacroからGosubへの移行==
 
==MacroからGosubへの移行==
Asterisk 16からMacro()が廃止予定とされ、デフォルトではコンパイルされなくなりました(menuconfigで明示指定すれば使えます)。<BR>
+
Asterisk 16からMacro()が廃止予定とされ、デフォルトではコンパイルされなくなりました(Asterisk 20までならmenuconfigで明示指定すれば使えます)。<BR>
このためMacroで実装している場合にはGosubに書き換えることを推奨します。<BR>
+
(以前から廃止したかったらしいが、ずるずると使用されていたので16で思い切ってデフォルトから外した模様)<BR>
Asterisk 13でもGosubは使用できますので早めの対策が良いです。
+
Asterisk 21ではMacroは廃止され、LTSであるAsterisk 22でも完全に削除されています。このためMacroで実装している場合にはGosubに書き換えてください。<BR>
 +
Asterisk 13からGosubは使用できますので早めの対策が必要です。<BR>
 +
<BR>
 +
変更の方法としては、これまでMacroで呼び出されるマクロはcontextにmacro-を指定していましたが、GosubはGosub(context,exten,pri)の呼び出し方に変わるため、Macro(hoge)で書いていたものを、Gosub(macro-hoge,s,1)のように書き換えます。またMacroExitしていた箇所をRetunに書き換える必要があります。
 
===基本的な記述===
 
===基本的な記述===
 
extenで以下のように記述している場合
 
extenで以下のように記述している場合
19行目: 22行目:
 
  exten => s,1,NoOp
 
  exten => s,1,NoOp
 
  exten => s,n,Some_app()
 
  exten => s,n,Some_app()
  exten => s,n,Retrun
+
  exten => s,n,Return
 
===引数がある場合===
 
===引数がある場合===
 
extenで以下のように記述している場合
 
extenで以下のように記述している場合
40行目: 43行目:
 
  exten => s,n,NoOp(${ARG2})
 
  exten => s,n,NoOp(${ARG2})
 
  exten => s,n,Some_app()
 
  exten => s,n,Some_app()
  exten => s,n,Retrun
+
  exten => s,n,Return
 +
contextにmacro-が付いているのがイヤだという場合にはここも書き換えましょう。ただし、サブルーチンだとわかりやすいので残しておいても構いませんし、何ならsub-みたいな接頭語を付けてもいいかもしれません。
 +
 
 +
===Dial()コマンドのマクロ(M)===
 +
Asterisk 13のDial()で、Dialコマンドのマクロ(M)はapp_macroには依存していない。app_macroがない状態でもMオプションは動作する。<br>
 +
Asterisk 16のDial()ではDialコマンドのマクロ(M)も動作しなくなる。移行が必要。<BR>
 +
→何となくコンパイル時オプションのような気がしている(app_macroをコンパイルしないとDialにも組み込まない)
 +
Dial(SIP/201,,M(hoge,1,2,3))
 +
これは
 +
Dial(SIP/201,,U(macro-hoge,1,2,3))
 +
で書き換えが可能。ただしmacro-hogeは最後がReturnになるように書き足すことが必要です。<BR>
 +
DialマクロからのGosub呼び出しは何も指定しないとGosub(hoge,s,1)と同じになるので呼び出し元はUに書き換え、頭にmacro-を付けるだけです。
 +
 
 +
===荒療治でのチェック方法===
 +
Asterisk CLIから module unload app_macroを実行し、Macroを無効にした状態でextenを走らせて落ちる箇所を探す。
 +
 
 
==参考==
 
==参考==
 +
https://wiki.asterisk.org/wiki/display/AST/Asterisk+16+Application_Gosub
 +
https://wiki.asterisk.org/wiki/display/AST/Asterisk+16+Application_Return

2024年12月9日 (月) 02:34時点における最新版

MacroからGosubへの移行

Asterisk 16からMacro()が廃止予定とされ、デフォルトではコンパイルされなくなりました(Asterisk 20までならmenuconfigで明示指定すれば使えます)。
(以前から廃止したかったらしいが、ずるずると使用されていたので16で思い切ってデフォルトから外した模様)
Asterisk 21ではMacroは廃止され、LTSであるAsterisk 22でも完全に削除されています。このためMacroで実装している場合にはGosubに書き換えてください。
Asterisk 13からGosubは使用できますので早めの対策が必要です。

変更の方法としては、これまでMacroで呼び出されるマクロはcontextにmacro-を指定していましたが、GosubはGosub(context,exten,pri)の呼び出し方に変わるため、Macro(hoge)で書いていたものを、Gosub(macro-hoge,s,1)のように書き換えます。またMacroExitしていた箇所をRetunに書き換える必要があります。

基本的な記述

extenで以下のように記述している場合

exten => s,n,Macro(hogehoge)

この場合Macroは以下のように定義されているはず

[macro-hogehoge]
exten => s,1,NoOp
exten => s,n,Some_app()
exten => s,n,MacroExit


以下のように書き換えます
exten側

exten => s,n,Gosub(macro-hogehoge,s,1)

macro側

[macro-hogehoge]
exten => s,1,NoOp
exten => s,n,Some_app()
exten => s,n,Return

引数がある場合

extenで以下のように記述している場合

exten => s,n,Macro(hogehoge,HOG1,HOG2)

この場合Macroは以下のように定義されているはず

[macro-hogehoge]
exten => s,1,NoOp
exten => s,n,NoOp(${ARG1})
exten => s,n,NoOp(${ARG2})
exten => s,n,Some_app()
exten => s,n,MacroExit


以下のように書き換えます
exten側

exten => s,n,Gosub(macro-hogehoge,s,1(HOG1,HOG2))

macro側

[macro-hogehoge]
exten => s,1,NoOp
exten => s,n,NoOp(${ARG1})
exten => s,n,NoOp(${ARG2})
exten => s,n,Some_app()
exten => s,n,Return

contextにmacro-が付いているのがイヤだという場合にはここも書き換えましょう。ただし、サブルーチンだとわかりやすいので残しておいても構いませんし、何ならsub-みたいな接頭語を付けてもいいかもしれません。

Dial()コマンドのマクロ(M)

Asterisk 13のDial()で、Dialコマンドのマクロ(M)はapp_macroには依存していない。app_macroがない状態でもMオプションは動作する。
Asterisk 16のDial()ではDialコマンドのマクロ(M)も動作しなくなる。移行が必要。
→何となくコンパイル時オプションのような気がしている(app_macroをコンパイルしないとDialにも組み込まない)

Dial(SIP/201,,M(hoge,1,2,3))

これは

Dial(SIP/201,,U(macro-hoge,1,2,3))

で書き換えが可能。ただしmacro-hogeは最後がReturnになるように書き足すことが必要です。
DialマクロからのGosub呼び出しは何も指定しないとGosub(hoge,s,1)と同じになるので呼び出し元はUに書き換え、頭にmacro-を付けるだけです。

荒療治でのチェック方法

Asterisk CLIから module unload app_macroを実行し、Macroを無効にした状態でextenを走らせて落ちる箇所を探す。

参考

https://wiki.asterisk.org/wiki/display/AST/Asterisk+16+Application_Gosub https://wiki.asterisk.org/wiki/display/AST/Asterisk+16+Application_Return