1 Star 0 Fork 16

Ellan-bm/SIP协议

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
user.go 1.20 KB
一键复制 编辑 原始数据 按行查看 历史
shallot 提交于 2020-04-05 12:24 +08:00 . 添加SIP协议的解析代码。
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("^([^<]*)<([^>]+)>(.*)$")
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/ellan-bm/sip.git
git@gitee.com:ellan-bm/sip.git
ellan-bm
sip
SIP协议
master

搜索帮助