Created SILC Runtime Toolkit git repository Part I.
[runtime.git] / apps / silcd / idlist.h
diff --git a/apps/silcd/idlist.h b/apps/silcd/idlist.h
deleted file mode 100644 (file)
index 25705a9..0000000
+++ /dev/null
@@ -1,634 +0,0 @@
-/*
-
-  idlist.h
-
-  Author: Pekka Riikonen <priikone@silcnet.org>
-
-  Copyright (C) 1997 - 2005, 2007 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; either version 2 of the License, or
-  (at your option) any later version.
-
-  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 IDLIST_H
-#define IDLIST_H
-
-#include "serverconfig.h"
-
-/* Context for holding cache information to periodically purge
-   the cache. */
-typedef struct {
-  SilcIDCache cache;
-  SilcUInt32 timeout;
-} *SilcIDListPurge;
-
-/* Channel key re-key context. */
-typedef struct {
-  SilcChannelEntry channel;
-  SilcUInt32 key_len;
-  SilcTask task;
-} *SilcServerChannelRekey;
-
-/* ID List Entry status flags. */
-typedef SilcUInt8 SilcIDListStatus;
-#define SILC_IDLIST_STATUS_NONE         0x00  /* No status */
-#define SILC_IDLIST_STATUS_REGISTERED   0x01  /* Entry is registered */
-#define SILC_IDLIST_STATUS_RESOLVED     0x02  /* Entry info is resolved */
-#define SILC_IDLIST_STATUS_RESOLVING    0x04  /* Entry is being resolved
-                                                with WHOIS or IDENTIFY */
-#define SILC_IDLIST_STATUS_DISABLED     0x08  /* Entry is disabled */
-#define SILC_IDLIST_STATUS_RESUMED      0x10  /* Entry is resumed */
-#define SILC_IDLIST_STATUS_LOCAL        0x20  /* Entry locally connected */
-#define SILC_IDLIST_STATUS_RESUME_RES   0x40  /* Entry resolved while
-                                                resuming */
-#define SILC_IDLIST_STATUS_NOATTR       0x80  /* Entry does not support
-                                                attributes in WHOIS */
-
-/*
-   Generic ID list data structure.
-
-   This structure is included in all ID list entries and it includes data
-   pointers that are common to all ID entries.  This structure is always
-   defined to the first field in the ID entries and is used to explicitly
-   type cast to this type without first explicitly casting to correct ID
-   entry type.  Hence, the ID list entry is type casted to this type to
-   get this data from the ID entry (which is usually opaque pointer).
-
-   Note that some of the fields may be NULL.
-
-*/
-struct SilcIDListDataObject {
-  SilcConnectionType conn_type;      /* Connection type */
-  SilcServerConnection sconn;       /* Connection context */
-  SilcSKERekeyMaterial rekey;       /* Rekey material */
-  SilcHash hash;
-
-  /* Public key */
-  SilcPublicKey public_key;
-  unsigned char fingerprint[20];
-
-  long last_receive;           /* Time last received data */
-  long last_sent;              /* Time last sent data */
-
-  unsigned long created;       /* Time when entry was created */
-
-  SilcIDListStatus status;     /* Status mask of the entry */
-};
-
-/*
-   SILC Server entry object.
-
-   This entry holds information about servers in SILC network. However,
-   contents of this entry is highly dependent of what kind of server we are
-   (normal server or router server) and whether the entry is used as a local
-   list or a global list. These factors dictates the contents of this entry.
-
-   This entry is defined as follows:
-
-   Server type   List type      Contents
-   =======================================================================
-   server        local list     Server itself
-   server        global list    NULL
-   router        local list     All servers is the cell
-   router        global list    All servers in the SILC network
-
-   Following short description of the fields:
-
-   SilcIDListDataStruct data
-
-       Generic data structure to hold data common to all ID entries.
-
-   char *server_name
-
-       Logical name of the server. There is no limit of the length of the
-       server name. This is usually the same name as defined in DNS.
-
-   SilcUInt8 server_type
-
-       Type of the server. SILC_SERVER or SILC_ROUTER are the possible
-       choices for this.
-
-   SilcServerID *id
-
-       ID of the server. This includes all the relevant information about
-       the server SILC will ever need. These are also the informations
-       that is broadcasted between servers and routers in the SILC network.
-
-   char *server_info
-   char *motd
-
-       Server info (from INFO command) saved temporarily and motd (from
-       MOTD command) saved temporarily.
-
-   SilcServerEntry router
-
-       This is a pointer back to the server list. This is the router server
-       where this server is connected to. If this is the router itself and
-       it doesn't have a route this is NULL.
-
-   SilcCipher send_key
-   SilcCipher receive_key
-
-       Data sending and receiving keys.
-
-   void *connection
-
-       A pointer, usually, to the socket list for fast referencing to
-       the data used in connection with this server.  This may be anything
-       but as just said, this is usually pointer to the socket connection
-       list.
-
-*/
-struct SilcServerEntryStruct {
-  /* Generic data structure. DO NOT add anything before this! */
-  SilcIDListDataStruct data;
-
-  char *server_name;
-  SilcUInt8 server_type;
-  SilcServerID *id;
-  char *server_info;
-  char *motd;
-
-  /* Pointer to the router */
-  SilcServerEntry router;
-
-  /* Connection data */
-  void *connection;
-
-  void *backup_proto;
-  unsigned int backup  : 1;    /* Set when executing backup protocol */
-};
-
-/*
-   SILC Channel Client entry structure.
-
-   This entry used only by the SilcChannelEntry object and it holds
-   information about current clients (ie. users) on channel. Following
-   short description of the fields:
-
-   SilcClientEntry client
-
-       Pointer to the client list. This is the client currently on channel.
-
-   SilcUInt32 mode
-
-       Client's current mode on the channel.
-
-   SilcChannelEntry channel
-
-       Back pointer back to channel. As this structure is also used by
-       SilcClientEntry we have this here for fast access to the channel when
-       used by SilcClientEntry.
-
-*/
-typedef struct SilcChannelClientEntryStruct {
-  SilcClientEntry client;
-  SilcUInt32 mode;
-  SilcChannelEntry channel;
-} *SilcChannelClientEntry;
-
-/*
-   SILC Client entry object.
-
-   This entry holds information about connected clients ie. users in the SILC
-   network. The contents of this entrt is depended on whether we are normal
-   server or router server and whether the list is a local or global list.
-
-   This entry is defined as follows:
-
-   Server type   List type      Contents
-   =======================================================================
-   server        local list     All clients in server
-   server        global list    NULL
-   router        local list     All clients in cell
-   router        global list    All clients in SILC
-
-   Following short description of the fields:
-
-   SilcIDListDataStruct data
-
-       Generic data structure to hold data common to all ID entries.
-
-   unsigned char *nickname
-
-       The nickname of the client.  This is nickname in original format,
-       not casefolded or normalized.  However, it is checked to assure
-       that prohibited characters do not exist.  The casefolded version
-       is in the ID Cache.
-
-   char *servername
-
-       The name of the server where the client is from. MAy be NULL.
-
-   char username
-
-       Client's usename. This is defined in the following manner:
-
-       Server type   List type      Contents
-       ====================================================
-       server        local list     User's name
-       router        local list     NULL
-       router        global list    NULL
-
-       Router doesn't hold this information since it is not vital data
-       for the router. If this information is needed by the client it is
-       fetched when it is needed.
-
-   char userinfo
-
-       Information about user. This is free information and can be virtually
-       anything. This is defined in following manner:
-
-       Server type   List type      Contents
-       ====================================================
-       server        local list     User's information
-       router        local list     NULL
-       router        global list    NULL
-
-       Router doesn't hold this information since it is not vital data
-       for the router. If this information is needed by the client it is
-       fetched when it is needed.
-
-   SilcClientID *id
-
-       ID of the client. This includes all the information SILC will ever
-       need. Notice that no nickname of the user is saved anywhere. This is
-       beacuse of SilcClientID includes 88 bit hash value of the user's
-       nickname which can be used to track down specific user by their
-       nickname. Nickname is not relevant information that would need to be
-       saved as plain.
-
-   SilcUInt32 mode
-
-       Client's mode.  Client maybe for example server operator or
-       router operator (SILC operator).
-
-   long last_command
-
-       Time of last time client executed command. We are strict and will
-       not allow any command to be exeucted more than once in about
-       2 seconds. This is result of normal time().
-
-   SilcUInt8 fast_command
-
-       Counter to check command bursts.  By default, up to 5 commands
-       are allowed before limiting the execution.  See command flags
-       for more detail.
-
-   SilcServerEntry router
-
-       This is a pointer to the server list. This is the router server whose
-       cell this client is coming from. This is used to route messages to
-       this client.
-
-   SilcHashTable channels;
-
-       All the channels this client has joined.  The context saved in the
-       hash table shares memory with the channel entrys `user_list' hash
-       table.
-
-   void *connection
-
-       A pointer, usually, to the socket list for fast referencing to
-       the data used in connection with this client.  This may be anything
-       but as just said, this is usually pointer to the socket connection
-       list.
-
-   SilcUInt16 resolve_cmd_ident
-
-       Command identifier for the entry when the entry's data.status
-       is SILC_IDLIST_STATUS_RESOLVING.  If this entry is asked to be
-       resolved when the status is set then the resolver may attach to
-       this command identifier and handle the process after the resolving
-       is over.
-
-*/
-struct SilcClientEntryStruct {
-  /* Generic data structure. DO NOT add anything before this! */
-  SilcIDListDataStruct data;
-
-  unsigned char *nickname;
-  char *servername;
-  char *username;
-  char *userinfo;
-  SilcClientID *id;
-  SilcUInt32 mode;
-
-  long last_command;
-  SilcUInt8 fast_command;
-
-  /* Requested Attributes */
-  unsigned char *attrs;
-  SilcUInt16 attrs_len;
-
-  /* Pointer to the router */
-  SilcServerEntry router;
-
-  /* All channels this client has joined */
-  SilcHashTable channels;
-
-  /* Connection data */
-  void *connection;
-
-  /* Last time updated/accessed */
-  unsigned long updated;
-
-  /* data.status is RESOLVING and this includes the resolving command
-     reply identifier. */
-  SilcUInt16 resolve_cmd_ident;
-
-  /* we need this so nobody can resume more than once at the same time -
-   * server crashes, really odd behaviour, ... */
-  SilcClientEntry resuming_client;
-};
-
-/*
-   SILC Channel entry object.
-
-   This entry holds information about channels in SILC network. The contents
-   of this entry is depended on whether we are normal server or router server
-   and whether the list is a local or global list.
-
-   This entry is defined as follows:
-
-   Server type   List type      Contents
-   =======================================================================
-   server        local list     All channels in server
-   server        global list    NULL
-   router        local list     All channels in cell
-   router        global list    All channels in SILC
-
-   Following short description of the fields:
-
-   char *channel_name
-
-       Logical name of the channel.  This is the original format, not
-       the casefolded or normalized.  However, this is checked to assure
-       that prohibited characters do not exist.  The casefolded version
-       is in the ID Cache.
-
-   SilcUInt32 mode
-
-       Current mode of the channel.  See lib/silccore/silcchannel.h for
-       all modes.
-
-   SilcChannelID *id
-
-       ID of the channel. This includes all the information SILC will ever
-       need.
-
-   SilcBool global_users
-
-       Boolean value to tell whether there are users outside this server
-       on this channel. This is set to TRUE if router sends message to
-       the server that there are users outside your server on your
-       channel as well. This way server knows that messages needs to be
-       sent to the router for further routing. If this is a normal
-       server and this channel is not created on this server this field
-       is always TRUE. If this server is a router this field is ignored.
-
-   char *topic
-
-       Current topic of the channel.
-
-   char *cipher
-
-       Default cipher of the channel. If this is NULL then server picks
-       the cipher to be used. This can be set at SILC_COMMAND_JOIN.
-
-   char *hmac_name
-
-       Default hmac of the channel. If this is NULL then server picks
-       the cipher to be used. This can be set at SILC_COMMAND_JOIN.
-
-   SilcPublicKey founder_key
-
-       If the SILC_CMODE_FOUNDER_AUTH has been set then this will include
-       the founder's public key.  When the mode and this key is set the
-       channel is also permanent channel and cannot be destroyed.
-
-   SilcHashTable user_list
-
-       All users joined on this channel.  Note that the context saved to
-       this entry shares memory with the client entrys `channels' hash
-       table.
-
-   SilcServerEntry router
-
-       This is a pointer to the server list. This is the router server
-       whose cell this channel belongs to. This is used to route messages
-       to this channel.
-
-   SilcCipher send_key
-   SilcCipher receive_key
-
-       The key of the channel (the cipher actually).
-
-   unsigned char *key
-   SilcUInt32 key_len
-
-       Raw key data of the channel key.
-
-   unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]
-
-       Current initial vector. Initial vector is received always along
-       with the channel packet. By default this is filled with NULL.
-
-   SilcHmac hmac;
-
-       HMAC of the channel.
-
-   SilcServerChannelRekey rekey
-
-       Channel key re-key context.
-
-*/
-struct SilcChannelEntryStruct {
-  char *channel_name;
-  SilcUInt32 mode;
-  SilcChannelID *id;
-  char *topic;
-  char *cipher;
-  char *hmac_name;
-  SilcPublicKey founder_key;
-  SilcHashTable channel_pubkeys;
-
-  SilcUInt32 user_limit;
-  unsigned char *passphrase;
-  SilcHashTable invite_list;
-  SilcHashTable ban_list;
-
-  /* All users on this channel */
-  SilcHashTable user_list;
-  SilcUInt32 user_count;
-
-  /* Pointer to the router */
-  SilcServerEntry router;
-
-  /* Channel keys */
-  SilcCipher send_key;
-  SilcCipher receive_key;
-  unsigned char *key;
-  SilcUInt32 key_len;
-  SilcHmac hmac;
-
-  SilcServerChannelRekey rekey;
-  unsigned long created;
-  unsigned long updated;
-
-  /* Flags */
-  unsigned int global_users : 1;
-  unsigned int disabled : 1;
-  unsigned int users_resolved : 1;
-};
-
-/*
-   SILC ID List object.
-
-   As for remainder these lists are defined as follows:
-
-   Entry list (cache)  Server type   List type      Contents
-   =======================================================================
-   servers             server        local list     Server itself
-   servers             server        global list    NULL
-   servers             router        local list     All servers in cell
-   servers             router        global list    All servers in SILC
-
-   clients             server        local list     All clients in server
-   clients             server        global list    NULL
-   clients             router        local list     All clients in cell
-   clients             router        global list    All clients in SILC
-
-   channels            server        local list     All channels in server
-   channels            server        global list    NULL
-   channels            router        local list     All channels in cell
-   channels            router        global list    All channels in SILC
-
-   As seen on the list normal server never defines a global list. This is
-   because of normal server don't know anything about anything global data,
-   they get it from the router if and when they need it. Routers, on the
-   other hand, always define local and global lists because routers really
-   know all the relevant data in the SILC network.
-
-   This object is used as local and global list by the server/router.
-   Above table shows how this is defined on different conditions.
-
-   This object holds pointers to the ID cache system. Every ID cache entry
-   has a specific context pointer to allocated entry (server, client or
-   channel entry).
-
-*/
-struct SilcIDListStruct {
-  SilcIDCache servers;
-  SilcIDCache clients;
-  SilcIDCache channels;
-};
-
-/*
-   ID Entry for Unknown connections.
-
-   This is used during authentication phases where we still don't know
-   what kind of connection remote connection is, hence, we will use this
-   structure instead until we know what type of connection remote end is.
-
-   This is not in any list. This is always individually allocated and
-   used as such.
-
-*/
-typedef struct {
-  /* Generic data structure. DO NOT add anything before this! */
-  SilcIDListDataStruct data;
-  SilcAsyncOperation op;
-  SilcServerConfigRef cconfig;
-  SilcServerConfigRef sconfig;
-  SilcServerConfigRef rconfig;
-  SilcServer server;
-  const char *hostname;
-  const char *ip;
-  SilcUInt16 port;
-} *SilcUnknownEntry;
-
-/* Prototypes */
-void silc_idlist_add_data(void *entry, SilcIDListData idata);
-void silc_idlist_del_data(void *entry);
-SILC_TASK_CALLBACK(silc_idlist_purge);
-SilcServerEntry
-silc_idlist_add_server(SilcIDList id_list,
-                      char *server_name, int server_type,
-                      SilcServerID *id, SilcServerEntry router,
-                      void *connection);
-SilcServerEntry
-silc_idlist_find_server_by_id(SilcIDList id_list, SilcServerID *id,
-                             SilcBool registered, SilcIDCacheEntry *ret_entry);
-SilcServerEntry
-silc_idlist_find_server_by_name(SilcIDList id_list, char *name,
-                               SilcBool registered, SilcIDCacheEntry *ret_entry);
-SilcServerEntry
-silc_idlist_find_server_by_conn(SilcIDList id_list, char *hostname,
-                               int port, SilcBool registered,
-                               SilcIDCacheEntry *ret_entry);
-SilcServerEntry
-silc_idlist_replace_server_id(SilcIDList id_list, SilcServerID *old_id,
-                             SilcServerID *new_id);
-int silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry);
-void silc_idlist_server_destructor(SilcIDCache cache,
-                                  SilcIDCacheEntry entry,
-                                  void *dest_context,
-                                  void *app_context);
-SilcClientEntry
-silc_idlist_add_client(SilcIDList id_list, char *nickname, char *username,
-                      char *userinfo, SilcClientID *id,
-                      SilcServerEntry router, void *connection);
-int silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry);
-int silc_idlist_get_clients_by_nickname(SilcIDList id_list, char *nickname,
-                                       char *server,
-                                       SilcClientEntry **clients,
-                                       SilcUInt32 *clients_count);
-int silc_idlist_get_clients_by_hash(SilcIDList id_list,
-                                   char *nickname, char *server,
-                                   SilcHash md5hash,
-                                   SilcClientEntry **clients,
-                                   SilcUInt32 *clients_count);
-SilcClientEntry
-silc_idlist_find_client_by_id(SilcIDList id_list, SilcClientID *id,
-                             SilcBool registered, SilcIDCacheEntry *ret_entry);
-SilcClientEntry
-silc_idlist_replace_client_id(SilcServer server,
-                             SilcIDList id_list, SilcClientID *old_id,
-                             SilcClientID *new_id, const char *nickname);
-void silc_idlist_client_destructor(SilcIDCache cache,
-                                  SilcIDCacheEntry entry,
-                                  void *dest_context,
-                                  void *app_context);
-SilcChannelEntry
-silc_idlist_add_channel(SilcIDList id_list, char *channel_name, int mode,
-                       SilcChannelID *id, SilcServerEntry router,
-                       SilcCipher send_key, SilcCipher receive_key,
-                       SilcHmac hmac);
-void silc_idlist_channel_destructor(SilcIDCache cache,
-                                   SilcIDCacheEntry entry,
-                                   void *dest_context,
-                                   void *app_context);
-int silc_idlist_del_channel(SilcIDList id_list, SilcChannelEntry entry);
-SilcChannelEntry
-silc_idlist_find_channel_by_name(SilcIDList id_list, char *name,
-                                SilcIDCacheEntry *ret_entry);
-SilcChannelEntry
-silc_idlist_find_channel_by_id(SilcIDList id_list, SilcChannelID *id,
-                              SilcIDCacheEntry *ret_entry);
-SilcChannelEntry
-silc_idlist_replace_channel_id(SilcIDList id_list, SilcChannelID *old_id,
-                              SilcChannelID *new_id);
-SilcChannelEntry *
-silc_idlist_get_channels(SilcIDList id_list, SilcChannelID *channel_id,
-                        SilcUInt32 *channels_count);
-
-#endif