X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient.h;h=2b40557b91296c9053ec432884e15ca7e7e53cc0;hp=d8bee7ad186bcf52747812ae46bb0382767be9d6;hb=6394d86063413bc1c473723f3ef971840195bcd3;hpb=2db4c3dd3dc56ce39c0901ee075afc448deeea7a diff --git a/lib/silcclient/client.h b/lib/silcclient/client.h index d8bee7ad..2b40557b 100644 --- a/lib/silcclient/client.h +++ b/lib/silcclient/client.h @@ -1,6 +1,6 @@ /* - client.h + client.h Author: Pekka Riikonen @@ -8,9 +8,8 @@ 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. - + 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 @@ -23,6 +22,7 @@ /* Forward declarations */ typedef struct SilcClientStruct *SilcClient; +typedef struct SilcClientInternalStruct *SilcClientInternal; typedef struct SilcClientConnectionStruct *SilcClientConnection; typedef struct SilcClientPingStruct SilcClientPing; typedef struct SilcClientAwayStruct SilcClientAway; @@ -151,174 +151,28 @@ struct SilcClientConnectionStruct { /* Main client structure. */ struct SilcClientStruct { - /* - * Public data. All the following pointers must be set by the allocator - * of this structure. - */ - - /* Users's username, hostname and realname. */ - char *username; - char *hostname; - char *realname; - - /* Private and public key of the user. */ - SilcPKCS pkcs; - SilcPublicKey public_key; - SilcPrivateKey private_key; - - /* Application specific user data pointer. Client library does not - touch this. */ - void *application; - - /* - * Private data. Following pointers are used internally by the client - * library and should be considered read-only fields. - */ - - /* All client operations that are implemented in the application. */ - SilcClientOperations *ops; - - /* Client Parameters */ - SilcClientParams *params; - - /* SILC client scheduler */ - SilcSchedule schedule; + char *username; /* Username, must be set by application */ + char *hostname; /* hostname, must be set by application */ + char *realname; /* Real name, must be set be application */ - /* Table of connections in client. All the connection data is saved here. */ - SilcClientConnection *conns; - uint32 conns_count; + SilcPublicKey public_key; /* Public key of user, set by application */ + SilcPrivateKey private_key; /* Private key of user, set by application */ + SilcPKCS pkcs; /* PKCS allocated by application */ - /* Table of listenning sockets in client. Client can have listeners - (like key agreement protocol server) and those sockets are saved here. - This table is checked always if the connection object cannot be found - from the `conns' table. */ - SilcSocketConnection *sockets; - uint32 sockets_count; - - /* Generic cipher and hash objects. These can be used and referenced - by the application as well. */ - SilcCipher none_cipher; - SilcHash md5hash; - SilcHash sha1hash; - SilcHmac md5hmac; - SilcHmac sha1hmac; + SilcSchedule schedule; /* Scheduler, automatically allocated by + the client library. */ /* Random Number Generator. Application should use this as its primary random number generator. */ SilcRng rng; - /* Client version. Used to compare to remote host's version strings. */ - char *silc_client_version; + /* Application specific user data pointer. Client library does not + touch this. This the context sent as argument to silc_client_alloc. */ + void *application; + + /* Internal data for client library. Application cannot access this + data at all. */ + SilcClientInternal internal; }; -/* Macros */ - -/* Registers generic task for file descriptor for reading from network and - writing to network. As being generic task the actual task is allocated - only once and after that the same task applies to all registered fd's. */ -#define SILC_CLIENT_REGISTER_CONNECTION_FOR_IO(fd) \ -do { \ - silc_schedule_task_add(client->schedule, (fd), \ - silc_client_packet_process, \ - context, 0, 0, \ - SILC_TASK_GENERIC, \ - SILC_TASK_PRI_NORMAL); \ -} while(0) - -#define SILC_CLIENT_SET_CONNECTION_FOR_INPUT(s, fd) \ -do { \ - silc_schedule_set_listen_fd((s), (fd), SILC_TASK_READ); \ -} while(0) - -#define SILC_CLIENT_SET_CONNECTION_FOR_OUTPUT(s, fd) \ -do { \ - silc_schedule_set_listen_fd((s), (fd), (SILC_TASK_READ | \ - SILC_TASK_WRITE)); \ -} while(0) - -/* Finds socket connection object by file descriptor */ -#define SILC_CLIENT_GET_SOCK(__x, __fd, __sock) \ -do { \ - int __i; \ - \ - for (__i = 0; __i < (__x)->conns_count; __i++) \ - if ((__x)->conns[__i] && \ - (__x)->conns[__i]->sock->sock == (__fd)) \ - break; \ - \ - if (__i >= (__x)->conns_count) { \ - (__sock) = NULL; \ - for (__i = 0; __i < (__x)->sockets_count; __i++) \ - if ((__x)->sockets[__i] && \ - (__x)->sockets[__i]->sock == (__fd)) \ - (__sock) = (__x)->sockets[__i]; \ - } else \ - (__sock) = (__x)->conns[__i]->sock; \ -} while(0) - -/* Check whether rekey protocol is active */ -#define SILC_CLIENT_IS_REKEY(sock) \ - (sock->protocol && sock->protocol->protocol && \ - sock->protocol->protocol->type == SILC_PROTOCOL_CLIENT_REKEY) - -/* Prototypes (some of the prototypes are defined in the silcapi.h) */ - -void silc_client_packet_send(SilcClient client, - SilcSocketConnection sock, - SilcPacketType type, - void *dst_id, - SilcIdType dst_id_type, - SilcCipher cipher, - SilcHmac hmac, - unsigned char *data, - uint32 data_len, - int force_send); -void silc_client_disconnected_by_server(SilcClient client, - SilcSocketConnection sock, - SilcBuffer message); -void silc_client_error_by_server(SilcClient client, - SilcSocketConnection sock, - SilcBuffer message); -void silc_client_receive_new_id(SilcClient client, - SilcSocketConnection sock, - SilcIDPayload idp); -SilcChannelEntry silc_client_new_channel_id(SilcClient client, - SilcSocketConnection sock, - char *channel_name, - uint32 mode, - SilcIDPayload idp); -void silc_client_save_channel_key(SilcClientConnection conn, - SilcBuffer key_payload, - SilcChannelEntry channel); -void silc_client_receive_channel_key(SilcClient client, - SilcSocketConnection sock, - SilcBuffer packet); -void silc_client_channel_message(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_remove_from_channels(SilcClient client, - SilcClientConnection conn, - SilcClientEntry client_entry); -void silc_client_replace_from_channels(SilcClient client, - SilcClientConnection conn, - SilcClientEntry old, - SilcClientEntry newclient); -void silc_client_process_failure(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_key_agreement(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_notify_by_server(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_private_message(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_connection_auth_request(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); -void silc_client_ftp(SilcClient client, - SilcSocketConnection sock, - SilcPacketContext *packet); #endif