// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
// SPDX-License-Identifier: MIT

package vnet

import (
	
	
)

// Deliver directly send packet to vnet or real-server.
// For example, we can use this API to simulate the REPLAY ATTACK.
func ( *UDPProxy) (,  net.Addr,  []byte) ( int,  error) {
	.workers.Range(func(,  interface{}) bool {
		if ,  = .(*aUDPProxyWorker).Deliver(, , );  != nil {
			return false // Fail, abort.
		} else if  == len() {
			return false // Done.
		}

		return true // Deliver by next worker.
	})
	return
}

func ( *aUDPProxyWorker) (,  net.Addr,  []byte) ( int,  error) {
	,  := .(*net.UDPAddr)
	if ! {
		return 0, fmt.Errorf("invalid addr %v", ) // nolint:goerr113
	}

	// nolint:godox // TODO: Support deliver packet from real server to vnet.
	// If packet is from vnet, proxy to real server.
	var  *net.UDPConn
	,  := .endpoints.Load(.String())
	if ! {
		return 0, nil
	}

	 = .(*net.UDPConn) // nolint:forcetypeassert

	// Send to real server.
	if ,  := .Write();  != nil {
		return 0, 
	}

	return len(), nil
}