## Uses of Class
net.i2p.router.transport.udp.UDPPacket

- Packages that use UDPPacket
  Package | Description
  --- | ---
  net.i2p.router.transport.udp | The UDP transport (also known as 'SSU transport') allows passing I2P messages on top of UDP.

- - ### Uses of UDPPacket in net.i2p.router.transport.udp

    Methods in net.i2p.router.transport.udp that return UDPPacket
    Modifier and Type | Method and Description
    --- | ---
    `static UDPPacket` | UDPPacket.`acquire(I2PAppContext ctx, boolean inbound)`
    `UDPPacket` | PacketBuilder.`buildACK(PeerState peer, List<ACKBitfield> ackBitfields)` Build the ack packet.
    `UDPPacket` | PacketBuilder.`buildHolePunch(UDPPacketReader reader)` Sends an empty unauthenticated packet for hole punching
    `UDPPacket` | PacketBuilder.`buildPacket(OutboundMessageState state, int fragment, PeerState peer, List<Long> ackIdsRemaining, List<ACKBitfield> partialACKsRemaining)` This builds a data packet (PAYLOAD_TYPE_DATA).
    `UDPPacket` | PacketBuilder.`buildPeerTestFromAlice(InetAddress toIP, int toPort, SessionKey toIntroKey, long nonce, SessionKey aliceIntroKey)` Build a packet as if we are Alice and we either want Bob to begin a peer test or Charlie to finish a peer test.
    `UDPPacket` | PacketBuilder.`buildPeerTestFromAlice(InetAddress toIP, int toPort, SessionKey toCipherKey, SessionKey toMACKey, long nonce, SessionKey aliceIntroKey)`
    `UDPPacket` | PacketBuilder.`buildPeerTestToAlice(InetAddress aliceIP, int alicePort, SessionKey aliceIntroKey, SessionKey charlieIntroKey, long nonce)` Build a packet as if we are either Bob or Charlie and we are helping test Alice.
    `UDPPacket` | PacketBuilder.`buildPeerTestToBob(InetAddress bobIP, int bobPort, InetAddress aliceIP, int alicePort, SessionKey aliceIntroKey, long nonce, SessionKey bobCipherKey, SessionKey bobMACKey)` Build a packet as if we are Charlie sending Bob a packet verifying that we will help test Alice.
    `UDPPacket` | PacketBuilder.`buildPeerTestToCharlie(InetAddress aliceIP, int alicePort, SessionKey aliceIntroKey, long nonce, InetAddress charlieIP, int charliePort, SessionKey charlieCipherKey, SessionKey charlieMACKey)` Build a packet as if we are Bob sending Charlie a packet to help test Alice.
    `UDPPacket` | PacketBuilder.`buildPing(PeerState peer)` We use this for keepalive purposes.
    `(package private) UDPPacket` | PacketBuilder.`buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request)`
    `UDPPacket` | PacketBuilder.`buildRelayRequest(InetAddress introHost, int introPort, byte[] introKey, long introTag, SessionKey ourIntroKey, long introNonce, boolean encrypt)`
    `UDPPacket[]` | PacketBuilder.`buildRelayRequest(UDPTransport transport, OutboundEstablishState state, SessionKey ourIntroKey)` build intro packets for each of the published introducers
    `(package private) UDPPacket` | PacketBuilder.`buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey)`
    `UDPPacket` | PacketBuilder.`buildSessionConfirmedPacket(OutboundEstablishState state, int fragmentNum, int numFragments, byte[] identity)` Build a new SessionConfirmed packet for the given peer
    `UDPPacket[]` | PacketBuilder.`buildSessionConfirmedPackets(OutboundEstablishState state, RouterIdentity ourIdentity)` Build a new series of SessionConfirmed packets for the given peer, encrypting it as necessary.
    `UDPPacket` | PacketBuilder.`buildSessionCreatedPacket(InboundEstablishState state, int externalPort, SessionKey ourIntroKey)` Build a new SessionCreated packet for the given peer, encrypting it as necessary.
    `UDPPacket` | PacketBuilder.`buildSessionDestroyPacket(PeerState peer)` Build a destroy packet, which contains a header but no body.
    `UDPPacket` | PacketBuilder.`buildSessionRequestPacket(OutboundEstablishState state)` Build a new SessionRequest packet for the given peer, encrypting it as necessary.
    `UDPPacket[]` | OutboundMessageFragments.`getNextVolley()` Fetch all the packets for a message volley, blocking until there is a message which can be fully transmitted (or the transport is shut down).
    `UDPPacket` | UDPEndpoint.`receive()` Blocking call to receive the next inbound UDP packet from any peer.
    `UDPPacket` | UDPReceiver.`receiveNext()` Blocking call to retrieve the next inbound packet, or null if we have shut down.

    Methods in net.i2p.router.transport.udp with parameters of type UDPPacket
    Modifier and Type | Method and Description
    --- | ---
    `int` | UDPSender.`add(UDPPacket packet)` Put it on the queue
    `int` | UDPSender.`add(UDPPacket packet, int blockTime)` Deprecated. use add(packet)
    `void` | UDPPacketReader.`initialize(UDPPacket packet)`
    `int` | UDPEndpoint.`send(UDPPacket packet)` Add the packet to the outobund queue to be sent ASAP (as allowed by the bandwidth limiter)
    `(package private) int` | UDPTransport.`send(UDPPacket packet)`