summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/include/rtems/telnetd.h
blob: 1f8e1c55c3f05eba8ab35ce33aff49e0115ca6c5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
 *  Original Author: Fernando RUIZ CASAS (fernando.ruiz@ctv.es)
 *  May 2001
 *  Reworked by Till Straumann and .h overhauled by Joel Sherrill.
 *
 * Copyright (c) 2009 embedded brains GmbH and others.
 *
 * embedded brains GmbH
 * Obere Lagerstr. 30
 * D-82178 Puchheim
 * Germany
 * <rtems@embedded-brains.de>
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.org/license/LICENSE.
 */

#ifndef _RTEMS_TELNETD_H
#define _RTEMS_TELNETD_H

#include <rtems.h>
#include <rtems/shell.h>

#ifdef __cplusplus
extern "C" {
#endif

bool rtems_telnetd_login_check(
  const char *user,
  const char *passphrase
);

/**
 * @brief Telnet command type.
 */
typedef void (*rtems_telnetd_command)(
  char * /* device name */,
  void * /* arg */
);

/**
 * @brief Telnet configuration structure.
 */
typedef struct {
  /**
   * @brief Function invoked for each Telnet connection.
   *
   * The first parameter contains the device name.  The second parameter
   * contains the argument pointer of this configuration table.
   */
  rtems_telnetd_command command;

  /**
   * @brief Argument for command function.
   */
  void *arg;

  /**
   * @brief Task priority.
   *
   * Use 0 for the default value.
   */
  rtems_task_priority priority;

  /**
   * @brief Task stack size.
   *
   * Use 0 for the default value.
   */
  size_t stack_size;

  /**
   * @brief Login check function.
   *
   * Method used for login checks.  Use @c NULL to disable a login check.
   */
  rtems_shell_login_check_t login_check;

  /**
   * @brief This is an obsolete configuration option.
   *
   * It must be set to false, otherwise rtems_telnetd_start() will do nothing
   * and returns with a status of RTEMS_NOT_IMPLEMENTED.
   */
  bool keep_stdio;

  /**
   * @brief Maximum number of clients which can connect to the system at a
   * time.
   *
   * Use 0 for the default value.
   */
  uint16_t client_maximum;

  /**
   * @brief Server port number in host byte order.
   *
   * Use 0 for the default value.
   */
  uint16_t port;
} rtems_telnetd_config_table;

/**
 * @brief Starts the Telnet server using the provided configuration.
 *
 * @retval RTEMS_SUCCESSFUL Successful operation.
 * @retval RTEMS_INVALID_ADDRESS The command function in the configuration is
 *   @c NULL.
 * @retval RTEMS_RESOURCE_IN_USE The server port is already in use.
 * @retval RTEMS_NOT_IMPLEMENTED The keep stdio configuration option is true.
 * @retval RTEMS_UNSATISFIED Not enough resources to start the Telnet server or
 *   task priority in configuration is invalid.
 */
rtems_status_code rtems_telnetd_start(const rtems_telnetd_config_table *config);

/**
 * @brief Telnet configuration.
 *
 * The application must provide this configuration table.  It is used by
 * rtems_telnetd_initialize() to configure the Telnet subsystem.  Do not modify
 * the entries after the intialization since it is used internally.
 */
extern rtems_telnetd_config_table rtems_telnetd_config;

/**
 * @brief Initializes the Telnet subsystem.
 *
 * Uses the application provided @ref rtems_telnetd_config configuration table.
 */
rtems_status_code rtems_telnetd_initialize(void);

#ifdef __cplusplus
}
#endif

#endif