updates.
authorPekka Riikonen <priikone@silcnet.org>
Tue, 30 Oct 2001 18:31:26 +0000 (18:31 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Tue, 30 Oct 2001 18:31:26 +0000 (18:31 +0000)
CHANGES
apps/irssi/src/fe-common/silc/module-formats.c
apps/irssi/src/fe-common/silc/module-formats.h
apps/irssi/src/silc/core/silc-servers.c
includes/silcincludes.h
lib/silcclient/client_ftp.c
lib/silcclient/silcapi.h
lib/silcutil/silcnet.h
lib/silcutil/unix/silcunixnet.c
lib/silcutil/win32/silcwin32net.c

diff --git a/CHANGES b/CHANGES
index 590f020c1f1f1d385caaa3bbf10193e13c96df94..c09573b63670098dde26a5935f414138055cc447 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,24 @@
+Tue Oct 30 16:58:14 EST 2001  Pekka Riikonen <priikone@silcnet.org>
+
+       * Send error message to application if opening file for
+         writing during file transfer fails.  Affected file is
+         lib/silcclient/client_ftp.c.
+
+         Remove all file transfer sessions for a client that we're
+         removing from ID cache.
+
+         Affected file is lib/silcclient/client_ftp.c.
+
+       * Fixed silc_net_addr2bin to return correct address.  Affected
+         file lib/silcutil/[unix/win32]/silc[unix/win32]net.c.
+
+       * Fixed file transfer session removing on signoff notify.
+         Affected file irssi/src/silc/core/silc-servers.c.
+
+       * Added the SilcClientFileError to be returned in the monitor
+         callback.  Added NO_SUCH_FILE and PERMISSION_DENIED errors.
+         Affected file lib/silcclient/silcapi.h.
+
 Mon Oct 29 17:43:04 EST 2001  Pekka Riikonen <priikone@silcnet.org>
 
        * Fixed a crash in silc_client_ftp_free_sessions and
index 6ccbbe88bcb69e2d0fd1ce2596d05ce649a0d7d4..36d8c356514eac48402eb6435a4a3e7eb3f94c91 100644 (file)
@@ -132,8 +132,10 @@ FORMAT_REC fecommon_silc_formats[] = {
        { "file_show_header", "File transfers", 0 },
        { "file_show_line", "  $0 $1: $2kB of $3kB ($4%%) - $5kB/s - $6", 7, { 0, 0, 1, 1, 1, 3, 0 } },
        { "file_already_started", "File transfer already started with {nick $0}", 1, { 0  } },
-       { "file_error", "Error during file transfer with {nick $0}", 1, { 0  } },
-       { "file_close", "File transfer closed with {nick $0}", 1, { 0  } },
+       { "file_error", "Error during file transfer with {nick $0}", 1, { 0 } },
+       { "file_error_no_such_file", "Error during file transfer with {nick $0}: $1: No such file", 2, { 0, 0 } },
+       { "file_error_permission_denied", "Error during file transfer with {nick $0}: Permission denied", 1, { 0 } },
+       { "file_close", "File transfer closed with {nick $0} - $1", 2, { 0, 0 } },
 
        { NULL, NULL, 0 }
 };
index a7bb8ad818b7ca96ea96b3efe9fbe3aa95086e4e..361e1b7125d200dcba5a915ddf8a44496dfcb232 100644 (file)
@@ -126,6 +126,8 @@ enum {
   SILCTXT_FILE_SHOW_LINE,
   SILCTXT_FILE_ALREADY_STARTED,
   SILCTXT_FILE_ERROR,
+  SILCTXT_FILE_ERROR_NO_SUCH_FILE,
+  SILCTXT_FILE_ERROR_PERMISSION_DENIED,
   SILCTXT_FILE_CLOSED,
 };
 
index e63578f0cabe506ddea53094d8ef6e84be7ae8d5..8da657014ab130e4c6ea6ec86bfe7c5a9fba4822 100644 (file)
@@ -421,6 +421,7 @@ SILC_TASK_CALLBACK(silc_client_file_close_later)
 static void silc_client_file_monitor(SilcClient client,
                                     SilcClientConnection conn,
                                     SilcClientMonitorStatus status,
+                                    SilcClientFileError error,
                                     uint64 offset,
                                     uint64 filesize,
                                     SilcClientEntry client_entry,
@@ -432,13 +433,11 @@ static void silc_client_file_monitor(SilcClient client,
   FtpSession ftp;
   char fsize[32];
 
-  snprintf(fsize, sizeof(fsize) - 1, "%llu", (filesize / 1024));
+  snprintf(fsize, sizeof(fsize) - 1, "%llu", ((filesize + 1023) / 1024));
 
   silc_dlist_start(server->ftp_sessions);
   while ((ftp = silc_dlist_get(server->ftp_sessions)) != SILC_LIST_END) {
-    if (ftp->client_entry == client_entry) {
-      ftp->session_id = session_id;
-
+    if (ftp->session_id == session_id) {
       if (!ftp->filepath && filepath)
        ftp->filepath = strdup(filepath);
       break;
@@ -449,8 +448,18 @@ static void silc_client_file_monitor(SilcClient client,
     return;
 
   if (status == SILC_CLIENT_FILE_MONITOR_ERROR) {
-    printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
-                      SILCTXT_FILE_ERROR, client_entry->nickname);
+    if (error == SILC_CLIENT_FILE_NO_SUCH_FILE)
+      printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                        SILCTXT_FILE_ERROR_NO_SUCH_FILE, 
+                        client_entry->nickname, 
+                        filepath ? filepath : "[N/A]");
+    else if (error == SILC_CLIENT_FILE_PERMISSION_DENIED)
+      printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                        SILCTXT_FILE_ERROR_PERMISSION_DENIED, 
+                        client_entry->nickname);
+    else
+      printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
+                        SILCTXT_FILE_ERROR, client_entry->nickname);
     silc_schedule_task_add(silc_client->schedule, 0,
                           silc_client_file_close_later, ftp,
                           1, 0, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL);
@@ -464,6 +473,19 @@ static void silc_client_file_monitor(SilcClient client,
                       SILCTXT_FILE_KEY_EXCHANGE, client_entry->nickname);
   }
 
+  /* Save some transmission data */
+  if (offset && filesize) {
+    unsigned long delta = time(NULL) - ftp->starttime;
+
+    ftp->percent = ((double)offset / (double)filesize) * (double)100.0;
+    if (delta)
+      ftp->kps = (double)((offset / (double)delta) + 1023) / (double)1024;
+    else
+      ftp->kps = (double)(offset + 1023) / (double)1024;
+    ftp->offset = offset;
+    ftp->filesize = filesize;
+  }
+
   if (status == SILC_CLIENT_FILE_MONITOR_SEND) {
     if (offset == 0) {
       printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
@@ -504,15 +526,6 @@ static void silc_client_file_monitor(SilcClient client,
       silc_dlist_del(server->ftp_sessions, ftp);
     }
   }
-
-  /* Save some transmission data */
-  if (offset && filesize) {
-    ftp->percent = ((double)offset / (double)filesize) * (double)100.0;
-    ftp->kps = (double)((offset / (double)(time(NULL) - ftp->starttime)) + 
-                       1023) / (double)1024;
-    ftp->offset = offset;
-    ftp->filesize = filesize;
-  }
 }
 
 typedef struct {
@@ -614,13 +627,15 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
     client_entry = entrys[0];
     silc_free(entrys);
 
-    silc_client_file_send(silc_client, conn, silc_client_file_monitor, 
-                         server, client_entry, argv[2]);
+    ftp = silc_calloc(1, sizeof(*ftp));
+    ftp->session_id = 
+      silc_client_file_send(silc_client, conn, silc_client_file_monitor, 
+                           server, client_entry, argv[2]);
+
     printformat_module("fe-common/silc", NULL, NULL, MSGLEVEL_CRAP,
                       SILCTXT_FILE_SEND, client_entry->nickname,
                       argv[2]);
 
-    ftp = silc_calloc(1, sizeof(*ftp));
     ftp->client_entry = client_entry;
     ftp->filepath = strdup(argv[2]);
     ftp->conn = conn;
@@ -663,7 +678,6 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
 
       ret = silc_client_file_receive(silc_client, conn, 
                                     silc_client_file_monitor, server,
-                                    server->current_session->client_entry,
                                     server->current_session->session_id);
       if (ret != SILC_CLIENT_FILE_OK) {
        if (ret == SILC_CLIENT_FILE_ALREADY_STARTED)
@@ -681,10 +695,9 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
 
     silc_dlist_start(server->ftp_sessions);
     while ((ftp = silc_dlist_get(server->ftp_sessions)) != SILC_LIST_END) {
-      if (ftp->client_entry == client_entry) {
+      if (ftp->client_entry == client_entry && !ftp->filepath) {
        ret = silc_client_file_receive(silc_client, conn, 
                                       silc_client_file_monitor, server,
-                                      ftp->client_entry,
                                       ftp->session_id);
        if (ret != SILC_CLIENT_FILE_OK) {
          if (ret == SILC_CLIENT_FILE_ALREADY_STARTED)
@@ -739,44 +752,30 @@ static void command_file(const char *data, SILC_SERVER_REC *server,
        goto out;
       }
  
-      ret = silc_client_file_close(silc_client, conn, 
-                                  server->current_session->session_id);
-      if (ret != SILC_CLIENT_FILE_OK) {
-       if (ret == SILC_CLIENT_FILE_ALREADY_STARTED)
-         printformat_module("fe-common/silc", server, NULL,
-                            MSGLEVEL_CRAP, SILCTXT_FILE_ALREADY_STARTED,
-                            server->current_session->client_entry->nickname);
-       else
-         printformat_module("fe-common/silc", server, NULL,
-                            MSGLEVEL_CRAP, SILCTXT_FILE_CLIENT_NA,
-                            server->current_session->client_entry->nickname);
-      } else {
-       printformat_module("fe-common/silc", server, NULL,
-                          MSGLEVEL_CRAP, SILCTXT_FILE_CLOSED,
-                          server->current_session->client_entry->nickname);
-      }
+      silc_client_file_close(silc_client, conn, 
+                            server->current_session->session_id);
+      printformat_module("fe-common/silc", server, NULL,
+                        MSGLEVEL_CRAP, SILCTXT_FILE_CLOSED,
+                        server->current_session->client_entry->nickname,
+                        server->current_session->filepath ?
+                        server->current_session->filepath : "[N/A]");
+      silc_dlist_del(server->ftp_sessions, server->current_session);
+      silc_free(server->current_session->filepath);
+      silc_free(server->current_session);
+      server->current_session = NULL;
       goto out;
     }
 
     silc_dlist_start(server->ftp_sessions);
     while ((ftp = silc_dlist_get(server->ftp_sessions)) != SILC_LIST_END) {
       if (ftp->client_entry == client_entry) {
-       ret = silc_client_file_close(silc_client, conn, ftp->session_id);
-       if (ret != SILC_CLIENT_FILE_OK) {
-         if (ret == SILC_CLIENT_FILE_ALREADY_STARTED)
-           printformat_module("fe-common/silc", server, NULL,
-                              MSGLEVEL_CRAP, SILCTXT_FILE_ALREADY_STARTED,
-                              client_entry->nickname);
-         else
-           printformat_module("fe-common/silc", server, NULL,
-                              MSGLEVEL_CRAP, SILCTXT_FILE_CLIENT_NA,
-                              client_entry->nickname);
-       } else {
-         printformat_module("fe-common/silc", server, NULL,
-                            MSGLEVEL_CRAP, SILCTXT_FILE_CLOSED,
-                            client_entry->nickname);
-       }
-
+       silc_client_file_close(silc_client, conn, ftp->session_id);
+       printformat_module("fe-common/silc", server, NULL,
+                          MSGLEVEL_CRAP, SILCTXT_FILE_CLOSED,
+                          client_entry->nickname,
+                          ftp->filepath ? ftp->filepath : "[N/A]");
+       if (ftp == server->current_session)
+         server->current_session = NULL;
        silc_dlist_del(server->ftp_sessions, ftp);
        silc_free(ftp->filepath);
        silc_free(ftp);
@@ -902,7 +901,6 @@ void silc_server_free_ftp(SILC_SERVER_REC *server,
       silc_dlist_del(server->ftp_sessions, ftp);
       silc_free(ftp->filepath);
       silc_free(ftp);
-      break;
     }
   }
 }
index 755b26861200ceed5c4291a39f9a04e13cd3d167..4484d57675950b4f0f7f1e5be438c644379673bc 100644 (file)
@@ -197,9 +197,9 @@ typedef signed long int64;
 typedef unsigned long long uint64;
 typedef signed long long int64;
 #else
-typedef uint32 uint64; /* XXX Use Windows's own 64 bit types */\r
-typedef int32 int64;\r
-#endif\r
+typedef uint32 uint64; /* XXX Use Windows's own 64 bit types */
+typedef int32 int64;
+#endif
 #else
 typedef uint32 uint64;
 typedef int32 int64;
index fca04ad45fcefd03746b5fac8823f8f7796b4cb5..1ea2dc908ff7e3b463a7d1c8852aea7a8e3215ac 100644 (file)
@@ -206,6 +206,7 @@ static void silc_client_ftp_monitor(SilcSFTP sftp,
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
                          SILC_CLIENT_FILE_MONITOR_SEND,
+                         SILC_CLIENT_FILE_OK,
                          data->offset, session->filesize,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
@@ -243,7 +244,12 @@ static void silc_client_ftp_data(SilcSFTP sftp,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         (status == SILC_SFTP_STATUS_NO_SUCH_FILE ?
+                          SILC_CLIENT_FILE_NO_SUCH_FILE :
+                          status == SILC_SFTP_STATUS_PERMISSION_DENIED ?
+                          SILC_CLIENT_FILE_PERMISSION_DENIED :
+                          SILC_CLIENT_FILE_ERROR), 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
 
@@ -265,6 +271,7 @@ static void silc_client_ftp_data(SilcSFTP sftp,
   if (session->monitor)
     (*session->monitor)(session->client, session->conn,
                        SILC_CLIENT_FILE_MONITOR_RECEIVE,
+                       SILC_CLIENT_FILE_OK,
                        session->read_offset, session->filesize,
                        session->client_entry, session->session_id,
                        session->filepath, session->monitor_context);
@@ -289,19 +296,31 @@ static void silc_client_ftp_open_handle(SilcSFTP sftp,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         (status == SILC_SFTP_STATUS_NO_SUCH_FILE ?
+                          SILC_CLIENT_FILE_NO_SUCH_FILE :
+                          status == SILC_SFTP_STATUS_PERMISSION_DENIED ?
+                          SILC_CLIENT_FILE_PERMISSION_DENIED :
+                          SILC_CLIENT_FILE_ERROR), 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
   }
 
   /* Open the actual local file */
-  session->fd = silc_file_open(session->filepath, O_RDWR | O_CREAT);
+  session->fd = silc_file_open(session->filepath, 
+                              O_RDWR | O_CREAT | O_EXCL);
   if (session->fd < 0) {
     /* Call monitor callback */
+    session->client->ops->say(session->client, session->conn, 
+                             SILC_CLIENT_MESSAGE_ERROR, 
+                             "File `%s' open failed: %s", session->filepath,
+                             strerror(errno));
+
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         SILC_CLIENT_FILE_ERROR, 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -317,6 +336,7 @@ static void silc_client_ftp_open_handle(SilcSFTP sftp,
   if (session->monitor)
     (*session->monitor)(session->client, session->conn,
                        SILC_CLIENT_FILE_MONITOR_RECEIVE,
+                       SILC_CLIENT_FILE_OK,
                        session->read_offset, session->filesize,
                        session->client_entry, session->session_id,
                        session->filepath, session->monitor_context);
@@ -339,7 +359,12 @@ static void silc_client_ftp_readdir_name(SilcSFTP sftp,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         (status == SILC_SFTP_STATUS_NO_SUCH_FILE ?
+                          SILC_CLIENT_FILE_NO_SUCH_FILE :
+                          status == SILC_SFTP_STATUS_PERMISSION_DENIED ?
+                          SILC_CLIENT_FILE_PERMISSION_DENIED :
+                          SILC_CLIENT_FILE_ERROR), 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -375,7 +400,12 @@ static void silc_client_ftp_opendir_handle(SilcSFTP sftp,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         (status == SILC_SFTP_STATUS_NO_SUCH_FILE ?
+                          SILC_CLIENT_FILE_NO_SUCH_FILE :
+                          status == SILC_SFTP_STATUS_PERMISSION_DENIED ?
+                          SILC_CLIENT_FILE_PERMISSION_DENIED :
+                          SILC_CLIENT_FILE_ERROR), 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -403,7 +433,12 @@ static void silc_client_ftp_version(SilcSFTP sftp,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         (status == SILC_SFTP_STATUS_NO_SUCH_FILE ?
+                          SILC_CLIENT_FILE_NO_SUCH_FILE :
+                          status == SILC_SFTP_STATUS_PERMISSION_DENIED ?
+                          SILC_CLIENT_FILE_PERMISSION_DENIED :
+                          SILC_CLIENT_FILE_ERROR), 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -482,7 +517,8 @@ static void silc_client_ftp_start_key_agreement(SilcClientFtpSession session,
   /* Call monitor callback */
   if (session->monitor)
     (*session->monitor)(session->client, session->conn,
-                       SILC_CLIENT_FILE_MONITOR_KEY_AGREEMENT, 0, 0,
+                       SILC_CLIENT_FILE_MONITOR_KEY_AGREEMENT, 
+                       SILC_CLIENT_FILE_OK, 0, 0,
                        session->client_entry, session->session_id,
                        NULL, session->monitor_context);
 
@@ -557,7 +593,8 @@ SILC_TASK_CALLBACK(silc_client_ftp_process_key_agreement)
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         SILC_CLIENT_FILE_ERROR, 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -576,7 +613,8 @@ SILC_TASK_CALLBACK(silc_client_ftp_process_key_agreement)
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         SILC_CLIENT_FILE_ERROR, 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
     return;
@@ -588,7 +626,8 @@ SILC_TASK_CALLBACK(silc_client_ftp_process_key_agreement)
   /* Call monitor callback */
   if (session->monitor)
     (*session->monitor)(session->client, session->conn,
-                       SILC_CLIENT_FILE_MONITOR_KEY_AGREEMENT, 0, 0,
+                       SILC_CLIENT_FILE_MONITOR_KEY_AGREEMENT, 
+                       SILC_CLIENT_FILE_OK, 0, 0,
                        session->client_entry, session->session_id,
                        NULL, session->monitor_context);
 
@@ -663,7 +702,6 @@ void silc_client_ftp_session_free_client(SilcClientConnection conn,
       if (session->sock)
        session->sock->user_data = NULL;
       silc_client_ftp_session_free(session);
-      break;
     }
   }
 }
@@ -816,7 +854,6 @@ silc_client_file_receive(SilcClient client,
                         SilcClientConnection conn,
                         SilcClientFileMonitor monitor,
                         void *monitor_context,
-                        SilcClientEntry client_entry,
                         uint32 session_id)
 {
   SilcClientFtpSession session;
@@ -845,7 +882,6 @@ silc_client_file_receive(SilcClient client,
 
   session->monitor = monitor;
   session->monitor_context = monitor_context;
-  session->client_entry = client_entry;
   session->conn = conn;
 
   /* If the hostname and port already exists then the remote client did
@@ -878,7 +914,8 @@ silc_client_file_receive(SilcClient client,
                       SILC_STR_UI_XNSTRING(keyagr->data, keyagr->len),
                       SILC_STR_END);
     silc_client_packet_send(client, conn->sock, SILC_PACKET_FTP,
-                           client_entry->id, SILC_ID_CLIENT, NULL, NULL,
+                           session->client_entry->id, 
+                           SILC_ID_CLIENT, NULL, NULL,
                            ftp->data, ftp->len, FALSE);
     
     silc_buffer_free(keyagr);
@@ -959,7 +996,7 @@ static void silc_client_ftp_resolve_cb(SilcClient client,
   hostname = silc_key_agreement_get_hostname(payload);
   port = silc_key_agreement_get_port(payload);
 
-  if (session == SILC_LIST_END) {
+  if (session == SILC_LIST_END || (!hostname && !port)) {
     /* No session found, create one and let the application know about
        incoming file transfer request. */
     
@@ -968,6 +1005,7 @@ static void silc_client_ftp_resolve_cb(SilcClient client,
     session->session_id = ++conn->next_session_id;
     session->client = client;
     session->conn = conn;
+    session->client_entry = client_entry;
     silc_dlist_add(conn->ftp_sessions, session);
 
     /* Let the application know */
@@ -982,9 +1020,6 @@ static void silc_client_ftp_resolve_cb(SilcClient client,
     goto out;
   }
 
-  if (!hostname)
-    goto out;
-
   session->hostname = strdup(hostname);
   session->port = port;
 
@@ -994,7 +1029,8 @@ static void silc_client_ftp_resolve_cb(SilcClient client,
     /* Call monitor callback */
     if (session->monitor)
       (*session->monitor)(session->client, session->conn,
-                         SILC_CLIENT_FILE_MONITOR_ERROR, 0, 0,
+                         SILC_CLIENT_FILE_MONITOR_ERROR, 
+                         SILC_CLIENT_FILE_ERROR, 0, 0,
                          session->client_entry, session->session_id,
                          session->filepath, session->monitor_context);
   }
index c09023f916e9028c7e6dfdc8dee9010ee94054f4..ccc360e562a011ed33a18d81eee3d5d9133698eb 100644 (file)
@@ -1772,7 +1772,7 @@ typedef enum {
   SILC_CLIENT_FILE_MONITOR_RECEIVE,
   SILC_CLIENT_FILE_MONITOR_GET,
   SILC_CLIENT_FILE_MONITOR_PUT,
-  SILC_CLIENT_FILE_MONITOR_CLOSE,
+  SILC_CLIENT_FILE_MONITOR_CLOSED,
   SILC_CLIENT_FILE_MONITOR_ERROR,
 } SilcClientMonitorStatus;
 
@@ -1781,6 +1781,8 @@ typedef enum {
   SILC_CLIENT_FILE_ERROR,
   SILC_CLIENT_FILE_UNKNOWN_SESSION,
   SILC_CLIENT_FILE_ALREADY_STARTED,
+  SILC_CLIENT_FILE_NO_SUCH_FILE,
+  SILC_CLIENT_FILE_PERMISSION_DENIED,
 } SilcClientFileError;
 
 /****f* silcclient/SilcClientAPI/silc_client_file_receive
@@ -1790,6 +1792,7 @@ typedef enum {
  *    typedef void (*SilcClientFileMonitor)(SilcClient client,
  *                                          SilcClientConnection conn,
  *                                          SilcClientMonitorStatus status,
+ *                                          SilcClientFileError error,
  *                                          uint64 offset,
  *                                          uint64 filesize,
  *                                          SilcClientEntry client_entry,
@@ -1810,6 +1813,7 @@ typedef enum {
 typedef void (*SilcClientFileMonitor)(SilcClient client,
                                      SilcClientConnection conn,
                                      SilcClientMonitorStatus status,
+                                     SilcClientFileError error,
                                      uint64 offset,
                                      uint64 filesize,
                                      SilcClientEntry client_entry,
@@ -1865,7 +1869,6 @@ uint32 silc_client_file_send(SilcClient client,
  *                             SilcClientConnection conn,
  *                             SilcClientFileMonitor monitor,
  *                             void *monitor_context,
- *                             SilcClientEntry client_entry,
  *                             uint32 session_id);
  *
  * DESCRIPTION
@@ -1888,7 +1891,6 @@ silc_client_file_receive(SilcClient client,
                         SilcClientConnection conn,
                         SilcClientFileMonitor monitor,
                         void *monitor_context,
-                        SilcClientEntry client_entry,
                         uint32 session_id);
 
 /****f* silcclient/SilcClientAPI/silc_client_file_close
index 7278d237b34624520b2181cf756d3c72e179e3db..124fcbf782a3fbc344a7ed8f3697efab792ce949 100644 (file)
@@ -203,8 +203,7 @@ bool silc_net_is_ip(const char *addr);
  *    binary form.
  *
  ***/
-bool silc_net_addr2bin(const char *addr, unsigned char *bin,
-                      uint32 bin_len);
+bool silc_net_addr2bin(const char *addr, void *bin, uint32 bin_len);
 
 /****f* silcutil/SilcNetAPI/silc_net_addr2bin_ne
  *
index 4a97ee314e7daf765d4101cf9b70b1d6f1f749ef..f2390057f013544f51ade6952df92117ed488ba0 100644 (file)
@@ -57,8 +57,9 @@ int silc_net_create_server(int port, char *ip_addr)
     server.sin_port = htons(port);
 
   /* Convert IP address to network byte order */
-  if (ip_addr)
+  if (ip_addr) {
     silc_net_addr2bin(ip_addr, (unsigned char *)&server.sin_addr.s_addr, len);
+  }
   else
     server.sin_addr.s_addr = INADDR_ANY;
 
@@ -270,8 +271,7 @@ int silc_net_set_socket_nonblock(int sock)
 /* Converts the IP number string from numbers-and-dots notation to
    binary form. */
 
-bool silc_net_addr2bin(const char *addr, unsigned char *bin,
-                      uint32 bin_len)
+bool silc_net_addr2bin(const char *addr, void *bin, uint32 bin_len)
 {
   struct in_addr tmp;
   int ret;
@@ -281,8 +281,7 @@ bool silc_net_addr2bin(const char *addr, unsigned char *bin,
   if (bin_len < 4)
     return FALSE;
 
-  SILC_PUT32_LSB(tmp.s_addr, bin);
-
+  memcpy(bin, (unsigned char *)&tmp.s_addr, 4);
   return ret != 0;
 }
 
index 25bde1903928d5202bf1f9f052dce486de974e5e..e8fcc26a2195ae834fb08658c390468e094f31b1 100644 (file)
@@ -222,8 +222,7 @@ void silc_net_close_connection(int sock)
 /* Converts the IP number string from numbers-and-dots notation to
    binary form. */
 
-bool silc_net_addr2bin(const char *addr, unsigned char *bin,
-                      uint32 bin_len)
+bool silc_net_addr2bin(const char *addr, void *bin, uint32 bin_len);
 {
   unsigned long ret;
 
@@ -232,8 +231,7 @@ bool silc_net_addr2bin(const char *addr, unsigned char *bin,
   if (bin_len < 4)
     return FALSE;
 
-  SILC_PUT32_LSB(ret, bin);
-
+  memcpy(bin, (unsigned char *)&tmp.s_addr, 4);
   return ret != INADDR_NONE;
 }