api: depretiate WintunIsPacketAvailable()
Spinning on the WintunReceivePacket() while it returns ERROR_NO_MORE_ITEMS achieves the same. Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
1170f56446
commit
e11897e343
22
README.md
22
README.md
@ -58,7 +58,6 @@ Once adapter is created, use the following functions to start a session and tran
|
|||||||
- `WintunStartSession()` starts a session. One adapter may have only one session.
|
- `WintunStartSession()` starts a session. One adapter may have only one session.
|
||||||
- `WintunEndSession()` ends and frees the session.
|
- `WintunEndSession()` ends and frees the session.
|
||||||
- `WintunIsPacketAvailable()` checks if there is a receive packet available.
|
- `WintunIsPacketAvailable()` checks if there is a receive packet available.
|
||||||
- `WintunWaitForPacket()` waits for a receive packet to become available.
|
|
||||||
- `WintunReceivePacket()` receives one packet.
|
- `WintunReceivePacket()` receives one packet.
|
||||||
- `WintunReceiveRelease()` releases internal buffer after client processed the receive packet.
|
- `WintunReceiveRelease()` releases internal buffer after client processed the receive packet.
|
||||||
- `WintunAllocateSendPacket()` allocates memory for send packet.
|
- `WintunAllocateSendPacket()` allocates memory for send packet.
|
||||||
@ -69,23 +68,24 @@ Once adapter is created, use the following functions to start a session and tran
|
|||||||
Reading packets from the adapter may be done as:
|
Reading packets from the adapter may be done as:
|
||||||
|
|
||||||
```C
|
```C
|
||||||
// TODO: Preallocate WINTUN_PACKET *Queue linked list with WINTUN_MAX_IP_PACKET_SIZE packets.
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (!WintunIsPacketAvailable(Session))
|
|
||||||
WintunWaitForPacket(Session, INFINITE);
|
|
||||||
for (WINTUN_PACKET *p = Queue; p && p->Size <= WINTUN_MAX_IP_PACKET_SIZE; p = p->Next)
|
|
||||||
p->Size = DWORD_MAX;
|
|
||||||
BYTE *Packet;
|
BYTE *Packet;
|
||||||
DWORD PacketSize;
|
DWORD PacketSize;
|
||||||
DWORD Result = WintunReceivePacket(Session, &Packet, &PacketSize);
|
DWORD Result = WintunReceivePacket(Session, &Packet, &PacketSize);
|
||||||
if (Result != ERROR_SUCCESS)
|
switch (Result) {
|
||||||
return Result;
|
case ERROR_SUCCESS:
|
||||||
// TODO: Process packet.
|
// TODO: Process packet.
|
||||||
WintunReceiveRelease(Session, Packet);
|
WintunReceiveRelease(Session, Packet);
|
||||||
|
break;
|
||||||
|
case ERROR_NO_MORE_ITEMS:
|
||||||
|
WintunWaitForPacket(Session, INFINITE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return Result;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
It may be desirable to spin on `WintunIsPacketAvailable()` for some time under heavy use before waiting with `WintunWaitForPacket()`, in order to reduce latency.
|
It may be desirable to spin on `WintunReceivePacket()` while it returns `ERROR_NO_MORE_ITEMS` for some time under heavy use before waiting with `WintunWaitForPacket()`, in order to reduce latency.
|
||||||
|
|
||||||
Writing packets to the adapter may be done as:
|
Writing packets to the adapter may be done as:
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ EXPORTS
|
|||||||
WintunGetAdapterLUID
|
WintunGetAdapterLUID
|
||||||
WintunGetAdapterName
|
WintunGetAdapterName
|
||||||
WintunGetVersion
|
WintunGetVersion
|
||||||
WintunIsPacketAvailable
|
|
||||||
WintunReceivePacket
|
WintunReceivePacket
|
||||||
WintunReceiveRelease
|
WintunReceiveRelease
|
||||||
WintunSendPacket
|
WintunSendPacket
|
||||||
|
@ -147,12 +147,6 @@ WintunEndSession(_In_ TUN_SESSION *Session)
|
|||||||
HeapFree(ModuleHeap, 0, Session);
|
HeapFree(ModuleHeap, 0, Session);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
WintunIsPacketAvailable(_In_ TUN_SESSION *Session)
|
|
||||||
{
|
|
||||||
return Session->Send.Head != InterlockedGetU(&Session->Descriptor.Send.Ring->Tail);
|
|
||||||
}
|
|
||||||
|
|
||||||
WINTUN_STATUS WINAPI
|
WINTUN_STATUS WINAPI
|
||||||
WintunWaitForPacket(_In_ TUN_SESSION *Session, _In_ DWORD Milliseconds)
|
WintunWaitForPacket(_In_ TUN_SESSION *Session, _In_ DWORD Milliseconds)
|
||||||
{
|
{
|
||||||
|
@ -260,15 +260,6 @@ typedef void(WINAPI *WINTUN_END_SESSION_FUNC)(_In_ WINTUN_SESSION_HANDLE Session
|
|||||||
*/
|
*/
|
||||||
#define WINTUN_MAX_IP_PACKET_SIZE 0xFFFF
|
#define WINTUN_MAX_IP_PACKET_SIZE 0xFFFF
|
||||||
|
|
||||||
/**
|
|
||||||
* Peeks if there is a packet available for reading.
|
|
||||||
*
|
|
||||||
* @param Session Wintun session handle obtained with WintunStartSession
|
|
||||||
*
|
|
||||||
* @return Non-zero if there is a packet available; zero otherwise.
|
|
||||||
*/
|
|
||||||
BOOL(WINAPI *WINTUN_IS_PACKET_AVAILABLE_FUNC)(_In_ WINTUN_SESSION_HANDLE Session);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Waits for a packet to become available for reading.
|
* Waits for a packet to become available for reading.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user