]> git.evergreen-ils.org Git - working/Evergreen.git/blob - OpenSRF/src/libstack/osrf_settings.c
forgot to add these...
[working/Evergreen.git] / OpenSRF / src / libstack / osrf_settings.c
1 #include "osrf_settings.h" 
2
3 osrf_host_config* config = NULL;
4
5 char* osrf_settings_host_value(char* format, ...) {
6
7         /* grab the format string ---------------- */
8         long len = 0;
9         va_list args;
10         va_list a_copy;
11
12         va_copy(a_copy, args);
13
14         va_start(args, format);
15         len = va_list_size(format, args);
16         char buf[len];
17         memset(buf, 0, len);
18
19         va_start(a_copy, format);
20         vsnprintf(buf, len - 1, format, a_copy);
21         va_end(a_copy);
22         /* -------------------------------------- */
23
24         object* o = object_find_path(config->config, buf);
25
26         char* val = NULL;
27         if(o && o->is_string && o->string_data) {
28                 val = strdup(o->string_data);
29                 free_object(o);
30         }       
31
32         return val;
33 }
34
35 object* osrf_settings_host_value_object(char* format, ...) {
36
37         /* grab the format string ---------------- */
38         long len = 0;
39         va_list args;
40         va_list a_copy;
41
42         va_copy(a_copy, args);
43
44         va_start(args, format);
45         len = va_list_size(format, args);
46         char buf[len];
47         memset(buf, 0, len);
48
49         va_start(a_copy, format);
50         vsnprintf(buf, len - 1, format, a_copy);
51         va_end(a_copy);
52         /* -------------------------------------- */
53
54         return object_find_path(config->config, buf);
55 }
56
57
58 int osrf_settings_retrieve(char* hostname) {
59
60         if(!config) {
61
62                 osrf_app_session* session = osrf_app_client_session_init("opensrf.settings");
63                 object* params = new_object(hostname);
64                 int req_id = osrf_app_session_make_req( session, params, "opensrf.settings.host_config.get", 1, NULL );
65                 osrf_message* omsg = osrf_app_session_request_recv( session, req_id, 60 );
66                 free_object(params);
67
68                 if(omsg && omsg->_result_content) {
69                         config = osrf_settings_new_host_config(hostname);
70                         config->config = object_clone(omsg->_result_content);
71                         osrf_message_free(omsg);
72                 }
73
74                 osrf_app_session_request_finish( session, req_id );
75                 osrf_app_session_destroy( session );
76
77                 if(!config)
78                         return fatal_handler("Unable to load config for host %s", hostname);
79         }
80
81         return 0;
82 }
83
84 osrf_host_config* osrf_settings_new_host_config(char* hostname) {
85         if(!hostname) return NULL;
86         osrf_host_config* c = safe_malloc(sizeof(osrf_host_config));
87         c->hostname = strdup(hostname);
88         return c;
89 }
90
91 void osrf_settings_free_host_config(osrf_host_config* c) {
92         if(!c) c = config;
93         if(!c) return;
94         free(c->hostname);
95         free_object(c->config); 
96         free(c);
97 }