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 'be_list.c')
-rw-r--r--be_list.c118
1 files changed, 118 insertions, 0 deletions
diff --git a/be_list.c b/be_list.c
new file mode 100644
index 00000000..09437a69
--- /dev/null
+++ b/be_list.c
@@ -0,0 +1,118 @@
+/*
+ * Source file that is rebuilt per application, and provides the list
+ * of backends, the default protocol, and the application name.
+ *
+ * This file expects the build system to provide some per-application
+ * definitions on the compiler command line. So you don't just add it
+ * directly to the sources list for an application. Instead you call
+ * the be_list() function defined in setup.cmake, e.g.
+ *
+ * be_list(target-name AppName [SSH] [SERIAL] [OTHERBACKENDS])
+ *
+ * This translates into the following command-line macro definitions
+ * used by the code below:
+ *
+ * - APPNAME should be defined to the name of the program, in
+ * user-facing capitalisation (e.g. PuTTY rather than putty).
+ * Unquoted: it's easier to stringify it in the preprocessor than
+ * to persuade cmake to put the right quotes on the command line on
+ * all build platforms.
+ *
+ * - The following macros should each be defined to 1 if a given set
+ * of backends should be added to the backends[] list, or 0 if they
+ * should not be:
+ *
+ * * SSH: the two SSH backends (SSH proper, and bare-ssh-connection)
+ *
+ * * SERIAL: the serial port backend
+ *
+ * * OTHERBACKENDS: the non-cryptographic network protocol backends
+ * (Telnet, Rlogin, SUPDUP, Raw)
+ */
+
+#include <stdio.h>
+#include "putty.h"
+
+const char *const appname = STR(APPNAME);
+
+/*
+ * Define the default protocol for the application. This is always a
+ * network backend (serial ports come second behind network, in every
+ * case). Applications that don't have either (such as pterm) don't
+ * need this variable anyway, so just set it to -1.
+ */
+#if SSH
+const int be_default_protocol = PROT_SSH;
+#elif OTHERBACKENDS
+const int be_default_protocol = PROT_TELNET;
+#else
+const int be_default_protocol = -1;
+#endif
+
+/*
+ * List all the configured backends, in the order they should appear
+ * in the config box.
+ */
+const struct BackendVtable *const backends[] = {
+ /*
+ * Start with the most-preferred network-remote-login protocol.
+ * That's SSH if present, otherwise Telnet if present.
+ */
+#if SSH
+ &ssh_backend,
+#elif OTHERBACKENDS
+ &telnet_backend, /* Telnet at the top if SSH is absent */
+#endif
+
+ /*
+ * Second on the list is the serial-port backend, if available.
+ */
+#if SERIAL
+ &serial_backend,
+#endif
+
+ /*
+ * After that come the remaining network protocols: Telnet if it
+ * hasn't already appeared above, and Rlogin, SUPDUP and Raw.
+ */
+#if OTHERBACKENDS && SSH
+ &telnet_backend, /* only if SSH displaced it at the top */
+#endif
+#if OTHERBACKENDS
+ &rlogin_backend,
+ &supdup_backend,
+ &raw_backend,
+#endif
+
+ /*
+ * Bare ssh-connection / PSUSAN is a niche protocol and goes well
+ * down the list.
+ */
+#if SSH
+ &sshconn_backend,
+#endif
+
+ /*
+ * Done. Null pointer to mark the end of the list.
+ */
+ NULL
+};
+
+/*
+ * Number of backends at the start of the above list that should have
+ * radio buttons in the config UI.
+ *
+ * The rule is: the most-preferred network backend, and Serial, each
+ * get a radio button if present.
+ *
+ * The rest will be relegated to a dropdown list.
+ */
+const size_t n_ui_backends =
+ 0
+#if SSH || OTHERBACKENDS
+ + 1
+#endif
+#if SERIAL
+ + 1
+#endif
+ ;