77 lines
1.8 KiB
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),
|
|
},
|
|
},
|
|
})
|
|
}
|