私はソケットと SIP に非常に慣れていませんが、SIP アプリケーションを作成したいと考えています。十分なプログラミング経験があると確信していますが、始めるにはプッシュフォワードが必要です。
問題は、ソケットからの応答が得られず、デバッグ方法がわからないことです。12connect でアカウントを作成し、SIP サーバーのログイン情報を取得しました。ここで、SIP 接続のために開始する必要がある「登録」メッセージを送信しても、何もしません。これは、メッセージを送信するために使用するコードです。
require 'tilt'
module Speaker
HOST = "**.***.**.**"
PORT = 5060
SIP_HOST = "vpbx.12connect.com"
SIP_USER = "username"
SIP_PASS = "*********"
class SIPServer
def initialize
EM.connect SIP_HOST, PORT, Speaker::SIPClient
end
end
class SIPClient < EventMachine::Connection
def post_init
output = Tilt::ERBTemplate.new('tcp/register.erb').render(template_attributes)
puts "\nSending: \n#{output}"
send_data output
end
def receive_data data
puts "From EM Socket: \n"+ data.to_s
end
def template_attributes
{
host: Speaker::HOST,
port: Speaker::PORT,
sip_host: Speaker::SIP_HOST,
sip_user: Speaker::SIP_USER,
sip_pass: Speaker::SIP_PASS
}
end
end
end
送信されるメッセージは次のとおりです。
REGISTER sips:vpbx.12connect.com SIP/2.0
CSeq: 1 REGISTER
Via: SIP/2.0/TCP **.**.**.**:5060
From: <sips:username@vpbx.12connect.com>
To: <sips:username@vpbx.12connect.com>
Contact: <sips:username@**.***.**.**:5060>
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,SUBSCRIBE,NOTIFY,REFER,MESSAGE,INFO,PING
Expires: 3600
Content-Length: 0
Max-Forwards: 70
アプリケーションをローカルで実行し、このアプリを実行している Mac に 5060 ポートを転送しました。
編集:
ネットワーク層に表示されるのは、ポート 50206 および 5060 との間の 12 個の TCP パッケージです。パッケージは、コンピューターのローカル IP からホーム IP に送信されます。また、ポート 50205 から 5060 に送信されるパッケージが 1 つあります。このパッケージは、コンピューターから送信されます。 193.67.129.180 (vpbx.12connect.com) へのローカル IP。12 は私が送信したテスト メッセージからのものでなければならず、2 番目は上記のメッセージです。
もう 1 つの注目すべき点は、12 個のパッケージがすべて 2 つに分かれていることです。1 つはチェックサムが悪く、1 つは良いチェックサムで、残りは各 2 で同じです。
ここで何かが足りないと誰かに教えてもらえますか、私はさまざまなことを試しましたが、私が知る限り、これは必要な方法です..?
前もって感謝します!