view sparql/mod_audiodb/mod_audiodb.c @ 584:e3790284fd4a

Merged through librdf storage hooks and apache2 module. Squashed commit of the following: commit a6cfca8f04036e12e7d7fcd55c47224e802582f0 Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:23:32 2009 +0100 Removed leftover bits and bobs. commit f1f0dd074d0767de3e24ba636779fd8701d73d9e Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:07:20 2009 +0100 Simple test of database creation via librdf. commit 90e6350538e004d8785137e5ff2ac878c22a5d42 Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:05:10 2009 +0100 Added the apache2 module which will hook into the librdf storage module commit c75bf53763b7078c83ae97fcf247da2576baa79a Author: Michael Jewell <mjewell@harrison.(none)> Date: Fri Jul 31 15:04:53 2009 +0100 Added sparql librdf source - requires the librdf sources to compile. commit 0646f0190112a73ddb2533537e2cc9832c066b52 Author: Michael Jewell <mjewell@harrison.(none)> Date: Mon Jul 27 12:12:26 2009 +0100 Adding execution to mod_audiodb commit 8f83f27ba4d917278bca0c7cb665d930e28c86df Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:15:57 2009 +0100 Some initial returns for the sparql handler. commit dc639aed11943a5b0c379eb47cf293f76908b1b7 Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:06:20 2009 +0100 Added a little setup.sh script to do libtoolize/autoconf etc. commit 3a679da499db647fc82cf2797daeb5cc44ed7655 Author: Michael Jewell <mjewell@harrison.(none)> Date: Wed Jul 22 12:03:42 2009 +0100 Adding initial bits for apache mod
author mas01mj
date Fri, 31 Jul 2009 14:36:12 +0000
parents
children c6debbac3216
line wrap: on
line source

#include <httpd.h>
#include <ap_config.h>
#include <http_config.h>
#include <http_protocol.h>
#include <apr_strings.h>
#include <librdf.h>
#include <apreq_module.h>
#include <apreq_parser.h>
#include <apreq_param.h>
#include "apreq2/apreq_module_apache2.h"

static int ap_dump_table(void *baton, const char *key, const char *value)
{
    if (key && value)
        fprintf(stderr, "%s:%s\n", key, value);
    fflush(stderr);
    return 1;
}

static int log_out(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;
	}

	r->content_type = "text/plain";
	r->status = OK;
	r->status_line = "200 OK";

	if(!r->args) {
		r->args = "";
	}

	const apr_table_t *form_table;
	apreq_handle_t *h = apreq_handle_apache2(r);
	if(apreq_args(h, &form_table) != APR_SUCCESS)
		return DECLINED;

	const unsigned char *query_string = apr_table_get(form_table, "query");

	int rc = 0;

	librdf_world* world = librdf_new_world();
	if(!world)
	{
		rc = 1;
		goto error;
	}


	librdf_world_open(world);
	librdf_world_set_logger(world, NULL, log_out);
	librdf_storage* storage = librdf_new_storage(world, "audiodb", "/tmp/test.adb", "new='yes'");
	if(!storage)
	{
		rc = 2;
		goto error;
	}

	librdf_model *model;
	if (!(model = librdf_new_model(world, storage, NULL)))
	{
		rc = 5;	
		goto error;
	}

	librdf_query *query;
	if (!(query = librdf_new_query(world, "sparql", NULL, query_string, NULL)))
	{
		rc = 3;
		goto error;
	}

	librdf_query_results *results;
	if (!(results = librdf_query_execute(query, model)))
	{
		rc = 4;
		goto error;
	}

	ap_rprintf(r, "Everything went awesomely!");

	rc = 0;
	return r->status;

	error:
		ap_rprintf(r, "Fail %d", rc);
		return OK;
}

static void mod_audiodb_register_hooks (apr_pool_t *p) {
	ap_hook_handler(adb_handle_sparql_req, NULL, NULL, APR_HOOK_FIRST);
}

module AP_MODULE_DECLARE_DATA audiodb_module = {
	STANDARD20_MODULE_STUFF,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	mod_audiodb_register_hooks,
};