64 lines
2.0 KiB
C
64 lines
2.0 KiB
C
/*
|
|
* Copyright (c) 2018 Lars Thrane A/S
|
|
* SPDX-License-Identifier: GPL-2.0
|
|
*
|
|
* Telnet interface - server
|
|
*/
|
|
#ifndef TELNET_SERVER_H
|
|
#define TELNET_SERVER_H
|
|
|
|
typedef void (cli_tx_f) (void *cctx, const void *buf, int len);
|
|
typedef void (cli_ss_f) (void *cctx, int signal, int value);
|
|
|
|
/* Telnet context */
|
|
typedef struct {
|
|
void *cctx; /* Client context */
|
|
|
|
cli_tx_f *cli_tx; /* Write to client */
|
|
cli_ss_f *cli_ss; /* Signal from client */
|
|
|
|
unsigned int bytes_rx; /* Rx byte count */
|
|
unsigned int off_rx; /* Rx buffer offset */
|
|
unsigned char mode_telnet; /* Telnet mode */
|
|
unsigned char mode_rfc2217; /* RFC-2217 mode */
|
|
|
|
unsigned int baudrate;
|
|
unsigned char datasize;
|
|
unsigned char parity;
|
|
unsigned char stopsize;
|
|
|
|
unsigned char linestate;
|
|
unsigned char modemstate;
|
|
|
|
unsigned char linestate_mask;
|
|
unsigned char modemstate_mask;
|
|
|
|
char dtr_state;
|
|
char rts_state;
|
|
} tn_ctx_t;
|
|
|
|
extern tn_ctx_t *telnet_ctx_init(void *cctx, cli_tx_f * ftx, cli_ss_f * fss);
|
|
|
|
extern int telnet_rx(tn_ctx_t * tcc, char *buf, int *plen);
|
|
extern int telnet_tx(tn_ctx_t * tcc, const char *buf, int len);
|
|
|
|
extern void telnet_reply_opt(tn_ctx_t * tcc, int opt, int prm,
|
|
const void *val, int len);
|
|
|
|
extern void telnet_rfc2217_init(tn_ctx_t * tcc, int when);
|
|
extern void telnet_rfc2217_handle_opt(tn_ctx_t * tcc, int opt,
|
|
unsigned char *pu, int nd);
|
|
|
|
extern void telnet_rfc2217_change_linestate(tn_ctx_t * tcc, int mask);
|
|
extern void telnet_rfc2217_change_modemstate(tn_ctx_t * tcc, int mask);
|
|
|
|
/* Init modes */
|
|
#define TNI_INIT 0 /* Init context */
|
|
#define TNI_ON 1 /* Option activated */
|
|
|
|
/* Signals that may be passed to cli_ss_f() */
|
|
#define TNS_DTR 1
|
|
#define TNS_RTS 2
|
|
|
|
#endif /* TELNET_SERVER_H */
|