changeset 602:783a1a5e51b2

mod_audiodb now uses apache config correctly. * Added DatabasePath to apache config * Replaced return codes with DECLINED and logging * General tidying
author mas01mj
date Mon, 17 Aug 2009 15:36:31 +0000
parents 82d23418d867
children 1133c0d6760d
files sparql/mod_audiodb/mod_audiodb.c
diffstat 1 files changed, 58 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/sparql/mod_audiodb/mod_audiodb.c	Fri Aug 14 16:39:32 2009 +0000
+++ b/sparql/mod_audiodb/mod_audiodb.c	Mon Aug 17 15:36:31 2009 +0000
@@ -1,8 +1,10 @@
 
-#include <httpd.h>
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_log.h"
+#include "http_protocol.h"
 #include <ap_config.h>
-#include <http_config.h>
-#include <http_protocol.h>
 #include <apr_strings.h>
 #include <librdf.h>
 #include <apreq_module.h>
@@ -15,18 +17,49 @@
 #define JSON_URI "http://www.w3.org/2001/sw/DataAccess/json-sparql/"
 #define SPARQL_URI "http://www.w3.org/TR/2006/WD-rdf-sparql-XMLres-20070614/"
 
-static int log_out(void *user_data, librdf_log_message *message)
-{
+module AP_MODULE_DECLARE_DATA audiodb_module;
+
+typedef struct {
+	char *dbpath;
+} adb_config;
+
+/**
+ * Config bits and pieces
+ **/
+
+static void *create_audiodb_config(apr_pool_t* p, server_rec* s) {
+	adb_config *config = (adb_config *)apr_pcalloc(p, sizeof(adb_config));
+	config->dbpath = NULL;
+	return config;
+}
+
+static const char* set_database_path(cmd_parms *parms, void *mconfig, const char *arg) {
+	adb_config *config = ap_get_module_config(parms->server->module_config, &audiodb_module);
+	config->dbpath = (char *)arg;
+	return NULL;
+}
+
+static const command_rec mod_audiodb_cmds[] = {
+
+	AP_INIT_TAKE1("DatabasePath", set_database_path, NULL, RSRC_CONF, "The AudioDB database to use"),
+	{NULL}
+};
+
+static int log_message(void *user_data, librdf_log_message *message) {
 	fprintf(stderr, "%s\n", librdf_log_message_message(message));
 	fflush(stderr);
 	return 1;
 }
 
+
 static int adb_handle_sparql_req(request_rec *r) {
 	if(strcmp(r->handler, "audiodb-sparql-handler") != 0) {
 		return DECLINED;
 	}
 
+	adb_config* config = ap_get_module_config(r->server->module_config,
+		&audiodb_module);
+
 	r->content_type = "text/plain";
 	r->status = OK;
 	r->status_line = "200 OK";
@@ -45,36 +78,42 @@
 	if(!output)
 		output = "xml";
 
-	int rc = 0;
 	librdf_world* world = librdf_new_world();
 	librdf_world_open(world);
-	librdf_world_set_logger(world, NULL, log_out);
-	librdf_storage* storage = librdf_new_storage(world, "audiodb", "/tmp/test_database.adb", NULL);
+	librdf_world_set_logger(world, NULL, log_message);
+
+	if(!config->dbpath)
+	{
+		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, "DatabasePath is required");
+		return DECLINED;
+	}	
+
+	librdf_storage* storage = librdf_new_storage(world, "audiodb", config->dbpath, NULL);
 	if(!storage)
 	{
-		rc = 2;
-		goto error;
+		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, "Unable to open audioDB: %s", config->dbpath);
+		return DECLINED;
 	}
 
 	librdf_model *model;
 	if (!(model = librdf_new_model(world, storage, NULL)))
 	{
-		rc = 5;	
-		goto error;
+		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, "Unable to create model");
+		return DECLINED;
 	}
 
 	librdf_query *query;
 	if (!(query = librdf_new_query(world, "sparql", NULL, (unsigned char*)query_string, NULL)))
 	{
-		rc = 3;
-		goto error;
+		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, "Unable to parse query");
+		return DECLINED;
 	}
 
 	librdf_query_results *results;
 	if (!(results = librdf_query_execute(query, model)))
 	{
-		rc = 4;
-		goto error;
+		ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r, "Unable to execute query");
+		return DECLINED;
 	}
 
 
@@ -93,12 +132,8 @@
 	librdf_free_world(world);
 	ap_rprintf(r, out); 
 
-	rc = 0;
-	return r->status;
+	return OK; 
 
-	error:
-		ap_rprintf(r, "Fail %d", rc);
-		return OK;
 }
 
 static void mod_audiodb_register_hooks (apr_pool_t *p) {
@@ -109,8 +144,8 @@
 	STANDARD20_MODULE_STUFF,
 	NULL,
 	NULL,
+	create_audiodb_config,
 	NULL,
-	NULL,
-	NULL,
+	mod_audiodb_cmds,
 	mod_audiodb_register_hooks,
 };