diff options
| -rw-r--r-- | transport/socket/src/name.c | 33 | ||||
| -rw-r--r-- | transport/socket/src/name.h | 14 | ||||
| -rw-r--r-- | transport/socket/src/socket.c | 14 | 
3 files changed, 34 insertions, 27 deletions
diff --git a/transport/socket/src/name.c b/transport/socket/src/name.c index b8d9664ad..120a669c8 100644 --- a/transport/socket/src/name.c +++ b/transport/socket/src/name.c @@ -462,18 +462,28 @@ client_bind (transport_t *this,  }  int32_t -socket_client_get_remote_sockaddr (transport_t *this,  +socket_client_get_remote_sockaddr (transport_t *this,                                     struct sockaddr *sockaddr,  -                                   socklen_t *sockaddr_len) +                                   socklen_t *sockaddr_len, +                                   sa_family_t *sa_family)  {          int32_t ret = 0; +        if ((sockaddr == NULL) || (sockaddr_len == NULL) +            || (sa_family == NULL)) { +                ret = -1; +                goto err; +        } + +          ret = client_fill_address_family (this, &sockaddr->sa_family);          if (ret) {                  ret = -1;                  goto err;          } +        *sa_family = sockaddr->sa_family; +          switch (sockaddr->sa_family)          {          case AF_INET_SDP: @@ -497,6 +507,10 @@ socket_client_get_remote_sockaddr (transport_t *this,                  ret = -1;          } +        if (*sa_family == AF_UNSPEC) { +                *sa_family = sockaddr->sa_family; +        } +  err:          return ret;  } @@ -547,17 +561,22 @@ out:  int32_t -socket_server_get_local_sockaddr (transport_t *this,  -                                  struct sockaddr *addr,  -                                  socklen_t *addr_len) +socket_server_get_local_sockaddr (transport_t *this, struct sockaddr *addr,  +                                  socklen_t *addr_len, sa_family_t *sa_family)  {          int32_t ret = -1; +        if ((addr == NULL) || (addr_len == NULL) || (sa_family == NULL)) { +                goto err; +        } +          ret = server_fill_address_family (this, &addr->sa_family);          if (ret == -1) {                  goto err;          } +        *sa_family = addr->sa_family; +          switch (addr->sa_family)          {          case AF_INET_SDP: @@ -574,6 +593,10 @@ socket_server_get_local_sockaddr (transport_t *this,                  break;          } +        if (*sa_family == AF_UNSPEC) { +                *sa_family = addr->sa_family; +        } +  err:          return ret;  } diff --git a/transport/socket/src/name.h b/transport/socket/src/name.h index ace94ebcc..f50a7b7f4 100644 --- a/transport/socket/src/name.h +++ b/transport/socket/src/name.h @@ -29,20 +29,14 @@ client_bind (transport_t *this,               int sock);  int32_t -client_fill_address_family (transport_t *this, sa_family_t *sa_family); - -int32_t -server_fill_address_family (transport_t *this, sa_family_t *sa_family); - -int32_t  socket_client_get_remote_sockaddr (transport_t *this,                                      struct sockaddr *sockaddr,  -                                   socklen_t *sockaddr_len); +                                   socklen_t *sockaddr_len, +                                   sa_family_t *sa_family);  int32_t -socket_server_get_local_sockaddr (transport_t *this,  -                                  struct sockaddr *addr,  -                                  socklen_t *addr_len); +socket_server_get_local_sockaddr (transport_t *this, struct sockaddr *addr,  +                                  socklen_t *addr_len, sa_family_t *sa_family);  int32_t  get_transport_identifiers (transport_t *this); diff --git a/transport/socket/src/socket.c b/transport/socket/src/socket.c index 151ce3c93..15a69c1b7 100644 --- a/transport/socket/src/socket.c +++ b/transport/socket/src/socket.c @@ -995,13 +995,8 @@ socket_connect (transport_t *this)                  goto err;          } -        ret = client_fill_address_family (this, &sa_family); -        if (ret == -1) { -                goto err; -        } -          ret = socket_client_get_remote_sockaddr (this, SA (&sockaddr), -                                                 &sockaddr_len); +                                                 &sockaddr_len, &sa_family);          if (ret == -1) {                  /* logged inside client_get_remote_sockaddr */                  goto err; @@ -1140,13 +1135,8 @@ socket_listen (transport_t *this)                  return ret;          } -        ret = server_fill_address_family (this, &sa_family); -        if (ret == -1) { -                return ret; -        } -          ret = socket_server_get_local_sockaddr (this, SA (&sockaddr),  -                                                &sockaddr_len); +                                                &sockaddr_len, &sa_family);          if (ret == -1) {                  return ret;          }  | 
