JAIN SIP #2

JAIN SIP #2

ก่อนอื่นผมขอเกรินนำถึงเป้าหมายของผมก่อน
ผมสนใจเกี่ยวกับ เทคโนโลยี IMS ซึ่งตอนนี้ผมได้ทดลองติดตั้ง OpenIMS และ ใช้งานได้แล้ว คราวนี้ ผมต้องการที่จะสร้าง Services สักตัว ในระบบ IMS ผมต้องทำไงดีเนี่ย? ก็หาข้อมูลใน Internet ก็ได้ความว่าจะต้องสร้าง Services ใน Application Server เอ... แล้วจะทำไงละ Keyword แรก ที่หาเจอก็คือ JAIN SIP นั่นเอง

หลังจากที่ผมได้พยายามศึกษากับ JAIN SIP API จนเข้าใจ Concept การทำงานว่า JAIN SIP ประกอบไป ด้วย ส่วนประกอบที่สำคัญดังนี้

SIP Factory ->  SIP Stack -> Listening Point -> SIP Provider

SIP Factory เป็น Singleton class ที่ทำหน้าที่ผลิต SIP Stack instance ออกมา  เมื่อเราได้ SIP Stack แล้วเราก็เอาเจ้านี่แหละ ไปสร้าง SIP Stack จากนั้นก็เอา SIP Stack ไป สร้าง Listening Point และ SIP Provider

Method หลัก ๆ ที่จำเป็นต้องสนใจก็คือการ กำหนดค่าเริ่มต้นให้กับตัวแปร รวมถึง object ต่าง ๆ ตามที่ผมได้กล่าวไปข้างต้น ซึ่งเราต้องทำตาม step อยู่แล้ว แต่ ส่วนที่เราสามารถเขียนโปรแกรมเพิ่มเติมก็คือใน method ที่ไปสืบทอดจาก interface นั่นก็คือ

public void processRequest(RequestEvent requestEvent) {
        Request request = requestEvent.getRequest();
        ServerTransaction serverTransactionId = requestEvent
                .getServerTransaction();
        System.out.println("\n\nRequest " + request.getMethod()
                + " received at " + sipStack.getStackName()
                + " with server transaction id " + serverTransactionId);

}

เมื่อ server หรือ client ได้รับ SIP message มันก็จะเข้ามาทำใน method นี้เองครับ

ใครสนใจทดลองก็ ลองไปเปิด code ใน ตัวอย่าง ซึ่งจะอยู่ใน
folder jain-sip\src\examples\simplecallsetup ดูได้นะครับ

ผมใช้เวลาศึกษาเจ้า JAIN-SIP อยู่ประมาณ 1 สัปดา์ห์เต็ม ๆ จนพอจะเข้าใจการทำงานของมันบ้าง แต่ในตัวอย่างที่ให้มานั้น (SimpleCallSetup) มีเฉพาะการ Invite-Ack-Bye ไม่มีการ Register ก่อน ผมก็เลยไม่สามารถทดสอบโปรแกรมพวกนี้ กับ SipPhone ที่ใ้ช้อยู่ในปัจจุบัน เช่น X-Lite , Softphone, Ekiga ฯลฯ

ก็เลยพยายามลองเขียน Register Message เอง แต่ก็ยังไม่ work (นี่ขนาดยังไม่ได้ไปแตะกับ IMS เลยน่ะเนี่ย) แล้วตัวอย่าง การใช้ JAIN-SIP กับ IMS ก็ค่อนข้าง Abstract มาก ๆ ก็เลยทำให้วนไปหาของเจ้าอื่นดูบ้าง

ก็ไปเจอกับเจ้า SipServlet (มีตัวอย่างชื่อว่า CallSetup) ที่พัฒนามาจาก Sailfin (เป็นลูก ของ Glass Fish J2EE) ที่สามารถเรียกใช้งานได้จาก Netbean อ่านดูรายละเอียดก็น่าสนใจดี   เพราะ เราสามารถ deploy เป็น Application Server โดยใช้ แนวความคิดของ B2BUA เลย  แต่พอเอามาทดลองใช้ ปรากฎ ว่า SipServlet ไม่สามารถ แสดง Session ที่ Sip Client ส่งมาให้ได้ (คือ Sip Client Register ไม่ได้ว่างั้นเหอะ) 

โ้อ้...  ทำไงดีละเนี่ย ผมก็หาข้อมูลไปเรื่อย ๆ  และ แล้ว ผมก็มาพบรัก เอ้ย!! ไม่ใช่ มาเจอกับสิ่งที่ผมต้องการจนได้ นั่นก็คือ SDS 4.1 จาก Ericsson !!  มันคืออะไรหว่า?? คอยติดตามตอนต่อไป ตอนนี้ผมกำลังสนุกกับมันอยู่ครับ  :-)