Áú»¢¶Ä²©

This is a translation of the original English documentation page. Help us make it better.

4 Header

Overzicht

De header is aanwezig in alle verzoek- en antwoordberichten tussen Áú»¢¶Ä²©-componenten. Het is nodig om de lengte van het bericht te bepalen, of het gecomprimeerd is of niet, of het een groot pakket is of niet.

Het Áú»¢¶Ä²©-communicatieprotocol heeft een limiet van 1 GB per pakket per verbinding. De limiet van 1 GB is van toepassing op zowel de ontvangen pakketgegevenslengte als de lengte van de ongecomprimeerde gegevens.

Bij het verzenden van configuratie naar een Áú»¢¶Ä²©-proxy wordt de pakketgroottegrens verhoogd naar 4 GB om het synchroniseren van grote configuraties mogelijk te maken. Wanneer de lengte van de gegevens v¨®¨®r compressie de 4 GB overschrijdt, begint de Áú»¢¶Ä²©-server automatisch het grote pakketformaat (0x04-vlag) te gebruiken, waardoor de pakketgroottegrens wordt verhoogd naar 16 GB.

Merk op dat hoewel een groot pakketformaat kan worden gebruikt om alle gegevens te verzenden, momenteel alleen de Áú»¢¶Ä²©-proxyconfiguratiesynchronisator pakketten kan verwerken die groter zijn dan 1 GB.

Structuur

De header bestaat uit vier velden. Alle getallen in de header zijn opgemaakt als little-endian.

Veld Grootte Grootte
(groot pakket)
Beschrijving
<PROTOCOL> 4 4 "ZBXD" of 5A 42 58 44
<FLAGS> 1 1 Protocolvlaggen:
0x01 - Áú»¢¶Ä²©-communicatieprotocol
0x02 - compressie
0x04 - groot pakket
<DATALEN> 4 8 Gegevenslengte.
<GERESERVEERD> 4 8 Bij gebruik van compressie (0x02-vlag) - de lengte van ongecomprimeerde gegevens
Bij geen gebruik van compressie - 00 00 00 00

Voorbeelden

Hier zijn enkele codefragmenten die laten zien hoe je een Áú»¢¶Ä²©-protocolheader kunt toevoegen aan de gegevens die je wilt verzenden om het pakket te verkrijgen dat je naar Áú»¢¶Ä²© moet sturen zodat het correct wordt ge?nterpreteerd. Deze codefragmenten gaan ervan uit dat de gegevens niet groter zijn dan 1 GB, dus het grote pakketformaat wordt niet gebruikt.

Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data

of

def zbx_create_header(plain_data_size, compressed_data_size=None):
           protocol = b"ZBXD"
           flags = 0x01
           if compressed_data_size is None:
               datalen = plain_data_size
               reserved = 0
           else:
               flags |= 0x02
               datalen = compressed_data_size
               reserved = plain_data_size
           return protocol + struct.pack("<BII", flags, datalen, reserved)
       
       packet = zbx_create_header(len(data)) + data
Perl
my $packet = "ZBXD\1" . pack("(II)<", length($data), 0) . $data;

of

sub zbx_create_header($;$)
       {
           my $plain_data_size = shift;
           my $compressed_data_size = shift;
       
           my $protocol = "ZBXD";
           my $flags = 0x01;
           my $datalen;
           my $reserved;
       
           if (!defined($compressed_data_size))
           {
               $datalen = $plain_data_size;
               $reserved = 0;
           }
           else
           {
               $flags |= 0x02;
               $datalen = $compressed_data_size;
               $reserved = $plain_data_size;
           }
       
           return $protocol . chr($flags) . pack("(II)<", $datalen, $reserved);
       }
       
       my $packet = zbx_create_header(length($data)) . $data;
PHP
$packet = "ZBXD\1" . pack("VV", strlen($data), 0) . $data;

of

function zbx_create_header($plain_data_size, $compressed_data_size = null)
       {
           $protocol = "ZBXD";
           $flags = 0x01;
           if (is_null($compressed_data_size))
           {
               $datalen = $plain_data_size;
               $reserved = 0;
           }
           else
           {
               $flags |= 0x02;
               $datalen = $compressed_data_size;
               $reserved = $plain_data_size;
           }
           return $protocol . chr($flags) . pack("VV", $datalen, $reserved);
       }
       
       $packet = zbx_create_header(strlen($data)) . $data;
Bash
datalen=$(printf "%08x" ${#data})
       datalen="\\x${datalen:6:2}\\x${datalen:4:2}\\x${datalen:2:2}\\x${datalen:0:2}"
       printf "ZBXD\1${datalen}\0\0\0\0%s" "$data"