]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/c-apps/oils_event.c
Added new C event code for handling the auth login events
[Evergreen.git] / Open-ILS / src / c-apps / oils_event.c
1 #include "oils_event.h"
2 #include <libxml/parser.h>
3 #include <libxml/tree.h>
4
5 osrfHash* __oilsEventEvents = NULL;
6
7 oilsEvent* oilsNewEvent( char* event ) {
8         if(!event) return NULL;
9         if(!__oilsEventEvents) _oilsEventParseEvents();
10         oilsEvent* evt =  (oilsEvent*) safe_malloc(sizeof(oilsEvent));
11         evt->event = strdup(event);
12         evt->permloc = -1;
13         return evt;
14 }
15
16 oilsEvent* oilsNewEvent2( char* event, jsonObject* payload ) {
17         oilsEvent* evt = oilsNewEvent(event);
18         oilsEventSetPayload(evt, payload);
19         return evt;
20 }
21
22 oilsEvent* oilsNewEvent3( char* event, char* perm, int permloc ) {
23         oilsEvent* evt = oilsNewEvent(event);
24         oilsEventSetPermission( evt, perm, permloc );
25         return evt;
26 }
27
28 oilsEvent* oilsNewEvent4( char* event, char* perm, int permloc, jsonObject* payload ) {
29         oilsEvent* evt = oilsNewEvent3( event, perm, permloc );
30         if(evt) oilsEventSetPayload( evt, payload );
31         return evt;
32 }
33
34 void oilsEventSetPermission( oilsEvent* event, char* perm, int permloc ) {
35         if(!(event && perm)) return;
36         event->perm = strdup(perm);
37         event->permloc = permloc;
38 }
39
40 void oilsEventSetPayload( oilsEvent* event, jsonObject* payload ) {
41         if(!(event && payload)) return;
42         event->payload = jsonObjectClone(payload);
43 }
44
45
46 void oilsEventFree( oilsEvent* event ) {
47         if(!event) return;
48         free(event->perm);
49         if(event->json) jsonObjectFree(event->json);
50         else jsonObjectFree(event->payload);
51         free(event);
52 }
53
54
55 jsonObject* oilsEventToJSON( oilsEvent* event ) {
56         if(!event) return NULL;
57         char* code = osrfHashGet( __oilsEventEvents, event->event );
58
59         if(!code) {
60                 osrfLogError( "No such event name: %s", event->event );
61                 return NULL;
62         }
63
64         jsonObject* json = jsonNewObject(NULL);
65         jsonObjectSetKey( json, "ilsevent", jsonNewNumberObject(atoi(code)) );
66         jsonObjectSetKey( json, "textcode", jsonNewObject(event->event) );
67
68         if(event->perm) jsonObjectSetKey( json, "ilsperm", jsonNewObject(event->perm) );
69         if(event->permloc != -1) jsonObjectSetKey( json, "ilspermloc", jsonNewNumberObject(event->permloc) );
70         if(event->payload) jsonObjectSetKey( json, "payload", event->payload );
71         event->json = json;
72         return json;
73 }
74
75
76 void _oilsEventParseEvents() {
77         
78         char* xml = "/openils/var/data/ils_events.xml"; /* get me from the settings client */
79
80         xmlDocPtr doc = xmlParseFile(xml);
81         int success = 0;
82         __oilsEventEvents = osrfNewHash();
83
84         if( doc ) {
85                 xmlNodePtr root = xmlDocGetRootElement(doc);
86                 if( root ) {
87                         xmlNodePtr child = root->children;
88                         //osrfLogDebug("Node Name: %s", child->name);
89                         while( child ) {
90                                 if( !strcmp((char*) child->name, "event") ) {
91                                         xmlChar* code = xmlGetProp( child, BAD_CAST "code");
92                                         xmlChar* textcode = xmlGetProp( child, BAD_CAST "textcode");
93                                         if( code && textcode ) {
94                                                 osrfHashSet( __oilsEventEvents, code, textcode );
95                                                 success = 1;
96                                                 osrfLogDebug("Loading OILS Event: %s => %s", 
97                                                                 textcode, osrfHashGet( __oilsEventEvents, textcode) );
98                                         }
99                                 }
100                                 child = child->next;
101                         }
102                 }
103         }
104
105         if(!success) osrfLogError( " ! Unable to parse events file: %s", xml );
106 }
107
108