summaryrefslogtreecommitdiffstats
path: root/redir.c
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2022-04-11 11:20:13 +0200
committerGerd Hoffmann <kraxel@redhat.com>2022-04-22 14:52:30 +0200
commitc3a0964c4713bb997970dbc2d4eb1e9cf2433116 (patch)
tree57db555ccf551eab35e50530550d928bca8c03b6 /redir.c
parentd9d6f3de9777d8263b593323586da994b3c69912 (diff)
downloadamtterm-c3a0964c4713bb997970dbc2d4eb1e9cf2433116.tar.gz
redir: select start function by type
We need to select the correct start function, and not always assume we're in serial-over-lan mode. Signed-off-by: Hannes Reinecke <hare@suse.de>
Diffstat (limited to 'redir.c')
-rw-r--r--redir.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/redir.c b/redir.c
index 32deb30..03e948a 100644
--- a/redir.c
+++ b/redir.c
@@ -342,6 +342,17 @@ int redir_sol_stop(struct redir *r)
return redir_write(r, request, sizeof(request));
}
+int redir_ider_stop(struct redir *r)
+{
+ unsigned char request[END_IDER_REDIRECTION_LENGTH] = {
+ END_IDER_REDIRECTION, 0, 0, 0,
+ 0, 0, 0, 0,
+ };
+
+ redir_state(r, REDIR_CLOSING);
+ return redir_write(r, request, sizeof(request));
+}
+
int redir_sol_send(struct redir *r, unsigned char *buf, int blen)
{
int len = 10+blen;
@@ -457,7 +468,13 @@ repeat:
snprintf(r->err, sizeof(r->err), "session authentication failed");
goto err;
}
- if (-1 == redir_sol_start(r))
+ if (!memcmp(r->type, "SOL ", 4)) {
+ if (-1 == redir_sol_start(r))
+ goto err;
+ } else if (!memcmp(r->type, "IDER", 4)) {
+ if (-1 == redir_ider_start(r))
+ goto err;
+ } else
goto err;
break;
case START_SOL_REDIRECTION_REPLY:
@@ -543,6 +560,16 @@ repeat:
}
break;
}
+ case START_IDER_REDIRECTION_REPLY:
+ bshift = r->blen; /* FIXME */
+ if (r->blen < bshift)
+ goto again;
+ if (r->buf[1] != STATUS_SUCCESS) {
+ snprintf(r->err, sizeof(r->err), "IDE redirection failed");
+ goto err;
+ }
+ redir_state(r, REDIR_RUN_IDER);
+ break;
default:
snprintf(r->err, sizeof(r->err), "%s: unknown r->buf 0x%02x",
__FUNCTION__, r->buf[0]);