PureBasic
PureBasic
SSH Tunnel Listener Activity Log
See more SSH Tunnel Examples
Demonstrates the listener-log properties KeepAcceptLog, AcceptLog, and AcceptLogPath, which record the activity of the background listener thread started by BeginAccepting.
Note: The log paths are relative to the application's current working directory. Absolute paths may also be used.
Background: Because the listener runs on a background thread, an activity log is often the only practical way to see what it is doing — which connections it accepted and when.
KeepAcceptLog must be enabled for the in-memory AcceptLog to be populated; AcceptLogPath is an independent file-based log that persists across the run. This log covers the listener specifically, as distinct from the TunnelLog that records the SSH tunnel threads.Chilkat PureBasic Downloads
IncludeFile "CkSshTunnel.pb"
Procedure ChilkatExample()
success.i = 0
; Demonstrates the SshTunnel listener-log properties KeepAcceptLog, AcceptLog, and AcceptLogPath.
;
; These log the activity of the background listener thread started by BeginAccepting.
tunnel.i = CkSshTunnel::ckCreate()
If tunnel.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Retain the listener activity log in memory so it can be read from the AcceptLog property.
CkSshTunnel::setCkKeepAcceptLog(tunnel, 1)
; Optionally also write the listener activity to a file (separate from the in-memory log).
CkSshTunnel::setCkAcceptLogPath(tunnel, "qa_output/accept.log")
CkSshTunnel::setCkDestHostname(tunnel, "db.internal.example.com")
CkSshTunnel::setCkDestPort(tunnel, 5432)
sshPort.i = 22
success = CkSshTunnel::ckConnect(tunnel,"ssh.example.com",sshPort)
If success = 0
Debug CkSshTunnel::ckLastErrorText(tunnel)
CkSshTunnel::ckDispose(tunnel)
ProcedureReturn
EndIf
; 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.
password.s = "mySshPassword"
success = CkSshTunnel::ckAuthenticatePw(tunnel,"mySshLogin",password)
If success = 0
Debug CkSshTunnel::ckLastErrorText(tunnel)
CkSshTunnel::ckDispose(tunnel)
ProcedureReturn
EndIf
listenPort.i = 1080
success = CkSshTunnel::ckBeginAccepting(tunnel,listenPort)
If success = 0
Debug CkSshTunnel::ckLastErrorText(tunnel)
CkSshTunnel::ckDispose(tunnel)
ProcedureReturn
EndIf
; ... the listener accepts connections for a while ...
; Read the accumulated in-memory listener log.
Debug CkSshTunnel::ckAcceptLog(tunnel)
waitForThreadExit.i = 1
success = CkSshTunnel::ckCloseTunnel(tunnel,waitForThreadExit)
If success = 0
Debug CkSshTunnel::ckLastErrorText(tunnel)
CkSshTunnel::ckDispose(tunnel)
ProcedureReturn
EndIf
CkSshTunnel::ckDispose(tunnel)
ProcedureReturn
EndProcedure