簡単に言えば、汎用的なパケット送受信ツールです。
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を作成します。 |