JAIN SIP คืออะไร?
Jain sip คือ Java api integrated network หรือ เรียกง่าย ๆ ว่า เป็น API ของ java ที่ใช้ในการเขียนโปรแกรมในระดับ low-level ที่ใช้จัดการ signaling multimedia ที่ใช้งาน SIP protocol นั่นเอง
Jain sip แตกย่อยออกมา มากมาย เช่น jain sip servlet, jslee ไว้ มีโอกาสได้ทดลองจะเอามาเขียนไว้นะครับ
เรามาทดลองเล่น jain-sip เลยดีกว่า
1. load jain-sip จาก https://jain-sip.dev.java.net/ จากนั้นก็ upzip ออกมา
2. load apache ant มาจาก http://ant.apache.org/ จากนั้นก็ unzip ออกมา แล้วก็ทำการ set environment ดังนี้
=> ANT_HOME=C:\Program Files\Java\apache-ant-1.7.1
PATH= path เก่าแล้วก็เพิ่ม C:\Program Files\Java\apache-ant-1.7.1\bin เข้าไป
3. เข้าไปใน folder E:\java\sip\jain-sip\ (ที่ได้ unzip jain-sip ไว้) แล้ว ant (make) มันซะเลย
4. ทดลอง run IMS application เข้าไปที่ folder E:\java\sip\jain-sip\src\examples\ims
แล้วก็สั่ง ant shootme
5. จะเจอ error ดังนี้ =>
[java] javax.sip.PeerUnavailableException: The Peer SIP Stack: gov.nist.javax.sip.SipStackImpl could not be instantiated. Ensure the Path Name has been set
6. หลังจากที่ผมใช้เวลาอยู่หลายชั่วโมง ในการ หา error นี้ ก็ได้ความรู้ใหม่ โดยการทำดังนี้
สั่ง ant shootme -debug จะพบว่ามันหา lib ไม่เจอ ดังนั้นจึงต้องแก้ lib path ให้มันใหม่ โดยการ แก้ file E:\java\sip\jain-sip\src\examples\ims\build.xml
จากเดิม
< property name="log4j_jar" value="${root}/lib/${log4j}" >
< property name="junit_jar" value="${root}/lib/${junit}" >
เป็น
< property name="log4j_jar" value="${root}/${log4j}" >
< property name="junit_jar" value="${root}/${junit}" >
7. คราวนี้ก็ สั่ง ant shootme แล้วก็เปิด console อีกหน้าต่างสั่ง ant shootist
เราก็จะเห็น IMS message วิ่งวนไป ๆ มา ๆ หน้า console แล้ว

ส่วนเรื่องความหมายของ message ขอแยกไว้เป็นบทความหน้าแล้วกันนะครับ :-)
[java] createSipStack gov.nist.javax.sip.SipStackImpl@1386000
[java] Address already in use
[java] javax.sip.InvalidArgumentException: Address already in use
[java] at gov.nist.javax.sip.SipStackImpl.createListeningPoint(SipStackImpl.java:778)
[java] at examples.simplecallsetup.Shootist.init(Shootist.java:256)
[java] at examples.simplecallsetup.Shootist.main(Shootist.java:384)
[java] Caused by: java.io.IOException: Address already in use
[java] at gov.nist.javax.sip.stack.UDPMessageProcessor.<init>(UDPMessageProcessor.java:141)
[java] at gov.nist.javax.sip.stack.SIPTransactionStack.createMessageProcessor(SIPTransactionStack.java:1742)
[java] at gov.nist.javax.sip.SipStackImpl.createListeningPoint(SipStackImpl.java:760)
[java] ... 2 more
สวัสดีครับ ผมติด Error นี้ครับ
บนรันบน ubuntu ครับ
พอมีวิธีแก้ไหมครับ
ผมก็เคยเจอครับ เป็นเพราะว่า โปรแกรมนี้ใช้ port นี้ อยู่ แล้วเวลา terminate program ไม่สมบูรณ์ ทำให้ไม่สามารถสร้าง ListeningPoint ได้ครับ วิธีการแก้ไขคือต้องไป terminate process java ให้หมด ลองดูคำสั่ง ps ตรวจสอบได้ครับ (หรืออาจะลองเปลี่ยน port) หรือให้ ชัวร์ restart เครื่องใหม่ ลอง run ดูก็น่าจะได้ (ถ้าไม่มีโปรแกรมอื่นใช้ port นี้อยู่นะครับ)