heyuanjie87 6 年之前
父节点
当前提交
41a061e572
共有 3 个文件被更改,包括 17 次插入4 次删除
  1. 11 0
      ipmsg.c
  2. 4 2
      ipmsg.h
  3. 2 2
      ipmsg_filerecv.c

+ 11 - 0
ipmsg.c

@@ -395,6 +395,15 @@ int ipmsg_login(ipmsg_t *im)
     return ret;
 }
 
+int ipmsg_logout(ipmsg_t *im)
+{
+    int ret;
+
+    ret = msg_send(im, 0xFFFFFFFF, IPMSG_BR_EXIT, im->user, im->group);
+
+    return ret;
+}
+
 int ipmsg_msg_recv(ipmsg_t *im, int ms, const ipmsg_msghandler_t *h)
 {
     int ret;
@@ -501,6 +510,8 @@ int ipmsg_msg_send(ipmsg_t *im, uint32_t ip, const char *str)
 
 int ipmsg_user_set(ipmsg_t *im, const char *name)
 {
+    if (name == NULL)
+        return -1;
     strncpy(im->user, name, 24);
 
     return 0;

+ 4 - 2
ipmsg.h

@@ -10,8 +10,8 @@ typedef struct
     char *msgbuf;
     char *mrbuf;
     char user[24+1];
-    char host[24+1];
-    char group[24+1];
+    char host[16+1];
+    char group[16+1];
 
     long usrdata;
 } ipmsg_t;
@@ -23,6 +23,7 @@ typedef struct ipmsg_fileinfo
     uint32_t size;
     uint32_t attr;
 
+    uint32_t pos;
     struct ipmsg_fileinfo *next;
 }ipmsg_fileinfo_t;
 
@@ -60,6 +61,7 @@ typedef struct
 int ipmsg_msgserver_init(ipmsg_t *im, short port); /* default port = 2425 */
 void ipmsg_msgserver_deinit(ipmsg_t *im);
 int ipmsg_login(ipmsg_t *im);
+int ipmsg_logout(ipmsg_t *im);
 int ipmsg_msg_recv(ipmsg_t *im, int ms, const ipmsg_msghandler_t *h);
 int ipmsg_msg_send(ipmsg_t *im, uint32_t ip, const char *str);
 int ipmsg_user_set(ipmsg_t *im, const char *name);

+ 2 - 2
ipmsg_filerecv.c

@@ -57,10 +57,10 @@ static int ipmsg_data_recv(int sk, ipmsg_filehandler_t *fh, ipmsg_fileinfo_t *fi
         if (ret <= 0)
             ret = 0;
         else if (ret > 0)
-            fi->size -= ret;
+            fi->pos += ret;
     }
 
-    if (fi->size == 0)
+    if (fi->size == fi->pos)
     {
         fh->notify(fh, IPMSG_FE_COMPLETE, fi);
         ret = 0;