代码拉取完成,页面将自动刷新
同步操作将从 北京小程科技有限公司/SIP协议 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package sip
import (
"fmt"
"regexp"
"strings"
)
// SIP用户信息
// Example:"1011" <sip:1011@192.168.0.2>;tag=213788011b
type User struct {
DisplayName string // 显示姓名
URI URI // RequestURI地址
Arguments Args // 参数
}
func parseUser(str string) (item User, err error) {
str = strings.TrimSpace(str)
item = User{}
err = item.parse(str)
return
}
// 字符串输出
func (u User) String() (result string) {
if len(u.DisplayName) > 0 {
result += fmt.Sprintf("\"%s\"", u.DisplayName)
}
result += fmt.Sprintf("<%s>%s", u.URI.String(), u.Arguments.String())
return
}
// 获取用户名
func (u User) Username() string {
return u.URI.Username
}
// 解析SIP用户
func (u *User) parse(str string) (err error) {
var uri URI
result := nameRegexp.FindStringSubmatch(str)
if len(result) == 0 {
if uri, err = NewURI(str); err != nil {
return
}
u.URI = uri
u.Arguments = parseArgs("") // FIXME 这里可能也有参数
return
}
u.DisplayName = strings.Trim(strings.TrimSpace(result[1]), "\"")
if uri, err = NewURI(result[2]); err != nil {
return
}
u.URI = uri
u.Arguments = parseArgs(result[3])
return
}
var nameRegexp = regexp.MustCompile("^([^<]*)<([^>]+)>(.*)$")
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。