summaryrefslogtreecommitdiffhomepage
path: root/tcp-accept.c
diff options
context:
space:
mode:
Diffstat (limited to 'tcp-accept.c')
-rw-r--r--tcp-accept.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/tcp-accept.c b/tcp-accept.c
index ac33566..90d72b3 100644
--- a/tcp-accept.c
+++ b/tcp-accept.c
@@ -65,15 +65,28 @@ static void tcp_acceptor(struct Listener *listener, int sock) {
}
if (send_msg_channel_open_init(fd, tcpinfo->chantype) == DROPBEAR_SUCCESS) {
-
- // address that was connected
- buf_putstring(ses.writepayload, tcpinfo->listenaddr,
- strlen(tcpinfo->listenaddr));
- // port that was connected
- buf_putint(ses.writepayload, tcpinfo->listenport);
- // originator ip
+ unsigned char* addr = NULL;
+ unsigned int port = 0;
+
+ if (tcpinfo->tcp_type == direct) {
+ /* "direct-tcpip" */
+ /* host to connect, port to connect */
+ addr = tcpinfo->sendaddr;
+ port = tcpinfo->sendport;
+ } else {
+ dropbear_assert(tcpinfo->tcp_type == forwarded);
+ /* "forwarded-tcpip" */
+ /* address that was connected, port that was connected */
+ addr = tcpinfo->listenaddr;
+ port = tcpinfo->listenport;
+ }
+
+ buf_putstring(ses.writepayload, addr, strlen(addr));
+ buf_putint(ses.writepayload, port);
+
+ /* originator ip */
buf_putstring(ses.writepayload, ipstring, strlen(ipstring));
- // originator port
+ /* originator port */
buf_putint(ses.writepayload, atol(portstring));
encrypt_packet();