Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) SSH ReceiveUntilMatchNDemonstrates how to call the SSH ChannelReceiveUntilMatchN method.
Use ChilkatAx-win32.pkg Procedure Test Handle hoSsh Boolean iSuccess Variant vSaPrompts Handle hoSaPrompts String sCmdOutput String sHostname Integer iPort Integer iChannelNum String sTermType Integer iWidthInChars Integer iHeightInChars Integer iPixWidth Integer iPixHeight Boolean iCaseSensitiveMatch Integer iPollTimeoutMs Integer n String sTemp1 Boolean bTemp1 // This example assumes the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatSsh)) To hoSsh If (Not(IsComObjectCreated(hoSsh))) Begin Send CreateComObject of hoSsh End // For the sake of the example, pretend the remote shell prompt // will be any of the following: Get Create (RefClass(cComCkStringArray)) To hoSaPrompts If (Not(IsComObjectCreated(hoSaPrompts))) Begin Send CreateComObject of hoSaPrompts End Get ComAppend Of hoSaPrompts "~$" To iSuccess Get ComAppend Of hoSaPrompts "mars#" To iSuccess Get ComAppend Of hoSaPrompts "jupiter%" To iSuccess Get ComAppend Of hoSaPrompts "chilkat$" To iSuccess Get ComAppend Of hoSaPrompts "admin>" To iSuccess // Connect to an SSH server: // Hostname may be an IP address or hostname: Move "www.some-ssh-server.com" To sHostname Move 22 To iPort Get ComConnect Of hoSsh sHostname iPort To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Wait a max of 10 seconds when reading responses.. Set ComIdleTimeoutMs Of hoSsh To 10000 // Authenticate using login/password: Get ComAuthenticatePw Of hoSsh "myLogin" "myPassword" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Open a session channel. (It is possible to have multiple // session channels open simultaneously.) Get ComOpenSessionChannel Of hoSsh To iChannelNum If (iChannelNum < 0) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Move "dumb" To sTermType Move 120 To iWidthInChars Move 40 To iHeightInChars // Use 0 for pixWidth and pixHeight when the dimensions // are set in number-of-chars. Move 0 To iPixWidth Move 0 To iPixHeight Get ComSendReqPty Of hoSsh iChannelNum sTermType iWidthInChars iHeightInChars iPixWidth iPixHeight To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Start a shell on the channel: Get ComSendReqShell Of hoSsh iChannelNum To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Run the 1st command in the remote shell, which will be to // "cd" to a subdirectory. Get ComChannelSendString Of hoSsh iChannelNum "cd workspace" + (character(10)) "utf-8" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Retrieve the output to the next prompt: Move True To iCaseSensitiveMatch Get pvComObject of hoSaPrompts to vSaPrompts Get ComChannelReceiveUntilMatchN Of hoSsh iChannelNum vSaPrompts "utf-8" iCaseSensitiveMatch To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Display what we've received so far. This clears // the internal receive buffer, which is important. // After we send the command, we'll be reading until // the next command prompt. If the command prompt // is already in the internal receive buffer, it'll think it's // already finished... Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sCmdOutput Get ComLastMethodSuccess Of hoSsh To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Showln sCmdOutput // Run the 2nd command in the remote shell, which will be // to "ls" the directory. Get ComChannelSendString Of hoSsh iChannelNum "ls" + (character(10)) "utf-8" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Retrieve and display the output. Get pvComObject of hoSaPrompts to vSaPrompts Get ComChannelReceiveUntilMatchN Of hoSsh iChannelNum vSaPrompts "utf-8" iCaseSensitiveMatch To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sCmdOutput Get ComLastMethodSuccess Of hoSsh To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Showln sCmdOutput // Start the final command in the remote shell. This example // will send a "ls -l" command to retrieve the long format directory listing. Get ComChannelSendString Of hoSsh iChannelNum "ls -l" + (character(10)) "utf-8" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Send an EOF. This tells the server that no more data will // be sent on this channel. The channel remains open, and // the SSH client may still receive output on this channel. Get ComChannelSendEof Of hoSsh iChannelNum To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Read whatever output may already be available on the // SSH connection. ChannelReadAndPoll returns the number of bytes // that are available in the channel's internal buffer that // are ready to be "picked up" by calling GetReceivedText // or GetReceivedData. // A return value of -1 indicates failure. // A return value of -2 indicates a failure via timeout. // The ChannelReadAndPoll method waits // for data to arrive on the connection usingi the IdleTimeoutMs // property setting. Once the first data arrives, it continues // reading but instead uses the pollTimeoutMs passed in the 2nd argument: // A return value of -2 indicates a timeout where no data is received. Move 2000 To iPollTimeoutMs Get ComChannelReadAndPoll Of hoSsh iChannelNum iPollTimeoutMs To n If (n < 0) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Close the channel: Get ComChannelSendClose Of hoSsh iChannelNum To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End // Perhaps we did not receive all of the commands output. // To make sure, call ChannelReceiveToClose to accumulate any remaining // output until the server's corresponding "channel close" is received. Get ComChannelReceiveToClose Of hoSsh iChannelNum To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Get ComGetReceivedText Of hoSsh iChannelNum "utf-8" To sCmdOutput Get ComLastMethodSuccess Of hoSsh To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoSsh To sTemp1 Showln sTemp1 Procedure_Return End Showln sCmdOutput // Disconnect Send ComDisconnect To hoSsh End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.