You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.4 KiB
Go
162 lines
5.4 KiB
Go
3 years ago
|
package siptemplate
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type SIPTmpl struct {
|
||
|
Template []string
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
INVITETMPL_ID = iota
|
||
|
ACKTMPL_ID
|
||
|
BYETMPL_ID
|
||
|
OK200INVITETMPL_ID
|
||
|
OK200BYETMPL_ID
|
||
|
REGI_ID
|
||
|
MAX_ID
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
inviteTmpl string
|
||
|
ackTmpl string
|
||
|
byeTmpl string
|
||
|
ok200InviteTmpl string
|
||
|
ok200ByeTmpl string
|
||
|
regiTmpl string
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
inviteTmpl = fmt.Sprint("INVITE sip:%s@192.168.0.21:3000;transport=udp SIP/2.0\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.21:5090;branch=z9hG4bKac596453013\r\n" +
|
||
|
"Max-Forwards: 69\r\n" +
|
||
|
// "From: <sip:%s@192.168.0.21>;tag=1c867251551\r\n" +
|
||
|
"From: <sip:%s@192.168.0.21>;tag=1c867251551\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21;user=phone>\r\n" +
|
||
|
"Call-ID: %s\r\n" +
|
||
|
"CSeq: 1 INVITE\r\n" +
|
||
|
"Contact: <sip:%s@192.168.0.21:3000>\r\n" +
|
||
|
"Supported: em,100rel,timer,replaces,path,resource-priority,sdp-anat\r\n" +
|
||
|
"Allow: REGISTER,OPTIONS,INVITE,ACK,CANCEL,BYE,NOTIFY,PRACK,REFER,INFO,SUBSCRIBE,UPDATE\r\n" +
|
||
|
"User-Agent: M800B/v.7.20A.204.759\r\n" +
|
||
|
"Content-Type: application/sdp\r\n" +
|
||
|
"Content-Length: %d\r\n" +
|
||
|
"\r\n" +
|
||
|
"v=0\r\n" +
|
||
|
"o=AudiocodesGW 1879481090 705321541 IN IP4 192.168.0.21\r\n" +
|
||
|
"s=Phone-Call\r\n" +
|
||
|
// "c=IN IP4 192.168.0.222\r\n" + // IP4는 로컬이 아니라서 고정을 해도될듯
|
||
|
"c=IN IP4 %s\r\n" +
|
||
|
"t=0 0\r\n" +
|
||
|
"m=audio %d RTP/AVP 8 0 18 101\r\n" +
|
||
|
// "m=audio %d RTP/AVP 8 0 18 101\r\n" +
|
||
|
"a=ptime:20\r\n" +
|
||
|
"a=sendrecv\r\n" +
|
||
|
"a=rtpmap:8 PCMA/8000\r\n" +
|
||
|
"a=rtpmap:0 PCMU/8000\r\n" +
|
||
|
"a=rtpmap:18 G729/8000\r\n" +
|
||
|
"a=fmtp:18 annexb=no\r\n" +
|
||
|
"a=rtpmap:101 telephone-event/8000\r\n" +
|
||
|
"a=fmtp:101 0-15")
|
||
|
|
||
|
ackTmpl = fmt.Sprint("ACK sip:%s@192.168.0.21:5090;transport=udp SIP/2.0\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.21:5090;branch=z9hG4bKac390123597\r\n" +
|
||
|
"Max-Forwards: 69\r\n" +
|
||
|
"From: <sip:%s@192.168.0.221>;tag=1c867251551\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21;user=phone>;tag=MTY0OTExODIxODQxMzQ5NTY1Mw--\r\n" +
|
||
|
"Call-ID: %s\r\n" +
|
||
|
"CSeq: 1 ACK\r\n" +
|
||
|
"Contact: <sip:%s@192.168.0.21:5090>\r\n" +
|
||
|
"Supported: em,timer,replaces,path,resource-priority\r\n" +
|
||
|
"Allow: REGISTER,OPTIONS,INVITE,ACK,CANCEL,BYE,NOTIFY,PRACK,REFER,INFO,SUBSCRIBE,UPDATE\r\n" +
|
||
|
"User-Agent: M800B/v.7.20A.204.759\r\n" +
|
||
|
"Content-Length: 0")
|
||
|
|
||
|
byeTmpl = fmt.Sprint("BYE sip:%s@192.168.0.21:5090;transport=udp SIP/2.0\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.222:5090;branch=z9hG4bKac1246799505\r\n" +
|
||
|
"Max-Forwards: 69\r\n" +
|
||
|
"From: <sip:%s@192.168.0.221>;tag=1c867251551\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21;user=phone>;tag=MTY0OTExODIxODQxMzQ5NTY1Mw--\r\n" +
|
||
|
"Call-ID: %s\r\n" +
|
||
|
"CSeq: 2 BYE\r\n" +
|
||
|
"Supported: em,timer,replaces,path,resource-priority\r\n" +
|
||
|
"Allow: REGISTER,OPTIONS,INVITE,ACK,CANCEL,BYE,NOTIFY,PRACK,REFER,INFO,SUBSCRIBE,UPDATE\r\n" +
|
||
|
"User-Agent: M800B/v.7.20A.204.759\r\n" +
|
||
|
"Reason: Q.850 ;cause=16\r\n" +
|
||
|
"Content-Length: 0")
|
||
|
|
||
|
ok200InviteTmpl = fmt.Sprint("SIP/2.0 200 OK\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.21:5090;branch=z9hG4bKac596453013\r\n" +
|
||
|
"From: <sip:%s@192.168.0.221>;tag=1c867251551\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21;user=phone>;tag=MTY0OTExODIxODQxMzQ5NTY1Mw--\r\n" +
|
||
|
"Call-ID: %s\r\n" +
|
||
|
"CSeq: 1 INVITE\r\n" +
|
||
|
"Contact: <sip:%s@%d:%d;transport=udp>\r\n" +
|
||
|
// "Contact: <sip:%s@192.168.0.21:5090;transport=udp>\r\n" +
|
||
|
"Allow: REGISTER,OPTIONS,INVITE,ACK,CANCEL,BYE,NOTIFY,PRACK,REFER,INFO,SUBSCRIBE,UPDATE\r\n" +
|
||
|
"Supported: timer, path, replaces, sdp-anat\r\n" +
|
||
|
"User-Agent: iCOMSYS_CALLAGENT\r\n" +
|
||
|
"Content-Type: application/sdp\r\n" +
|
||
|
"Content-Length: 226\r\n" +
|
||
|
"\r\n" +
|
||
|
"v=0\r\n" +
|
||
|
"o=iCOMSYS-AGENT 1649118218 1649118219 IN IP4 192.168.0.21\r\n" +
|
||
|
"s=\r\n" +
|
||
|
// "c=IN IP4 192.168.0.21\r\n" +
|
||
|
"c=IN IP4 %s\r\n" +
|
||
|
"t=0 0\r\n" +
|
||
|
"m=audio 21000 RTP/AVP 8 101 \r\n" +
|
||
|
"a=rtpmap:8 PCMA/8000\r\n" +
|
||
|
"a=ptime:20\r\n" +
|
||
|
"a=sendrecv\r\n" +
|
||
|
"a=rtpmap:101 telephone-event/8000\r\n" +
|
||
|
"a=fmtp:101 0-15")
|
||
|
|
||
|
ok200ByeTmpl = fmt.Sprint("SIP/2.0 200 OK\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.21:5090;branch=z9hG4bKac1520651703\r\n" +
|
||
|
"From: <sip:%s@192.168.0.21>;tag=1c1838414031\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21;user=phone>;tag=MTY0ODQyNzQ2NTU4MzMzNDYyMg--\r\n" +
|
||
|
"Call-ID: %s\r\n" +
|
||
|
"CSeq: 2 BYE\r\n" +
|
||
|
"Contact: <sip:%s@192.168.0.21:5090;transport=udp>\r\n" +
|
||
|
"Allow: REGISTER,OPTIONS,INVITE,ACK,CANCEL,BYE,NOTIFY,PRACK,REFER,INFO,SUBSCRIBE,UPDATE\r\n" +
|
||
|
"User-Agent: iCOMSYS_CALLAGENT\r\n")
|
||
|
|
||
|
regiTmpl = fmt.Sprint("SIP/2.0 200 OK\r\n" +
|
||
|
"Via: SIP/2.0/UDP 192.168.0.21;received=192.168.0.21;rport=5090;branch=ZTg1OTUyNWQtMTc3NC00YjJmLWIyZWUtZjg5OTFkOGU0OTU5\r\n" +
|
||
|
"From: <sip:%s@192.168.0.21>;tag=MTY0ODcwMDU1MzQ5OTM3NzQ2Mw--\r\n" +
|
||
|
"To: <sip:%s@192.168.0.21>;tag=1c2023025228\r\n" +
|
||
|
"Call-ID: %s@192.168.0.21\r\n" +
|
||
|
"CSeq: 0 REGISTER\r\n" +
|
||
|
"Contact: <sip:%s@192.168.0.21:5090;transport=udp>;expires=3600\r\n" +
|
||
|
"Expires: 3600\r\n" +
|
||
|
"Content-Length: 0\r\n\r\n")
|
||
|
}
|
||
|
|
||
|
var onceTemplate sync.Once
|
||
|
var gTemplate *SIPTmpl
|
||
|
|
||
|
func GetTemplate() *SIPTmpl {
|
||
|
return gTemplate
|
||
|
}
|
||
|
|
||
|
func Init() {
|
||
|
onceTemplate.Do(func() {
|
||
|
gTemplate = &SIPTmpl{}
|
||
|
|
||
|
gTemplate.Template = make([]string, MAX_ID)
|
||
|
gTemplate.Template[INVITETMPL_ID] = inviteTmpl
|
||
|
gTemplate.Template[ACKTMPL_ID] = ackTmpl
|
||
|
gTemplate.Template[BYETMPL_ID] = byeTmpl
|
||
|
gTemplate.Template[OK200INVITETMPL_ID] = ok200InviteTmpl
|
||
|
gTemplate.Template[OK200BYETMPL_ID] = ok200ByeTmpl
|
||
|
gTemplate.Template[REGI_ID] = regiTmpl
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func (s *SIPTmpl) String(id int) string {
|
||
|
return s.Template[id]
|
||
|
}
|