Ho una domanda piuttosto semplice, ma specifica sull'implementazione del livello di trasporto per un UAC SIP.
Mi aspetto la risposta a una richiesta sullo stesso socket su cui ho inviato la richiesta, o faccio in modo che il listener UDP o TCP prenda la risposta e poi la instradi alla transazione corretta da lì? La RFC non sembra dire nulla in merito.
Sembra che specialmente usando UDP, che è senza connessione, dovrei solo lasciare che gli ascoltatori captino la risposta, ma sembra una sorta di contro intuitivo. In particolare, ho visto molte implementazioni UAC che non dipendono dall'avere un listener nel livello di trasporto.
Inoltre, la maggior parte delle implementazioni che ho visto non hanno il ciclo di ricezione UAS che risponde al socket. Ciò tende a indicare che il client non dovrebbe aspettarsi una risposta sul socket su cui ha inviato la richiesta.
Per chiarimenti:
Supponiamo che il mio livello di trasporto sia costituito dai seguenti elementi:
TCPClient (Sends Requests for a UAC via TCP)
UDPClient (Sends Requests for a UAC vid UDP)
TCPSever (Loop receiving Requests and dispatching to transaction layer via TCP)
UDPServer (Loop receiving Requests and dispatching to transaction layer via UDP)
Ovviamente, il * Client invia le mie richieste. La domanda è: cosa riceve la risposta? Il client * in attesa di una chiamata o di una chiamata recviva dal socket utilizzato per inviare la richiesta, o il * server?
Al contrario, il * Server riceve le mie richieste, Cosa invia la risposta? Il cliente? questo non spezza un po 'i ruoli di ogni membro?
Aggiorna Ho effettuato un'acquisizione di pacchetti su una transazione SIP Invite tra Ekiga e un server PolyCom. Ekiga era il cliente e Polycom era il server. Nella richiesta di invito Ekiga ha utilizzato la porta 5060 nell'intestazione via. 5060 è la porta su cui UAS sta ascoltando, quindi sembrerebbe indicare che l'UDPServer sta ricevendo le risposte a tutte le richieste e non all'UDPClient che ha inviato la richiesta. Questo ragionamento è valido?