Merged silc_1_0_branch to trunk.
[silc.git] / lib / silcclient / client_internal.h
index 098054804d5fc71d000d9155af996b02606cb7f5..4155d61ed93e77a40f49d779d8f81329e2a96bb8 100644 (file)
@@ -1,10 +1,10 @@
 /*
 
-  client_internal.h 
+  client_internal.h
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2001 Pekka Riikonen
+  Copyright (C) 1997 - 2001, 2003 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
@@ -31,14 +31,14 @@ typedef struct {
 
 /* Generic rekey context for connections */
 typedef struct {
-  /* Current sending encryption key, provided for re-key. The `pfs'   
+  /* Current sending encryption key, provided for re-key. The `pfs'
      is TRUE if the Perfect Forward Secrecy is performed in re-key. */
   unsigned char *send_enc_key;
   SilcUInt32 enc_key_len;
   int ske_group;
   bool pfs;
   SilcUInt32 timeout;
-  void *context;   
+  void *context;
 } *SilcClientRekey;
 
 /* Internal context for connection process. This is needed as we
@@ -54,7 +54,7 @@ typedef struct {
   void *context;
 } SilcClientInternalConnectContext;
 
-/* Structure to hold ping time information. Every PING command will 
+/* 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. */
 struct SilcClientPingStruct {
@@ -65,7 +65,7 @@ struct SilcClientPingStruct {
 
 /* 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 
+   such as nickname and hostname. For now only one away message can
    be set in one connection. */
 struct SilcClientAwayStruct {
   char *away;
@@ -161,7 +161,7 @@ typedef void (*SilcClientResumeSessionCallback)(SilcClient client,
 /* Macros */
 
 /* Registers generic task for file descriptor for reading from network and
-   writing to network. As being generic task the actual task is allocated 
+   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 {                                                   \
@@ -176,7 +176,7 @@ do {                                                        \
 do {                                                                   \
   silc_schedule_set_listen_fd((s), (fd), SILC_TASK_READ, FALSE);       \
 } while(0)
-     
+
 #define SILC_CLIENT_SET_CONNECTION_FOR_OUTPUT(s, fd)                   \
 do {                                                                   \
   silc_schedule_set_listen_fd((s), (fd), (SILC_TASK_READ |             \
@@ -190,6 +190,7 @@ do {                                                                \
                                                                \
   for (__i = 0; __i < (__x)->internal->conns_count; __i++)     \
     if ((__x)->internal->conns[__i] &&                         \
+       (__x)->internal->conns[__i]->sock &&                    \
        (__x)->internal->conns[__i]->sock->sock == (__fd))      \
       break;                                                   \
                                                                \
@@ -221,7 +222,7 @@ void silc_client_packet_send(SilcClient client,
                              unsigned char *data,
                              SilcUInt32 data_len,
                              bool force_send);
-bool silc_client_packet_send_real(SilcClient client,
+int silc_client_packet_send_real(SilcClient client,
                                 SilcSocketConnection sock,
                                 bool force_send);
 void silc_client_ftp_free_sessions(SilcClient client,
@@ -243,18 +244,18 @@ void silc_client_receive_new_id(SilcClient client,
                                SilcIDPayload idp);
 void silc_client_save_channel_key(SilcClient client,
                                  SilcClientConnection conn,
-                                 SilcBuffer key_payload, 
+                                 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, 
+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, 
+void silc_client_replace_from_channels(SilcClient client,
                                       SilcClientConnection conn,
                                       SilcClientEntry old,
                                       SilcClientEntry newclient);
@@ -267,8 +268,8 @@ void silc_client_key_agreement(SilcClient client,
 void silc_client_notify_by_server(SilcClient client,
                                  SilcSocketConnection sock,
                                  SilcPacketContext *packet);
-void silc_client_private_message(SilcClient client, 
-                                SilcSocketConnection sock, 
+void silc_client_private_message(SilcClient client,
+                                SilcSocketConnection sock,
                                 SilcPacketContext *packet);
 void silc_client_connection_auth_request(SilcClient client,
                                         SilcSocketConnection sock,
@@ -289,6 +290,8 @@ void silc_client_resume_session(SilcClient client,
 SilcBuffer silc_client_attributes_process(SilcClient client,
                                          SilcSocketConnection sock,
                                          SilcDList attrs);
+void silc_client_packet_queue_purge(SilcClient client,
+                                   SilcSocketConnection sock);
 SILC_TASK_CALLBACK_GLOBAL(silc_client_rekey_callback);
 
 #endif