SIP Client Process

ทดลอง download source code เกี่ยวกับ SIP จากหนังสือ => Internet Multimedia Communications Using SIP: A Modern Approach Including Java® Practice  ซึ่งเขียนไว้ดีมาก

ในส่วนของ SIP Client นั้น ผมเข้าไปศึกษาการทำงานของ SoftPhone3Listener.java ซึ่งมี method หลัก ๆ ที่น่าสนใจแยกการทำงานย่อย ๆ เป็นดังนี้

  • ProcessRequest() ได้รับ Request มาจากผู้อื่น
       IDLE          -> Invite จะกำหนด SDP
                       -> Mesg ใช้ส่ง Mesg
       Established -> Bye
                       -> Mesg
       Ringing      -> Cancel  => IDLE
       WaitAck     -> Ack ทำหลังจากรับสายแล้วรอ Ack => Established

  • ProcessResponse() ส่ง Request ไปแล้ว ได้รับ Response มาจากผู้อื่น
       WaitProv    ->  <200   => WaitFinal (ALERT)
                       ->  <300   => Established, startMedia()
                              (ผู้รับรอรับสายก่อนส่ง 180 หาผู้ส่ง)
       WaitFinal   ->   <200  => WaitFinal (ALERT)
                      ->   <300  => Established, startMedia()
                      ->   IDLE
      Registering ->   =200   => IDLE
                      ->   Unregister
       
  • UserInput() เ็ป็นฟังก์ชันที่รับการทำงานจาก GUI
      IDLE          ->  YES   โทรหาผู้รับ สร้าง Invite+SDP => WaitProv
                      -> SendMesg  เริ่มส่งข้อความ
      WaitFinal    -> No   กดตัดสาย  => IDLE
      Established ->  No  รับแล้วตัดสาย => IDLE
                      ->  SendMesg (รับแล้วกดส่งข้อความ)
      Ringing      ->  No กดปุ่ม No ไม่รับสาย => IDLE
                      ->  Yes กดปุ่ม Yes เพื่อรับสาย => StartMedia()
                            (ถ้ารับสายไม่ทันใน 50 วินาที จะส่ง Bye)

ดูรูปประกอบเพื่อความเข้าใจครับ