go-gb28181/pkg/handler/message/message.go
shikong 529e9fc375
zlm api 测试
补充部分注释
2025-01-25 15:53:25 +08:00

46 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package message
import (
"git.skcks.cn/Shikong/go-gb28181/pkg/config"
"git.skcks.cn/Shikong/go-gb28181/pkg/log"
"git.skcks.cn/Shikong/go-gb28181/pkg/manscdp"
"git.skcks.cn/Shikong/go-gb28181/pkg/utils"
"github.com/emiago/sipgo"
"github.com/emiago/sipgo/sip"
)
// messageHandler 是一个处理SIP消息的函数类型
type messageHandler = func(client *sipgo.Client, clientConfig *config.ClientConfig, req *sip.Request, tx sip.ServerTransaction)
// handlers 是一个存储消息处理器的映射,键为命令类型,值为消息处理器函数
var handlers = make(map[string]messageHandler)
// SetupMessageHandler 设置SIP服务器的消息处理器根据消息的命令类型调用相应的处理器
func SetupMessageHandler(srv *sipgo.Server, client *sipgo.Client, clientConfig *config.ClientConfig) {
srv.OnMessage(func(req *sip.Request, tx sip.ServerTransaction) {
body := req.Body()
if len(body) == 0 {
log.Log().Warn().Msgf("消息体为空")
_ = tx.Respond(sip.NewResponseFromRequest(req, sip.StatusOK, "OK", nil))
return
}
message := new(manscdp.MessageReq)
err := utils.XMLUnmarshal(body, message)
if err != nil {
log.Log().Error().Msgf("XML Unmarshal error: %v", err)
_ = tx.Respond(sip.NewResponseFromRequest(req, sip.StatusBadRequest, "Bad Request", nil))
return
}
handlers, ok := handlers[message.CmdType]
if ok {
handlers(client, clientConfig, req, tx)
} else {
log.Log().Warn().Msgf("未找到可用的消息处理器: %s", message.CmdType)
}
_ = tx.Respond(sip.NewResponseFromRequest(req, sip.StatusOK, "OK", nil))
})
}