rbb 99/04/15 13:08:22
Modified: apr/network_io/unix networkio.h sockets.c sockopt.c
include apr_network_io.h
docs networkio.txt
Log:
Fixed hostname stuff in apr. Also, we are now saving the remote hostname in
the
apr structure.
Revision Changes Path
1.5 +1 -1 apache-apr/apr/network_io/unix/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/networkio.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- networkio.h 1999/04/15 15:41:18 1.4
+++ networkio.h 1999/04/15 20:08:15 1.5
@@ -58,7 +58,7 @@
struct socket_t {
int socketdes;
- char hostname[MAXHOSTNAMELEN];
+ char *remote_hostname;
struct sockaddr_in *addr;
size_t addr_len;
};
1.5 +12 -10 apache-apr/apr/network_io/unix/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/sockets.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- sockets.c 1999/04/15 15:41:18 1.4
+++ sockets.c 1999/04/15 20:08:16 1.5
@@ -60,18 +60,14 @@
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <netinet/in.h>
+#include <netdb.h>
-
apr_socket_t *apr_create_tcp_socket(void)
{
apr_socket_t *thesocket = (apr_socket_t *)malloc(sizeof(apr_socket_t));
thesocket->socketdes = socket(AF_INET ,SOCK_STREAM, IPPROTO_TCP);
-
- if (gethostname(thesocket->hostname, MAXHOSTNAMELEN + 1) == -1) {
- free(thesocket);
- return NULL;
- }
+ thesocket->remote_hostname = NULL;
thesocket->addr = (struct sockaddr_in *)malloc(sizeof(struct
sockaddr_in));
thesocket->addr->sin_family = AF_INET;
@@ -102,7 +98,8 @@
apr_status_t apr_close_socket(apr_socket_t *thesocket)
{
if (close(thesocket->socketdes) == 0) {
- free(thesocket->hostname);
+ free(thesocket->addr);
+ free(thesocket->remote_hostname);
free(thesocket);
return APR_SUCCESS;
}
@@ -136,11 +133,16 @@
apr_socket_t *apr_accept(const apr_socket_t *sock)
{
apr_socket_t *new = (apr_socket_t *)malloc(sizeof(apr_socket_t));
-
- strcpy(new->hostname, sock->hostname);
+ struct hostent *hptr;
- new->socketdes = accept(sock->socketdes, (struct sockaddr *)new->addr,
new->addr_len);
+ new->socketdes = accept(sock->socketdes, (struct sockaddr *)new->addr,
&new->addr_len);
+ hptr = gethostbyaddr((char *)&new->addr->sin_addr, sizeof(struct
in_addr), AF_INET);
+ if (hptr != NULL) {
+ new->remote_hostname = strdup(hptr->h_name);
+ }
+
+ free(hptr);
if (new->socketdes >= 0)
return new;
free(new);
1.2 +14 -0 apache-apr/apr/network_io/unix/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/unix/sockopt.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sockopt.c 1999/04/14 16:38:23 1.1
+++ sockopt.c 1999/04/15 20:08:17 1.2
@@ -145,3 +145,17 @@
return APR_SUCCESS;
}
+apr_status_t apr_gethostname(char *buf, int len)
+{
+ if (gethostname(buf, len) == -1)
+ return APR_FAILURE;
+ else
+ return APR_SUCCESS;
+}
+
+char *apr_get_remote_hostname(apr_socket_t *sock)
+{
+ return sock->remote_hostname;
+}
+
+
1.8 +3 -0 apache-apr/include/apr_network_io.h
Index: apr_network_io.h
===================================================================
RCS file: /home/cvs/apache-apr/include/apr_network_io.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- apr_network_io.h 1999/04/15 15:41:20 1.7
+++ apr_network_io.h 1999/04/15 20:08:20 1.8
@@ -91,6 +91,9 @@
apr_status_t apr_listen(apr_socket_t *, apr_int32_t);
apr_socket_t *apr_accept(const apr_socket_t *);
+char *apr_get_remote_hostname(apr_socket_t *);
+apr_status_t apr_gethostname(char *, int);
+
apr_ssize_t apr_send(apr_socket_t *, const char *, int, time_t);
apr_ssize_t apr_recv(apr_socket_t *, char *, int, time_t);
1.10 +45 -32 apache-apr/docs/networkio.txt
Index: networkio.txt
===================================================================
RCS file: /home/cvs/apache-apr/docs/networkio.txt,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- networkio.txt 1999/04/15 15:41:19 1.9
+++ networkio.txt 1999/04/15 20:08:21 1.10
@@ -130,39 +130,20 @@
return) new socket that has the accepted connection.
NOTE: accepted socket can not accept more connections. Original socket
remains open, and can accept more connections.
-
-
-
- APRStatus apr_gethostbyname(char *, APRHostEnt)
- Lookup a host by name
+
+char *apr_get_remote_hostname(apr_socket_t *)
+ Get the host name for the remote machine
Arguments:
- arg 1) string defining the host name of interest
- arg 2) returns an APRHostEnt structure that has been filled out
- on success. On failure, it returns NULL.
- APRStatus apr_gethostbyaddr(const void *, APRInt32, APRNetAddrValue,
- APRHostEnt)
- Lookup a host by address
- Arguments:
- arg 1) IP addr of host, not Null-terminated string
- arg 2) length of IP addr
- arg 3) type of address
- arg 4) returns an APRHostEnt structure that has been filled out
- on success. On failure, it returns NULL.
- APRStatus apr_enumeratehostent(APRUInt32, const APRHostEnt *, APRUInt16,
- APRNetAddr *, APRInt32);
- Evaluate each of the possible address of a Host Entry retrived from
- apr_GetHostByName or apr_GetHostByAddr.
+ arg 1) socket connection is on.
+ return) name of remote machine.
+
+ apr_status_t apr_gethostname(char *, int)
+ Get the host name for the machine
Arguments:
- arg 1) The index of the enumeration. To start, set to zero. To
- continue, set to last returned value.
- arg 2) pointer to structure return by apr_GetHostBy* Functions.
- arg 3) Port number to be asssigned as part of the APRNetAddr
- structure.
- arg 4) Input a pointer to an APRNetAddr struct. On output, this
- struct
- is filled in by the runtime if the returned result is > 0.
- arg 5) Next value for the index parameter. If 0, the enumeration
- is ended. APR_FAILURE otherwise.
+ arg 1) Buffer to write name to.
+ arg 2) Size of buffer.
+ return) APR_SUCCESS or APR_FAILURE
+
APRStatus apr_familyinet(APRInt16)
Get the value of the address family for IP
Arguments:
@@ -203,12 +184,44 @@
INADR_LOOPBACK equivalents.
arg 2) Port number to be assigned in the struct
arg 3) The address of the APRNetAddr struct to be filled out.
+ APRStatus apr_gethostbyname(char *, APRHostEnt)
+ Lookup a host by name
+ Arguments:
+ arg 1) string defining the host name of interest
+ arg 2) returns an APRHostEnt structure that has been filled out
+ on success. On failure, it returns NULL.
+ APRStatus apr_gethostbyaddr(const void *, APRInt32, APRNetAddrValue,
+ APRHostEnt)
+ Lookup a host by address
+ Arguments:
+ arg 1) IP addr of host, not Null-terminated string
+ arg 2) length of IP addr
+ arg 3) type of address
+ arg 4) returns an APRHostEnt structure that has been filled out
+ on success. On failure, it returns NULL.
+ APRStatus apr_enumeratehostent(APRUInt32, const APRHostEnt *, APRUInt16,
+ APRNetAddr *, APRInt32);
+ Evaluate each of the possible address of a Host Entry retrived from
+ apr_GetHostByName or apr_GetHostByAddr.
+ Arguments:
+ arg 1) The index of the enumeration. To start, set to zero. To
+ continue, set to last returned value.
+ arg 2) pointer to structure return by apr_GetHostBy* Functions.
+ arg 3) Port number to be asssigned as part of the APRNetAddr
+ structure.
+ arg 4) Input a pointer to an APRNetAddr struct. On output, this
+ struct
+ is filled in by the runtime if the returned result is > 0.
+ arg 5) Next value for the index parameter. If 0, the enumeration
+ is ended. APR_FAILURE otherwise.
+
+
**************** IMPLEMENTATION DETAILS *****************
struct apr_socket_t {
int socketdes
- char *hostname
+ char *remote_hostname
struct sockaddr *addr
size_t addr_len
}