Documentation ¶
Index ¶
- Constants
- Variables
- func Clone(src interface{}, target interface{})
- func IsValidLine(line string) bool
- func RemoveLineCRLF(line string) string
- func ServerDomainHost() string
- func ServerIpHost() string
- type Args
- type CSeq
- type Expires
- type Header
- type HeaderFieldItem
- type MaxForwards
- type Message
- type RecordRoute
- type RequestLine
- type ResponseLine
- type Route
- type StatusCodeItem
- type URI
- type User
- type Via
- type ViaList
- func (vl *ViaList) Add(str string) (err error)
- func (vl *ViaList) AddServerInfo()
- func (vl ViaList) FirstAddrInfo() (string, bool)
- func (vl ViaList) GetValue() []Via
- func (vl *ViaList) RemoveFirst()
- func (vl *ViaList) SetReceivedInfo(transport string, address string)
- func (vl *ViaList) SetValue(v []Via)
- func (vl ViaList) TransactionBranch() (result string)
- func (vl *ViaList) UpdateReceivedInfo()
Constants ¶
View Source
const ( // SIP版本号 SIPVersion = "SIP/2.0" // 协议类型 SchemeSip = "sip" // SIP请求方法-RFC3261 MethodInvite = "INVITE" MethodAck = "ACK" MethodBye = "BYE" MethodCancel = "CANCEL" MethodOptions = "OPTIONS" MethodRegister = "REGISTER" // SIP请求方法-其他协议 MethodPrack = "PRACK" // [RFC3262] MethodSubscribe = "SUBSCRIBE" // [RFC6665] MethodNotify = "NOTIFY" // [RFC6665] MethodPublish = "PUBLISH" // [RFC3903] MethodInfo = "INFO" // [RFC6086] MethodRefer = "REFER" // [RFC3515] MethodMessage = "MESSAGE" // [RFC3428] MethodUpdate = "UPDATE" // [RFC3311] MethodPing = "PING" // [https://tools.ietf.org/html/draft-fwmiller-ping-03] )
View Source
const CRLF = "\r\n"
行分隔符(CRLF)
Variables ¶
View Source
var ( HeaderFieldVia = HeaderFieldItem{"Via", "v"} HeaderFieldFrom = HeaderFieldItem{"From", "f"} HeaderFieldTo = HeaderFieldItem{"To", "t"} HeaderFieldCallID = HeaderFieldItem{"Call-ID", "i"} HeaderFieldCSeq = HeaderFieldItem{"CSeq", ""} HeaderFieldMaxForwards = HeaderFieldItem{"Max-Forwards", ""} HeaderFieldContentType = HeaderFieldItem{"Content-Type", "c"} HeaderFieldContentLength = HeaderFieldItem{"Content-Length", "l"} HeaderFieldContact = HeaderFieldItem{"Contact", "m"} HeaderFieldExpires = HeaderFieldItem{"Expires", ""} HeaderFieldRoute = HeaderFieldItem{"Route", ""} HeaderFieldRecordRoute = HeaderFieldItem{"Record-Route", ""} HeaderFieldUserAgent = HeaderFieldItem{"User-Agent", ""} HeaderFieldAuthorization = HeaderFieldItem{"Authorization", ""} HeaderFieldWWWAuthenticate = HeaderFieldItem{"WWW-Authenticate", ""} )
SIP的头域字段名
View Source
var ( ServerIP string // 区域IP ServerDomain string // 区域域名,用于Via ServerPort int // 区域端口号 )
View Source
var ( // 完全静默 StatusMute = StatusCodeItem{0, "Do Nothing!"} // 1xx - 临时应答 StatusTrying = StatusCodeItem{100, "Trying"} StatusRinging = StatusCodeItem{180, "Ringing"} StatusCallIsBeingForwarded = StatusCodeItem{181, "Call Is Being Forwarded"} StatusQueued = StatusCodeItem{182, "Queued"} StatusSessionProgress = StatusCodeItem{183, "Session Progress"} // 2xx - 成功处理 StatusOK = StatusCodeItem{200, "OK"} // 3xx - 重定向 StatusMultipleChoices = StatusCodeItem{300, "Multiple Choices"} StatusMovedPermanently = StatusCodeItem{301, "Moved Permanently"} StatusMovedTemporarily = StatusCodeItem{302, "Moved Temporarily"} StatusUseProxy = StatusCodeItem{305, "Use Proxy"} StatusAlternativeService = StatusCodeItem{380, "Alternative Service"} // 4xx - 客户端错误 StatusBadRequest = StatusCodeItem{400, "Bad Request"} StatusPaymentRequired = StatusCodeItem{402, "Payment Required"} StatusForbidden = StatusCodeItem{403, "Forbidden"} StatusNotFound = StatusCodeItem{404, "Not Found"} StatusMethodNotAllowed = StatusCodeItem{405, "Method Not Allowed"} StatusNotAcceptable = StatusCodeItem{406, "Not Acceptable"} StatusProxyAuthenticationRequired = StatusCodeItem{407, "Proxy Authentication Required"} StatusRequestTimeout = StatusCodeItem{408, "Request Timeout"} StatusGone = StatusCodeItem{410, "Gone"} StatusRequestEntityTooLarge = StatusCodeItem{413, "Request Entity Too Large"} StatusRequestURITooLong = StatusCodeItem{414, "Request-URI Too Long"} StatusUnsupportedMediaType = StatusCodeItem{415, "Unsupported Media Type"} StatusUnsupportedURIScheme = StatusCodeItem{416, "Unsupported URI Scheme"} StatusBadExtension = StatusCodeItem{420, "Bad Extension"} StatusExtensionRequired = StatusCodeItem{421, "Extension Required"} StatusIntervalTooBrief = StatusCodeItem{423, "Interval Too Brief"} StatusNoResponse = StatusCodeItem{480, "No Response"} StatusCallTransactionDoesNotExist = StatusCodeItem{481, "Call/Transaction Does Not Exist"} StatusLoopDetected = StatusCodeItem{482, "Loop Detected"} StatusTooManyHops = StatusCodeItem{483, "Too Many Hops"} StatusAddressIncomplete = StatusCodeItem{484, "Address Incomplete"} StatusAmbigious = StatusCodeItem{485, "Ambiguous"} StatusBusyHere = StatusCodeItem{486, "Busy Here"} StatusRequestTerminated = StatusCodeItem{487, "Request Terminated"} StatusNotAcceptableHere = StatusCodeItem{488, "Not Acceptable Here"} StatusRequestPending = StatusCodeItem{491, "Request Pending"} StatusUndecipherable = StatusCodeItem{493, "Undecipherable"} // 5xx - 服务器错误 StatusServerInternalError = StatusCodeItem{500, "Server Internal Error"} StatusNotImplemented = StatusCodeItem{501, "Not Implemented"} StatusBadGateway = StatusCodeItem{502, "Bad Gateway"} StatusServerTimeout = StatusCodeItem{504, "Server Timeout"} StatusVersionNotSupported = StatusCodeItem{505, "Version Not Supported"} StatusMessageTooLarge = StatusCodeItem{513, "Message Too Large"} // 6xx - 全局错误 StatusBusyEverywhere = StatusCodeItem{600, "Busy Everywhere"} StatusDecline = StatusCodeItem{603, "Decline"} StatusDoesNotExistAnywhere = StatusCodeItem{604, "Does Not Exist Anywhere"} StatusUnacceptable = StatusCodeItem{606, "Not Acceptable"} )
SIP返回状态码
View Source
var MaxForwardsCount int = 70
默认最大跳数
Functions ¶
Types ¶
type Args ¶
type Args struct {
// contains filtered or unexported fields
}
头信息参数,在Header中,或者在某个字段中的key[=value]形式的参数
func ParseArgsComma ¶
type Header ¶
type Header struct { Via ViaList // (RFC3261-8.1.1.7) 请求路径 From User // (RFC3261-8.1.1.3) 请求的原始发起者 To User // (RFC3261-8.1.1.2) 请求的原始到达者 CallID string // (RFC3261-8.1.1.4) 唯一标志 CSeq CSeq // (RFC3261-8.1.1.5) 命令序列号 MaxForwards MaxForwards // (RFC3261-8.1.1.6) 最大转发数量限制 ContentLength int // 正文长度 ContentType string // (可选) 正文格式描述 Contact *User // (可选) (RFC3261-8.1.1.8) 直接访问方式 Expires Expires // (可选) 消息或内容过期时间 Route Route // (可选) 请求的路由表 RecordRoute RecordRoute // (可选) 后续消息流处理的服务器列表 UserAgent string // (可选) UAC的信息 Authorization string // (可选) 用户认证信息 WWWAuthenticate string // (可选) 支持的认证方式和适用realm的参数的拒绝原因 UnsupportLines []string // 暂不支持的行 }
SIP头域(RFC3261-7.3) 行范式:header = "header-name" HCOLON header-value *(COMMA header-value) 头域至少包含TO、FROM、CSeq、Call-ID、Max-Forwards、Via字段
type HeaderFieldItem ¶
SIP的头域字段名信息
func (HeaderFieldItem) LowerName ¶
func (f HeaderFieldItem) LowerName() string
type Message ¶
type Message struct { IsRequest bool // (二选一) 是否是请求 IsResponse bool // (二选一) 是否是应答 RequestLine RequestLine // 请求行 ResponseLine ResponseLine // 应答行 Header Header // 消息包头 Body *sdp.Message // 消息正文(RFC3261-7.4) }
SIP通用消息(RFC3261-7)
func NewResponse ¶
func NewResponse(code StatusCodeItem, req *Message) *Message
type RecordRoute ¶
type RecordRoute struct {
// contains filtered or unexported fields
}
后续消息流处理的服务器列表
type RequestLine ¶
type RequestLine struct { Method string // 请求方法 RequestURI URI // SIP消息目标地址,无"<>"尖括号 SIPVersion string // SIP版本号 }
SIP请求消息的起始行(RFC3261-7.1)
func NewRequestLine ¶
func NewRequestLine(str string) (rl RequestLine, err error)
func (*RequestLine) UpdateRequestURI ¶
func (rl *RequestLine) UpdateRequestURI(domain string)
更新URI地址
type ResponseLine ¶
type ResponseLine struct { SIPVersion string // SIP版本号 StatusCode int // 状态码 ReasonPhrase string // 状态码的说明 }
SIP应答消息的起始行(RFC3261-7.2)
func NewResponseLine ¶
func NewResponseLine(str string) (rl ResponseLine, err error)
func NewResponseLineWithStatusCode ¶
func NewResponseLineWithStatusCode(code StatusCodeItem) ResponseLine
type URI ¶
type URI struct { Scheme string // 协议类型 Username string // 用户名 Password string // 密码 Domain string // 域或IP地址 Arguments Args // 参数列表 }
URI信息(RFC3261-19.1) 格式:sip:user:password@host:port;uri-parameters?headers
type Via ¶
type Via struct { SIPVersion string // SIP版本号 Transport string // 协议 Client string // 客户端地址 Arguments Args // 参数列表 }
Via请求行的内容(RFC3261-8.1.1.7) Example:SIP/2.0/UDP 192.168.0.100:43188;branch=z9hG4bK111643fe9a9f389667c5e7d8873;rport
type ViaList ¶
type ViaList struct {
// contains filtered or unexported fields
}
Via信息列表
func (ViaList) FirstAddrInfo ¶
获取第一个Via中的地址信息用于转发,bool代表是否使用了实际地址
func (*ViaList) SetReceivedInfo ¶
(接收消息) 设置信息
Click to show internal directories.
Click to hide internal directories.