mas01mj@584: mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include mas01mj@584: #include "apreq2/apreq_module_apache2.h" mas01mj@584: mas01mj@584: static int ap_dump_table(void *baton, const char *key, const char *value) mas01mj@584: { mas01mj@584: if (key && value) mas01mj@584: fprintf(stderr, "%s:%s\n", key, value); mas01mj@584: fflush(stderr); mas01mj@584: return 1; mas01mj@584: } mas01mj@584: mas01mj@584: static int log_out(void *user_data, librdf_log_message *message) mas01mj@584: { mas01mj@584: fprintf(stderr, "%s\n", librdf_log_message_message(message)); mas01mj@584: fflush(stderr); mas01mj@584: return 1; mas01mj@584: } mas01mj@584: mas01mj@584: static int adb_handle_sparql_req(request_rec *r) { mas01mj@584: if(strcmp(r->handler, "audiodb-sparql-handler") != 0) { mas01mj@584: return DECLINED; mas01mj@584: } mas01mj@584: mas01mj@584: r->content_type = "text/plain"; mas01mj@584: r->status = OK; mas01mj@584: r->status_line = "200 OK"; mas01mj@584: mas01mj@584: if(!r->args) { mas01mj@584: r->args = ""; mas01mj@584: } mas01mj@584: mas01mj@584: const apr_table_t *form_table; mas01mj@584: apreq_handle_t *h = apreq_handle_apache2(r); mas01mj@584: if(apreq_args(h, &form_table) != APR_SUCCESS) mas01mj@584: return DECLINED; mas01mj@584: mas01mj@584: const unsigned char *query_string = apr_table_get(form_table, "query"); mas01mj@584: mas01mj@584: int rc = 0; mas01mj@584: mas01mj@584: librdf_world* world = librdf_new_world(); mas01mj@584: if(!world) mas01mj@584: { mas01mj@584: rc = 1; mas01mj@584: goto error; mas01mj@584: } mas01mj@584: mas01mj@584: mas01mj@584: librdf_world_open(world); mas01mj@584: librdf_world_set_logger(world, NULL, log_out); mas01mj@584: librdf_storage* storage = librdf_new_storage(world, "audiodb", "/tmp/test.adb", "new='yes'"); mas01mj@584: if(!storage) mas01mj@584: { mas01mj@584: rc = 2; mas01mj@584: goto error; mas01mj@584: } mas01mj@584: mas01mj@584: librdf_model *model; mas01mj@584: if (!(model = librdf_new_model(world, storage, NULL))) mas01mj@584: { mas01mj@584: rc = 5; mas01mj@584: goto error; mas01mj@584: } mas01mj@584: mas01mj@584: librdf_query *query; mas01mj@584: if (!(query = librdf_new_query(world, "sparql", NULL, query_string, NULL))) mas01mj@584: { mas01mj@584: rc = 3; mas01mj@584: goto error; mas01mj@584: } mas01mj@584: mas01mj@584: librdf_query_results *results; mas01mj@584: if (!(results = librdf_query_execute(query, model))) mas01mj@584: { mas01mj@584: rc = 4; mas01mj@584: goto error; mas01mj@584: } mas01mj@584: mas01mj@584: ap_rprintf(r, "Everything went awesomely!"); mas01mj@584: mas01mj@584: rc = 0; mas01mj@584: return r->status; mas01mj@584: mas01mj@584: error: mas01mj@584: ap_rprintf(r, "Fail %d", rc); mas01mj@584: return OK; mas01mj@584: } mas01mj@584: mas01mj@584: static void mod_audiodb_register_hooks (apr_pool_t *p) { mas01mj@584: ap_hook_handler(adb_handle_sparql_req, NULL, NULL, APR_HOOK_FIRST); mas01mj@584: } mas01mj@584: mas01mj@584: module AP_MODULE_DECLARE_DATA audiodb_module = { mas01mj@584: STANDARD20_MODULE_STUFF, mas01mj@584: NULL, mas01mj@584: NULL, mas01mj@584: NULL, mas01mj@584: NULL, mas01mj@584: NULL, mas01mj@584: mod_audiodb_register_hooks, mas01mj@584: };