はじめに
SDKの内容
このSDKリファレンスマニュアルでは、Windows2000/XPおよびPocketPC2003上での動作をサポートします。各種設定および動作確認は同じSDKを元に作成しているエイジフォンをサンプルアプリケーションとして参考にしてください。
また、当SDKに関する質問はサポート契約を結び、サポート窓口開設を行っていただいている方に限定させていただいております。あらかじめご了承ください。
サポート窓口開設については弊社のサポートにご連絡下さい。
当SIPSDKでは以下の規約に準拠してつくられています。
RFC3261: SIP: Session Initiation Protocol
RFC2327: SDP: Session Description Protocol
RFC1889: RTP: A Transport Protocol for Real-Time Applications
RFC2833: RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals
RFC3489: STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs)
RFC3581: An Extension to the SIP for Symmetric Response Routing
UPnP :Universal Plug and Play IGDVoIP SDKの内容物
sipd.dll
sipd.lib
sipsdk.h
サンプルソース
リファレンスマニュアル(当ファイル)
ファイル構成
このサンプルプロジェクトではマイドキュメントのMy Phone Boothフォルダにある
sipd.confを設定ファイルとして扱います。(例) C:\Documents and Settings\username\My Documents\My Phone Booth
sipd.conf iniファイル形式でSIPに関する情報を記述できます。
sipuser.txt 着信したときの振る舞いを記述できます。
sipd.log ログを記録しています。着信履歴や、発信履歴はここから情報を得ることができます。
sipd.conf
全般の設定
[General]
LocalHostAddress=
GlobalHostAddress=
NatTrav=2
Realm=ageet.com
SipPort=5060
RtpPortStart=5004
RtpPortEnd=5059
MediaTypes=3 0 8 101
DocumentRoot=C:\My Documents\My Phone Booth
Userfile=\My Documents\My Phone Booth\sipuser.txt
Logfile=\My Documents\My Phone Booth\sipd.log
RegisterServer=taraba.net
PrimaryStunServer=s1.taraba.net
SecondaryStunServer=
StunKeepAlive=1
HostIndex=0
key=****************
ServerLess=0
Dumpfile=C:\Documents and Settings\USER\デスクトップ\dump.txt※文字の背景が黄色の項目は必須項目です
LocalHostAddress 自分のローカルIPアドレスを記入します。省略した場合は自動的に検出します。「アドレス:ポート番号」で記述します。NAT越えを行うときは空白に設定してください。
GlobalHostAddress 自分のグローバルIPアドレスを記入します。NatTrav=2のときに省略した場合は自動的に検出します。それ以外の場合はLocalHostAddressを使うようになります。また、ドメイン名の記入も可能です。「アドレス:ポート番号」で記述します。NAT越えを行うときは空白に設定してください。
NatTrav NAT越えを行う方法を記述します。0はNAT越えを行いません。
1は予約されています。(指定することは出来ません。)
2はUPnP、およびSTUNを使ったNAT越えを行います。まず、UPnPで試し、ルーターがUPnPに対応しているか確認します。対応していなけれ ば、STUNを使ってNAT越えを行います。この時、PrimaryStunServerの記述が必須になります。Realm 通 常SIPのアドレスの@以降をRealmとして扱っています。これは設定ファイルのセクション名に該当します。また、認証時、Realmを指定して認証が 行われる場合、別のセクション名にユーザーID&パスワードを記録することができるように設計されています。また、オープンソースのSIPサーバー 「Asterisk」では認証時のrealmがデフォルトでAsteriskとなっていますのでご注意ください。
SipPort SIPの待ち受けるポート番号を指定できます。
RtpPortStart RTPの待ち受ける最初のポート番号を指定できます。RTPは音声セッション1つあたり1つの偶数ポートを使用します。使える番号は 1024から 65000までです。
RtpPortEnd RTP の待ち受ける最後のポート番号を指定できます。必ず 1024から 65000までです。より3以上大きい番号にしてください。 1024から 65000までです。5004と5006を使用する場合は次のような書き方になります。MediaTypes 使 用するPayloadタイプの番号を記述します左から優先順位が高くなっています。101は必ず末尾に記載してください。番号の間はスペース(0x20) です。 3 = GSM610 / 0 = G.711u / 8 = G.711a
DocumentRoot このSIPエンジンで扱うファイルのルートとなる場所 (フォルダのフルパス名)を記述します。
Userfile ユーザーデータファイル(sipuser.txt)の場所をフルパス 名で指定します。ユーザーリストのReloadが頻繁に繰り返される場合は、ここのパス名をご確認ください。
Logfile ログファイルの出力場所をフルパス名で指定します。この行をコメントにすればログをはき出しません。
例)行頭にセミコロンをつける
;Logfile = C:\My Documents\My Phone Booth\sipd.logRegisterServer 起動時、レジスターを自動的に行うサーバーをRealm名(セクション名)で記述します。複数指定するときは、','カンマで区切ることができます。
PrimaryStunServer STUNを使ってNAT越えを行うときに、このパラメータを使います。ここにはSTUNのサーバー名を記述します。
SecondaryStunServer STUNを使ってNAT越えを行うときに、このパラメータを使います。ここにはSTUNのサーバー名を記述します。(予備用です)
StunKeepAlive STUNを使ってNAT越えを行うときにKeepAliveパケットを送る場合ここを1にします。送らないときは0にします。通常1です。
HostIndex 複 数のネットワークインターフェースを持っているときに、どのインターフェースを使うのかを指定できます。ここの数字はhostent構造体のインデックス 番号になります。通常1つのインターフェースですがその場合は0を指定します。 自動で選択させる場合は-1を指定します。
key ライセンスに対し発行されるシリアルキー(ハイフンを省いた半角英数字)を書きます。省略した場合や間違っている場合は、通話時間制限があります。 このシリアルキーによりネットワークに流れるSIPパケットにライセンス証明番号が記載されます。
ServerLess サーバーを利用しない場合1をセットします。
Dumpfile SIPパケットのダンプをテキストで出力します
RingingTimeout 着信中のタイムアウト値を設定します。着信の動作がタイムアウトされると 、「タイムアウト後の動作」として設定されている着信時の動作になります。(v1.5以降)
サーバー情報の詳細設定
Realmを識別できるセクション名として扱い、そのセクション内にパラメータを書いていくことができます。
[ageet.com]
Proxy=ageet.com
Registrar=
ServerAddress=peer.ageet.com
DisplayUserID=05037777777
DisplayUserName=05037777777
AuthorizationUserID=XXXXYYYY
XXXXYYYY=********
RegisterExpires=3600
SessionExpires=0
DTMF=0
ptime=20
SymmetricResponseRouting=0
MediaType=0
DialPrefix =
DialSuffix =
Proxy SIPプロクシーサーバーを指定します。(必須)
Registrar SIPレジストラサーバーを指定します。
ServerAddress 当SIPエンジンが、SIPパケットを直接送信するSIPサーバーを指定します。
DisplayUserID SIPのUSERIDです。(必須)
DisplayUserName USERの表示名です。
AuthorizationUserID 認証要求があった場合に使用するUSERIDです。パスワードは、このUSERIDをキーとして書いた場合の値をパスワードとして使用します。
RegisterExpires レジスターのタイムアウトになる秒数を記述します。
SessionExpires 通話セッションのタイムアウトになる秒数を記述します。0はrefresherがuasの場合で、整数のときはuacの秒数になります。
DTMF DTMF送出方法です。0がInbandで1がInband+RFC2833を使ったDTMF信号を送ります。
SymmetricResponseRouting 1をセットすることで、RFC3581 An Extension to the Session Initiation Protocol (SIP) for Symmetric Response Routing を有効にします。この場合GeneralセクションのNATTravの値は4に設定してください。
MediaType このサーバーをつなぐために最低限必要なコーデックがある場合そのペイロードタイプを指定します。(v1.5以降)
DialPrefix SIPのリクエスト行に使われるダイヤル先アドレスの先頭に任意の文字列を挿入します。(v1.5以降)
DialSuffix SIPのリクエスト行に使われるダイヤル先アドレスの末尾に任意の文字列を挿入します。(v1.5以降)
オーディオデバイスの設定
[Audio]
SpeakerDeviceID = 0
RingDeviceID = 0
MicrophoneDeviceID = 0
VAD = 0
Rec = 1
SpeakerDeviceID 通話時に使う音声デバイスのIDを指定します
RingDeviceID 着信時に使う音声デバイスのIDを指定します
MicrophoneDeviceID 通話時に使うマイクデバイスのIDを指定します
VAD 無音を検知し、無音時のパケットを送りません
Rec 通話の録音を行います。保存先のフォルダはDocumentRootの\recというフォルダになります
MMRESULT mmResult;
int i, nDevNum;
WAVEOUTCAPS woc;
//システムにインストールされている再生デバイスの数
nDevNum = waveOutGetNumDevs();
for(i = 0 ; i < nDevNum ; i++)
{
mmResult = waveOutGetDevCaps((UINT)i, &woc, sizeof(WAVEOUTCAPS));
if(mmResult == MMSYSERR_NOERROR)
{
// i の値が SpeakerDeviceID の値と同じ意味です
}
}
WAVファイルストリーミングの設定
このWaveセクションでは、自動応答時の再生するWAVファイルを指定することができます。
AutoAnswer 留守番電話メッセージの最初に流れるアナウンスのWAVファイルの場所をフルパスで指定します。
[Wave]
AutoAnswer=C:\Program Files\AGEphone\autoans.wav
Separater=C:\Program Files\AGEphone\sep.wav
NoMessage=C:\Program Files\AGEphone\nomsg.wavSeparater 区切りを表す音のWAVファイルの場所をフルパスで指定します。
NoMessage 録音なし自動応答メッセージのWAVファイルの場所をフルパスで指定します。
WAVファイルの形式は次のような44バイトのwaveファイルヘッダをサポートします。形式は8000Hz 16bit monoのみです。
const unsigned char waveFileHeader[44] =
{
0x52,0x49,0x46,0x46,0x24,0x00,0x00,0x00,
0x57,0x41,0x56,0x45,0x66,0x6D,0x74,0x20,
0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
0x40,0x1F,0x00,0x00,0x80,0x3E,0x00,0x00,
0x02,0x00,0x10,0x00,0x64,0x61,0x74,0x61,
0x00,0x00,0x00,0x00
};sipuser.txt
ユーザー名 Password 動作モード 日付 * * UA 12/31/2099 12345678 * UA 12/31/2099 05037777777 * UA 12/31/2099 2001 * fw: このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にしてください .0.1 12/31/2099 *Timeout * * 12/31/2099 ※単語の間隔はすべてtabになっていますのでご注意ください
ユーザー名 ここに記述したUSERIDによって着信したときの動作を記述します。'*'を指定した場合、ユーザーIDが省かれて着信を受けたときの動作を記述します。'*Timeout'という名前は予約されており、着信時のタイムアウト後の動作を指定できます。(v1.5以降)
パスワード 通常は'*'を指定します。それ以外は記述しないようにしてください。
動作モード 'UA' =通常の待ちうけ。'Answerphone'=留守番電話。'VoiceMail'=音声によるアナウンスを流します。'*'=いつもオフライン状態で あるという動作をします。'fw:SIPアドレス' でその指定されたSIPアドレスへダイヤルし、その通話を着信時の相手へ中継します。(v1.5以 降)
日付 現在は使われていません。
1行あたり、1アカウントの設定を書くことが可能です。10アカウント分記入することができます。
