11#if DETWS_ENABLE_SSH_ZLIB
21#if DETWS_SSH_ZLIB_IN_PSRAM && defined(ARDUINO)
23#if !defined(CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY)
25 "DETWS_SSH_ZLIB_IN_PSRAM needs a framework built with CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y. The stock arduino-esp32 core ships it OFF, so EXT_RAM_BSS_ATTR silently no-ops and the compressor pool would overflow internal DRAM. Rebuild the core (tools/psram/README.md) or unset DETWS_SSH_ZLIB_IN_PSRAM."
27#if defined(EXT_RAM_BSS_ATTR)
28#define DETWS_SSH_COMP_ATTR EXT_RAM_BSS_ATTR
29#elif defined(EXT_RAM_ATTR)
30#define DETWS_SSH_COMP_ATTR EXT_RAM_ATTR
32#define DETWS_SSH_COMP_ATTR
35#define DETWS_SSH_COMP_ATTR
42 uint8_t work[SSH_ZLIB_WORK_SIZE];
43 uint16_t head[SSH_ZLIB_HASH_SIZE];
44 uint16_t prev[SSH_ZLIB_WORK_SIZE];
45 uint16_t ll_code[288];
59static DETWS_SSH_COMP_ATTR SshCompCtx s_ssh_comp;
61static void start_stream(SshCompState *c)
63 ssh_deflate_init(&c->z, c->work, c->head, c->prev, c->ll_code, c->ll_len, c->d_code, c->d_len);
67void ssh_comp_reset(uint8_t i)
71 s_ssh_comp.comp[i].s2c_alg = SshCompAlg::SSH_COMP_NONE;
72 s_ssh_comp.comp[i].s2c_active =
false;
75void ssh_comp_set_s2c(uint8_t i, SshCompAlg alg)
79 s_ssh_comp.comp[i].s2c_alg = alg;
82void ssh_comp_on_newkeys(uint8_t i)
86 SshCompState *c = &s_ssh_comp.comp[i];
87 if (c->s2c_alg == SshCompAlg::SSH_COMP_ZLIB && !c->s2c_active)
91void ssh_comp_on_auth_success(uint8_t i)
95 SshCompState *c = &s_ssh_comp.comp[i];
96 if (c->s2c_alg == SshCompAlg::SSH_COMP_ZLIB_DELAYED && !c->s2c_active)
100bool ssh_comp_s2c_active(uint8_t i)
105int ssh_comp_s2c(uint8_t i,
const uint8_t *src,
size_t src_len, uint8_t *dst,
size_t dst_cap,
size_t *out_len)
109 return ssh_deflate_packet(&s_ssh_comp.comp[i].z, src, src_len, dst, dst_cap, out_len);
#define MAX_SSH_CONNS
Maximum simultaneous SSH connections.
SSH per-connection compression owner (server-to-client zlib / zlib@openssh.com).
SSH server-to-client compression: a context-takeover DEFLATE stream (no heap).