updates.
[silc.git] / lib / silcclient / client.h
index f6d2215af736de0a5ed75e41304d172fb653c164..f7c6e3314b34294e0d87ba6c2356d67222f73fa0 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
 
-  Copyright (C) 1997 - 2000 Pekka Riikonen
+  Copyright (C) 1997 - 2001 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
 #ifndef CLIENT_H
 #define CLIENT_H
 
-/* Forward declaration for client */
-typedef struct SilcClientObject *SilcClient;
-
-/* Forward declaration for client connection */
-typedef struct SilcClientConnectionObject *SilcClientConnection;
+/* Forward declarations */
+typedef struct SilcClientStruct *SilcClient;
+typedef struct SilcClientConnectionStruct *SilcClientConnection;
+typedef struct SilcClientPingStruct SilcClientPing;
+typedef struct SilcClientAwayStruct SilcClientAway;
+typedef struct SilcClientKeyAgreementStruct *SilcClientKeyAgreement;
 
 #include "idlist.h"
 #include "command.h"
-#include "ops.h"
-
-/* Structure to hold ping time information. Every PING command will 
-   add entry of this structure and is removed after reply to the ping
-   as been received. */
-typedef struct SilcClientPingStruct {
-  time_t start_time;
-  void *dest_id;
-  char *dest_name;
-} SilcClientPing;
-
-/* Structure to hold away messages set by user. This is mainly created
-   for future extensions where away messages could be set according filters
-   such as nickname and hostname. For now only one away message can 
-   be set in one connection. */
-typedef struct SilcClientAwayStruct {
-  char *away;
-  struct SilcClientAwayStruct *next;
-} SilcClientAway;
+#include "silcapi.h"
 
 /* Connection structure used in client to associate all the important
    connection specific data to this structure. */
-struct SilcClientConnectionObject {
+struct SilcClientConnectionStruct {
   /*
    * Local data 
    */
@@ -110,6 +93,12 @@ struct SilcClientConnectionObject {
      referencing (sock->user_data). */
   SilcSocketConnection sock;
 
+  /* Pending command queue for this connection */
+  SilcDList pending_commands;
+
+  /* Current command identifier, 0 not used */
+  unsigned short cmd_ident;
+
   /* Requested pings. */
   SilcClientPing *ping;
   unsigned int ping_count;
@@ -126,7 +115,7 @@ struct SilcClientConnectionObject {
 };
 
 /* Main client structure. */
-struct SilcClientObject {
+struct SilcClientStruct {
   /*
    * Public data. All the following pointers must be set by the allocator
    * of this structure.
@@ -216,22 +205,8 @@ do {                                                       \
  (__sock) = (__x)->conns[__i]->sock;                   \
 } while(0)
 
-/* Prototypes */
-
-SilcClient silc_client_alloc(SilcClientOperations *ops, void *application);
-void silc_client_free(SilcClient client);
-int silc_client_init(SilcClient client);
-void silc_client_stop(SilcClient client);
-void silc_client_run(SilcClient client);
-SilcClientConnection silc_client_add_connection(SilcClient client,
-                                               char *hostname,
-                                               int port,
-                                               void *context);
-int silc_client_connect_to_server(SilcClient client, int port,
-                                 char *host, void *context);
-int silc_client_start_key_exchange(SilcClient client,
-                                  SilcClientConnection conn,
-                                   int fd);
+/* Prototypes (some of the prototypes are defined in the silcapi.h) */
+
 void silc_client_packet_send(SilcClient client, 
                             SilcSocketConnection sock,
                             SilcPacketType type, 
@@ -242,36 +217,20 @@ void silc_client_packet_send(SilcClient client,
                             unsigned char *data, 
                             unsigned int data_len, 
                             int force_send);
-void silc_client_packet_send_to_channel(SilcClient client, 
-                                       SilcSocketConnection sock,
-                                       SilcChannelEntry channel,
-                                       unsigned char *data, 
-                                       unsigned int data_len, 
-                                       int force_send);
-void silc_client_packet_send_private_message(SilcClient client,
-                                            SilcSocketConnection sock,
-                                            SilcClientEntry client_entry,
-                                            unsigned char *data, 
-                                            unsigned int data_len, 
-                                            int force_send);
-void silc_client_close_connection(SilcClient client,
-                                 SilcSocketConnection sock);
 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_notify_by_server(SilcClient client,
-                                 SilcSocketConnection sock,
-                                 SilcPacketContext *packet);
 void silc_client_receive_new_id(SilcClient client,
                                SilcSocketConnection sock,
                                SilcIDPayload idp);
-void silc_client_new_channel_id(SilcClient client,
-                               SilcSocketConnection sock,
-                               char *channel_name,
-                               unsigned int mode, SilcIDPayload idp);
+SilcChannelEntry silc_client_new_channel_id(SilcClient client,
+                                           SilcSocketConnection sock,
+                                           char *channel_name,
+                                           unsigned int mode, 
+                                           SilcIDPayload idp);
 void silc_client_save_channel_key(SilcClientConnection conn,
                                  SilcBuffer key_payload, 
                                  SilcChannelEntry channel);
@@ -281,9 +240,6 @@ void silc_client_receive_channel_key(SilcClient client,
 void silc_client_channel_message(SilcClient client, 
                                 SilcSocketConnection sock, 
                                 SilcPacketContext *packet);
-void silc_client_private_message(SilcClient client, 
-                                SilcSocketConnection sock, 
-                                SilcPacketContext *packet);
 void silc_client_remove_from_channels(SilcClient client,
                                      SilcClientConnection conn,
                                      SilcClientEntry client_entry);
@@ -294,5 +250,16 @@ void silc_client_replace_from_channels(SilcClient client,
 char *silc_client_chmode(unsigned int mode);
 char *silc_client_chumode(unsigned int mode);
 char *silc_client_chumode_char(unsigned int mode);
-
+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);
 #endif