Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'utils/backend_socket_log.c')
-rw-r--r--utils/backend_socket_log.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/utils/backend_socket_log.c b/utils/backend_socket_log.c
new file mode 100644
index 00000000..783cca31
--- /dev/null
+++ b/utils/backend_socket_log.c
@@ -0,0 +1,62 @@
+#include <assert.h>
+#include <string.h>
+
+#include "putty.h"
+#include "network.h"
+
+void backend_socket_log(Seat *seat, LogContext *logctx,
+ PlugLogType type, SockAddr *addr, int port,
+ const char *error_msg, int error_code, Conf *conf,
+ bool session_started)
+{
+ char addrbuf[256], *msg;
+
+ switch (type) {
+ case PLUGLOG_CONNECT_TRYING:
+ sk_getaddr(addr, addrbuf, lenof(addrbuf));
+ if (sk_addr_needs_port(addr)) {
+ msg = dupprintf("Connecting to %s port %d", addrbuf, port);
+ } else {
+ msg = dupprintf("Connecting to %s", addrbuf);
+ }
+ break;
+ case PLUGLOG_CONNECT_FAILED:
+ sk_getaddr(addr, addrbuf, lenof(addrbuf));
+ msg = dupprintf("Failed to connect to %s: %s", addrbuf, error_msg);
+ break;
+ case PLUGLOG_CONNECT_SUCCESS:
+ if (addr)
+ sk_getaddr(addr, addrbuf, lenof(addrbuf));
+ else /* fallback if address unavailable */
+ sprintf(addrbuf, "remote host");
+ msg = dupprintf("Connected to %s", addrbuf);
+ break;
+ case PLUGLOG_PROXY_MSG: {
+ /* Proxy-related log messages have their own identifying
+ * prefix already, put on by our caller. */
+ int len, log_to_term;
+
+ /* Suffix \r\n temporarily, so we can log to the terminal. */
+ msg = dupprintf("%s\r\n", error_msg);
+ len = strlen(msg);
+ assert(len >= 2);
+
+ log_to_term = conf_get_int(conf, CONF_proxy_log_to_term);
+ if (log_to_term == AUTO)
+ log_to_term = session_started ? FORCE_OFF : FORCE_ON;
+ if (log_to_term == FORCE_ON)
+ seat_stderr(seat, msg, len);
+
+ msg[len-2] = '\0'; /* remove the \r\n again */
+ break;
+ }
+ default:
+ msg = NULL; /* shouldn't happen, but placate optimiser */
+ break;
+ }
+
+ if (msg) {
+ logevent(logctx, msg);
+ sfree(msg);
+ }
+}