Diff for /ansh/src/client2.c between versions 1.1.1.1 and 1.1.1.1.2.3

version 1.1.1.1, 2011/10/04 22:37:46 version 1.1.1.1.2.3, 2011/10/13 14:29:30
Line 10 Line 10
   
   
 static int  static int
SetRemoteWinz(int h, u_short id, struct ether_addr *ea, u_char *buf, int buflen)SetRemoteWinz(int h, struct ether_addr *ea, u_char *buf, int buflen)
 {  {
         u_short *pos = (u_short*) buf;          u_short *pos = (u_short*) buf;
         struct winsize ws;          struct winsize ws;
Line 27  SetRemoteWinz(int h, u_short id, struct ether_addr *ea Line 27  SetRemoteWinz(int h, u_short id, struct ether_addr *ea
         pos[1] = htons(ws.ws_col);          pos[1] = htons(ws.ws_col);
         pos[2] = htons(ws.ws_xpixel);          pos[2] = htons(ws.ws_xpixel);
         pos[3] = htons(ws.ws_ypixel);          pos[3] = htons(ws.ws_ypixel);
        if (pktSend(h, id, ANSH_FLG_WINZ, buf, sizeof ws, ea) == -1)        if (pktSend(h, 0, ANSH_FLG_WINZ, Crypted, buf, sizeof ws, ea) == -1)
                 return -1;                  return -1;
   
         return 0;          return 0;
 }  }
   
 int  int
ConnectL2(int h, u_short id, struct ether_addr *ea, int len)ConnectL2(int h, struct ether_addr *ea, int len)
 {  {
         fd_set rfd;          fd_set rfd;
         struct ether_header eth;          struct ether_header eth;
         struct timeval tv = { 10, 0 };          struct timeval tv = { 10, 0 };
         struct termios otio;          struct termios otio;
         int rlen, ret = 0;          int rlen, ret = 0;
        char flg;        char flg, nl = 0;
        u_char *buf;        u_char *buf, *str;
         u_int s, Seq = 0;
   
         FTRACE(3);          FTRACE(3);
   
Line 51  ConnectL2(int h, u_short id, struct ether_addr *ea, in Line 52  ConnectL2(int h, u_short id, struct ether_addr *ea, in
                 return -1;                  return -1;
         }          }
   
        if (SetRemoteWinz(h, id, ea, buf, len) == -1) {        if (SetRemoteWinz(h, ea, buf, len) == -1) {
                 free(buf);                  free(buf);
                 return -1;                  return -1;
         }          }
Line 62  ConnectL2(int h, u_short id, struct ether_addr *ea, in Line 63  ConnectL2(int h, u_short id, struct ether_addr *ea, in
                 FD_ZERO(&rfd);                  FD_ZERO(&rfd);
                 FD_SET(h, &rfd);                  FD_SET(h, &rfd);
                 FD_SET(STDIN_FILENO, &rfd);                  FD_SET(STDIN_FILENO, &rfd);
                if (select(h + 1, &rfd, NULL, NULL, &tv) < 1) {                if (select(h + 1, &rfd, NULL, NULL, (Timeout ? &tv : NULL)) < 1) {
                         ret = -1;                          ret = -1;
                         break;                          break;
                 }                  }
                if (FD_ISSET(STDIN_FILENO, &rfd)) {                if (FD_ISSET(h, &rfd)) {
                        memset(buf, 0, len); 
                        rlen = read(STDIN_FILENO, buf, len); 
                        if (rlen == -1) { 
                                printf("Error:: read(stdin) #%d - %s\n", errno, strerror(errno)); 
                                ret = -1; 
                                break; 
                        } 
                        rlen = pktSend(h, id, ANSH_FLG_CPOUT, buf, rlen, ea); 
                        if (rlen == ANSH_FLG_ERR) { 
                                ret = -1; 
                                break; 
                        } 
                } else { 
                         rlen = len;                          rlen = len;
                         memset(buf, 0, rlen);                          memset(buf, 0, rlen);
                        flg = pktRecv(h, buf, &rlen, &eth);                        flg = pktRecv(h, &s, &Crypted, buf, &rlen, &eth);
                         if (flg == ANSH_FLG_ERR) {                          if (flg == ANSH_FLG_ERR) {
                                 ret = -1;                                  ret = -1;
                                 break;                                  break;
                         }                          }
                        if (ntohs(eth.ether_type) != id) {                        if (ntohs(eth.ether_type) != ANSH_ID) {
                                VERB(4) LOG("different service id %d / %d\n", ntohs(eth.ether_type), id);                                VERB(4) LOG("different service id %d / %d\n", eth.ether_type, ANSH_ID);
                                 continue;                                  continue;
                         }                          }
                         if (flg == ANSH_FLG_EOF) {                          if (flg == ANSH_FLG_EOF) {
Line 97  ConnectL2(int h, u_short id, struct ether_addr *ea, in Line 85  ConnectL2(int h, u_short id, struct ether_addr *ea, in
                         }                          }
                         if (flg != ANSH_FLG_OK)                          if (flg != ANSH_FLG_OK)
                                 continue;                                  continue;
                           if (s <= Seq)
                                   continue;
                           else if (s > (Seq + 1))
                                   VERB(1) LOG("LOST PACKET(s) detect: %d; received seq=%d - %d", 
                                                   s - (Seq + 1), s, Seq);
                           Seq = s;
   
                           if (Crypted) {
                                   str = cryptBuffer(buf, rlen, Crypted);
                                   if (str) {
                                           memcpy(buf, str, rlen);
                                           free(str);
                                   }
                           }
   
                         rlen = write(STDOUT_FILENO, buf, rlen);                          rlen = write(STDOUT_FILENO, buf, rlen);
                         if (rlen == -1) {                          if (rlen == -1) {
                                 printf("Error:: write(stdout) #%d - %s\n", errno, strerror(errno));                                  printf("Error:: write(stdout) #%d - %s\n", errno, strerror(errno));
                                   ret = -1;
                                   break;
                           }
                   } else {
                           memset(buf, 0, len);
                           rlen = read(STDIN_FILENO, buf, len);
                           if (rlen == -1) {
                                   printf("Error:: read(stdin) #%d - %s\n", errno, strerror(errno));
                                   ret = -1;
                                   break;
                           }
   
                           /* local command handling */
                           if (rlen) {
                                   /* execute local command */
                                   if (nl == 2) {
                                           switch (*buf) {
                                                   case '.':
                                                           Kill++;
                                                           printf("\n");
                                                           VERB(1) LOG("Exit from client\n");
                                                           continue;
                                                   case '~':
                                                   default:
                                                           nl ^= nl;
                                                           /* send buffer, unknown command  */
                                                           break;
                                           }
                                   }
                                   /* skip buffer and wait for local command */
                                   if (nl == 1 && *buf == '~') {
                                           nl++;
                                           continue;
                                   }
                                   /* send buffer if detect NL */
                                   if (*buf == 0xa || *buf == 0xd)
                                           nl = 1;
                                   else
                                           nl ^= nl;
                           } else
                                   nl ^= nl;
   
                           if (Crypted) {
                                   str = cryptBuffer(buf, rlen, Crypted);
                                   if (str) {
                                           memcpy(buf, str, rlen);
                                           free(str);
                                   }
                           }
   
                           rlen = pktSend(h, ++Seq, ANSH_FLG_CPOUT, Crypted, buf, rlen, ea);
                           if (rlen == ANSH_FLG_ERR) {
                                 ret = -1;                                  ret = -1;
                                 break;                                  break;
                         }                          }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>