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
A kapcsolat bontásához további 2 üzenet szükséges:
  • 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!