Added SILC Server library.
[silc.git] / lib / silcserver / silcserver_params.h
diff --git a/lib/silcserver/silcserver_params.h b/lib/silcserver/silcserver_params.h
new file mode 100644 (file)
index 0000000..2cef5aa
--- /dev/null
@@ -0,0 +1,437 @@
+/*
+
+  silcserver_params.h
+
+  Author: Pekka Riikonen <priikone@silcnet.org>
+
+  Copyright (C) 1997 - 2005 Pekka Riikonen
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+*/
+
+#ifndef SILCSERVER_PARAMS_H
+#define SILCSERVER_PARAMS_H
+
+typedef struct SilcServerParamCipherStruct {
+  char *name;
+  char *module;
+  SilcUInt32 key_length;
+  SilcUInt32 block_length;
+  struct SilcServerParamCipherStruct *next;
+} *SilcServerParamCipher;
+
+typedef struct SilcServerParamHashStruct {
+  char *name;
+  char *module;
+  SilcUInt32 block_length;
+  SilcUInt32 digest_length;
+  struct SilcServerParamHashStruct *next;
+} *SilcServerParamHash;
+
+typedef struct SilcServerParamHmacStruct {
+  char *name;
+  char *hash;
+  SilcUInt32 mac_length;
+  struct SilcServerParamHmacStruct *next;
+} *SilcServerParamHmac;
+
+typedef struct SilcServerParamPkcsStruct {
+  char *name;
+  struct SilcServerParamPkcsStruct *next;
+} *SilcServerParamPkcs;
+
+typedef struct SilcServerParamInterfaceStruct {
+  char *ip;                            /* IP address */
+  SilcUInt16 port;                     /* Port */
+  struct SilcServerParamInterfaceStruct *next;
+} *SilcServerParamInterface;
+
+typedef struct SilcServerParamServerInfoStruct {
+  char *server_name;                   /* Server name */
+  SilcList interfaces;                 /* SilcServerParamInterface */
+  char *server_type;                   /* E.g. "Test Server" */
+  char *location;                      /* Geographic location */
+  char *admin;                         /* Admin's full name */
+  char *email;                         /* Admin's email address */
+  char *user;                          /* Userid the server use */
+  char *group;                         /* Groupid the server use  */
+  char *motd_file;                     /* Path to text MOTD file */
+  char *pid_file;                      /* Path to the PID file */
+  SilcPublicKey public_key;            /* Server's public key */
+  SilcPrivateKey private_key;          /* Server's private key */
+} *SilcServerParamServerInfo;
+
+typedef struct SilcServerParamLoggingStruct {
+  char *file;
+  SilcUInt32 maxsize;
+} *SilcServerParamLogging;
+
+/* Connection parameters */
+typedef struct SilcServerParamConnParamsObject {
+  struct SilcServerParamConnParams *next;
+  char *name;
+  char *version_protocol;
+  char *version_software;
+  char *version_software_vendor;
+  SilcUInt32 connections_max;
+  SilcUInt32 connections_max_per_host;
+  SilcUInt32 keepalive_secs;
+  SilcUInt32 reconnect_count;
+  SilcUInt32 reconnect_interval;
+  SilcUInt32 reconnect_interval_max;
+  SilcUInt32 key_exchange_rekey;
+  SilcUInt32 qos_rate_limit;
+  SilcUInt32 qos_bytes_limit;
+  SilcUInt32 qos_limit_sec;
+  SilcUInt32 qos_limit_usec;
+  SilcUInt32 chlimit;
+  unsigned int key_exchange_pfs      : 1;
+  unsigned int reconnect_keep_trying : 1;
+  unsigned int anonymous             : 1;
+  unsigned int qos                   : 1;
+} *SilcServerParamConnParams, SilcServerParamConnParamsStruct;
+
+/* Holds all client authentication data from config file */
+typedef struct SilcServerParamClientStruct {
+  char *host;
+  unsigned char *passphrase;
+  SilcUInt32 passphrase_len;
+  SilcHashTable publickeys;
+  SilcBool pubkey_auth;
+  SilcServerParamConnParams param;
+  struct SilcServerParamClientStruct *next;
+} *SilcServerParamClient;
+
+/* Holds all server's administrators authentication data from config file */
+typedef struct SilcServerParamAdminStruct {
+  char *host;
+  char *user;
+  char *nick;
+  unsigned char *passphrase;
+  SilcUInt32 passphrase_len;
+  SilcHashTable publickeys;
+  struct SilcServerParamAdminStruct *next;
+} *SilcServerParamAdmin;
+
+/* Holds all configured denied connections from config file */
+typedef struct SilcServerParamDenyStruct {
+  char *host;
+  char *reason;
+  struct SilcServerParamDenyStruct *next;
+} *SilcServerParamDeny;
+
+/* Holds all configured server connections from config file */
+typedef struct SilcServerParamServerStruct {
+  char *host;
+  unsigned char *passphrase;
+  SilcUInt32 passphrase_len;
+  SilcHashTable publickeys;
+  SilcBool pubkey_auth;
+  SilcServerParamConnParams param;
+  SilcBool backup_router;
+  struct SilcServerParamServerStruct *next;
+} *SilcServerParamServer;
+
+/* Holds all configured router connections from config file */
+typedef struct SilcServerParamRouterStruct {
+  char *host;
+  unsigned char *passphrase;
+  SilcUInt32 passphrase_len;
+  SilcHashTable publickeys;
+  SilcBool pubkey_auth;
+  SilcUInt16 port;
+  SilcServerParamConnParams param;
+  SilcBool initiator;
+  SilcBool backup_router;
+  char *backup_replace_ip;
+  SilcUInt16 backup_replace_port;
+  SilcBool backup_local;
+  struct SilcServerParamRouterStruct *next;
+} *SilcServerParamRouter;
+
+typedef struct {
+  /* Server information */
+  SilcServerParamServerInfo server_info;
+
+  /* Global flags */
+  unsigned int prefer_passphrase_auth   : 1;
+  unsigned int require_reverse_lookup   : 1;
+  unsigned int detach_disabled          : 1;
+
+  /* Threads support */
+  unsigned int use_threads              : 1;
+  SilcUInt32 connections_per_thread;
+
+  /* Default connection parameters */
+  SilcServerParamConnParamsStruct param;
+
+  SilcUInt32 channel_rekey_secs;
+  SilcUInt32 key_exchange_timeout;
+  SilcUInt32 conn_auth_timeout;
+  SilcUInt32 detach_timeout;
+  SilcBool logging_timestamp;
+  SilcBool logging_quick;
+  long logging_flushdelay;
+  char *debug_string;
+
+  /* Supported ciphers, hashes, hmacs and PKCS's */
+  SilcList cipher;                    /* SilcServerParamCipher */
+  SilcList hash;                      /* SilcServerParamHash */
+  SilcList hmac;                      /* SilcServerParamHmac */
+  SilcList pkcs;                      /* SilcServerParamPkcs */
+
+  /* Configured client, server and router connections */
+  SilcList clients;                   /* SilcServerParamClient */
+  SilcList servers;                   /* SilcServerParamServer */
+  SilcList routers;                   /* SilcServerParamRouter */
+
+  /* Configured connections parameters */
+  SilcList conn_params;                       /* SilcServerParamConnParams */
+
+  /* Denied connections */
+  SilcList denied;                    /* SilcServerParamDeny */
+
+  /* Configured server administrators */
+  SilcList admins;                    /* SilcServerParamAdmin */
+
+  SilcServerParamLogging *logging_info;
+  SilcServerParamLogging *logging_warnings;
+  SilcServerParamLogging *logging_errors;
+  SilcServerParamLogging *logging_fatals;
+
+  SilcUInt8 refcnt;                   /* Reference counter */
+} *SilcServerParams;
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_alloc
+ *
+ * SYNOPSIS
+ *
+ *    SilcServerParams silc_server_params_alloc(void);
+ *
+ * DESCRIPTION
+ *
+ *    Allocates server parameters context.
+ *
+ ***/
+SilcServerParams silc_server_params_alloc(void);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_free
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_free(SilcServerParams params);
+ *
+ * DESCRIPTION
+ *
+ *    Frees server parameters and all allocated resources in it.
+ *
+ ***/
+void silc_server_params_free(SilcServerParams params);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_serverinfo_alloc
+ *
+ * SYNOPSIS
+ *
+ *    SilcServerParamServerInfo silc_server_params_serverinfo_alloc(void);
+ *
+ * DESCRIPTION
+ *
+ *    Allocates server information context.  This does not have to be freed
+ *    by the caller.  It is freed when the server parameters are freed.
+ *
+ ***/
+SilcServerParamServerInfo silc_server_params_serverinfo_alloc(void);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_serverinfo_alloc
+ *
+ * SYNOPSIS
+ *
+ *    void
+ *    silc_server_params_serverinfo_add_iface(SilcServerParamServerInfo info,
+ *                                            SilcServerParamInterface iface);
+ *
+ * DESCRIPTION
+ *
+ *    Adds interface to server information parameters.  The first added
+ *    interface is the primary interface.
+ *
+ ***/
+void silc_server_params_serverinfo_add_iface(SilcServerParamServerInfo info,
+                                            SilcServerParamInterface iface);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_set_serverinfo
+ *
+ * SYNOPSIS
+ *
+ *    void
+ *    silc_server_params_set_serverinfo(SilcServerParams params,
+ *                                      SilcServerParamServerInfo
+ *                                                       server_info);
+ *
+ * DESCRIPTION
+ *
+ *    Set server's information to server parameters.
+ *
+ ***/
+void silc_server_params_set_serverinfo(SilcServerParams params,
+                                      SilcServerParamServerInfo server_info);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_cipher
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_cipher(SilcServerParams params,
+ *                                       SilcServerParamCipher cipher);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a cipher to server parameters.
+ *
+ ***/
+void silc_server_params_add_cipher(SilcServerParams params,
+                                  SilcServerParamCipher cipher);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_hash
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_hash(SilcServerParams params,
+ *                                     SilcServerParamHash hash);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a hash function to server parameters.
+ *
+ ***/
+void silc_server_params_add_hash(SilcServerParams params,
+                                SilcServerParamHash hash);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_hmac
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_hmac(SilcServerParams params,
+ *                                     SilcServerParamHmac hmac);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a HMAC to server parameters.
+ *
+ ***/
+void silc_server_params_add_hmac(SilcServerParams params,
+                                SilcServerParamHmac hmac);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_pkcs
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_pkcs(SilcServerParams params,
+ *                                     SilcServerParamPkcs pkcs);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a HMAC to server parameters.
+ *
+ ***/
+void silc_server_params_add_pkcs(SilcServerParams params,
+                                SilcServerParamPkcs pkcs);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_client
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_client(SilcServerParams params,
+ *                                       SilcServerParamClient client);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a client connection to server parameters.
+ *
+ ***/
+void silc_server_params_add_client(SilcServerParams params,
+                                  SilcServerParamClient client);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_server
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_server(SilcServerParams params,
+ *                                       SilcServerParamServer server);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a server connection to server parameters.
+ *
+ ***/
+void silc_server_params_add_server(SilcServerParams params,
+                                  SilcServerParamServer server);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_router
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_router(SilcServerParams params,
+ *                                       SilcServerParamRouter router);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a router connection to server parameters.
+ *
+ ***/
+void silc_server_params_add_router(SilcServerParams params,
+                                  SilcServerParamRouter router);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_connparam
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_connparam(SilcServerParams params,
+ *                                          SilcServerParamConnParams param);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a connection parameters to server parameters.
+ *
+ ***/
+void silc_server_params_add_connparam(SilcServerParams params,
+                                     SilcServerParamConnParams param);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_deny
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_deny(SilcServerParams params,
+ *                                     SilcServerParamDeny deny);
+ *
+ * DESCRIPTION
+ *
+ *    Adds a denied connection to server parameters.
+ *
+ ***/
+void silc_server_params_add_deny(SilcServerParams params,
+                                SilcServerParamDeny deny);
+
+/****f* silcserver/SilcServerParamsAPI/silc_server_params_add_admin
+ *
+ * SYNOPSIS
+ *
+ *    void silc_server_params_add_admin(SilcServerParams params,
+ *                                      SilcServerParamAdmin admin);
+ *
+ * DESCRIPTION
+ *
+ *    Adds an server administrator to server parameters.
+ *
+ ***/
+void silc_server_params_add_admin(SilcServerParams params,
+                                 SilcServerParamAdmin admin);
+
+#endif /* SILCSERVER_PARAMS_H */