From a97223c53ba1d9826a88fb3d549c6c3d5c91d8d1 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 26 Jul 2024 08:00:00 +0800 Subject: Add config examples for CI --- ci/config.c | 307 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 ci/config.c (limited to 'ci/config.c') diff --git a/ci/config.c b/ci/config.c new file mode 100644 index 0000000..26a6ea9 --- /dev/null +++ b/ci/config.c @@ -0,0 +1,307 @@ +#include + +#include "config.h" +#include "general_network.h" +#include "protocols.h" + +#ifdef USE_SERVER +#include "server_network.h" +#endif + +#ifdef USE_SERVER +struct server_config SERVER_CONFIG[] = { + { + /* + * The name of the remote server. Must be in a valid DNS format, + * but doesn't have to resolve. + */ + .name = STRING("peer.server.name"), + + /* + * The server ID of the remote server. The format depends on the + * protocol, but most protocols expect a three-byte string, + * where the first byte is a number and the two subsequent + * bytes are alphanumeric. Letters should usually be in + * uppercase. Server IDs are not translted between protocols + * so a uniform format is generally required. + */ + .sid = STRING("1UL"), + + /* + * Passwords, should be self-explanatory. + */ + .in_pass = STRING("password-to-expect-from-peer"), + .out_pass = STRING("password-to-send-to-peer"), + + /* + * Which protocol to use. Currently, only InspIRCd protocols are + * supported. A custom HaxIRCd binary protocol is planned, and + * support for TS6, UnrealIRCd, and other protocols may be added. + * + * INSPIRCD4_PROTOCOL: the 1206 protocol native to InspIRCd v4 + * INSPIRCD3_PROTOCOL: the 1205 protocol native to InspIRCd v3 + * INSPIRCD2_PROTOCOL: the 1202 protocol native to InspIRCd v2 + */ + .protocol = INSPIRCD4_PROTOCOL, + + .ignore_remote_unlinks = 0, + .ignore_remote_kills = 1, + .ignore_local_kills = 1, + + /* + * Set autoconnect to 1 if you want to connect to this server. + * Set autoconnect to 0 if you want this server to connect to you. + */ + .autoconnect = 1, + + /* + * This option is ignored when autoconnect=0. + * + * TLS links are highly recommended if not connecting to localhost + * or otherwise over a secure channel such as WireGuard. Although + * GnuTLS is supported, the primary developers use OpenSSL, and + * OpenSSL is more common anyways. + * Buffering is also highly recommended as it measurably improves + * performance. + * + * NET_TYPE_PLAINTEXT: Plain TCP link + * NET_TYPE_GNUTLS: GnuTLS link + * NET_TYPE_OPENSSL: OpenSSL link + * NET_TYPE_PLAINTEXT_BUFFERED: Plain TCP link with buffering + * NET_TYPE_GNUTLS_BUFFERED: GnuTLS link with buffering + * NET_TYPE_OPENSSL_BUFFERED: OpenSSL link with buffering + */ + .autoconnect_type = NET_TYPE_PLAINTEXT, + + /* + * The address and the port to connect to. The address may be + * either an IP address or a resolvable domain. + */ + .address = STRING("127.0.0.1"), + .port = STRING("7000"), + }, +}; + +size_t SERVER_CONFIG_LEN = sizeof(SERVER_CONFIG) / sizeof(*SERVER_CONFIG); +#endif + +/* + * Our own server ID. Most protocols expect a three-byte string, + * where the first byte is a number and the two subsequent + * bytes are alphanumeric. Letters should usually be in + * uppercase. Server IDs are not translted between protocols + * so a uniform format is generally required. + */ +struct string SID = STRING("2TX"); + +/* + * Our server name. Well-formed DNS, doesn't have to resolve. + */ +struct string SERVER_NAME = STRING("h.learn.tuxiversity.org"); + +/* + * Our server description. + */ +struct string SERVER_FULLNAME = STRING("HaxIRCd"); + +/* + * How many seconds of idleness should cause a PING to be sent. + */ +time_t PING_INTERVAL = 60; + +/* + * TLS certificates. If using Let's Encrypt or a similar provider, + * supply the "fullchain" in *_CERT_PATH and the "privkey" in + * *_KEY_PATH. + * + * NOTE: We do not check the validity of TLS certificates yet. CertFP + * authentication will be added later. + */ +#ifdef USE_GNUTLS +char GNUTLS_USE_SYSTEM_TRUST = 1; +char *GNUTLS_CERT_PATH = "/path/to/fullchain.pem"; +char *GNUTLS_KEY_PATH = "/path/to/privkey.pem"; +#endif +#ifdef USE_OPENSSL +char OPENSSL_USE_SYSTEM_TRUST = 1; +char *OPENSSL_CERT_PATH = "/path/to/fullchain.pem"; +char *OPENSSL_KEY_PATH = "/path/to/privkey.pem"; +#endif + +/* + * The following section defines the port that each (network, protocol) + * should listen on. + */ +#ifdef USE_SERVER +unsigned short SERVER_PORTS[NUM_NET_TYPES][NUM_PROTOCOLS] = { +#ifdef USE_PLAINTEXT +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD2_PROTOCOL] = 7001, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD3_PROTOCOL] = 7002, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD4_PROTOCOL] = 7003, +#endif +#endif +#ifdef USE_GNUTLS +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD2_PROTOCOL] = 7011, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD3_PROTOCOL] = 7012, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD4_PROTOCOL] = 7013, +#endif +#endif +#ifdef USE_OPENSSL +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD2_PROTOCOL] = 7021, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD3_PROTOCOL] = 7022, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD4_PROTOCOL] = 7023, +#endif +#endif +}; + +/* + * The following section defines the backlog of each protocol's + * listening. This is passed into the backlog argument of listen(2). + */ +size_t SERVER_LISTEN[NUM_NET_TYPES][NUM_PROTOCOLS] = { +#ifdef USE_PLAINTEXT +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD2_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD3_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD4_PROTOCOL] = 16, +#endif +#endif +#ifdef USE_GNUTLS +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD2_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD3_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD4_PROTOCOL] = 16, +#endif +#endif +#ifdef USE_OPENSSL +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD2_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD3_PROTOCOL] = 16, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD4_PROTOCOL] = 16, +#endif +#endif +}; + +/* + * The following section defines whether HaxIRCd should listen for + * incoming connections at all, for each (network, protocol) combination. + */ +char SERVER_INCOMING[NUM_NET_TYPES][NUM_PROTOCOLS] = { +#ifdef USE_PLAINTEXT +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD2_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD3_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_PLAINTEXT][INSPIRCD4_PROTOCOL] = 1, +#endif +#endif +#ifdef USE_GNUTLS +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD2_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD3_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_GNUTLS][INSPIRCD4_PROTOCOL] = 1, +#endif +#endif +#ifdef USE_OPENSSL +#ifdef USE_INSPIRCD2_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD2_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD3_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD3_PROTOCOL] = 1, +#endif +#ifdef USE_INSPIRCD4_PROTOCOL + [NET_TYPE_OPENSSL][INSPIRCD4_PROTOCOL] = 1, +#endif +#endif +}; +#endif + +/* + * The following section includes configuration for the primary + * pseudoclient, HaxServ. + */ +#ifdef USE_HAXSERV_PSEUDOCLIENT +struct string HAXSERV_UID = STRING("2TX000000"); +struct string HAXSERV_NICK = STRING("HaxServ"); +struct string HAXSERV_FULLNAME = STRING("HaxServ"); +struct string HAXSERV_IDENT = STRING("HaxServ"); +struct string HAXSERV_VHOST = STRING("services/HaxServ"); +struct string HAXSERV_HOST = STRING("/dev/full"); +struct string HAXSERV_ADDRESS = STRING("/dev/null"); +struct string HAXSERV_PREJOIN_CHANNELS[] = { + STRING("#chat"), + STRING("#services"), + STRING("#spam"), +}; +size_t HAXSERV_NUM_PREJOIN_CHANNELS = + sizeof(HAXSERV_PREJOIN_CHANNELS) / sizeof(*HAXSERV_PREJOIN_CHANNELS); +struct string HAXSERV_COMMAND_PREFIX = STRING("HaxServ: "); +struct string HAXSERV_REQUIRED_OPER_TYPE = STRING("NetAdmin"); +struct string HAXSERV_LOG_CHANNEL = STRING("#services"); +#endif + +/* + * You may specify the size of the ring buffers for each buffered + * network backend here. They must be larger than any full message; + * otherwise, undefined behavior occurs. + */ +#ifdef USE_PLAINTEXT_BUFFERED +size_t PLAINTEXT_BUFFERED_LEN = 1048576; +#endif +#ifdef USE_GNUTLS_BUFFERED +size_t GNUTLS_BUFFERED_LEN = 1048576; +#endif +#ifdef USE_OPENSSL_BUFFERED +size_t OPENSSL_BUFFERED_LEN = 1048576; +#endif + +/* + * The following section includes configuration for the IRC + * services, such as NickServ. + */ +#ifdef USE_SERVICES_PSEUDOCLIENT +struct string NICKSERV_UID = STRING("2TX0000NS"); +struct string NICKSERV_NICK = STRING("NickServ"); +struct string NICKSERV_FULLNAME = STRING("Nickname Services"); +struct string NICKSERV_IDENT = STRING("NickServ"); +struct string NICKSERV_VHOST = STRING("services/NickServ"); +struct string NICKSERV_HOST = STRING("localhost"); +struct string NICKSERV_ADDRESS = STRING("/dev/null"); +struct string SERVICES_CHANNEL = STRING("#services"); +size_t SERVICES_DB_MAX_SIZE = 104857600; +struct string SERVICES_DB_PATH = STRING("services.mdb"); +#endif -- cgit v1.2.3