2005年02月18日

teleo プロトコル編

どうやら、メッセージは、HTTP+XMLで制御メッセージは通信しています。
ということは、TCPなんですね。
やはり、UDPで制御メッセージのやりとりってアレゲなのかなぁ。
UDPで、やりとりすると、どうしても分割の問題が発生してしまって
他網と接続することを考えたりすると非常に厳しいんですよね。
ほかにも、暗号化しようとしたときに問題もありますし。。。

ちなみに、音声は、RTPをそのまま使用しています。UDPです。




下記に代表的なメッセージのサンプルをピックアップ。
(こんなの書いて、開発元からつっこまれたらやばいなぁ。
つっこまれたら、速攻、削除するので、その辺ご了承ください。)

●ログインメッセージ。
_| ̄|○ ガックシ・・・ また、パスワードは平文かよ。。。
と、いきなりへこみ気味ですが、気を取り直して。

さて、メッセージとしては、単純ですね。
SIPのREGISTERをかなり単純にした物という感じで、あまり、つっこむ
ようなところはないですね。
ただ、バージョン番号が、下記の2種類あるのが気になります。
う〜ん、これだけ内容が違う物が入っているというのは、いやな感じで
すね。

<version id="1.0">
<version id="clientManager-client XML v0.9">

・サーバへの送信メッセージ
<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
  <version id="1.0">
    <date>02/16/2005</date>
    <ip>192.168.100.191</ip>
    <mid>073106872</mid>
  </version>
  <sipRegister>
    <uName>teleo2@noritsuna.jp</uName>
    <Password>password</Password>
  </sipRegister>
</clientMsg>

・サーバからの応答メッセージ

<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="clientManager-client XML v0.9">
<date>Wed, 16 Feb 2005 03:25:01 GMT</date>
<mid>073106872</mid>
</version>
<tAck>
<errno>200</errno>
<errmsg>Ok</errmsg>
</tAck>
</serverMsg>





●プレゼンス情報
ユーザリストに登録されている人の生存情報がサーバから送れてきます。
そのときのメッセージです。

<sipAccountStatus>

が、肝の部分。

<accountBalance>

が、謎ですが、それ以外は、見たまんまと言うところ。
これが、そのうち拡張されるのかが、個人的には興味アリです。


・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="">
<date>Wed, 16 Feb 2005 03:25:01 GMT</date>
<mid>236411472</mid>
</version>
<sipAccountStatus>
<uName>teleo2@noritsuna.jp</uName>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
<accountBalance>0.5</accountBalance>
<DID>15109041126</DID>
</sipAccountStatus>
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>236411472</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>



ちなみに、

<sipAccountStatus>

だけではなく

<sipOk>

という、ものもあるみたい。
どう違うのかは、現在不明。




●コール(発信)
通話した時のメッセージ内容。
これは、SIPとは違う動きをするようなので、詳細に追ってみたいと思います。


1,最初に、どこと通話をしたいのかネゴシエーションをとる。

これは、接続先が、teleoやGW、SIPなどいろいろなプロトコルとの相互接続を
考えているために、プロトコルのネゴシエーションをしているのではないかと
思います。

・サーバへの送信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>073131767</mid>
</version>
<sipOutboundCall>
<uName>teleo2@noritsuna.jp</uName>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
<called>15109041126</called>
<receivePort>30000</receivePort>
</sipOutboundCall>
</clientMsg>

・サーバからの応答メッセージ1


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="clientManager-client XML v0.9">
<date>Wed, 16 Feb 2005 03:25:26 GMT</date>
<mid>073131767</mid>
</version>
<tAck>
<errno>200</errno>
<errmsg>Ok</errmsg>
</tAck>
</serverMsg>

・サーバからの応答メッセージ2(相手もOKという情報)


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="">
<date>Wed, 16 Feb 2005 03:25:26 GMT</date>
<mid>450446506</mid>
</version>
<sipOk>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<uName>teleo2@noritsuna.jp</uName>
<callID>77757717-3332-8208-4376-688581188635</callID>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</sipOk>
</serverMsg>





2,サーバから相手のメディアに関するネゴシエーションが送信されてくる。
SIPでは、発信するクライアントが「1」のパケットにSDPという形で載せるのが

一般的ですが、teleoは、全く逆な形を取っているようです。
(ちなみに、このように動くSIPもあります。ACKにアンサーSDPを載せます)

ちなみに、SDPに相当する部分は、かなり似通っていますね。

・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id='sipManager-stateMachine XML v0.9'>
<date>Wed, 16 Feb 2005 03:25:26 GMT</date>
<mid>086512035</mid>
</version>
<sipRTPConnect m='audio'>
<callID>77757717-3332-8208-4376-688581188635</callID>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
<rtpAddress direction='IN' type='IP4'>216.143.130.43</rtpAddress>
<rtpPort>9232</rtpPort>
<availableMedia>
<codec a='rtpmap:101' >
<version>telephone-event</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:3' >
<version>GSM</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:18' >
<version>G729</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:8' >
<version>PCMA</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:0' >
<version>PCMU</version>
<rate>8000</rate>
</codec>
</availableMedia>
</sipRTPConnect>
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>450446506</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>





3,サーバから相手のメディアに関する最終応答が送信されてくる。
相手が、受話器を取った状態です。
内容的には、mid以外、同じ物のようです。

これは、SIPで言うところの200応答に相当する物のようです。

・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id='sipManager-stateMachine XML v0.9'>
<date>Wed, 16 Feb 2005 03:25:34 GMT</date>
<mid>387355624</mid>
</version>
<sipRTPConnect m='audio'>
<callID>77757717-3332-8208-4376-688581188635</callID>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
<rtpAddress direction='IN' type='IP4'>216.143.130.43</rtpAddress>
<rtpPort>9232</rtpPort>
<availableMedia>
<codec a='rtpmap:101' >
<version>telephone-event</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:3' >
<version>GSM</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:18' >
<version>G729</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:8' >
<version>PCMA</version>
<rate>8000</rate>
</codec>
<codec a='rtpmap:0' >
<version>PCMU</version>
<rate>8000</rate>
</codec>
</availableMedia>
</sipRTPConnect>
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>387355624</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>





4,「3」のメッセージ直後、サーバからACK相当送信されてくる。

これは、SIPで言うところのACKに相当する物のようです。
これといった、特徴はありません。

・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="">
<date>Wed, 16 Feb 2005 03:25:34 GMT</date>
<mid>435870003</mid>
</version>
<sipOk>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<uName>teleo2@noritsuna.jp</uName>
<callID>77757717-3332-8208-4376-688581188635</callID>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</sipOk>
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>435870003</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>





●BYE(切断)
切断した時のメッセージ内容。
SIPと違い、両方で投げ合うような動きをしています。

課金を伴うサービスであるため、切断には、万全の体制を取るのが普通であり
当然の仕様と考えられます。
万が一、切断情報が相手に届かなければ、誤課金へつながるおそれがあるため
です。

・サーバへの送信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>073160559</mid>
</version>
<sipHangUp>
<callID>77757717-3332-8208-4376-688581188635</callID>
<uName>teleo2@noritsuna.jp</uName>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</sipHangUp>
</clientMsg>

・サーバからの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="clientManager-client XML v0.9">
<date>Wed, 16 Feb 2005 03:25:54 GMT</date>
<mid>073160559</mid>
</version>
<tAck>
<errno>200</errno>
<errmsg>Ok</errmsg>
</tAck>
</serverMsg>



サーバ側から、再度、同じ切断メッセージが送信されてきます。

・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="">
<date>Wed, 16 Feb 2005 03:25:54 GMT</date>
<mid>472351630</mid>
</version>
<sipHangUp>
<uName>teleo2@noritsuna.jp</uName>
<callID>77757717-3332-8208-4376-688581188635</callID>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</sipHangUp>
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>472351630</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>





●セッションタイマ
サーバ主導型のようです。定期的に、送信されてきます。

まぁ、NAT越えしているので、その方が、よいのかもしれません。
ただのポーリングといえば、それまでですが。(^-^;A

・サーバからの受信メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<serverMsg>
<version id="clientManager-client XML v0.9">
<date>Wed, 16 Feb 2005 03:25:31 GMT</date>
<mid>708746305</mid>
</version>
<teleoHeartbeat />
</serverMsg>

・サーバへの応答メッセージ


<?xml version='1.0' encoding="UTF-8"?>
<clientMsg>
<version id="1.0">
<date>02/16/2005</date>
<ip>192.168.100.191</ip>
<mid>708746305</mid>
</version>
<tAck>
<status>OK</status>
<errmsg>SUCCESS</errmsg>
<sessionID>52896CBF-110C-4708-A1C8-833EB8CCAF4C</sessionID>
</tAck>
</clientMsg>

以上。

Creative Commons License
This weblog is licensed under a Creative Commons License.