Packet Sniffer SDK VCL Edition

HNAdapter :: Methods :: SyncSendEx

 Previous Next

Sends a packet synchronously.

Syntax:

function SyncSendEx(hPacket: Pointer): DWORD;

Parameters:

hPacket

[in] HNPacket object handle.

Return values:

HNERR_OKThe packet has been sent successfully.
HNERR_ADAPTER_NOT_OPENEDThe adapter has not been opened, see the OpenAdapter method.
HNERR_SIZE_ERRThe PacketSize parameter value is greater than the maximum size, see MaxPacketSize.
HNERR_ADAPTER_REQ_ERRAn internal driver request error.

Description:

Having created HNPacket object by AllocatePacket method you can use it to create raw packet. Note that when using SyncSendEx function you should set HNPacket.IncPacketSize property correctly, because this property value is used for sending data through the network adapter.

After the network adapter has been opened successfully by OpenAdapter, you can send a raw packet directly, without using the OS functions. This packet will be sent synchronously.

This function cannot work with the devices recognized as atWAN. See HNNetAdapterType.
// Create ARP packet
Var
  Eth  : ETHERNET_HEADER;
  Arp  : ARP_HEADER;
  IncPacketSize : DWORD;
  pPacketData   : Pointer; 
  HNPacket      : THNPacket; 
  ...
begin   
  HNPacket        := THNPacket.Create; 
  IncPacketSize   := sizeof(ETHERNET_HEADER) + sizeof(ARP_HEADER);
  HNPacket.Handle := HNPacket.AllocatePacket(IncPacketSize);
  ...
  pPacketData     := HNPacket.PacketData;
  ...
  memcpy(pPacketData,@Eth,sizeof(ETHERNET_HEADER));
  ...
  memcpy(@PByteArray(pPacketData)^[sizeof(ETHERNET_HEADER)],@Arp,sizeof(ARP_HEADER));
  HNPacket.IncPacketSize := IncPacketSize;
  HNAdapter.SyncSendEx(HNPacket.Handlet);
  ...
  HNPacket.FreePacket(HNPacket.Handle);
  HNPacket.Destroy;
end;
See also:Packets processing diagram, HNAdapter, HNNetAdapterType, OpenAdapter, MaxPacketSize, SyncSend, OnAsyncSend