diff options
Diffstat (limited to '')
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-eval.hpp | 59 | ||||
-rw-r--r-- | sca-cpp/trunk/modules/server/mod-wiring.cpp | 34 | ||||
-rwxr-xr-x | sca-cpp/trunk/modules/server/server-conf | 16 |
3 files changed, 59 insertions, 50 deletions
diff --git a/sca-cpp/trunk/modules/server/mod-eval.hpp b/sca-cpp/trunk/modules/server/mod-eval.hpp index 464e0eabf1..ded496a0bf 100644 --- a/sca-cpp/trunk/modules/server/mod-eval.hpp +++ b/sca-cpp/trunk/modules/server/mod-eval.hpp @@ -78,6 +78,13 @@ const bool hasCompositeConf(const ServerConf& sc) { } /** + * Return true if a server contains a virtual host composite configuration. + */ +const bool hasVirtualCompositeConf(const ServerConf& sc) { + return sc.virtualHostContributionPath != "" && sc.virtualHostCompositeName != ""; +} + +/** * Convert a result represented as a content + failure pair to a * failable monad. */ @@ -421,6 +428,11 @@ const failable<list<value> > applyLifecycleExpr(const list<value>& impls, const const failable<bool> confComponents(ServerConf& sc) { if (!hasCompositeConf(sc)) return false; + debug(sc.contributionPath, "modeval::confComponents::contributionPath"); + debug(sc.compositeName, "modeval::confComponents::compositeName"); + if (sc.ca != "") debug(sc.ca, "modeval::confComponents::sslCA"); + if (sc.cert != "") debug(sc.cert, "modeval::confComponents::sslCert"); + if (sc.key != "") debug(sc.key, "modeval::confComponents::sslKey"); // Chdir to the deployed contribution if (chdir(c_str(sc.contributionPath)) != 0) @@ -462,9 +474,8 @@ const failable<bool> startComponents(ServerConf& sc) { class VirtualHostConf { public: VirtualHostConf(const ServerConf& ssc) : sc(ssc.server) { - sc.contributionPath = ssc.virtualHostContributionPath; - sc.compositeName = ssc.virtualHostCompositeName; - sc.wiringServerName = ssc.wiringServerName; + sc.virtualHostContributionPath = ssc.virtualHostContributionPath; + sc.virtualHostCompositeName = ssc.virtualHostCompositeName; sc.ca = ssc.ca; sc.cert = ssc.cert; sc.key = ssc.key; @@ -489,10 +500,14 @@ const failable<bool> virtualHostConfig(ServerConf& sc, request_rec* r) { debug(httpd::serverName(r), "modeval::virtualHostConfig::virtualHostName"); sc.wiringServerName = httpd::serverName(r); debug(sc.wiringServerName, "modeval::virtualHostConfig::wiringServerName"); + debug(sc.virtualHostContributionPath, "modwiring::virtualHostConfig::virtualHostContributionPath"); + + // Resolve the configured virtual contribution under + // the virtual host's SCA contribution root + sc.contributionPath = sc.virtualHostContributionPath + httpd::subdomain(httpd::hostName(r)) + "/"; + sc.compositeName = sc.virtualHostCompositeName; // Configure the deployed components - debug(sc.contributionPath, "modeval::virtualHostConfig::contributionPath"); - debug(sc.compositeName, "modeval::virtualHostConfig::compositeName"); const failable<bool> cr = confComponents(sc); if (!hasContent(cr)) return cr; @@ -529,8 +544,8 @@ int handler(request_rec *r) { // Process dynamic virtual host configuration, if any VirtualHostConf vhc(sc); - const bool hasv = hasCompositeConf(vhc.sc); - if (hasv) { + const bool usevh = hasVirtualCompositeConf(vhc.sc) && httpd::isVirtualHostRequest(sc.server, r); + if (usevh) { const failable<bool> cr = virtualHostConfig(vhc.sc, r); if (!hasContent(cr)) return httpd::reportStatus(mkfailure<int>(reason(cr))); @@ -538,7 +553,7 @@ int handler(request_rec *r) { // Get the component implementation lambda const list<value> path(pathValues(r->uri)); - const list<value> impl(assoctree<value>(cadr(path), hasv? vhc.sc.implTree : sc.implTree)); + const list<value> impl(assoctree<value>(cadr(path), usevh? vhc.sc.implTree : sc.implTree)); if (isNil(impl)) return httpd::reportStatus(mkfailure<int>(string("Couldn't find component implementation"))); @@ -584,17 +599,17 @@ apr_status_t serverCleanup(void* v) { const int postConfigMerge(const ServerConf& mainsc, server_rec* s) { if (s == NULL) return OK; - ostringstream sname; - debug(httpd::serverName(s), "modeval::postConfigMerge::serverName"); ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_eval); - sc.wiringServerName = mainsc.wiringServerName; + debug(httpd::serverName(s), "modeval::postConfigMerge::serverName"); + if (sc.wiringServerName == "") sc.wiringServerName = httpd::serverName(s); + debug(httpd::serverName(s), "modeval::postConfigMerge::wiringServerName"); sc.contributionPath = mainsc.contributionPath; sc.compositeName = mainsc.compositeName; sc.virtualHostContributionPath = mainsc.virtualHostContributionPath; sc.virtualHostCompositeName = mainsc.virtualHostCompositeName; - sc.ca = mainsc.ca; - sc.cert = mainsc.cert; - sc.key = mainsc.key; + if (sc.ca == "") sc.ca = mainsc.ca; + if (sc.cert == "") sc.cert = mainsc.cert; + if (sc.key == "") sc.key = mainsc.key; sc.implementations = mainsc.implementations; sc.implTree = mainsc.implTree; return postConfigMerge(mainsc, s->next); @@ -608,8 +623,7 @@ int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, // Get the server configuration and determine the wiring server name ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_eval); debug(httpd::serverName(s), "modeval::postConfig::serverName"); - if (sc.wiringServerName == "") - sc.wiringServerName = httpd::serverName(s); + if (sc.wiringServerName == "") sc.wiringServerName = httpd::serverName(s); debug(sc.wiringServerName, "modeval::postConfig::wiringServerName"); // Count the calls to post config @@ -638,8 +652,6 @@ int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, } // Configure the deployed components - debug(sc.contributionPath, "modeval::postConfig::contributionPath"); - debug(sc.compositeName, "modeval::postConfig::compositeName"); const failable<bool> res = confComponents(sc); if (!hasContent(res)) { cerr << "[Tuscany] Due to one or more errors mod_tuscany_eval loading failed. Causing apache to stop loading." << endl; @@ -649,7 +661,7 @@ int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, // Register a cleanup callback, called when the server is stopped or restarted apr_pool_pre_cleanup_register(p, (void*)&sc, serverCleanup); - // Merge the config into any virtual hosts + // Merge the configuration into the virtual hosts return postConfigMerge(sc, s->next); } @@ -670,6 +682,9 @@ void childInit(apr_pool_t* p, server_rec* s) { cerr << "[Tuscany] Due to one or more errors mod_tuscany_eval loading failed. Causing apache to stop loading." << endl; exit(APEXIT_CHILDFATAL); } + + // Merge the updated configuration into the virtual hosts + postConfigMerge(*sc, s->next); // Register a cleanup callback, called when the child is stopped or restarted apr_pool_pre_cleanup_register(p, (void*)sc, serverCleanup); @@ -743,9 +758,9 @@ const command_rec commands[] = { AP_INIT_TAKE1("SCAVirtualContribution", (const char*(*)())confVirtualContribution, NULL, RSRC_CONF, "SCA virtual host contribution location"), AP_INIT_TAKE1("SCAVirtualComposite", (const char*(*)())confVirtualComposite, NULL, RSRC_CONF, "SCA virtual composite location"), AP_INIT_TAKE12("SCASetEnv", (const char*(*)())confEnv, NULL, OR_FILEINFO, "Environment variable name and optional value"), - AP_INIT_TAKE1("SCASSLCACertificateFile", (const char*(*)())confCAFile, NULL, RSRC_CONF, "SSL CA certificate file"), - AP_INIT_TAKE1("SCASSLCertificateFile", (const char*(*)())confCertFile, NULL, RSRC_CONF, "SSL certificate file"), - AP_INIT_TAKE1("SCASSLCertificateKeyFile", (const char*(*)())confCertKeyFile, NULL, RSRC_CONF, "SSL certificate key file"), + AP_INIT_TAKE1("SSLCACertificateFile", (const char*(*)())confCAFile, NULL, RSRC_CONF, "SSL CA certificate file"), + AP_INIT_TAKE1("SSLCertificateFile", (const char*(*)())confCertFile, NULL, RSRC_CONF, "SSL certificate file"), + AP_INIT_TAKE1("SSLCertificateKeyFile", (const char*(*)())confCertKeyFile, NULL, RSRC_CONF, "SSL certificate key file"), {NULL, NULL, NULL, 0, NO_ARGS, NULL} }; diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp index 5b2aba73b3..964f7efc82 100644 --- a/sca-cpp/trunk/modules/server/mod-wiring.cpp +++ b/sca-cpp/trunk/modules/server/mod-wiring.cpp @@ -72,6 +72,13 @@ const bool hasCompositeConf(const ServerConf& sc) { } /** + * Return true if a server contains a virtual host composite configuration. + */ +const bool hasVirtualCompositeConf(const ServerConf& sc) { + return sc.virtualHostContributionPath != "" && sc.virtualHostCompositeName != ""; +} + +/** * Returns true if a URI is absolute. */ const bool isAbsolute(const string& uri) { @@ -235,6 +242,8 @@ const list<value> uriToComponentAssoc(const list<value>& c) { const bool confComponents(ServerConf& sc) { if (!hasCompositeConf(sc)) return true; + debug(sc.contributionPath, "modwiring::confComponents::contributionPath"); + debug(sc.compositeName, "modwiring::confComponents::compositeName"); // Read the component configuration and store the references and service URIs // in trees for fast retrieval later @@ -257,8 +266,8 @@ const bool confComponents(ServerConf& sc) { class VirtualHostConf { public: VirtualHostConf(const ServerConf& ssc) : sc(ssc.server) { - sc.contributionPath = ssc.virtualHostContributionPath; - sc.compositeName = ssc.virtualHostCompositeName; + sc.virtualHostContributionPath = ssc.virtualHostContributionPath; + sc.virtualHostCompositeName = ssc.virtualHostCompositeName; } ~VirtualHostConf() { @@ -273,10 +282,14 @@ public: const failable<bool> virtualHostConfig(ServerConf& sc, request_rec* r) { debug(httpd::serverName(sc.server), "modwiring::virtualHostConfig::serverName"); debug(httpd::serverName(r), "modwiring::virtualHostConfig::virtualHostName"); + debug(sc.virtualHostContributionPath, "modwiring::virtualHostConfig::virtualHostContributionPath"); + + // Resolve the configured virtual contribution under + // the virtual host's SCA contribution root + sc.contributionPath = sc.virtualHostContributionPath + httpd::subdomain(httpd::hostName(r)) + "/"; + sc.compositeName = sc.virtualHostCompositeName; // Configure the wiring for the deployed components - debug(sc.contributionPath, "modwiring::virtualHostConfig::contributionPath"); - debug(sc.compositeName, "modwiring::virtualHostConfig::compositeName"); confComponents(sc); return true; } @@ -297,8 +310,8 @@ int translate(request_rec *r) { // Process dynamic virtual host configuration, if any VirtualHostConf vhc(sc); - const bool hasv = hasCompositeConf(vhc.sc); - if (hasv) { + const bool usevh = hasVirtualCompositeConf(vhc.sc) && httpd::isVirtualHostRequest(sc.server, r); + if (usevh) { const failable<bool> cr = virtualHostConfig(vhc.sc, r); if (!hasContent(cr)) return -1; @@ -306,10 +319,10 @@ int translate(request_rec *r) { // Translate a component reference request if (!strncmp(r->uri, "/references/", 12)) - return translateReference(hasv? vhc.sc: sc, r); + return translateReference(usevh? vhc.sc: sc, r); // Translate a service request - return translateService(hasv? vhc.sc : sc, r); + return translateService(usevh? vhc.sc : sc, r); } /** @@ -340,7 +353,6 @@ int handler(request_rec *r) { const int postConfigMerge(const ServerConf& mainsc, server_rec* s) { if (s == NULL) return OK; - ostringstream sname; debug(httpd::serverName(s), "modwiring::postConfigMerge::serverName"); ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring); sc.contributionPath = mainsc.contributionPath; @@ -364,10 +376,8 @@ int postConfig(unused apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t return OK; // Configure the wiring for the deployed components - ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring); debug(httpd::serverName(s), "modwiring::postConfig::serverName"); - debug(sc.contributionPath, "modwiring::postConfig::contributionPath"); - debug(sc.compositeName, "modwiring::postConfig::compositeName"); + ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring); confComponents(sc); // Merge the config into any virtual hosts diff --git a/sca-cpp/trunk/modules/server/server-conf b/sca-cpp/trunk/modules/server/server-conf index cff1ab1965..359a8ebc16 100755 --- a/sca-cpp/trunk/modules/server/server-conf +++ b/sca-cpp/trunk/modules/server/server-conf @@ -21,25 +21,9 @@ here=`readlink -f $0`; here=`dirname $here` root=`readlink -f $1` -servername=`cat $root/conf/httpd.conf | grep ServerName | tail -1 | awk '{ print $2 }'` -host=`echo $servername | awk -F ":" '{ printf "%s:%s", $1, $2 }'` -port=`cat $root/conf/httpd.conf | grep Listen | tail -1 | awk '{ print $2 }'` - -ssl=`cat $root/conf/httpd.conf | grep "SSLEngine" | awk '{ print $2 }'` -if [ "$ssl" = "on" ]; then -cat >>$root/conf/httpd.conf <<EOF -# Configure SCA SSL support -SCASSLCACertificateFile "$root/conf/ca.crt" -SCASSLCertificateFile "$root/conf/server.crt" -SCASSLCertificateKeyFile "$root/conf/server.key" - -EOF -fi - cat >>$root/conf/httpd.conf <<EOF # Support for SCA component wiring LoadModule mod_tuscany_wiring $here/libmod_tuscany_wiring.so -#SCAWiringServerName $host:$port # Serve HTTP binding JavaScript client code Alias /js/tuscany-ref.js $here/htdocs/js/tuscany-ref.js |