Diff for /libaitrpc/src/aitrpc.c between versions 1.20 and 1.21

version 1.20, 2015/07/22 20:01:46 version 1.21, 2016/08/08 13:21:13
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004 - 2015Copyright 2004 - 2016
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 138  rpc_Read(int sock, int type, int flags, sockaddr_t * _ Line 138  rpc_Read(int sock, int type, int flags, sockaddr_t * _
         sockaddr_t sa2;          sockaddr_t sa2;
         socklen_t salen;          socklen_t salen;
         int ret = 0, hlen, cx = 0;          int ret = 0, hlen, cx = 0;
         struct ether_header *eh;  
         struct bpf_hdr *h;  
         ether_addr_t bcst = {{ [0 ... sizeof bcst - 1] = 0xff }};          ether_addr_t bcst = {{ [0 ... sizeof bcst - 1] = 0xff }};
         u_char *buf = AIT_GET_BUF(pkt);          u_char *buf = AIT_GET_BUF(pkt);
         size_t blen = AIT_LEN(pkt);          size_t blen = AIT_LEN(pkt);
         struct tagRPCCall *rpc = (struct tagRPCCall *) buf;          struct tagRPCCall *rpc = (struct tagRPCCall *) buf;
   #ifndef __linux__
           struct ether_header *eh;
           struct bpf_hdr *h;
         ait_val_t v = AIT_VAL_INIT;          ait_val_t v = AIT_VAL_INIT;
   #endif
   
 try2read:  try2read:
         pfd.fd = sock;          pfd.fd = sock;
         pfd.events = POLLIN | POLLPRI;          pfd.events = POLLIN | POLLPRI;
         memset(buf, 0, blen);          memset(buf, 0, blen);
         memset(&sa2, 0, sizeof sa2);          memset(&sa2, 0, sizeof sa2);
        salen = sa2.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff);        salen = E_SOCKADDR_MAX;
 #ifndef __linux__
         sa2.ss.ss_len = salen;
 #endif
         if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 ||           if ((ret = poll(&pfd, 1, DEF_RPC_TIMEOUT * 1000)) < 1 || 
                         pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {                          pfd.revents & (POLLERR | POLLHUP | POLLNVAL)) {
                 if (ret)                  if (ret)
Line 168  try2read: Line 173  try2read:
                 case SOCK_EXT:                  case SOCK_EXT:
                         ret = read(sock, buf, blen);                          ret = read(sock, buf, blen);
                         break;                          break;
   #ifndef __linux__
                 case SOCK_BPF:                  case SOCK_BPF:
                         if (!sa) {                          if (!sa) {
                                 rpc_SetErr(EINVAL, "Invalid argument(s)!");                                  rpc_SetErr(EINVAL, "Invalid argument(s)!");
Line 217  try2read: Line 223  try2read:
                                 AIT_FREE_VAL(&v);                                  AIT_FREE_VAL(&v);
                         }                          }
                         break;                          break;
   #endif
                 case SOCK_RAW:                  case SOCK_RAW:
                 case SOCK_DGRAM:                  case SOCK_DGRAM:
                         if (!sa) {                          if (!sa) {
Line 247  try2read: Line 254  try2read:
   
         /* check RPC packet header */          /* check RPC packet header */
         if (type == SOCK_RAW) {          if (type == SOCK_RAW) {
   #ifdef IPV6_REMOVE_HEADER
                 hlen = sa->sa.sa_family == AF_INET ?                   hlen = sa->sa.sa_family == AF_INET ? 
                         sizeof(struct ip) : sizeof(struct ip6_hdr);                          sizeof(struct ip) : sizeof(struct ip6_hdr);
   #else
                   hlen = sa->sa.sa_family == AF_INET ? 
                           sizeof(struct ip) : 0;
   #endif
                 ret -= hlen;                  ret -= hlen;
                 if (ret > 0)                  if (ret > 0)
                         memmove(buf, buf + hlen, blen - hlen);                          memmove(buf, buf + hlen, blen - hlen);
Line 292  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 304  rpc_Write(int sock, int type, int flags, sockaddr_t * 
         struct pollfd pfd;          struct pollfd pfd;
         int ret = 0;          int ret = 0;
         u_char *buf = AIT_GET_BUF(pkt);          u_char *buf = AIT_GET_BUF(pkt);
   #ifndef __linux__
         ait_val_t v = AIT_VAL_INIT;          ait_val_t v = AIT_VAL_INIT;
         struct ether_header *eh;          struct ether_header *eh;
   #endif
   
   
         pfd.fd = sock;          pfd.fd = sock;
Line 314  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 328  rpc_Write(int sock, int type, int flags, sockaddr_t * 
                 case SOCK_EXT:                  case SOCK_EXT:
                         ret = write(sock, buf, blen);                          ret = write(sock, buf, blen);
                         break;                          break;
   #ifndef __linux__
                 case SOCK_BPF:                  case SOCK_BPF:
                         if (!sa) {                          if (!sa) {
                                 rpc_SetErr(EINVAL, "Invalid argument(s)!");                                  rpc_SetErr(EINVAL, "Invalid argument(s)!");
Line 331  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 346  rpc_Write(int sock, int type, int flags, sockaddr_t * 
   
                         AIT_FREE_VAL(&v);                          AIT_FREE_VAL(&v);
                         break;                          break;
   #endif
                 case SOCK_RAW:                  case SOCK_RAW:
                 case SOCK_DGRAM:                  case SOCK_DGRAM:
                         if (!sa) {                          if (!sa) {
Line 338  rpc_Write(int sock, int type, int flags, sockaddr_t *  Line 354  rpc_Write(int sock, int type, int flags, sockaddr_t * 
                                 return -1;                                  return -1;
                         }                          }
   
                        ret = sendto(sock, buf, blen, flags, &sa->sa, sa->sa.sa_len);                        ret = sendto(sock, buf, blen, flags, &sa->sa, e_addrlen(sa));
                         break;                          break;
                 default:                  default:
                         rpc_SetErr(EINVAL, "Invalid argument(s)!");                          rpc_SetErr(EINVAL, "Invalid argument(s)!");

Removed from v.1.20  
changed lines
  Added in v.1.21


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