※書きかけ。鋭意、バージョンアップ中。しばし、お待ちください。
簡単に言えば、汎用的なパケット送受信ツールです。
JavaScript?でシーケンスとパケットを定義することにより、どんなパケット(テキストベース)でも、送受信可能です。(SIPでもHTTPでもなんでもOKです。)
この特性を利用して、簡単なシミュレーションやテストに使用することが出来ます。
JavaScript?内で使用できるシステム関数です。最新情報は、こちらを参照してください。jsFunction_XXXとなっているものが、上記の関数に相当します。
メソッド | 意味 |
void jsEngine.send(String); | Stringを送信します。 |
String jsEngine.receive(); | 受信待ちをします。受信したメッセージをStringで返します。受信できなかった場合、変数TIMEOUT時間後、タイムアウトします。 |
void jsEngine.importScript(String); | Stringで指定したJavaScript?ファイルをimportします。 |
void jsEngine.print(String); | StringをTracerに表示します。 |
String1 jsEngine.replaceVariables(String2); | String2を変数に従って変換したString1を返します。 |
void jsEngine.setVar(String1,String2); | 変数String1にString2をセットします。 |
String1 jsEngine.getVar(String2); | 変数String2を取得します。 |
void jsEngine.setVariablesForSIPByPacket(String); | 変数StringからSIPヘッダーを取得し、ヘッダー名の大文字を変数名としてセットします。例:Toヘッダーは、変数TOにセットされます。 |
void jsEngine.sleep(int); | intミリ秒停止します。 |
String jsEngine.calcAuth(String authResponse, String requestUri, String username, String password); | 401,407応答、request-URI、ユーザ名、パスワードを渡すと、StringにAuthヘッダーを返します。 |
void jsEngine.setReceiveMode(Boolean b) | trueをセットするとjsEngine.receive()がsent-byのポートで待ち受け、falseにするとjsEngine.receive()がLocalポートで待ち受けをします。 |
システムが最初から用意している変数一覧です。最新情報は、こちらを参照してください。
変数名 | 意味 |
ORIGINAL_PACKET | 最初に送受信したパケット |
CURRENT_PACKET | 現在の送受信したパケット |
RECEIVE_PACKET | 最後に受信したパケット |
SEND_PACKET | 最後に送信したパケット |
LOCAL_IP | ローカルIP |
LOCAL_PORT | ローカルポート |
REMOTE_IP | リモートIP |
REMOTE_PORT | リモートポート |
RECEIVE_IP | VIAのsent-by相当のIP |
RECEIVE_PORT | VIAのsent-by相当のポート |
TRANSPORT_TYPE | トランスポートタイプ |
IS_RECEIVE_MODE | ローカルIPを使用するかsent-byを使用するか |
TIMEOUT | Socketの待ち受けタイムアウト時間(ms) |
JSControllerクラスが外部とのインタフェースを担っています。
〜〜〜〜〜いろいろな処理〜〜〜〜〜 String result = "いろいろな処理の結果"; String jsCode = "jsEngine.setVar(\"RESULT\","\" + result + "\");" + "jsEngine.importScript(\"./mainFunc.js\");"; JSController jsCon = new JSController(); jsCon.execByText(jsCode);
とすることにより、アプリ上からJavaScript?を実行することが出来ます。
mainFunc.jsには、変数RESULTを処理する内容が書かれているものとします。
これは、非常に単純なサンプルです。
例えば、下記のようにすることにより、1xx応答が複数回来ることに対応可能となります。
var receivePacket = new String(); // 200OKパケットであるかをチェック。 while(receivePacket.indexOf("SIP/2.0 200") != 1) { jsEngine.receive(); receivePacket = jsEngine.getVar("RECEIVE_PACKET"); }
このように、JavaScript?の関数や機能を使うことにより、さまざまな状況に対応できます。
https://svn.sourceforge.net/svnroot/siprop/trunk/subProject/MultiPacketer
Jarファイルは、こちらに。