elb

PJSIP et réception des codes DTMF (RFC 2833)
« le: 15 January 2017 11:06:09 »
Bonjour,

Dans le cadre d'un petit projet personnel, j'utilise la librairie PJSIP pour me connecter au trunk SIP freephonie.net et initier un appel vers un numéro. Jusque là pas de problème, l'appel abouti. Le numéro appelé est celui de ma ligne Free. Le téléphone filaire connecté au Freebox server sonne, et je peux communiquer.

Par contre, ce qui ne fonctionne pas, ce sont les chiffre DTMF, qui ne sont pas transmis. Une fois en communication, lorsque j'appuie sur les touches du téléphone, côté appelant (PJSIP) je ne reçoit pas les codes. Un essai effectué en initiant l'appel depuis un softphone SIP (MicroSIP), directement sur mon réseau domestique et sans passer par freephonie.net,  montre que cela est possible. Le problème n'est donc pas dans mon utilisation de PJSIP.

En regardant les messages échangés entre mon programme PJSIP et le serveur freephonie.net de free, il me semble que c'est freephonie qui ne veut pas permettre l'utilisation des codes DTMF.
Extrait du message envoyé depuis PJSIP vers freephonie.net. J'ai mis en gras la ligne correspondant à l'attribut "telephone-event" de la demande, nécessaire pour l'utilisation des codes RFC 2833 :

INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 78.214.178.85:5060;rport;branch=z9hG4bKPjfaAGUydSJiXP3596dn7K3QL.Z04TF9DI
Max-Forwards: 70
From: sip:[email protected];tag=EsFdwsiQ-jkhkq5nCPJOMc01xn5V-Loc
To: sip:[email protected]
Contact: <sip:[email protected]:5060;ob>
Call-ID: Dk8wOGk.3HE5qykDCQcddnf1VA.-swds
CSeq: 6861 INVITE
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Supported: replaces, 100rel, timer, norefersub
Session-Expires: 1800
Min-SE: 90
User-Agent: PJSUA v2.5.5 Linux-3.4.113/armv7l/glibc-2.19
Content-Type: application/sdp
Content-Length:   470

v=0
o=- 3693423877 3693423877 IN IP4 192.168.0.1
s=pjmedia
b=AS:84
t=0 0
a=X-nat:0
m=audio 4000 RTP/AVP 98 97 99 104 3 0 8 9 96
c=IN IP4 192.168.0.1
b=TIAS:64000
a=rtcp:4001 IN IP4 192.168.0.1
a=sendrecv
a=rtpmap:98 speex/16000
a=rtpmap:97 speex/8000
a=rtpmap:99 speex/32000
a=rtpmap:104 iLBC/8000
a=fmtp:104 mode=30
a=rtpmap:3 GSM/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:9 G722/8000
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-16



La réponse renvoyée par freephonie.net net contient pas l'attribut telephone-event :

SIP/2.0 200 OK
Call-ID: Dk8wOGk.3HE5qykDCQcddnf1VA.-swds
Contact: <sip:172.17.20.241:5062>
Content-Type: application/sdp
CSeq: 6862 INVITE
From: <sip:[email protected]>;tag=EsFdwsiQ-jkhkq5nCPJOMc01xn5V-Loc
Record-Route: <sip:212.27.52.5:5060;transport=udp;lr>
To: <sip:[email protected]>;tag=00-08190-053f389e-217d3bee0
Via: SIP/2.0/UDP 78.214.178.85:5060;received=78.214.178.85;rport=5060;branch=z9hG4bKPjRsvv.XT7iu-hyWIT-mp.LPQ5BoT1Vd3Q
Allow: UPDATE,REFER,INFO
Server: Cirpack/v4.42q (gw_sip)
Content-Length: 185

v=0
o=cp10 148443507793 148443507794 IN IP4 10.109.178.85
s=SIP Call
c=IN IP4 212.27.52.129
t=0 0
m=audio 31194 RTP/AVP 8
b=AS:75
a=rtpmap:8 PCMA/8000/1
a=ptime:30
a=sendrecv


Pourtant, lorsque j'utilise mon fixe pour appeler un serveur vocal, les touches DTMF fonctionnent, heureusement !

Conclusions possibles :
- Freephonie n'accepte pas les codes DTMF lorsque l'appel est reçu depuis un autre user agent que le téléphone fixe relié à la Freebox
- ou bien Freephonie n'utilise pas RFC 2833
- ou bien autre chose ne se passe pas bien dans la négociation

Merci pour votre aide !

Bonne journée
Eric