mirror of
https://github.com/fosrl/olm.git
synced 2026-02-07 21:46:40 +00:00
Remove server
This commit is contained in:
@@ -23,117 +23,6 @@ const (
|
||||
packetSize = 13
|
||||
)
|
||||
|
||||
// Server handles listening for connection check requests
|
||||
type Server struct {
|
||||
conn *net.UDPConn
|
||||
listenAddr string
|
||||
shutdownCh chan struct{}
|
||||
isRunning bool
|
||||
runningLock sync.Mutex
|
||||
}
|
||||
|
||||
// NewServer creates a new connection test server
|
||||
func NewServer(listenAddr string) *Server {
|
||||
return &Server{
|
||||
listenAddr: listenAddr,
|
||||
shutdownCh: make(chan struct{}),
|
||||
}
|
||||
}
|
||||
|
||||
// Start begins listening for connection test packets
|
||||
func (s *Server) Start() error {
|
||||
s.runningLock.Lock()
|
||||
defer s.runningLock.Unlock()
|
||||
|
||||
if s.isRunning {
|
||||
return nil
|
||||
}
|
||||
|
||||
addr, err := net.ResolveUDPAddr("udp", s.listenAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.conn, err = net.ListenUDP("udp", addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.isRunning = true
|
||||
go s.handleConnections()
|
||||
|
||||
log.Printf("Server listening on %s", s.listenAddr)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop shuts down the server
|
||||
func (s *Server) Stop() {
|
||||
s.runningLock.Lock()
|
||||
defer s.runningLock.Unlock()
|
||||
|
||||
if !s.isRunning {
|
||||
return
|
||||
}
|
||||
|
||||
close(s.shutdownCh)
|
||||
if s.conn != nil {
|
||||
s.conn.Close()
|
||||
}
|
||||
s.isRunning = false
|
||||
log.Println("Server stopped")
|
||||
}
|
||||
|
||||
// handleConnections processes incoming packets
|
||||
func (s *Server) handleConnections() {
|
||||
buffer := make([]byte, packetSize)
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-s.shutdownCh:
|
||||
return
|
||||
default:
|
||||
// Set read deadline to avoid blocking forever
|
||||
s.conn.SetReadDeadline(time.Now().Add(1 * time.Second))
|
||||
|
||||
n, addr, err := s.conn.ReadFromUDP(buffer)
|
||||
if err != nil {
|
||||
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
|
||||
// Just a timeout, keep going
|
||||
continue
|
||||
}
|
||||
log.Printf("Error reading from UDP: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if n != packetSize {
|
||||
continue // Ignore malformed packets
|
||||
}
|
||||
|
||||
// Check magic header
|
||||
magic := binary.BigEndian.Uint32(buffer[0:4])
|
||||
if magic != magicHeader {
|
||||
continue // Not our packet
|
||||
}
|
||||
|
||||
// Check packet type
|
||||
packetType := buffer[4]
|
||||
if packetType != packetTypeRequest {
|
||||
continue // Not a request packet
|
||||
}
|
||||
|
||||
// Keep the timestamp the same (for RTT calculation)
|
||||
// Just change the packet type to response
|
||||
buffer[4] = packetTypeResponse
|
||||
|
||||
// Send response
|
||||
_, err = s.conn.WriteToUDP(buffer, addr)
|
||||
if err != nil {
|
||||
log.Printf("Error sending response: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Client handles checking connectivity to a server
|
||||
type Client struct {
|
||||
conn *net.UDPConn
|
||||
|
||||
Reference in New Issue
Block a user