Sample code for 30+ languages & platforms
DataFlex

Get the Number of Bytes Buffered on an SSH Channel

See more SSH Examples

Demonstrates the Chilkat Ssh.GetReceivedNumBytes method, which returns how many bytes are currently available in a channel's normal receive buffer. The only argument is the channel number. It returns -1 when the channel number is invalid or its retained resources have been released.

Background: This is a non-consuming look at how much is waiting, useful for deciding whether to retrieve now or keep reading, and for reporting progress on a large transfer. It counts only the normal receive buffer — bytes in the separate stderr buffer are excluded when StderrToStdout is false. Note that data received earlier can remain available even after a disconnect, so a positive count does not imply the connection is still up.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoSsh
    Integer iSshPort
    String sPassword
    Integer iChannelNum
    Integer iNumBytes
    String sOutput
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    //  Demonstrates the Ssh.GetReceivedNumBytes method, which returns the number of bytes currently
    //  available in a channel's normal receive buffer.  The only argument is the channel number.
    //  It returns -1 for an invalid channel or one whose resources have been released.

    Get Create (RefClass(cComChilkatSsh)) To hoSsh
    If (Not(IsComObjectCreated(hoSsh))) Begin
        Send CreateComObject of hoSsh
    End

    Move 22 To iSshPort
    Get ComConnect Of hoSsh "ssh.example.com" iSshPort To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Normally you would not hard-code the password in source.  You should instead obtain it
    //  from an interactive prompt, environment variable, or a secrets vault.
    Move "mySshPassword" To sPassword

    Get ComAuthenticatePw Of hoSsh "mySshLogin" sPassword To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComOpenSessionChannel Of hoSsh To iChannelNum
    If (iChannelNum < 0) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComSendReqExec Of hoSsh iChannelNum "ls -l /tmp" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  IMPORTANT: Set a read timeout.  ReadTimeoutMs defaults to 0, which means no limit -- without
    //  it, this call waits forever if the server never sends channel close.
    Set ComReadTimeoutMs Of hoSsh To 15000

    Get ComChannelReceiveToClose Of hoSsh iChannelNum To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Find out how much is waiting before retrieving it.
    Get ComGetReceivedNumBytes Of hoSsh iChannelNum To iNumBytes
    If (iNumBytes < 0) Begin
        Showln "Invalid channel, or its resources were already released."
        Procedure_Return
    End

    Showln "Bytes available: " iNumBytes

    Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sOutput
    Get ComLastMethodSuccess Of hoSsh To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoSsh To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Showln sOutput

    Send ComDisconnect To hoSsh


End_Procedure