updates.
[silc.git] / apps / irssi / src / silc / core / client_ops.c
index f3507b7e167151eed57d5cc08555b3eab31c7361..03c60cf690088e4f9f0aee7a8c3e88c0034d7213 100644 (file)
@@ -84,12 +84,26 @@ void silc_channel_message(SilcClient client, SilcClientConnection conn,
   SILC_NICK_REC *nick;
   SILC_CHANNEL_REC *chanrec;
   
+  SILC_LOG_DEBUG(("Start"));
+
   server = conn == NULL ? NULL : conn->context;
   chanrec = silc_channel_find_entry(server, channel);
   if (!chanrec)
     return;
   
   nick = silc_nicklist_find(chanrec, sender);
+  if (!nick) {
+    /* We didn't find client but it clearly exists, add it. */
+    SilcChannelUser chu;
+
+    silc_list_start(channel->clients);
+    while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+      if (chu->client == sender) {
+       nick = silc_nicklist_insert(chanrec, chu, FALSE);
+       break;
+      }
+    }
+  }
 
   if (flags & SILC_MESSAGE_FLAG_ACTION)
     printformat_module("fe-common/silc", server, channel->channel_name,
@@ -116,6 +130,8 @@ void silc_private_message(SilcClient client, SilcClientConnection conn,
   SILC_SERVER_REC *server;
   char userhost[256];
   
+  SILC_LOG_DEBUG(("Start"));
+
   server = conn == NULL ? NULL : conn->context;
   memset(userhost, 0, sizeof(userhost));
   if (sender->username)
@@ -165,6 +181,8 @@ void silc_notify(SilcClient client, SilcClientConnection conn,
   SILC_SERVER_REC *server;
   va_list va;
   
+  SILC_LOG_DEBUG(("Start"));
+
   server = conn == NULL ? NULL : conn->context;
   va_start(va, type);
   
@@ -214,6 +232,8 @@ void silc_disconnect(SilcClient client, SilcClientConnection conn)
 {
   SILC_SERVER_REC *server = conn->context;
 
+  SILC_LOG_DEBUG(("Start"));
+
   if (server->conn) {
     nicklist_rename_unique(SERVER(server),
                           server->conn->local_entry, server->nick,
@@ -243,6 +263,8 @@ void silc_command(SilcClient client, SilcClientConnection conn,
 {
   SILC_SERVER_REC *server = conn->context;
 
+  SILC_LOG_DEBUG(("Start"));
+
   if (!success)
     return;
 
@@ -285,6 +307,8 @@ static void silc_client_join_get_users(SilcClient client,
 
   silc_list_start(channel->clients);
   while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+    if (!chu->client->nickname)
+      continue;
     if (chu->mode & SILC_CHANNEL_UMODE_CHANFO)
       founder = chu->client;
     silc_nicklist_insert(chanrec, chu, FALSE);
@@ -371,6 +395,8 @@ silc_command_reply(SilcClient client, SilcClientConnection conn,
 
   va_start(vp, status);
 
+  SILC_LOG_DEBUG(("Start"));
+
   switch(command) {
   case SILC_COMMAND_WHOIS:
     {
@@ -561,7 +587,7 @@ silc_command_reply(SilcClient client, SilcClientConnection conn,
                                channel_entry->channel_key ? 
                                channel_entry->channel_key->cipher->name : "",
                                channel_entry->hmac ? 
-                               channel_entry->hmac->hmac->name : "");
+                               silc_hmac_get_name(channel_entry->hmac) : "");
       g_free_not_null(chanrec->mode);
       chanrec->mode = g_strdup(mode == NULL ? "" : mode);
       signal_emit("channel mode changed", 1, chanrec);
@@ -671,6 +697,9 @@ silc_command_reply(SilcClient client, SilcClientConnection conn,
       while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
        SilcClientEntry e = chu->client;
        char stat[5], *mode;
+
+       if (!e->nickname)
+         continue;
        
        memset(stat, 0, sizeof(stat));
        mode = silc_client_chumode_char(chu->mode);
@@ -683,8 +712,10 @@ silc_command_reply(SilcClient client, SilcClientConnection conn,
 
        printformat_module("fe-common/silc", server, channel->channel_name,
                           MSGLEVEL_CRAP, SILCTXT_USERS,
-                          e->nickname, stat, e->username, 
-                          e->hostname, e->realname ? e->realname : "");
+                          e->nickname, stat, 
+                          e->username ? e->username : "",
+                          e->hostname ? e->hostname : "",
+                          e->realname ? e->realname : "");
        if (mode)
          silc_free(mode);
       }
@@ -1044,6 +1075,8 @@ static void silc_get_auth_method_callback(SilcClient client,
 {
   InternalGetAuthMethod internal = (InternalGetAuthMethod)context;
 
+  SILC_LOG_DEBUG(("Start"));
+
   switch (auth_meth) {
   case SILC_AUTH_NONE:
     /* No authentication required. */
@@ -1078,6 +1111,8 @@ void silc_get_auth_method(SilcClient client, SilcClientConnection conn,
 {
   InternalGetAuthMethod internal;
 
+  SILC_LOG_DEBUG(("Start"));
+
   /* XXX must resolve from configuration whether this connection has
      any specific authentication data */
 
@@ -1103,6 +1138,8 @@ void silc_get_auth_method(SilcClient client, SilcClientConnection conn,
 void silc_failure(SilcClient client, SilcClientConnection conn, 
                  SilcProtocol protocol, void *failure)
 {
+  SILC_LOG_DEBUG(("Start"));
+
   if (protocol->protocol->type == SILC_PROTOCOL_CLIENT_KEY_EXCHANGE) {
     SilcSKEStatus status = (SilcSKEStatus)failure;
     
@@ -1152,13 +1189,14 @@ void silc_failure(SilcClient client, SilcClientConnection conn,
    silc_client_perform_key_agreement). */
 
 int silc_key_agreement(SilcClient client, SilcClientConnection conn,
-                      SilcClientEntry client_entry, char *hostname,
-                      int port,
-                      SilcKeyAgreementCallback *completion,
+                      SilcClientEntry client_entry, const char *hostname,
+                      uint16 port, SilcKeyAgreementCallback *completion,
                       void **context)
 {
   char portstr[12];
 
+  SILC_LOG_DEBUG(("Start"));
+
   /* We will just display the info on the screen and return FALSE and user
      will have to start the key agreement with a command. */
 
@@ -1179,6 +1217,19 @@ int silc_key_agreement(SilcClient client, SilcClientConnection conn,
   return FALSE;
 }
 
+void silc_ftp(SilcClient client, SilcClientConnection conn,
+             SilcClientEntry client_entry, uint32 session_id,
+             const char *hostname, uint16 port)
+{
+
+  SILC_LOG_DEBUG(("Start"));
+
+  /* XXX */
+  silc_client_file_receive(client, conn, NULL, NULL, client_entry,
+                          session_id);
+
+}
+
 /* SILC client operations */
 SilcClientOperations ops = {
   silc_say,
@@ -1194,4 +1245,5 @@ SilcClientOperations ops = {
   silc_ask_passphrase,
   silc_failure,
   silc_key_agreement,
+  silc_ftp,
 };