2014-04-30 3 views
0

SipSorcery를 사용하여 새 구독을 만들 수 있습니까? TCP 연결이 초기 가입 만료 타이머 이내에 사망 한 경우 어떻게합니까? 쓰기 지금은 만료 타이머를 실행하는 데 문제가 있습니다, 그것은 경과 할 때 연결이 다음과 같이 설정되어있는 경우, 나는 확인하고 있습니다 :Subscription with SipSorcery

아이디어는 다음 60 초 정도 기다렸다가 새를 보내려고했다
while (!tcpChannel.IsConnectionEstablished(myRemoteEndpoint)) 
{ 
    //... using same from tag, but creating new call id saved as SIPRequest _request... 
    System.Threading.Thread.Sleep(1000 * 60); 
    tcpChannel.Send(myRemoteEndpoint, Encoding.UTF8.GetBytes(_request.ToString()); 
} 

SUBSCRIBE를 서버에 연결하고 60 senconds 후에 연결이 설정 될 때까지 다시 실행되지 않으면 연결이 설정되었는지 확인하십시오.

그러나 .IsConnectionEstablished는이 목적에 조금 신뢰할 수없는 것처럼 보입니다 ... while 루프가 무언가를 차단하고 있습니다. 내 SUBSCRIBE 요청이 발송되었음을 알 수 있지만 요청에 대한 응답을받지 못했습니다.

모든 아이디어가 유용합니다.

답변

1

IsConnectionEstablished 확인을 수행 할 필요가 없습니다. tcpChannel.Send를 호출하면 사용할 수없는 경우 필요한 끝점에 대한 새 TCP 연결을 설정합니다.

CSeq, 지점 ID, Call-ID &과 같은 필수 헤더를 태그없이 업데이트하지 않고 반복적으로 동일한 요청을 다시 보내는 경우 다음 SUBSCRIBE 요청에 대한 응답을받지 못하는 이유에 대해 중복 요청으로 플래그되었습니다.

또한 SIP 서버와의 가입을 유지 관리하기 위해 SIPSorcery.SIP.App.SIPNotifierClient를보고 싶을 수도 있습니다.

+0

타이머가 경과 할 때 연결이 여전히 다운 된 경우 요청을 보내려고하지만, 아무런 응답도 얻지 못한다는 것이 문제입니다. 약 60 초가 지나면 이전 구독 만료에 도달 했으므로 연결을 확인하고 새 구독 요청을 보내려고합니다. 이것에 대한 제안? – grmihel

+0

SPTCPChannel 클래스는 메시지를 보낼 것인지 묻는 메시지가 표시되면 연결을 다시 설정해야합니다. 타이머에 도달하면 특별한 일을 할 필요가 없습니다. 재전송이 발생하면 로그 메시지가 나타 납니까? – sipwiz

+0

알다시피, 문제는 내 타이머가 경과하면 타이머가 중지되고 SendRequest가 시작되고 응답이 수신되고 200 OK가되면 타이머가 수신 된 만료 시간 내에 다시 시작된다는 것입니다. 200 OK 메시지. 따라서 새 타이머의 시작은 TimerElapsed 이벤트 외부에 있습니다. 경과 시간에 SendRequest를 시작하려고 할 때 연결이 끊어지면 응답을받지 못합니다. 요청이 전송 된 후 연결이 다시 설정 되어도 타이머가 실행되지 않고 내 응답이 전송되지 않습니다. 응용 프로그램이 더 이상 SIP 통신을 의미하지 않는 "죽을 것이다". 이것에 어떤 식 으로든? – grmihel