[comment]: # translation:outdated

[comment]: # ({fff80fa1-9153def3})
# 5 Fejléc

[comment]: # ({/fff80fa1-9153def3})

[comment]: # ({4fd5942c-faa3c87b})
#### Áttekintés

A fejléc minden kérés- és válaszüzenetben megtalálható a Zabbix-komponensek között.
Meg kell határozni az üzenet hosszát, hogy tömörített-e vagy sem, nagy csomag-e vagy sem.

A Zabbix kommunikációs protokoll kapcsolatonként 1 GB-os csomagméret-korláttal rendelkezik. A korlát 1 GB
egyaránt vonatkozik a vett csomagadatok hosszára és a tömörítetlen adathosszra.

Amikor konfigurációt küld a Zabbix proxynak, a csomagméret 4 GB-ra nő, hogy lehetővé tegye
nagy konfigurációk szinkronizálása. Ha a tömörítés előtti adathossz meghaladja a 4 GB-ot, a Zabbix automatikusan kiszolgál
elkezdi használni a nagy csomagformátumot (0x04 jelző), amely 16 GB-ra növeli a csomag méretkorlátját.

Vegye figyelembe, hogy míg a nagy csomagformátum bármilyen adat küldésére használható, jelenleg csak a Zabbix proxy
A konfigurációs szinkronizáló képes kezelni az 1 GB-nál nagyobb csomagokat.

[comment]: # ({/4fd5942c-faa3c87b})

[comment]: # ({40e74a00-409c40cc})

#### Szerkezet

A fejléc négy mezőből áll. A fejlécben szereplő összes szám little-endian formátumú.

|Mező|Méret|Méret<br>(nagy csomag)|Leírás|
|--|-|-|------|
|`<PROTOKOLL>`|4|4|`"ZBXD"` vagy `5A 42 58 44`|
|`<FLAGS>`|1|1|Protokolljelzők:<br>`0x01` - Zabbix kommunikációs protokoll<br>`0x02` - tömörítés<br>`0x04` - nagy csomag|
|`<ADATOK>`|4|8|Adathossz.|
|`<FOGLALVA>`|4|8|Tömörítés használata esetén (`0x02` jelző) – a tömörítetlen adatok hossza.<br>Ha nincs tömörítés – `00 00 00 00`|

[comment]: # ({/40e74a00-409c40cc})

[comment]: # ({new-8698de59})
#### Examples

Here are some code snippets showing how to add Zabbix protocol header to the data you want to send in order 
to obtain the packet you should send to Zabbix so that it is interpreted correctly. These code snippets 
assume that the data is not larger than 1GB, thus the large packet format is not used.

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

or

```python
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

```perl
my $packet = "ZBXD\1" . pack("(II)<", length($data), 0) . $data;
```

or

```perl
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

```php
$packet = "ZBXD\1" . pack("VV", strlen($data), 0) . $data;
```

or

```php
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
  
```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"
```

[comment]: # ({/new-8698de59})
