OSI7 status code

Verze z 29. 11. 2022, 10:18, kterou vytvořil Adamn (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Stavové kódy pro SDS-C síťové funkce

Tato stránka obsahuje informace k funkcím poskytovaným jazykem SDS-C, které se starají o komunikaci (např. HTTP GET/POST, EMAIL SEND, atd.). Tyto funkce jsou souhrnně nazvány OSI7 funkce.

  • SDS-C

Proměnná sys[65] je určená pro informování o proběhlé OSI7 funkci. Vyplňuje se, pokud je funkce provedena zcela korektně a skončila bez problému, ale také v případě chyby, kdy je zde ta chyba zaznamenána. Pokud bude hodnota nula, pak daná SDS-C funkce není implementována ve verzi firmware, kterou máte nahranou v zařízení - aktualizujte firmware (stáhnete z těchto stránek).


Společný chybový kód pro všechny OSI7 funkce

* 128 Funkce byla přerušena kvůli výpadku Ethernetu (odpojení kabelu, přerušení spojení na switch, atd.).

Pokud program právě provádí některou z OSI7 funkcí - např. dns_resolv() - a dojde k odpojení Ethernetu od zařízení SDS, tak bude nastaven buď tento konkrétní chybový stav, nebo případně některý z konkrétních chybových stavů od konkrétní funkce (záleží na okamžiku, kdy dojde k odpojení Ethernetu).


Důležité požadavky

  • 1) vždy před voláním OSI7 funkcí, otestujte, zda-li je připojení k síti
  • 2) vždy po zavolání OSI7 funkce otestujte, zda-li funkce probíhá v pořádku, a jaký má výsledný chybový kód

Nejčastější chyby, kdy uživatelům nefunguje např. http_get() a podobné funkce, je v nedodržení druhého bodu, kdy váš program nečeká na výsledek a např. hned jde volat další OSI7 funkci.


SMTP

Možné hodnoty nastavené po zavolání funkce odeslání emailu:

* 256 EMAIL odeslán OK a bez problému (tedy alespoň dle toho co hlásí SMTP server).

Všechny následující hodnoty znamenají chybu, tj. email neodeslán.

 status  | osi7-history | text
---------+--------------+--------------------------------------------------------------
  257    | 1            | SMTP TIMEOUT
  258    | 2            | SMTP server není přípraven (not ready)
  259    | 3            | Chyba v HELO příkazu.
  260    | 4            | Neplatná adresa odesílatele.
  261    | 5            | Neplatná adresa příjemce.
  262    | 6            | RELAY ACCESS DENIED
  263    | 7            | Nelze odeslat data (obsah emailu). 
  264    | 8            | Nelze dokončit odesílání dat.
  265    | 9            | Autentifikace není povolena na tomto SMTP serveru.
  266    | 10           | Neplatné uživatelské jméno.
  267    | 11           | Neplatné uživatelské heslo.
  268    | 12           | Chyba 550 Invalid recipient (často spam filter)
  269    | 13           | Nelze navázat TCP spojení na SMTP server (neplatná IP, server mimo provoz)
  270    | 14           | Právě probíhá odesílání emailu (pokud chcete poslat další email dříve než je odeslán aktuální).
  271    | 15           | SMTP server vrátil chybu 501 (nekompatibilita mezi SMTP serverem a klientem)
  272    | 16           | Nedostatek paměti v zařízení SDS pro odeslání emailu (tato chyba by se nikdy neměla stát)
  273    | 17           | IP adresa zařízení SDS není platná (obvykle DHCP problém), nelze tedy zahájit komunikaci
  274    | 18           | (odpověď ze serveru): SMTP 421 - you have been temporary banned 
  275    | 19           | ethernet je odpojen
  276    | 20           | sekundární timeout (server nekomunikuje, nebo výpadek linky)
  277    | 21           | sds-c funkce zavolána s nedostatkem požadovaných parametrů - opravte si svůj program
  278    | 22           | server nepotvrdil zafrontování emailu k dalšímu zpracování (email sice server přijal, ale neřekl OK)


SMTP TIMEOUT:

Tato chyba se stává v okamžiku navazování spojení s SMTP serverem, a to v případě že vyprší odpočet času, ve kterém se mělo provést úspěsné TCP spojení se serverem. Důvody jsou obvykle dva: neplatná IP adresa (na zadané IP není server na portu 25), nebo odmítnutí serverem (např. když je IP zařízení snažícího se připojit na SMTP server na blacklistu). Samozřejmě důvodů může být více, a přesný důvod si už musíte zjistit sami.


OMEZENÍ PRO SDS-C:

* maximální délka textu emailové adresy je 253 znaků
* maximální délka subjectu je 253 znaků
* maximální délka pro SMTP autorizaci: username může mít maximálně 32 znaků
* maximální délka pro SMTP autorizaci: password může mít maximálně 32 znaků
* maximální celková délka samotného textu emailu je max 1440 znaků (pozor při skládání z více textů atd.)

Poznámka: Pro port SMTP serveru se vždy bere hodnota 25 (port 25).


DNS

Hodnota je nastavena po návratu ze zavolané SDS-C funkce dns_resolv().

Možné hodnoty:

 status  | osi7-history | text
---------+--------------+--------------------------------------------------------------
  512    | 0            | DNS resolv proběhl OK  
  513    | 1            | DNS resolv hlásí chybu
  514    | 2            | DNS resolv odeslal požadavek na server a čeká na odpověď
  515    | 3            | chybně zadaný parametr při volání funkce - chyba, DNS překlad neproveden
  516    | 4            | není dostupný Ethernet - není komunikace
  517    | 5            | SDS nemá přidělenu IP adresu - DNS překlad neproveden


OMEZENÍ PRO SDS-C:

* FW 06/2011 a novější: maximální úplný text domény pro DNS překlad je max 64 (nebo 96, dle SDS) znaků (úplný text = např. "www.google.com")
* (historické) FW do 05/2011: maximální úplný text pro DNS překlad je max 32 znaků   


Poznámka: zařízení si pamatuje výsledky posledních několika DNS dotazů, což umožňuje vynechat opakování posílání DNS dotazů, pokud již máme daný záznam pro požadavek (text překladu). Pokud u těchto záznamů vyprší platnost, jsou z paměti odstraněny (a zařízení pak znovu pošle DNS dotaz, takže požadovaný výsledek DNS překladu obdržíte, bez obav).


HTTP GET , HTTP POST

Funkce vrací dvě informace - pro SDS-C to je chybový kód v sys[65] a header kód přímo od webového serveru v sys[75]. Prezentované hodnoty header kódu jsou přímo převzaty z odpovědi webového serveru (např. 200 pro 'OK' a tak dále).

Možné hodnoty:

 status  | osi7-history | text
---------+--------------+--------------------------------------------------------------
  1024   | 0            | HTTP GET/POST proběhl OK, webový server poslal odpověď - hodnota odpovědi je v sys[75]
  1025   | 1            | chyba - nelze vytvořit připojení
  1026   | 2            | chyba - timeout (neobdržel jakoukoliv odpověď do stanoveného času) (různé důvody, typicky výpadek připojení nebo serveru)
  1027   | 3            | chyba - odpojeno - webový server násilně přerušil síťové spojení (reset)
  1028   | 4            | chyba - přijaty nesmyslné data (méně než 12 znaků nebo neplatná hlavička)
  1029   | 5            | chyba - stále není vyřízený předchozí požadavek, tento tedy je zahozen, čekejte než zavoláte funkci na dokončení předchozího volání
  1030   | 6            | chyba - IP adresa zařízení SDS není platná (obvykle DHCP problém), nelze tedy zahájit komunikaci
  1031   | 7            | chyba - Ethernet není aktivní (je zapojený kabel ?)
  1032   | 8            | chyba - při zavolání http_get() funkce byly předány neplatné parametry (např. neplatná IP adresa)
  1033   | 9            | chyba - sekundární timeout (server nekomunikuje)
  1034   | 10           | chyba - nedostatek paměti


Váš program musí vždy správně ošetřit každý chybový stav. Většina chybových stavů je řešitelná jen po zásahu uživatele / administrátora (sítě, serveru), a je proto potřeba vhodně informaci o takové chybě předat.

Chyba 1028 (4) obvykle znamená závažný problém na serveru, nebo (nesprávnou) činnost firewallu někde po cestě mezi SDS a serverem. Obvykle se na straně SDS nedá nic dělat, je typicky potřeba zásah na straně serveru.

Pouze pokud dostanete chybu 1029 (5), tak to znamená, že to znovu zkoušíte dříve než je možné (tzn. http_get() nebo http_post() stále pracuje). V takovém případě dále čekejte na další změnu sys[65], která ukáže skutečný výsledek původního zavolání http_get() nebo http_post().

Chyba 1033 (9) znamená buď závažný síťový výpadek, nebo závažnou chybu na straně serveru. Na straně SDS se s tím nic dělat nedá.


OMEZENÍ SDS-C:

  • HTTP GET: lze odeslat max 1395 znaků (bajtů) uživatelského obsahu (délka GET text)
  • HTTP POST: lze odeslat max 1339 znaků (bajtů) uživatelského obsahu (délka GET textu spolu s délkou POST textu)