annotate 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
rev   line source
mas01mj@584 1
mas01mj@584 2 #include <httpd.h>
mas01mj@584 3 #include <ap_config.h>
mas01mj@584 4 #include <http_config.h>
mas01mj@584 5 #include <http_protocol.h>
mas01mj@584 6 #include <apr_strings.h>
mas01mj@584 7 #include <librdf.h>
mas01mj@584 8 #include <apreq_module.h>
mas01mj@584 9 #include <apreq_parser.h>
mas01mj@584 10 #include <apreq_param.h>
mas01mj@584 11 #include "apreq2/apreq_module_apache2.h"
mas01mj@584 12
mas01mj@584 13 static int ap_dump_table(void *baton, const char *key, const char *value)
mas01mj@584 14 {
mas01mj@584 15 if (key && value)
mas01mj@584 16 fprintf(stderr, "%s:%s\n", key, value);
mas01mj@584 17 fflush(stderr);
mas01mj@584 18 return 1;
mas01mj@584 19 }
mas01mj@584 20
mas01mj@584 21 static int log_out(void *user_data, librdf_log_message *message)
mas01mj@584 22 {
mas01mj@584 23 fprintf(stderr, "%s\n", librdf_log_message_message(message));
mas01mj@584 24 fflush(stderr);
mas01mj@584 25 return 1;
mas01mj@584 26 }
mas01mj@584 27
mas01mj@584 28 static int adb_handle_sparql_req(request_rec *r) {
mas01mj@584 29 if(strcmp(r->handler, "audiodb-sparql-handler") != 0) {
mas01mj@584 30 return DECLINED;
mas01mj@584 31 }
mas01mj@584 32
mas01mj@584 33 r->content_type = "text/plain";
mas01mj@584 34 r->status = OK;
mas01mj@584 35 r->status_line = "200 OK";
mas01mj@584 36
mas01mj@584 37 if(!r->args) {
mas01mj@584 38 r->args = "";
mas01mj@584 39 }
mas01mj@584 40
mas01mj@584 41 const apr_table_t *form_table;
mas01mj@584 42 apreq_handle_t *h = apreq_handle_apache2(r);
mas01mj@584 43 if(apreq_args(h, &form_table) != APR_SUCCESS)
mas01mj@584 44 return DECLINED;
mas01mj@584 45
mas01mj@584 46 const unsigned char *query_string = apr_table_get(form_table, "query");
mas01mj@584 47
mas01mj@584 48 int rc = 0;
mas01mj@584 49
mas01mj@584 50 librdf_world* world = librdf_new_world();
mas01mj@584 51 if(!world)
mas01mj@584 52 {
mas01mj@584 53 rc = 1;
mas01mj@584 54 goto error;
mas01mj@584 55 }
mas01mj@584 56
mas01mj@584 57
mas01mj@584 58 librdf_world_open(world);
mas01mj@584 59 librdf_world_set_logger(world, NULL, log_out);
mas01mj@584 60 librdf_storage* storage = librdf_new_storage(world, "audiodb", "/tmp/test.adb", "new='yes'");
mas01mj@584 61 if(!storage)
mas01mj@584 62 {
mas01mj@584 63 rc = 2;
mas01mj@584 64 goto error;
mas01mj@584 65 }
mas01mj@584 66
mas01mj@584 67 librdf_model *model;
mas01mj@584 68 if (!(model = librdf_new_model(world, storage, NULL)))
mas01mj@584 69 {
mas01mj@584 70 rc = 5;
mas01mj@584 71 goto error;
mas01mj@584 72 }
mas01mj@584 73
mas01mj@584 74 librdf_query *query;
mas01mj@584 75 if (!(query = librdf_new_query(world, "sparql", NULL, query_string, NULL)))
mas01mj@584 76 {
mas01mj@584 77 rc = 3;
mas01mj@584 78 goto error;
mas01mj@584 79 }
mas01mj@584 80
mas01mj@584 81 librdf_query_results *results;
mas01mj@584 82 if (!(results = librdf_query_execute(query, model)))
mas01mj@584 83 {
mas01mj@584 84 rc = 4;
mas01mj@584 85 goto error;
mas01mj@584 86 }
mas01mj@584 87
mas01mj@584 88 ap_rprintf(r, "Everything went awesomely!");
mas01mj@584 89
mas01mj@584 90 rc = 0;
mas01mj@584 91 return r->status;
mas01mj@584 92
mas01mj@584 93 error:
mas01mj@584 94 ap_rprintf(r, "Fail %d", rc);
mas01mj@584 95 return OK;
mas01mj@584 96 }
mas01mj@584 97
mas01mj@584 98 static void mod_audiodb_register_hooks (apr_pool_t *p) {
mas01mj@584 99 ap_hook_handler(adb_handle_sparql_req, NULL, NULL, APR_HOOK_FIRST);
mas01mj@584 100 }
mas01mj@584 101
mas01mj@584 102 module AP_MODULE_DECLARE_DATA audiodb_module = {
mas01mj@584 103 STANDARD20_MODULE_STUFF,
mas01mj@584 104 NULL,
mas01mj@584 105 NULL,
mas01mj@584 106 NULL,
mas01mj@584 107 NULL,
mas01mj@584 108 NULL,
mas01mj@584 109 mod_audiodb_register_hooks,
mas01mj@584 110 };