/* silcserver_params.h Author: Pekka Riikonen 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 */