Files
lkm/gb28181/source_active.go

57 lines
1.1 KiB
Go

package gb28181
import (
"github.com/lkmio/lkm/stream"
"github.com/lkmio/transport"
"net"
)
type ActiveSource struct {
*PassiveSource
port int
remoteAddr net.TCPAddr
}
func (a *ActiveSource) Connect(remoteAddr *net.TCPAddr) error {
client := &transport.TCPClient{}
client.SetHandler(a.PassiveSource)
addr, err := net.ResolveTCPAddr("tcp", stream.ListenAddr(a.port))
if err != nil {
return err
} else if _, err = client.Connect(addr, remoteAddr); err != nil {
return err
}
go client.Receive()
a.transport = client
return nil
}
func (a *ActiveSource) SetupType() SetupType {
return SetupActive
}
func NewActiveSource() (*ActiveSource, int, error) {
var port int
err := TransportManger.AllocPort(true, func(port_ uint16) error {
port = int(port_)
return nil
})
if err != nil {
return nil, 0, err
}
return &ActiveSource{
PassiveSource: &PassiveSource{
StreamServer: stream.StreamServer[GBSource]{
SourceType: stream.SourceType28181,
},
decoder: transport.NewLengthFieldFrameDecoder(0xFFFF, 2),
receiveBuffer: stream.TCPReceiveBufferPool.Get().([]byte),
},
port: port,
}, port, nil
}