4 #include <readline/readline.h>
5 #include "opensrf/utils.h"
6 #include "opensrf/osrf_system.h"
7 #include "opensrf/osrf_app_session.h"
8 #include "openils/fieldmapper_lookup.h"
9 #include "openils/oils_event.h"
10 #include "openils/oils_utils.h"
13 char* authtoken = NULL;
15 int do_request( char* request );
16 char* format_response( jsonObject* o );
18 int main( int argc, char* argv[] ) {
21 char* username = NULL;
22 char* password = NULL;
27 while( (c = getopt( argc, argv, "f:u:p:s:c:" )) != -1 ) {
30 case 'f': config = strdup(optarg);
31 case 'c': context = strdup(optarg);
32 case 'u': username = strdup(optarg);
33 case 'p': password = strdup(optarg);
34 case 's': script = strdup(optarg);
38 if(!(config && context)) {
39 fprintf(stderr, "Config or config context not provided. Exiting...\n");
43 if( ! osrf_system_bootstrap_client(config, context) ) {
44 fprintf(stderr, "Unable to connect to OpenSRF network...\n");
48 printf("Connected to OpenSRF network...\n");
50 if( username && password &&
51 ( authtoken = oilsUtilsLogin(username, password, "staff", -1 )) ) {
52 printf("Login Session: %s\n", authtoken);
55 while((request=readline("oils# ")))
56 if(do_request(request)) break;
63 int do_request( char* request ) {
65 if(!strcasecmp(request, "exit") || !strcasecmp(request,"quit"))
68 if(!strcmp(request,"")) return 0;
74 growing_buffer* buffer = buffer_init(256);
76 service = strtok_r(request, " ", &tmp);
77 method = strtok_r(NULL, " ", &tmp);
78 while( (item = strtok_r(NULL, " ", &tmp)) )
79 buffer_fadd(buffer, "%s", item);
81 if( service && method ) {
83 jsonObject* params = NULL;
84 if(buffer->n_used > 0)
85 params = jsonParseString("[%s]", buffer->buf);
87 osrfAppSession* session = osrf_app_client_session_init(service);
88 int req_id = osrf_app_session_make_req( session, params, method, 1, NULL );
91 while( (omsg = osrfAppSessionRequestRecv( session, req_id, 120 )) ) {
92 jsonObject* res = osrfMessageGetResult(omsg);
93 char* data = format_response(res);
94 printf("\n%s\n", data);
96 osrfMessageFree(omsg);
99 osrfAppSessionFree(session);
100 jsonObjectFree(params);
103 fprintf(stderr, "STATMENT DOES NOT PARSE: %s\n", request);
111 char* format_response( jsonObject* o ) {
116 if( o->classname && isFieldmapper(o->classname) ) {
120 growing_buffer* buffer = buffer_init(256);
122 buffer_fadd(buffer, " FM Class: %s\n", o->classname);
124 while( (key = fm_pton(o->classname, i++)) ) {
125 char* val = oilsFMGetString(o, key);
128 int l = strlen(key + 2);
129 buffer_fadd(buffer, " %s: ", key);
133 while( l++ < width ) buffer_add(buffer, "-");
134 buffer_fadd(buffer, " %s\n", val);
137 } else if( (item = oilsFMGetObject(o, key))) {
139 if(item->type != JSON_NULL ) {
140 char* d = format_response(item);
141 buffer_add(buffer, "\n====================================\n");
142 buffer_fadd(buffer, "%s\n", d);
143 buffer_add(buffer, "====================================\n");
146 while( l++ < width ) buffer_add(buffer, "-");
147 buffer_add(buffer," NULL \n");
152 while( l++ < width ) buffer_add(buffer, "-");
153 buffer_add(buffer," NULL \n");
159 char* data = buffer_data(buffer);
165 if( o->type == JSON_ARRAY ) {
167 growing_buffer* arrb = buffer_init(256);
168 for( i = 0; i != o->size; i++ ) {
169 char* d = format_response(jsonObjectGetIndex(o, i));
170 buffer_fadd(arrb, "%s\n", d);
173 jjson = buffer_data(arrb);
177 char* json = jsonObjectToJSON(o);
178 jjson = jsonFormatString(json);