diff --git a/SConstruct b/SConstruct index f97d537..f0e9cf6 100644 --- a/SConstruct +++ b/SConstruct @@ -1,9 +1,14 @@ import os -env = Environment() +env = Environment(tools=['default', 'packaging']) debug = ARGUMENTS.get("debug", 0) +if os.path.exists('/usr/bin/rpmbuild'): + BUILD_RPM = True +else: + BUILD_RPM = False + if env["PLATFORM"] == "win32": apachedir = "C:/Program Files/Apache Software Foundation/Apache2.2" @@ -36,9 +41,14 @@ else: SHLINKFLAGS = "-undefined dynamic_lookup") modulesdir = "/usr/libexec/apache2" else: - env.Append(CPPDEFINES = ["LINUX=2", "_FORTIFY_SOURCE=2", "_GNU_SOURCE", "_LARGEFILE64_SOURCE", "_REENTRANT"], - CPPPATH = ["/usr/include/apache2", "/usr/include/apr-1.0"]) - modulesdir = "/usr/lib/apache2/modules" + if os.path.exists('/etc/redhat-release'): + includes = [ '/usr/include/httpd', '/usr/include/apr-1', os.getcwd() ] + modulesdir = '/usr/lib64/httpd/modules' + else: + includes = [ '/usr/include/apache2', '/usr/include/apr-1.0', os.getcwd() ] + modulesdir = '/usr/lib/apache2/modules' + + env.Append(CPPDEFINES = ["LINUX=2", "_FORTIFY_SOURCE=2", "_GNU_SOURCE", "_LARGEFILE64_SOURCE", "_REENTRANT"], CPPPATH = includes) mod_websocket = env.SharedLibrary(source=["mod_websocket.c"], SHLIBPREFIX="", @@ -46,9 +56,31 @@ mod_websocket = env.SharedLibrary(source=["mod_websocket.c"], mod_websocket_draft76 = env.SharedLibrary(source=["mod_websocket_draft76.c"], SHLIBPREFIX="", SHLIBSUFFIX=".so") +mod_websocket_vnc_proxy = env.SharedLibrary(source=["vncproxy/mod_websocket_vnc_proxy.c"], + SHLIBPREFIX="", + SHLIBSUFFIX=".so") + +env.File('validate_utf8.h') +env.File('websocket_plugin.h') -env.Install(dir=modulesdir, source=[mod_websocket, mod_websocket_draft76]) +files = env.Install(dir=modulesdir, source=[mod_websocket, mod_websocket_draft76, mod_websocket_vnc_proxy]) # Install env.Alias("install", modulesdir) + +# Package +env.Tag(files, INSTALL_LOCATION = '/usr/lib64/httpd/modules/') + +if BUILD_RPM: + env.Package( + source = files, + NAME = 'httpd-mod-websocket', + VERSION = '1.0.0', + PACKAGEVERSION = 0, + PACKAGETYPE = 'rpm', + LICENSE = 'apache', + SUMMARY = 'Apache Websocket module.', + DESCRIPTION = 'Apache Websocket module.', + X_RPM_GROUP = 'System Environment/Daemons', + ) diff --git a/vncproxy/mod_websocket_vnc_proxy.c b/vncproxy/mod_websocket_vnc_proxy.c index 6191853..c247063 100644 --- a/vncproxy/mod_websocket_vnc_proxy.c +++ b/vncproxy/mod_websocket_vnc_proxy.c @@ -92,6 +92,8 @@ */ #include +#include +#include #include "httpd.h" #include "http_config.h" @@ -188,7 +190,6 @@ static apr_status_t tcp_proxy_query_key (request_rec * r, TcpProxyData * tpd, ap /* Check we have a config and a datbase connection */ apr_status_t rv; - const char *dbd_password = NULL; apr_dbd_prepared_t *statement = NULL; apr_dbd_results_t *res = NULL; apr_dbd_row_t *row = NULL; @@ -487,7 +488,7 @@ static apr_status_t tcp_proxy_send_initial_data(request_rec * r, ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "tcp_proxy_send_initial_data: Data to hash is '%s'", tohash); - char hashdata[32]; + unsigned char hashdata[32]; apr_crypto_hash_t *h = apr_crypto_sha256_new(mp); h->init(h); h->add(h, tohash, strlen(tohash)); @@ -636,15 +637,12 @@ void guacdump (apr_pool_t * p, char * msg, char * buf, size_t start, size_t end) void *APR_THREAD_FUNC tcp_proxy_run(apr_thread_t * thread, void *data) { - char buffer[64]; apr_status_t rv; TcpProxyData *tpd = (TcpProxyData *) data; if (!tpd) return NULL; - request_rec *r = (tpd->server)->request(tpd->server); - apr_interval_time_t timeout = APR_USEC_PER_SEC * ((tpd->timeout)?tpd->timeout:30); apr_pollset_t * recvpollset = NULL; @@ -1092,7 +1090,7 @@ static size_t CALLBACK tcp_proxy_on_message(void *plugin_private, * means we have to copy it */ towrite = NULL; - unsigned char *ztbuf = calloc(1, len + 1); + char *ztbuf = calloc(1, len + 1); if (!ztbuf) goto fail; towrite = calloc(1, len + 1); @@ -1138,7 +1136,7 @@ static size_t CALLBACK tcp_proxy_on_message(void *plugin_private, if (num>0) { apr_size_t lw = l; - rv = apr_socket_send(tpd->tcpsocket, p, &lw); + rv = apr_socket_send(tpd->tcpsocket, (char *)p, &lw); /* move past data written */ l -= lw;