Bugs item #2788319, was opened at 2009-05-07 13:32 Message generated for change (Comment added) made by samikujala You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2788319&group_id=125852
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: API Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: SKujala (samikujala) Assigned to: Daniel Stenberg (bagder) Summary: Problems with remote port forwarding Initial Comment: Out of curiosity (and to educate myself) I decided to try and set up remote port forwarding with using Libssh2. Something along the lines of ssh -nNT -R 5900:localhost:5900 u...@host This turned out to be a non-trivial task due to my little experience with libssh2 and sparse documentation. To explain my findings, let's call my end host A, and the remote end host B. I wish to connect from host A to host B, after which the ssh daemon in host B is to establish remote port forwarding back to host A. I was successful, but it appears that there are some bugs in channel.c file, which I address in the attached patch file. The way I establish the remote port forwarding, 'tcpip-forward' channel is as follows: (assume the connection and session are established and user authentication is successful) listener = libssh2_channel_forward_listen(session, 5900); channel = libssh2_channel_forward_accept(listener); 1. as packet_queue_listener() in packet.c successfully allocates and queues the incoming connection from host B into a new channel, _libssh2_packet_add() in packet.c fails to add the incoming packets into the proper channel, as _libssh2_channel_locate() in channel.c fails to locate the previously allocate channel. If I understand correctly, this is because _libssh2_channel_locate() tries to locate the channels only from the current session, whereas the channel it is looking for is in the queue of incoming connections. I fixed this by changing _libssh2_packet_add() to iterate not only through the current session, but also through the queues contained in the listeners contained in the current session. 2. channel_forward_accept() in channel.c fails to break from the do-while loop because the condition to end the do-while loop is wrong. The condition (rc > 0) should read (rc < 0). Please review my attached patch and if deemed correct, commit it into the tree. Best regards, Sami ---------------------------------------------------------------------- Comment By: SKujala (samikujala) Date: 2009-05-11 12:03 Message: Hi, Sorry for the late reply. According to the code documentation, _libssh2_transport_read() returns the packet type ( > 0 ), PACKET_NONE, PACKET_FAIL, or PACKET_EAGAIN. The loop in channel_forward_accept() as it is now only ends when _libssh2_transport_read() reports failure. Please correct me if I'm wrong but would it not make more sense if loop would end when there are actual packets in the connection queue? At least in my case I was not able to have channel_forward_accept() give me a channel upon remote connection before I changed the condition as it is in my patch. Now that I'm thinking about it more, maybe the condition to end the loop should be ( rc <= 0 ) rather than ( rc < 0 ) to not end looping if we get PACKET_NONE from _libssh2_transport_read(). Regards, Sami ---------------------------------------------------------------------- Comment By: Daniel Stenberg (bagder) Date: 2009-05-07 22:36 Message: Thanks for your patch. Can you please tell me what that second part of the patch is supposed to fix? It will bail out the _libssh2_transport_read() loop in channel_forward_accept() if it returns something >= 0 and I would like to know what you think that's a good idea! ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2788319&group_id=125852 ------------------------------------------------------------------------------ The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your production scanning environment may not be a perfect world - but thanks to Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700 Series Scanner you'll get full speed at 300 dpi even with all image processing features enabled. http://p.sf.net/sfu/kodak-com _______________________________________________ libssh2-devel mailing list libssh2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libssh2-devel