WIP: prepare for testing

This commit is contained in:
2025-04-21 07:11:02 +10:00
parent df828e2e9e
commit 59a91d29fd
11 changed files with 66 additions and 7 deletions

View File

@@ -119,7 +119,7 @@ func (b *backendUDP) createRelSend(clientAddr string, buf []byte) (udpRel, error
return rel, fmt.Errorf("create udp relation and send message: dial udp: %w", err)
}
if n, err = udpConn.Write(buf); err != nil && n == 0 {
if n, err = udpConn.WriteTo(buf, b.cfg.BackendAddr()); err != nil && n == 0 {
_ = udpConn.Close()
return rel, fmt.Errorf("create udp relation and send message: write udp: %w", err)
}
@@ -130,6 +130,23 @@ func (b *backendUDP) createRelSend(clientAddr string, buf []byte) (udpRel, error
return rel, nil
}
func (b *backendUDP) relSend(rel udpRel, buf []byte) error {
var (
n int
err error
)
if n, err = rel.backend.WriteTo(buf, b.cfg.BackendAddr()); err != nil && n == 0 {
return fmt.Errorf("relSend: %w", err)
}
if len(buf) != n {
log.Error().Msg("relSend mismatch size")
}
return nil
}
func (b *backendUDP) handle(wg *sync.WaitGroup, ctx context.Context, msg udpMessage) {
var (
rel udpRel
@@ -139,9 +156,15 @@ func (b *backendUDP) handle(wg *sync.WaitGroup, ctx context.Context, msg udpMess
if rel, ok = b.findRel(msg.addr); !ok {
if rel, err = b.createRelSend(msg.addr, msg.buf.Bytes()); err != nil {
msg.buf.Reset()
b.bufPool.Put(msg.buf)
log.Error().Err(err).Str(DIRECTION, CLIENT_TO_BACKEND).Msg("establish relation with udp backend")
return
}
msg.buf.Reset()
b.bufPool.Put(msg.buf)
rel.ctx, rel.ctxCancel = context.WithCancel(ctx)
b.addUpdateRel(msg.addr, rel)
@@ -150,9 +173,18 @@ func (b *backendUDP) handle(wg *sync.WaitGroup, ctx context.Context, msg udpMess
return
}
_ = rel
//TODO: handle existing valid client
if err = b.relSend(rel, msg.buf.Bytes()); err != nil {
msg.buf.Reset()
b.bufPool.Put(msg.buf)
log.Error().Err(err).Msg("handle: send for existing relation")
return
}
msg.buf.Reset()
b.bufPool.Put(msg.buf)
rel.expiry = time.Now().Add(b.cfg.Timeout())
b.addUpdateRel(rel.clientAddr, rel)
}
func (b *backendUDP) Send(ctx context.Context, addr string, p []byte) error {