Thank you, but - On Sat, Oct 23, 2010 at 10:01 PM, Ben Noordhuis <i...@bnoordhuis.nl> wrote: > Alexander, take a look at mod_echo.c (included in the source tarball). > It's a great example of how a protocol handler should work and it just > might convince you to use bucket brigades after all. :) > > You need to check if your handler is enabled for the current vhost. If > it's not, return DECLINED. If it is, look up the client socket and go > from there. >
I've created a module using bb (the source code at the bottom) and it suffers from the same problem (hijacks the port 80 too). Could it be that "SetHandler" is a wrong directive for protocol handler? LoadModule socket_policy_module modules/mod_socket_policy.so Listen 843 <VirtualHost _default_:843> SetHandler socket_policy </VirtualHost> Also, I do not know, how to check that the "handler is enabled for the current vhost". for (p = conn->base_server; p != NULL; p = p->next) /* and then? */ Regards Alex #include <httpd.h> #include <http_protocol.h> #include <http_connection.h> #include <http_config.h> #include <http_log.h> #define POLICY "<?xml version=\"1.0\"?>\n" \ "<!DOCTYPE cross-domain-policy SYSTEM\n" \ "\"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd\">\n" \ "<cross-domain-policy>\n" \ "<allow-access-from domain=\"*\" to-ports=\"8080\"/>\n" \ "</cross-domain-policy>\0" static int socket_policy_handler(conn_rec *conn) { apr_bucket_brigade *bb; apr_bucket *b; apr_status_t rv; bb = apr_brigade_create(conn->pool, conn->bucket_alloc); b = apr_bucket_immortal_create(POLICY, sizeof(POLICY), bb->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); b = apr_bucket_flush_create(conn->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); b = apr_bucket_eos_create(bb->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, b); rv = ap_pass_brigade(conn->output_filters, bb); if (rv != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, conn->base_server, "output error"); return DECLINED; } ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, conn->base_server, "served socket policy to %s", conn->remote_ip); return OK; } static void register_hooks(apr_pool_t *pool) { ap_hook_process_connection(socket_policy_handler, NULL, NULL, APR_HOOK_MIDDLE); } module AP_MODULE_DECLARE_DATA socket_policy_module = { STANDARD20_MODULE_STUFF, NULL, NULL, NULL, NULL, NULL, register_hooks };