「Extension Macro To Gosub」の版間の差分
(→MacroからGosubへの移行) |
(→MacroからGosubへの移行) |
||
(同じ利用者による、間の12版が非表示) | |||
1行目: | 1行目: | ||
==MacroからGosubへの移行== | ==MacroからGosubへの移行== | ||
− | Asterisk 16からMacro()が廃止予定とされ、デフォルトではコンパイルされなくなりました( | + | Asterisk 16からMacro()が廃止予定とされ、デフォルトではコンパイルされなくなりました(Asterisk 20までならmenuconfigで明示指定すれば使えます)。<BR> |
− | + | (以前から廃止したかったらしいが、ずるずると使用されていたので16で思い切ってデフォルトから外した模様)<BR> | |
− | Asterisk | + | Asterisk 21ではMacroは廃止され、LTSであるAsterisk 22でも完全に削除されています。このためMacroで実装している場合にはGosubに書き換えてください。<BR> |
+ | Asterisk 13からGosubは使用できますので早めの対策が必要です。<BR> | ||
<BR> | <BR> | ||
− | + | 変更の方法としては、これまでMacroで呼び出されるマクロはcontextにmacro-を指定していましたが、GosubはGosub(context,exten,pri)の呼び出し方に変わるため、Macro(hoge)で書いていたものを、Gosub(macro-hoge,s,1)のように書き換えます。またMacroExitしていた箇所をRetunに書き換える必要があります。 | |
===基本的な記述=== | ===基本的な記述=== | ||
extenで以下のように記述している場合 | extenで以下のように記述している場合 | ||
21行目: | 22行目: | ||
exten => s,1,NoOp | exten => s,1,NoOp | ||
exten => s,n,Some_app() | exten => s,n,Some_app() | ||
− | exten => s,n, | + | exten => s,n,Return |
===引数がある場合=== | ===引数がある場合=== | ||
extenで以下のように記述している場合 | extenで以下のように記述している場合 | ||
42行目: | 43行目: | ||
exten => s,n,NoOp(${ARG2}) | exten => s,n,NoOp(${ARG2}) | ||
exten => s,n,Some_app() | exten => s,n,Some_app() | ||
− | exten => s,n, | + | exten => s,n,Return |
contextにmacro-が付いているのがイヤだという場合にはここも書き換えましょう。ただし、サブルーチンだとわかりやすいので残しておいても構いませんし、何ならsub-みたいな接頭語を付けてもいいかもしれません。 | 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_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