Diff for /ansh/src/utils.c between versions 1.1.1.1.2.5 and 1.1.1.1.2.7

version 1.1.1.1.2.5, 2011/10/13 11:01:37 version 1.1.1.1.2.7, 2011/10/13 15:24:17
Line 60  PrepareL2(const char *psDev, int *bpflen) Line 60  PrepareL2(const char *psDev, int *bpflen)
                 close(h);                  close(h);
                 return -1;                  return -1;
         }          }
           n = USHRT_MAX + 1;
           if (ioctl(h, BIOCSBLEN, &n) == -1) {
                   printf("Error:: set buffer interface %s buffer length #%d - %s\n", psDev, errno, strerror(errno));
                   close(h);
                   return -1;
           }
         strlcpy(ifr.ifr_name, psDev, sizeof ifr.ifr_name);          strlcpy(ifr.ifr_name, psDev, sizeof ifr.ifr_name);
         if (ioctl(h, BIOCSETIF, &ifr) == -1) {          if (ioctl(h, BIOCSETIF, &ifr) == -1) {
                 printf("Error:: bind interface %s to bpf #%d - %s\n", psDev, errno, strerror(errno));                  printf("Error:: bind interface %s to bpf #%d - %s\n", psDev, errno, strerror(errno));
Line 72  PrepareL2(const char *psDev, int *bpflen) Line 78  PrepareL2(const char *psDev, int *bpflen)
                 return -1;                  return -1;
         }          }
         if (ioctl(h, BIOCGBLEN, bpflen) == -1) {          if (ioctl(h, BIOCGBLEN, bpflen) == -1) {
                printf("Error:: get interface %s buffer length #%d - %s\n", psDev, errno, strerror(errno));                printf("Error:: get buffer interface %s buffer length #%d - %s\n", psDev, errno, strerror(errno));
                 close(h);                  close(h);
                 return -1;                  return -1;
         }          }
Line 121  PrepareL3(const struct sockaddr *sa, int *bpflen) Line 127  PrepareL3(const struct sockaddr *sa, int *bpflen)
 }  }
   
 char  char
icmpRecv(int s, u_short * __restrict id, u_int * __restrict crypted, u_char * __restrict data, icmpRecv(int s, u_int * __restrict seq, u_short * __restrict id, u_int * __restrict crypted, 
                int * __restrict datlen, struct sockaddr *sa, socklen_t *salen)                u_char * __restrict data, int * __restrict datlen, struct sockaddr *sa, socklen_t *salen)
 {  {
         int ret = 0;          int ret = 0;
         struct icmp *icmp;          struct icmp *icmp;
Line 185  icmpRecv(int s, u_short * __restrict id, u_int * __res Line 191  icmpRecv(int s, u_short * __restrict id, u_int * __res
                 memcpy(data, buf + sizeof(struct ip) + sizeof(struct icmp) + sizeof(struct ansh_hdr), *datlen);                  memcpy(data, buf + sizeof(struct ip) + sizeof(struct icmp) + sizeof(struct ansh_hdr), *datlen);
         }          }
   
           if (seq)
                   *seq = ntohl(hdr->ansh_seq);
         if (id)          if (id)
                 *id = ntohs(icmp->icmp_id);                  *id = ntohs(icmp->icmp_id);
         return hdr->ansh_flg;          return hdr->ansh_flg;
 }  }
   
 int  int
icmpSend(int s, u_short id, char flg, u_int crypted, u_char *data, int datlen, struct sockaddr *sa, socklen_t salen)icmpSend(int s, u_int seq, u_short id, char flg, u_int crypted, u_char *data, int datlen, 
                 struct sockaddr *sa, socklen_t salen)
 {  {
         u_char *pos, buf[USHRT_MAX] = { 0 };          u_char *pos, buf[USHRT_MAX] = { 0 };
         struct icmp *icmp;          struct icmp *icmp;
Line 212  icmpSend(int s, u_short id, char flg, u_int crypted, u Line 221  icmpSend(int s, u_short id, char flg, u_int crypted, u
         hdr->ansh_flg = flg;          hdr->ansh_flg = flg;
         hdr->ansh_len = htons(datlen + sizeof(struct ansh_hdr));          hdr->ansh_len = htons(datlen + sizeof(struct ansh_hdr));
         hdr->ansh_nonce = htonl(crypted);          hdr->ansh_nonce = htonl(crypted);
           hdr->ansh_seq = htonl(seq);
         hdr->ansh_crc = 0;          hdr->ansh_crc = 0;
         hdr->ansh_crc = htonl(crcAdler((u_char*) hdr, ntohs(hdr->ansh_len)));          hdr->ansh_crc = htonl(crcAdler((u_char*) hdr, ntohs(hdr->ansh_len)));
   
Line 238  icmpSend(int s, u_short id, char flg, u_int crypted, u Line 248  icmpSend(int s, u_short id, char flg, u_int crypted, u
 }  }
   
 static int  static int
_pkt_Send(int s, char flg, u_int crypted, u_char *data, int datlen, struct ether_addr *ea)_pkt_Send(int s, u_int seq, char flg, u_int crypted, u_char *data, int datlen, struct ether_addr *ea)
 {  {
         u_char *pos, buf[USHRT_MAX] = { 0 };          u_char *pos, buf[USHRT_MAX] = { 0 };
         struct ether_header *e = (struct ether_header*) buf;          struct ether_header *e = (struct ether_header*) buf;
Line 260  _pkt_Send(int s, char flg, u_int crypted, u_char *data Line 270  _pkt_Send(int s, char flg, u_int crypted, u_char *data
         hdr->ansh_flg = flg;          hdr->ansh_flg = flg;
         hdr->ansh_len = htons(datlen + sizeof(struct ansh_hdr));          hdr->ansh_len = htons(datlen + sizeof(struct ansh_hdr));
         hdr->ansh_nonce = htonl(crypted);          hdr->ansh_nonce = htonl(crypted);
           hdr->ansh_seq = htonl(seq);
         hdr->ansh_crc = 0;          hdr->ansh_crc = 0;
         hdr->ansh_crc = htonl(crcAdler((u_char*) hdr, ntohs(hdr->ansh_len)));          hdr->ansh_crc = htonl(crcAdler((u_char*) hdr, ntohs(hdr->ansh_len)));
   
Line 278  _pkt_Send(int s, char flg, u_int crypted, u_char *data Line 289  _pkt_Send(int s, char flg, u_int crypted, u_char *data
 }  }
   
 int  int
pktSend(int s, char flg, u_int crypted, u_char *data, int datlen, struct ether_addr *ea)pktSend(int s, u_int seq, char flg, u_int crypted, u_char *data, int datlen, struct ether_addr *ea)
 {  {
         int wlen, ret = 0;          int wlen, ret = 0;
         u_char *pos = data;          u_char *pos = data;
   
         while (datlen > -1) {          while (datlen > -1) {
                wlen = _pkt_Send(s, flg, crypted, pos, (datlen > 512) ? 512 : datlen, ea);                wlen = _pkt_Send(s, seq, flg, crypted, pos, (datlen > 512) ? 512 : datlen, ea);
                 if (wlen == -1)                  if (wlen == -1)
                         return -1;                          return -1;
                 else {                  else {
Line 298  pktSend(int s, char flg, u_int crypted, u_char *data,  Line 309  pktSend(int s, char flg, u_int crypted, u_char *data, 
 }  }
   
 static char  static char
_pkt_Recv(u_char * __restrict buf, int rlen, u_int * __restrict crypted, _pkt_Recv(u_char * __restrict buf, int rlen, u_int * __restrict seq, u_int * __restrict crypted, 
                 u_char * __restrict data, int * __restrict datlen,                   u_char * __restrict data, int * __restrict datlen, 
                 u_char ** __restrict next, int * __restrict nextlen)                  u_char ** __restrict next, int * __restrict nextlen)
 {  {
Line 357  _pkt_Recv(u_char * __restrict buf, int rlen, u_int * _ Line 368  _pkt_Recv(u_char * __restrict buf, int rlen, u_int * _
                 memcpy(data, buf + bpf->bh_hdrlen + ETHER_HDR_LEN + sizeof(struct ansh_hdr), *datlen);                  memcpy(data, buf + bpf->bh_hdrlen + ETHER_HDR_LEN + sizeof(struct ansh_hdr), *datlen);
         }          }
   
           if (seq)
                   *seq = ntohl(hdr->ansh_seq);
         return hdr->ansh_flg;          return hdr->ansh_flg;
 }  }
   
 char  char
pktRecv(int s, u_int * __restrict crypted, u_char * __restrict data, int * __restrict datlen, pktRecv(int s, u_int * __restrict seq, u_int * __restrict crypted, u_char * __restrict data, 
                struct ether_header *eth)                int * __restrict datlen, struct ether_header *eth)
 {  {
        u_char *buf, *next, *pos, *ptr;        u_char *buf, *next, *ptr, *pos = data;
         int nextlen, rlen, buflen, ptrlen;          int nextlen, rlen, buflen, ptrlen;
         char flg;          char flg;
         struct bpf_hdr *bpf;          struct bpf_hdr *bpf;
         struct ether_header *e;          struct ether_header *e;
   
        if (!eth || !datlen)        if (!eth || !data || !datlen)
                 return ANSH_FLG_ERR;                  return ANSH_FLG_ERR;
           else
                   memset(data, 0, *datlen);
   
         if (!(buf = malloc(*datlen))) {          if (!(buf = malloc(*datlen))) {
                 ERR("malloc() #%d - %s", errno, strerror(errno));                  ERR("malloc() #%d - %s", errno, strerror(errno));
Line 399  pktRecv(int s, u_int * __restrict crypted, u_char * __ Line 414  pktRecv(int s, u_int * __restrict crypted, u_char * __
   
         ptr = next = buf;          ptr = next = buf;
         ptrlen = nextlen = rlen;          ptrlen = nextlen = rlen;
        pos = data;             if ((flg = _pkt_Recv(ptr, ptrlen, seq, crypted, pos, &buflen, &next, &nextlen)) == -1) {
        buflen = *datlen; 
        if ((flg = _pkt_Recv(ptr, ptrlen, crypted, pos, &buflen, &next, &nextlen)) == -1) { 
                 free(buf);                  free(buf);
                 return ANSH_FLG_ERR;                  return ANSH_FLG_ERR;
         } else {          } else {
Line 410  pktRecv(int s, u_int * __restrict crypted, u_char * __ Line 423  pktRecv(int s, u_int * __restrict crypted, u_char * __
                 ptr = next;                  ptr = next;
                 ptrlen = nextlen;                  ptrlen = nextlen;
         }          }
           /* get additional packets from buffer */
         while (next && nextlen > 0)          while (next && nextlen > 0)
                if (_pkt_Recv(ptr, ptrlen, crypted, pos, &buflen, &next, &nextlen) == -1)                if (_pkt_Recv(ptr, ptrlen, seq, crypted, pos, &buflen, &next, &nextlen) == -1)
                         break;                          break;
                 else {                  else {
                         pos += buflen;                          pos += buflen;
Line 421  pktRecv(int s, u_int * __restrict crypted, u_char * __ Line 435  pktRecv(int s, u_int * __restrict crypted, u_char * __
                 }                  }
   
         free(buf);          free(buf);
   
         return flg;          return flg;
 }  }
   

Removed from v.1.1.1.1.2.5  
changed lines
  Added in v.1.1.1.1.2.7


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