summaryrefslogtreecommitdiff
path: root/network_io/beos
diff options
context:
space:
mode:
authorDavid Reid <dreid@apache.org>2000-11-09 15:01:35 +0000
committerDavid Reid <dreid@apache.org>2000-11-09 15:01:35 +0000
commit6567e6c65fc38c529955bd4ba060f782d9c3a51f (patch)
tree9625b68b3437313d6351d423da0f25927303c4e1 /network_io/beos
parent10d7cacb3d5658b6f5b2a74e1aa47748726ec214 (diff)
downloadapr-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.c93
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;