Files
go-playit/core/established.go

77 lines
1.8 KiB
Go

package core
import (
"time"
"sirherobrine23.com.br/go-bds/go-playit/proto"
"sirherobrine23.com.br/go-bds/go-playit/xcode"
)
type ExpireReason uint8
const (
Forced ExpireReason = iota
SessionNotSetup
FlowChanged
)
func (agent PlayitAgent) isExpired() (expired *ExpireReason) {
expired = new(ExpireReason)
if agent.ForceExpired {
*expired = Forced
} else if agent.PongAtAuth.SessionExpireAt.IsNone() {
*expired = SessionNotSetup
} else if agent.flowChanged() {
*expired = FlowChanged
} else {
expired = nil
}
return
}
func (agent PlayitAgent) flowChanged() bool {
return agent.PongLatest.ClientAddr != agent.PongAtAuth.ClientAddr ||
agent.PongLatest.TunnelAddr != agent.PongAtAuth.TunnelAddr
}
func (agent *PlayitAgent) sendRpcContent(req proto.ControlRpcMessage[proto.ControlRequest]) (err error) {
msg, err := xcode.Marshal(req)
if err != nil {
return
}
_, err = agent.PacketIo.WriteToUDPAddrPort(msg, agent.ControlAddr)
return
}
func (agent PlayitAgent) sendKeepAlive(requestID uint64) error {
return agent.sendRpcContent(proto.ControlRpcMessage[proto.ControlRequest]{
Request: requestID,
Content: proto.ControlRequest{
AgentKeepAlive: &agent.Registered.ID,
},
})
}
func (agent PlayitAgent) sendSetupUdpChannel(requestID uint64) error {
return agent.sendRpcContent(proto.ControlRpcMessage[proto.ControlRequest]{
Request: requestID,
Content: proto.ControlRequest{
SetupUdpChannel: &agent.Registered.ID,
},
})
}
func (agent *PlayitAgent) sendPing(requestID uint64, now time.Time) error {
return agent.sendRpcContent(proto.ControlRpcMessage[proto.ControlRequest]{
Request: requestID,
Content: proto.ControlRequest{
Ping: &proto.Ping{
Now: now,
CurrentPing: agent.CurrentPing,
SessionID: xcode.OptionSome(agent.Registered.ID),
},
},
})
}