簡単に言えば、汎用的なパケット送受信ツールです。
JavaScript?でシーケンスとパケットを定義することにより、どんなパケット(テキストベース)でも、送受信可能です。(SIPでもHTTPでもなんでもOKです。)
この特性を利用して、簡単なシミュレーションやテストに使用することが出来ます。
-conf -multipacket.properties ・・・log4jなどのシステム用設定ファイル -js ・・・サンプルJavaScriptファイル -init.js ・・・初期パラメータ設定用 -func_lib_call.js ・・・SIPメッセージ生成用関数ライブラリ -basic_var.js ・・・基本的なSIPヘッダー変数用ライブラリ -basic_message.js ・・・基本的なSIPメッセージ変数用ライブラリ -standard_reg_uac_auth.js ・・・一般的なREGISTERシーケンス・認証あり -standard_call_uac.js ・・・一般的なUAC通話シーケンス -standard_call_uac_auth.js ・・・一般的なUAC通話シーケンス・認証あり -standard_call_uas.js ・・・一般的なUAS通話シーケンス -lib -JainSipApi1.1.jar ・・・Jain-SIPライブラリ -nist-sdp-1.0.jar ・・・Jain-SIPライブラリ -nist-sip-1.2.jar ・・・Jain-SIPライブラリ -log ・・・log4j用のログファイル出力先ディレクトリ -src -main ・・・本体のソースファイル -test ・・・test用ソースファイル -pom.xml ・・・Maven2用設定ファイル -build.xml ・・・実行用設定ファイル(ant用ファイル) -install-path.bat ・・・Maven2用の外部ライブラリインストール用バッチ -install-path.sh ・・・Maven2用の外部ライブラリインストール用バッチ
var requestUri = "sip:req@siprop.org";
jsEngine.setVar("REQUEST_URI", requestUri);
var requestLine = "INVITE {REQUEST_URI} SIP/2.0\r\n";
jsEngine.setVar("REQUEST_LINE", requestLine);
var INVITE_REQUEST = "INVITE {REQUEST_URI} SIP/2.0\r\n" +
"Call-ID:{CALL_ID}\r\n" +
"CSeq:{CSEQ_NUM} {METHOD}\r\n" +
"VIA:SIP/2.0/{TRANSPORT_TYPE} {LOCAL_IP}:{LOCAL_PORT};branch={BRANCH}\r\n" +
"From:\"{FROM_DISPLAYNAME}\" <{FROM_URI}>;tag={FROM_TAG}\r\n" +
"To:\"{TO_DISPLAYNAME}\" <{TO_URI}>\r\n" +
"Contact:<sip:{LOCAL_IP}:{LOCAL_PORT}>\r\n" +
"Allow: INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,MESSAGE\r\n" +
"Max-Forwards:70\r\n" +
"Content-Type: application/sdp\r\n" +
"Content-Length:{CONTENT_LENGTH}\r\n\r\n" +
"{STANDARD_SDP}";
// createACK()関数が定義されたライブラリの呼び出し
jsEngine.importScript("./js/func_lib_call.js");
// INVITEを送信
jsEngine.send(INVITE_REQUEST);
// 200OKを受信して、OK_RESPONSEにその内容をセットする。
var OK_RESPONSE = jsEngine.receive();
// 200OKから、ACKリクエストを生成する。
var ACK_REQUEST = createACK(OK_RESPONSE);
// 上記で、生成したACKを送信する。
jsEngine.send(ACK_REQUEST);
// 200OKパケットであるかをチェック。
var OK_RESPONSE = new String();
while(OK_RESPONSE.indexOf("SIP/2.0 200") != 1) {
OK_RESPONSE = jsEngine.receive();
}
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(待ち受けIP) |
| LOCAL_PORT | ローカルポート(待ち受けポート) |
| REMOTE_IP | リモート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を処理する内容が書かれているものとします。
| コマンド | 意味 |
| mvn compile | ソースをコンパイルします。 |
| mvn test | テストを実行します。 |
| mvn package | jarファイルを作成します。 |
| mvn install | build.xmlに沿って、実行します。 |
| mvn site | javadocを作成します。 |