diff --git a/qse/cmd/http/httpd.c b/qse/cmd/http/httpd.c index d55e5d63..eeb4d67e 100644 --- a/qse/cmd/http/httpd.c +++ b/qse/cmd/http/httpd.c @@ -36,7 +36,7 @@ # include #endif -#if defined(HAVE_SSL) +#if defined(HAVE_OPENSSL_SSL_H) && defined(HAVE_SSL) # include # if defined(HAVE_OPENSSL_ERR_H) # include @@ -44,12 +44,17 @@ # if defined(HAVE_OPENSSL_ENGINE_H) # include # endif +# define USE_SSL #endif #if defined(HAVE_SYS_PRCTL_H) # include #endif +#if defined(HAVE_SYS_TIME_H) +# include +#endif + #if defined(HAVE_SYS_RESOURCE_H) # include #endif @@ -2852,14 +2857,14 @@ int qse_main (int argc, qse_achar_t* argv[]) /*trace2com_init (1, 38400);*/ #endif -#if defined(HAVE_SSL) +#if defined(USE_SSL) SSL_load_error_strings (); SSL_library_init (); #endif ret = qse_runmain (argc, argv, httpd_main); -#if defined(HAVE_SSL) +#if defined(USE_SSL) /* ERR_remove_state() should be called for each thread if the application is thread */ ERR_remove_state (0); #if defined(HAVE_ENGINE_CLEANUP) diff --git a/qse/cmd/http/ursd.c b/qse/cmd/http/ursd.c index 343fa940..43d494db 100644 --- a/qse/cmd/http/ursd.c +++ b/qse/cmd/http/ursd.c @@ -59,6 +59,10 @@ # include #endif +#if defined(HAVE_SYS_TIME_H) +# include +#endif + #if defined(HAVE_SYS_RESOURCE_H) # include #endif diff --git a/qse/configure b/qse/configure index f78ce19b..efd15325 100755 --- a/qse/configure +++ b/qse/configure @@ -18198,7 +18198,7 @@ fi if test "x$enable_ssl_is" = "xyes" then - for ac_header in openssl/err.h openssl/engine.h + for ac_header in openssl/ssl.h openssl/err.h openssl/engine.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" diff --git a/qse/configure.ac b/qse/configure.ac index cc82377c..1ea957bd 100644 --- a/qse/configure.ac +++ b/qse/configure.ac @@ -263,7 +263,7 @@ AC_ARG_ENABLE([ssl], [AS_HELP_STRING([--enable-ssl],[build the library in the ss enable_ssl_is=$enableval,enable_ssl_is=yes) if test "x$enable_ssl_is" = "xyes" then - AC_CHECK_HEADERS([openssl/err.h openssl/engine.h]) + AC_CHECK_HEADERS([openssl/ssl.h openssl/err.h openssl/engine.h]) dnl check for an SSL library AC_CHECK_FUNCS([SSL_library_init]) diff --git a/qse/doc/page/installation.md b/qse/doc/page/installation.md index 09ead2ce..c5511231 100644 --- a/qse/doc/page/installation.md +++ b/qse/doc/page/installation.md @@ -156,6 +156,13 @@ available for the native makefile for Watcom C/C++ for OS/2 only. wmake TCPV40HDRS=on +### C++ ### + +C++ support is enabled by default as long as a C++ compiler is detected. +If you want to disable it for any reasons, you can specify `--disable-cxx`. + + ./configure --disable-cxx + ### SCO UNIX System V/386 Release 3.2 ### - If /usr/include/netinet and /usr/include/net are missing, @@ -173,13 +180,48 @@ available for the native makefile for Watcom C/C++ for OS/2 only. for dificiency of the bundled make utility. - Do not include -g in CFLAGS. - ./configure GREP=/bin/grep RANLIB=/bin/true CFLAGS="" RAN + ./configure GREP=/bin/grep RANLIB=/bin/true CFLAGS="" - Remove $(LIBLTDL) from LIBADD_LIB_COMMON in lib/awk/Makefile - Remove $(LIBLTDL) from libqsehttp_la_LIBADD in lib/http/Makefile make +### Mac OS X/Darwin ### + +No special consideration is required if you work with moderately recent +version of developer tools. The GCC compiler by Apple before early 2000's +has an option called `-no-cpp-precomp`. + +\code + % cc -E /tmp/a.c + #1 "/tmp/a.c" + + + int main ( ) + { + Lxxxx ; + return 0 ; + } + + % cc -E -no-cpp-precomp /tmp/a.c + #1 "/tmp/a.c" + + + int main ( ) + { + Lxxxx ; + return 0 ; + } +\endcode + +Without the `-no-cpp-precomp` option, some preprocessing produces erroneous +code. If your compiler behaves this way, you should specify `-no-cpp-precomp` +to CFLAGS or CXXFLAGS when running configure. For instance, + + $ ./configure --prefix=/usr/local --disable-cxx CFLAGS="-Wall -g -no-cpp-precomp" + + ### More options ### More options are available for the configure script. Execute this for more diff --git a/qse/include/qse/config.h.in b/qse/include/qse/config.h.in index da99d682..4173eeb8 100644 --- a/qse/include/qse/config.h.in +++ b/qse/include/qse/config.h.in @@ -416,6 +416,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_ERR_H +/* Define to 1 if you have the header file. */ +#undef HAVE_OPENSSL_SSL_H + /* Define to 1 if you have the `posix_spawn' function. */ #undef HAVE_POSIX_SPAWN diff --git a/qse/lib/cmn/fio.c b/qse/lib/cmn/fio.c index 698fe399..c4d6e3fa 100644 --- a/qse/lib/cmn/fio.c +++ b/qse/lib/cmn/fio.c @@ -862,7 +862,9 @@ int qse_fio_init ( if (flags & QSE_FIO_CREATE) desired_access |= O_CREAT; if (flags & QSE_FIO_TRUNCATE) desired_access |= O_TRUNC; if (flags & QSE_FIO_EXCLUSIVE) desired_access |= O_EXCL; + #if defined(O_SYNC) if (flags & QSE_FIO_SYNC) desired_access |= O_SYNC; + #endif #if defined(O_NOFOLLOW) if (flags & QSE_FIO_NOFOLLOW) desired_access |= O_NOFOLLOW; diff --git a/qse/lib/cmn/syscall.h b/qse/lib/cmn/syscall.h index 77e52bec..a37f50f1 100644 --- a/qse/lib/cmn/syscall.h +++ b/qse/lib/cmn/syscall.h @@ -421,7 +421,12 @@ #elif defined(HAVE_DIR_D_FD) # define QSE_DIRFD(dir) ((dir)->d_fd) #else -# error OUCH!!! NO DIRFD AVAILABLE +# if defined(dirfd) + /* mac os x 10.1 defines dirfd as a macro */ +# define QSE_DIRFD(dir) dirfd(dir) +# else +# error OUCH!!! NO DIRFD AVAILABLE +# endif #endif #define QSE_DIR DIR diff --git a/qse/lib/http/httpd-std.c b/qse/lib/http/httpd-std.c index 6a08d902..bab42271 100644 --- a/qse/lib/http/httpd-std.c +++ b/qse/lib/http/httpd-std.c @@ -130,7 +130,7 @@ # define USE_LTDL #endif -#if defined(HAVE_SSL) +#if defined(HAVE_OPENSSL_SSL_H) && defined(HAVE_SSL) # include # if defined(HAVE_OPENSSL_ERR_H) # include @@ -138,6 +138,7 @@ # if defined(HAVE_OPENSSL_ENGINE_H) # include # endif +# define USE_SSL #endif #if defined(__linux) && !defined(SO_REUSEPORT) @@ -147,7 +148,7 @@ #define HANDLE_TO_FIO(x) ((qse_fio_t*)(x)) #define FIO_TO_HANDLE(x) ((qse_httpd_hnd_t)(x)) -#if defined(HAVE_SSL) +#if defined(USE_SSL) #define HANDLE_TO_SSL(x) ((SSL*)(x)) #define SSL_TO_HANDLE(x) ((qse_httpd_hnd_t)(x)) #endif @@ -161,7 +162,7 @@ struct server_xtn_t qse_httpd_serverstd_makersrc_t makersrc; qse_httpd_serverstd_freersrc_t freersrc; -#if defined(HAVE_SSL) +#if defined(USE_SSL) SSL_CTX* ssl_ctx; #endif @@ -565,7 +566,7 @@ static QSE_INLINE qse_ssize_t __send_file_ssl ( qse_httpd_t* httpd, void* xout, qse_httpd_hnd_t in_fd, qse_foff_t* offset, qse_size_t count) { -#if defined(HAVE_SSL) +#if defined(USE_SSL) qse_mchar_t buf[MAX_SEND_SIZE]; qse_ssize_t ret; qse_foff_t foff; @@ -615,7 +616,7 @@ static QSE_INLINE qse_ssize_t __send_file_ssl ( typedef struct httpd_xtn_t httpd_xtn_t; struct httpd_xtn_t { -#if defined(HAVE_SSL) +#if defined(USE_SSL) SSL_CTX* ssl_peer_ctx; #endif qse_httpd_ecb_t ecb; @@ -623,7 +624,7 @@ struct httpd_xtn_t qse_httpd_ursstd_t urs; }; -#if defined(HAVE_SSL) +#if defined(USE_SSL) static int init_server_ssl (qse_httpd_t* httpd, qse_httpd_server_t* server) { SSL_CTX* ssl_ctx = QSE_NULL; @@ -729,7 +730,7 @@ static void cleanup_standard_httpd (qse_httpd_t* httpd) httpd_xtn_t* xtn; xtn = (httpd_xtn_t*)qse_httpd_getxtn (httpd); -#if defined(HAVE_SSL) +#if defined(USE_SSL) if (xtn->ssl_peer_ctx) fini_xtn_peer_ssl (xtn); #endif @@ -766,7 +767,7 @@ qse_httpd_t* qse_httpd_openstdwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize) lt_dlinited = 1; #endif -#if defined(HAVE_SSL) +#if defined(USE_SSL) if (init_xtn_peer_ssl (httpd) <= -1) goto oops; #endif @@ -778,7 +779,7 @@ qse_httpd_t* qse_httpd_openstdwithmmgr (qse_mmgr_t* mmgr, qse_size_t xtnsize) return httpd; oops: -#if defined(HAVE_SSL) +#if defined(USE_SSL) if (xtn && xtn->ssl_peer_ctx) fini_xtn_peer_ssl (xtn); #endif #if defined(USE_LTDL) @@ -1159,7 +1160,7 @@ static qse_ssize_t client_recv ( { if (client->status & QSE_HTTPD_CLIENT_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret = SSL_read (HANDLE_TO_SSL(client->handle2), buf, bufsize); if (ret <= -1) { @@ -1196,7 +1197,7 @@ static qse_ssize_t client_send ( { if (client->status & QSE_HTTPD_CLIENT_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret = SSL_write (HANDLE_TO_SSL(client->handle2), buf, bufsize); if (ret <= -1) { @@ -1238,7 +1239,7 @@ static int client_accepted (qse_httpd_t* httpd, qse_httpd_client_t* client) { if (client->status & QSE_HTTPD_CLIENT_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret; SSL* ssl; server_xtn_t* server_xtn; @@ -1316,7 +1317,7 @@ static void client_closed (qse_httpd_t* httpd, qse_httpd_client_t* client) { if (client->status & QSE_HTTPD_CLIENT_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) if ((SSL*)client->handle2) { SSL_shutdown ((SSL*)client->handle2); /* is this needed? */ @@ -1338,7 +1339,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) int connected = 1; qse_sck_hnd_t fd = QSE_INVALID_SCKHND; -#if defined(HAVE_SSL) +#if defined(USE_SSL) SSL* ssl = QSE_NULL; #endif @@ -1396,7 +1397,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) if (peer->flags & QSE_HTTPD_PEER_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) QSE_ASSERT (xtn->ssl_peer_ctx != QSE_NULL); ssl = SSL_new (xtn->ssl_peer_ctx); @@ -1453,7 +1454,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) if ((peer->flags & QSE_HTTPD_PEER_SECURE) && connected) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret = SSL_connect (ssl); if (ret <= 0) { @@ -1482,7 +1483,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) peer->handle = fd; if (peer->flags & QSE_HTTPD_PEER_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) peer->handle2 = SSL_TO_HANDLE(ssl); #endif } @@ -1490,7 +1491,7 @@ static int peer_open (qse_httpd_t* httpd, qse_httpd_peer_t* peer) oops: qse_httpd_seterrnum (httpd, SKERR_TO_ERRNUM()); -#if defined(HAVE_SSL) +#if defined(USE_SSL) if (ssl) SSL_free (ssl); #endif if (qse_isvalidsckhnd(fd)) qse_closesckhnd (fd); @@ -1503,7 +1504,7 @@ static void peer_close (qse_httpd_t* httpd, qse_httpd_peer_t* peer) { if (peer->flags & QSE_HTTPD_PEER_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) SSL_free (HANDLE_TO_SSL(peer->handle2)); #endif } @@ -1581,7 +1582,7 @@ static int is_peer_socket_connected (qse_httpd_t* httpd, qse_httpd_peer_t* peer) static int is_peer_connected_securely (qse_httpd_t* httpd, qse_httpd_peer_t* peer) { -#if defined(HAVE_SSL) +#if defined(USE_SSL) int ret = SSL_connect (HANDLE_TO_SSL(peer->handle2)); if (ret <= 0) { @@ -1632,7 +1633,7 @@ static qse_ssize_t peer_recv ( { if (peer->flags & QSE_HTTPD_PEER_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret = SSL_read (HANDLE_TO_SSL(peer->handle2), buf, bufsize); if (ret <= -1) { @@ -1668,7 +1669,7 @@ static qse_ssize_t peer_send ( { if (peer->flags & QSE_HTTPD_PEER_SECURE) { - #if defined(HAVE_SSL) + #if defined(USE_SSL) int ret = SSL_write (HANDLE_TO_SSL(peer->handle2), buf, bufsize); if (ret <= -1) { @@ -3368,7 +3369,7 @@ static void detach_server (qse_httpd_t* httpd, qse_httpd_server_t* server) if (server_xtn->detach) server_xtn->detach (httpd, server); if (server_xtn->auth.ptr) QSE_MMGR_FREE (httpd->mmgr, server_xtn->auth.ptr); -#if defined(HAVE_SSL) +#if defined(USE_SSL) if (server_xtn->ssl_ctx) fini_server_ssl (server_xtn); #endif }