/* * Copyright (c) 1994, 1995. Netscape Communications Corporation. All * rights reserved. * * Use of this software is governed by the terms of the license agreement for * the Netscape Communications or Netscape Comemrce Server between the * parties. */ /* ------------------------------------------------------------------------ */ /* * net.h: system specific networking definitions * * Rob McCool */ #ifndef NET_H #define NET_H #include "systems.h" #include "file.h" /* for client file descriptors */ #include "pblock.h" /* for client data block */ /* This should be a user-given parameter later */ #define NET_BUFFERSIZE 8192 /* So should this. */ #define NET_READ_TIMEOUT 120 #define NET_WRITE_TIMEOUT 300 #define SSL_HANDSHAKE_TIMEOUT 300 #if defined(NET_SOCKETS) || defined(NET_SSL) #ifdef NET_WINSOCK #include #else /* XP_UNIX */ #include #include #include /* sockaddr and in_addr */ #include /* inet_ntoa */ #include /* hostent stuff */ #endif /* NET_WINSOCK */ #ifdef NET_SSL #include "minissl.h" #endif /* -------------------------------- Global -------------------------------- */ extern int net_enabledns; /* ------------------------------ Data types ------------------------------ */ #ifdef NET_WINSOCK typedef SOCKET SYS_NETFD; #else /* XP_UNIX */ typedef int SYS_NETFD; #endif /* NET_WINSOCK */ #define SYS_NET_ERRORFD -1 /* -------------------------------- Macros -------------------------------- */ /* These may be different for non-UNIX systems. */ #ifndef NET_SSL #define net_socket socket #define net_setsockopt setsockopt #define net_getsockopt getsockopt #define net_listen listen #define net_select select #define net_getpeername getpeername #ifndef NET_WINSOCK #define net_close(sd) close(sd) #define net_bind bind #else /* NET_WINSOCK */ #define net_close(sd) closesocket(sd) #define system_netbind bind int net_bind(SYS_NETFD s, const struct sockaddr *name, int namelen); #endif /* NET_WINSOCK */ #ifdef DAEMON_NEEDS_SEMAPHORE #define net_accept net_semaccept #else /* ! DAEMON_NEEDS_SEMAPHORE */ #define net_accept accept #endif /* DAEMON_NEEDS_SEMAPHORE */ #else /* NET_SSL */ #define net_close(sd) SSL_Close(sd) #define net_socket SSL_Socket #define net_setsockopt SSL_SetSockOpt #define net_getsockopt SSL_GetSockOpt #ifdef XP_UNIX #define net_bind SSL_Bind #else /* WIN32 */ #define system_netbind SSL_Bind int net_bind(SYS_NETFD s, const struct sockaddr *name, int namelen); #endif /* XP_UNIX */ #define net_listen SSL_Listen #define net_select select /* !!! */ #define net_getpeername SSL_GetPeerName #define net_accept SSL_Accept #endif /* ! NET_SSL */ /* Users should never call the system_net* functions. */ #ifdef NET_SSL #define system_netread(sd, buf, sz) SSL_Read(sd, buf, sz) #define system_netwrite SSL_Write #else /* ! NET_SSL */ #if !defined(NET_WINSOCK) #define system_netread(sd, buf, sz) read(sd, buf, sz) #define system_netwrite write #else /* NET_WINSOCK */ #define system_netread(sd, buf, sz) recv(sd, buf, sz, 0) #define system_netwrite(sd, buf, sz) send(sd, buf, sz, 0) #endif /* ! NET_WINSOCK */ #endif /* NET_SSL */ int net_read(SYS_NETFD sd, char *buf, int sz, int timeout); int net_write(SYS_NETFD sd, char *buf, int sz); #ifdef DAEMON_NEEDS_SEMAPHORE int net_semaccept_init(int port); int net_semaccept(int s, struct sockaddr *addr, int *addrlen); void net_semaccept_terminate(); #endif /* ------------------------------ Prototypes ------------------------------ */ /* * net_find_fqdn looks through the given hostent structure trying to find * a FQDN for the host. If it finds none, it returns NULL. Otherwise, it * returns a newly allocated copy of that string. */ char *net_find_fqdn(struct hostent *p); /* * net_ip2host transforms the given textual IP number into a FQDN. If it * can't find a FQDN, it will return what it can get. Otherwise, NULL. * * verify is whether or not the function should verify the hostname it * gets. This takes an extra query but is safer for use in access control. */ char *net_ip2host(char *ip, int verify); /* * net_sendmail sends mail to the specified recipient with the given subject * and message. Currently uses external programs. */ int net_sendmail(char *to, char *subject, char *msg); #endif #endif