SIP protokoll
A feladat egy VoIP kapcsolat kiépítése egy valós IP telefon és a példa alkalmazásunk között. A kapcsolat kiépíthetyő úgy IP telefon, mint PC-n futó softphone irányába (sjphone).
Kiindulási pont a meglévő multimédia kezelő alkalmazás amely képes RTP folyamot küldeni és fogadni adott kódoló használatával.
Egy példa alkalmazás (ha valakinek még nem sikerült volna megcsinálni: media.tar.gz). A zip állomány tartalmazza a teljes projektet, és AMR helyett GSM kódolót használ (mivel az IP telefonok nem támogatják az AMR kódolót).
Valamiért a GSM első fordításkor hibát ad, de másodszorra lefordul minden.
A példa alkalmazás úgy lett módosítva, hogy a teljes multimédia lejátszó ciklus egy külön szálon fut, amelyet a főprogram indít. Indítás előtt a forrás és cél IP cím/port párosokat ki kell tölteni. A program a megadott címek szerint létrehozza a multimédia kapcsolatot: küldi és fogadja az RTP csomagokat és kezeli a hangkártyát is egyszerre.
Ahhoz, hogy egy VoIP hívást felépítsünk SIP segítségével, 3 üzenet támogatására van szükség:
- INVITE küldése
- 200 OK fogadása
- ACK küldése
- BYE küldése/fogadása
- 200 OK fogadása/küldése
Mivel szöveges formátumú üzenetekről van szó, a küldött és kapott üzeneteket írassátok ki a konzolra. A hibakeresésben segíthet a Wireshark is.
Implementáció
Az üzenetek előállítása legkönnyebben "sprintf" parancsokkal lehetséges. Az egyszerűség kedvéért mellékeltem néhány üzenet mintát, amelyet saját adatokra cserélve a kapcsolat kiépíthető:
Tehát a feladat a kapcsolat kiépítése a kiválasztott készülék irányában. A megoldáshoz helyesen kell kitölteni az INVITE üzenet SDP mezőit, valamint parszolni kell a 200 OK üzenetben visszakapott SDP fejlécet. Ezek alapján kell kitölteni a cél és forrás sockaddr struktúrákat, majd az ACK üzenet elküldése után indítható a média folyam.
Figyeljetek az üzenet hosszára is - a "Content-Length:" mezőt helyesen kell kitölteni!