diff options
author | David Reid <dreid@apache.org> | 2000-11-09 15:01:35 +0000 |
---|---|---|
committer | David Reid <dreid@apache.org> | 2000-11-09 15:01:35 +0000 |
commit | 6567e6c65fc38c529955bd4ba060f782d9c3a51f (patch) | |
tree | 9625b68b3437313d6351d423da0f25927303c4e1 /network_io/beos | |
parent | 10d7cacb3d5658b6f5b2a74e1aa47748726ec214 (diff) | |
download | apr-6567e6c65fc38c529955bd4ba060f782d9c3a51f.tar.gz |
This is the next step in the conversion of socket address functions to
take APR_LOCAL/APR_REMOTE and also the addition of a new function to get the
apr_inaddr_t for a socket. the new function is needed to help tidy up
http_vhost.c
Changes to apache code to reflect these follow directly...
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@60669 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io/beos')
-rw-r--r-- | network_io/beos/sockaddr.c | 93 |
1 files changed, 22 insertions, 71 deletions
diff --git a/network_io/beos/sockaddr.c b/network_io/beos/sockaddr.c index c3d727d42..4b369ff9f 100644 --- a/network_io/beos/sockaddr.c +++ b/network_io/beos/sockaddr.c @@ -58,100 +58,51 @@ #else #include "networkio.h" -apr_status_t apr_set_port(apr_socket_t *sock, apr_interface_e which, apr_port_t port) +static apr_status_t get_local_addr(apr_socket_t *sock) { - if (!sock) - return APR_EBADF; - if (which == APR_LOCAL) - sock->local_addr->sin_port = htons(port); - else if (APR == APR_REMOTE) - sock->remote_addr->sin_port = htons(port); - else - return APR_EINVAL; - return APR_SUCCESS; -} - -apr_status_t apr_get_port(apr_port_t *port, apr_interface_e which, apr_socket_t *sock) -{ - if (!sock) - return APR_EBADF; - if (which == APR_LOCAL) - *port = ntohs(sock->local_addr->sin_port); - else if (which == APR_REMOTE) - *port = ntohs(sock->remote_addr->sin_port); - else - return APR_EINVAL; - return APR_SUCCESS; -} + apr_socklen_t namelen = sizeof(*sock->local_addr); -apr_status_t apr_set_local_ipaddr(apr_socket_t *sock, const char *addr) -{ - u_long ipaddr; - - if (!sock) { - return APR_EBADF; + if (getsockname(sock->socketdes, (struct sockaddr *)sock->local_addr, + &namelen) < 0) { + return errno; } - - if (!strcmp(addr, APR_ANYADDR)) { - sock->local_addr->sin_addr.s_addr = htonl(INADDR_ANY); + else { + sock->local_port_unknown = sock->local_interface_unknown = 0; return APR_SUCCESS; } - - ipaddr = inet_addr(addr); - - if (ipaddr == -1) { - return errno; - } - - sock->local_addr->sin_addr.s_addr = ipaddr; - return APR_SUCCESS; } -apr_status_t apr_set_remote_ipaddr(apr_socket_t *sock, const char *addr) +/* Include this here so we already have get_local_addr... */ +#include "../unix/sa_common.c" + +apr_status_t apr_set_ipaddr(apr_socket_t *sock, apr_interface_e which, const char *addr) { u_long ipaddr; + struct sockaddr_in *ptr; - if (!sock) { - return APR_EBADF; - } + if (which == APR_LOCAL) + ptr = sock->local_addr; + else if (which == APR_REMOTE) + ptr = sock->remote_addr; + else + return APR_EINVAL; if (!strcmp(addr, APR_ANYADDR)) { - sock->remote_addr->sin_addr.s_addr = htonl(INADDR_ANY); + ptr->sin_addr.s_addr = htonl(INADDR_ANY); return APR_SUCCESS; } ipaddr = inet_addr(addr); - if (ipaddr == (u_long)-1) { + if (ipaddr == -1) { return errno; } - sock->remote_addr->sin_addr.s_addr = ipaddr; - return APR_SUCCESS; -} - -apr_status_t apr_get_local_ipaddr(char **addr, apr_socket_t *sock) -{ - if (!sock) { - return APR_EBADF; - } - - *addr = apr_pstrdup(sock->cntxt, inet_ntoa(sock->local_addr->sin_addr)); + ptr->sin_addr.s_addr = ipaddr; return APR_SUCCESS; } -apr_status_t apr_get_remote_ipaddr(char **addr, apr_socket_t *sock) -{ - if (!sock) { - return APR_EBADF; - } - - *addr = apr_pstrdup(sock->cntxt, inet_ntoa(sock->remote_addr->sin_addr)); - return APR_SUCCESS; -} - - -apr_status_t apr_get_local_name(struct sockaddr_in **name, apr_socket_t *sock) +apr_status_t get_local_name(struct sockaddr_in **name, apr_socket_t *sock) { if (!sock) { return APR_EBADF; |