Archived Forum Post

Index of archived forum posts

Question:

SSH ChannelReceiveUntilMatch() does not work after upgrade

Sep 01 '16 at 12:25

I am attempting to upgrade from ChilkatDotNet4.dll version 9.4.1.0 to 9.5.0.58 but the following code no longer works:

sshCK.SendReqExec(channelNum, "type \remote_host_Bshare_name$data.csv && echo Get_Complete"); sshCK.ChannelReceiveUntilMatch(channelNum, "Get_Complete", "ansi", false);

I am connecting to Windows host A via SSH and then having host A print the contents of a remote file on host B, and then append the keyword "Get_Complete" so I know where the data ends.

Here are my observations:

1) This works fine with 9.4.1.0 (i.e. ChannelReceiveUntilMatch() returns true) 2) If I ignore the error and call GetReceivedText(), the data that is returned is exactly what I expected to receive. 3) I tried playing around with ReadTimeoutMs, but regardless of its value the command always returns in about 25ms.

Has this command changed significantly since 9.4 and I just need to change my logic? Or is there a bug of some kind?

Thanks, Richard

Chilkat error: ChilkatLog:
  ChannelReceiveUntilMatch(16ms):
    DllDate: Jun 13 2016
    ChilkatVersion: 9.5.0.58
    UnlockPrefix: PETERLSSH
    Architecture: Little Endian; 64-bit
    Language: .NET 4.0 / x64
    VerboseLogging: 1
    channelReceiveUntilMatch(16ms):
      channel: 5
      pattern: Get_Complete
      charset: ansi
      caseSensitive: 0
      readChannelData(16ms):
        mType: IGNORE
        mType: CHANNEL_DATA
        dataLen: 80
        clientWinSize: 327600
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 512
        clientWinSize: 327088
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 1024
        clientWinSize: 326064
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 1968
        clientWinSize: 324096
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 512
        clientWinSize: 323584
      --readChannelData
      readChannelData:
        mType: IGNORE
        mType: CHANNEL_DATA
        dataLen: 80
        clientWinSize: 323504
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 944
        clientWinSize: 322560
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 512
        clientWinSize: 322048
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 400
        clientWinSize: 321648
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 512
        clientWinSize: 321136
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 784
        clientWinSize: 320352
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 80
        clientWinSize: 320272
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 784
        clientWinSize: 319488
      --readChannelData
      readChannelData:
        mType: IGNORE
        mType: CHANNEL_DATA
        dataLen: 80
        clientWinSize: 319408
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 1696
        clientWinSize: 317712
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 784
        clientWinSize: 316928
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 1344
        clientWinSize: 315584
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 704
        clientWinSize: 314880
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 912
        clientWinSize: 313968
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 1104
        clientWinSize: 312864
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 2746
        clientWinSize: 310118
      --readChannelData
      readChannelData:
        mType: CHANNEL_DATA
        dataLen: 14
        clientWinSize: 310104
      --readChannelData
      readChannelData:
        mType: IGNORE
        mType: CHANNEL_REQUEST
        Received CHANNEL REQUEST message
        requestType: exit-status
        wantReply: 0
        exitStatusCode: 0
        Received channel request 
      --readChannelData
      readChannelData:
        mType: CHANNEL_EOF
      --readChannelData
      readChannelData:
        mType: CHANNEL_CLOSE
        Sent SSH Channel CLOSE
      --readChannelData
      Failed to receive until match.
    --channelReceiveUntilMatch
    Failed.
  --ChannelReceiveUntilMatch
--ChilkatLog

Answer

This was a recent problem fixed just after the v9.5.0.58 release. Here's the new build w/ the patch:

32-bit Download: http://www.chilkatsoft.com/download/preRelease/ChilkatDotNet4-9.5.0-win32.zip
64-bit Download: http://www.chilkatsoft.com/download/preRelease/ChilkatDotNet4-9.5.0-x64.zip


Answer

Hi,

The following code has worked perfectly using ChilkatDotNet4-9.5.0.40

Yesterday I upgraded to ChilkatDotNet4-9.5.0.58 and found that _ChilkatSSH.ChannelReceiveUntilMatch fails to find the match string "AReady" (90 second timeout expired). If I skip over the error and look at the subsequent _ChilkatSSH.GetReceivedText, everything received is normal including the match string "AReady".

Seeing the above topic (a related bug?) and your replied patch, ChilkatDotNet4-9.5.0.59, I immediately downloaded and tried it.

Unfortunately, for me, .59 failed exactly as .58

Again, .40 works perfectly. .58 & .59 do not.

Please advise.

Thank you very much!

Regards, Peter

   For i = 0 To MAX_CONNECTION_RETRIES
                If _ChilkatSSH.Connect(pAApp_IPAddress, "22") Then Exit For
                Threading.Thread.Sleep(4000)
            Next
            If (_ChilkatSSH.AuthenticatePw(pAApp_AMMI_I_Username, pAApp_AMMI_I_Password) <> True) Then Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            _Channel = _ChilkatSSH.OpenSessionChannel() 'Open a session channel.  (It is possible to have multiple session channels open simultaneously.)
            If (_Channel < 0) Then
                Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            End If
            ' Create a dumb terminal with a call to Putty???
            If (_ChilkatSSH.SendReqPty(_Channel, termType, widthInChars, heightInChars, pixWidth, pixHeight) <> True) Then Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            '  Start a shell on the channel:
            If (_ChilkatSSH.SendReqShell(_Channel) <> True) Then Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            If (_ChilkatSSH.ChannelReceiveUntilMatch(_Channel, "AReady", "ansi", True) <> True) Then Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            pAApp_AMMI_I_Output = _ChilkatSSH.GetReceivedText(_Channel, "ansi")
            _Details &= "SendReqShell:" & pAApp_AMMI_I_Output
            If (pAApp_AMMI_I_Output = vbNullString) Then
                Throw New System.Exception(_ChilkatSSH.LastErrorText & vbCrLf)
            End If

Answer

Please check to see if this new build fixes it:

32-bit Download: http://www.chilkatsoft.com/download/preRelease/ChilkatDotNet4-9.5.0-win32.zip
64-bit Download: http://www.chilkatsoft.com/download/preRelease/ChilkatDotNet4-9.5.0-x64.zip


Answer

Thank you, rkroehl and Chilkat.

Patch ChilkatDotNet4-9.5.0.59 is working. Based on rkroehl's suggestion, surrounding the match string with asterisks works. I then modified all of my existing source appropriately.

Thank you again for your help!

Regards, Peter