summaryrefslogtreecommitdiffstats
path: root/cpukit/telnetd/pty.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-10 10:40:21 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-10-11 09:08:06 +0200
commit0dc303f09dbb3a8e681c899f9452fa1731adf8e0 (patch)
tree8f4d83ad089a59d5d644feb6662be52354b01e33 /cpukit/telnetd/pty.c
parenttelnetd: Allocate the server context (diff)
downloadrtems-0dc303f09dbb3a8e681c899f9452fa1731adf8e0.tar.bz2
telnetd: Create sessions at start
Update #3543.
Diffstat (limited to '')
-rw-r--r--cpukit/telnetd/pty.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/cpukit/telnetd/pty.c b/cpukit/telnetd/pty.c
index 7a47fddbc9..a593bbd224 100644
--- a/cpukit/telnetd/pty.c
+++ b/cpukit/telnetd/pty.c
@@ -94,26 +94,37 @@ int send_iac(rtems_pty_context *pty, unsigned char mode, unsigned char option)
return write(pty->socket, buf, sizeof(buf));
}
-/* This procedure returns the devname for a pty slot free.
- * If not slot availiable (field socket>=0)
- * then the socket argument is closed
- */
-
-char *telnet_get_pty(rtems_pty_context *pty, int socket)
+const char *rtems_pty_initialize(rtems_pty_context *pty, uintptr_t unique)
{
rtems_status_code sc;
- struct timeval t;
memset(pty, 0, sizeof(*pty));
- snprintf(pty->name, sizeof(pty->name), "/dev/pty%" PRIuPTR, (uintptr_t)pty);
+ (void)snprintf(pty->name, sizeof(pty->name), "/dev/pty%" PRIuPTR, unique);
rtems_termios_device_context_initialize(&pty->base, "pty");
- pty->socket = socket;
+ pty->socket = -1;
sc = rtems_termios_device_install(pty->name, &pty_handler, NULL, &pty->base);
if (sc != RTEMS_SUCCESSFUL) {
- close(socket);
return NULL;
}
+ return pty->name;
+}
+
+void rtems_pty_close_socket(rtems_pty_context *pty)
+{
+ if (pty->socket >= 0) {
+ (void)close(pty->socket);
+ pty->socket = -1;
+ }
+}
+
+void rtems_pty_set_socket(rtems_pty_context *pty, int socket)
+{
+ struct timeval t;
+
+ rtems_pty_close_socket(pty);
+ pty->socket = socket;
+
/* set a long polling interval to save CPU time */
t.tv_sec=2;
t.tv_usec=00000;
@@ -121,8 +132,6 @@ char *telnet_get_pty(rtems_pty_context *pty, int socket)
/* inform the client that we will echo */
send_iac(pty, IAC_WILL, 1);
-
- return pty->name;
}
/*-----------------------------------------------------------*/