removed all of the old libjson dependencies
authorerickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Fri, 15 Jul 2005 15:18:36 +0000 (15:18 +0000)
committererickson <erickson@9efc2488-bf62-4759-914b-345cdb29e865>
Fri, 15 Jul 2005 15:18:36 +0000 (15:18 +0000)
added some objson methods

git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@395 9efc2488-bf62-4759-914b-345cdb29e865

17 files changed:
src/Makefile
src/gateway/Makefile
src/gateway/mod_ils_gateway.c
src/libstack/Makefile
src/libstack/osrf_app_session.c
src/libstack/osrf_app_session.h
src/libstack/osrf_message.c
src/libstack/osrf_message.h
src/libtransport/Makefile
src/objson/json_parser.c
src/objson/object.c
src/objson/object.h
src/router/Makefile
src/router/router.c
src/srfsh/Makefile
src/srfsh/srfsh.c
src/srfsh/srfsh.h

index 24836e3..02a962a 100644 (file)
@@ -28,7 +28,7 @@ test: test
 
 install: install-prep transport-install stack-install gateway-install  \
                router-install srfsh-install jserver-install perl-install                       \
-               libjson-install objson-install utils-install bin-install info
+               objson-install utils-install bin-install info
 
 prep:
        mkdir -p $(TMPDIR)
@@ -49,11 +49,7 @@ objson: c_utils
        @echo -e "\n + objson"
        make -C objson
 
-json: prep
-       @echo -e "\n + libjson"
-       make -C libjson
-
-stack: json objson transport 
+stack: objson transport 
        @echo -e "\n + stack"
        make -C libstack
 
@@ -92,16 +88,13 @@ install-prep:       install-prep
 transport-install:     install-prep utils-install
        make -C libtransport install
 
-libjson-install:       install-prep
-       make -C libjson install
-
 utils-install: install-prep
        make -C utils install
 
 objson-install:        install-prep utils-install
        make -C objson install
 
-stack-install: install-prep transport-install libjson-install objson-install
+stack-install: install-prep transport-install  objson-install
        make -C libstack install
 
 gateway-install:       install-prep stack-install      
@@ -145,14 +138,12 @@ info:
 clean:
        @echo "Cleaning..."
        make -C libtransport clean
-       make -C libjson clean
        make -C libstack clean
        make -C router clean
        make -C gateway clean
        make -C jserver clean
        make -C utils clean
        make -C objson clean
-       make -C libjson clean
        make -C srfsh clean
        /bin/rm -rf $(TMPDIR)
 
index 75d7279..6af77eb 100644 (file)
@@ -1,5 +1,5 @@
 CC_OPTS        += -DASSUME_STATELESS
-LD_OPTS        += -lc_utils -lobjson -lxml2 -lopensrf_transport -lopensrf_stack -ljson 
+LD_OPTS        += -lc_utils -lobjson -lxml2 -lopensrf_transport -lopensrf_stack 
 
 all: libmod_ils_gateway.so
 
index 71fa0df..e6f15e9 100644 (file)
@@ -34,6 +34,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #include "opensrf/osrf_app_session.h"
 #include "opensrf/string_array.h"
 #include "md5.h"
+#include "objson/object.h"
+#include "objson/json_parser.h"
 
 /*
  * This function is registered as a handler for HTTP methods and will
@@ -162,7 +164,8 @@ static int mod_ils_gateway_method_handler (request_rec *r) {
        char* service                                   = NULL; /* service to connect to */
        char* method                                    = NULL; /* method to perform */
 
-       json* exception                         = NULL; /* returned in error conditions */
+       //json* exception                               = NULL; /* returned in error conditions */
+       object* exception                               = NULL; /* returned in error conditions */
        string_array* sarray                    = init_string_array(12); /* method parameters */
 
        growing_buffer* buffer          = NULL; /* POST data */
@@ -290,7 +293,7 @@ static int mod_ils_gateway_method_handler (request_rec *r) {
        }
        */
 
-       int req_id = osrf_app_session_make_request( session, NULL, method, 1, sarray );
+       int req_id = osrf_app_session_make_req( session, NULL, method, 1, sarray );
        string_array_destroy(sarray);
 
        osrf_message* omsg = NULL;
@@ -321,10 +324,15 @@ static int mod_ils_gateway_method_handler (request_rec *r) {
                        buffer_add( exc_buffer, code );
 
                        /* build the exception object */
+                       /*
                        exception = json_object_new_object();
                        json_object_object_add( exception, "is_err", json_object_new_int(1));
                        json_object_object_add( exception, 
                                        "err_msg", json_object_new_string(exc_buffer->buf));
+                                       */
+                       exception = json_parse_string("{}");
+                       exception->add_key(exception, "is_err", json_parse_string("1"));
+                       exception->add_key(exception, "err_msg", json_parse_string(exc_buffer->buf));
 
                        warning_handler("*** Looks like we got a "
                                        "server exception\n%s", exc_buffer->buf );
@@ -350,8 +358,10 @@ static int mod_ils_gateway_method_handler (request_rec *r) {
 
        /* round up our data */
        if(exception) {
-               content = strdup(json_object_to_json_string(exception));
-               json_object_put(exception);
+               //content = strdup(json_object_to_json_string(exception));
+               //json_object_put(exception);
+               content = strdup(exception->to_json(exception));
+               free_object(exception);
        } else 
                content = buffer_data(result_data); 
        
index 7eea68b..744ad35 100644 (file)
@@ -1,5 +1,5 @@
 CC_OPTS                +=  -DASSUME_STATELESS
-EXE_LD_OPTS += -lxml2 -lopensrf_transport  -lopensrf_stack -lobjson -ljson -lc_utils
+EXE_LD_OPTS += -lxml2 -lopensrf_transport  -lopensrf_stack -lobjson -lc_utils
 
 SOURCES = osrf_message.c osrf_app_session.c osrf_stack.c osrf_system.c osrf_config.c
 TARGETS = osrf_message.o osrf_app_session.o osrf_stack.o osrf_system.o osrf_config.o
index 673af7e..ce12700 100644 (file)
@@ -323,6 +323,7 @@ void _osrf_app_session_free( osrf_app_session* session ){
 }
 
 
+/*
 int osrf_app_session_make_request( 
                osrf_app_session* session, json* params, 
                char* method_name, int protocol, string_array* param_strings ) {
@@ -331,6 +332,38 @@ int osrf_app_session_make_request(
        osrf_message* req_msg = osrf_message_init( REQUEST, ++(session->thread_trace), protocol );
        osrf_message_set_request_info( req_msg,  method_name, params );
 
+       if(!req_msg->parse_json_params && param_strings) {
+               int i;
+               for(i = 0; i!= param_strings->size ; i++ ) {
+                       osrf_message_add_param(req_msg,
+                               string_array_get_string(param_strings,i));
+               }
+       }
+
+       osrf_app_request* req = _osrf_app_request_init( session, req_msg );
+       if(!_osrf_app_session_send( session, req_msg ) ) {
+               warning_handler( "Error sending request message [%d]", session->thread_trace );
+               return -1;
+       }
+
+       _osrf_app_session_push_request( session, req );
+       return req->request_id;
+}
+*/
+
+
+
+
+int osrf_app_session_make_req( 
+               osrf_app_session* session, object* params, 
+               char* method_name, int protocol, string_array* param_strings ) {
+       if(session == NULL) return -1;
+
+       osrf_message* req_msg = osrf_message_init( REQUEST, ++(session->thread_trace), protocol );
+       //osrf_message_set_request_info( req_msg,  method_name, params );
+       osrf_message_set_method(req_msg, method_name);
+       if(params) osrf_message_set_params(req_msg, params);
+
        /* if we're not parsing the json, shove the strings in manually */
        if(!req_msg->parse_json_params && param_strings) {
                int i;
@@ -350,6 +383,8 @@ int osrf_app_session_make_request(
        return req->request_id;
 }
 
+
+
 /** Adds an app_request to the request set */
 void _osrf_app_session_push_request( osrf_app_session* session, osrf_app_request* req ){
        if(session == NULL || req == NULL)
index de25dc4..0e016fb 100644 (file)
@@ -1,10 +1,12 @@
-#include "libjson/json.h"
 #include "opensrf/transport_client.h"
 #include "osrf_message.h"
 #include "osrf_system.h"
 #include "string_array.h"
 #include "osrf_config.h"
 
+#include "objson/object.h"
+#include "objson/json_parser.h"
+
 #ifndef OSRF_APP_SESSION
 #define OSRF_APP_SESSION
 
@@ -89,9 +91,17 @@ osrf_app_session* osrf_app_session_find_session( char* session_id );
   * the id of the request.  This id is then used to perform work on the
   * requeset.
   */
+
+
+int osrf_app_session_make_req( 
+               osrf_app_session* session, object* params, 
+               char* method_name, int protocol, string_array* param_strings);
+
+/*
 int osrf_app_session_make_request( 
                osrf_app_session* session, json* params, 
                char* method_name, int protocol, string_array* arr );
+               */
 
 /** Sets the given request to complete state */
 void osrf_app_session_set_complete( osrf_app_session* session, int request_id );
index 87d33c5..ff11052 100644 (file)
@@ -28,7 +28,8 @@ osrf_message* osrf_message_init( enum M_TYPE type, int thread_trace, int protoco
        msg->parse_json_result  = parse_json_result;
        msg->parse_json_params  = parse_json_params;
        msg->parray                                     = init_string_array(16); /* start out with a slot for 16 params. can grow */
-       msg->params                                     = NULL;
+       msg->_params                            = NULL;
+       msg->_result_content            = NULL;
 
        return msg;
 }
@@ -42,6 +43,7 @@ void osrf_message_set_json_parse_params( int ibool ) {
        parse_json_params = ibool;
 }
 
+/*
 void osrf_message_set_request_info( 
                osrf_message* msg, char* method_name, json* json_params ) {
 
@@ -60,6 +62,42 @@ void osrf_message_set_request_info(
 
        msg->method_name = strdup( method_name );
 }
+*/
+
+void osrf_message_set_method( osrf_message* msg, char* method_name ) {
+       if( msg == NULL || method_name == NULL ) return;
+       msg->method_name = strdup( method_name );
+}
+
+
+/* uses the object passed in directly, do not FREE! */
+void osrf_message_add_object_param( osrf_message* msg, object* o ) {
+       if(!msg|| !o) return;
+       if(msg->parse_json_params) {
+               if(!msg->_params)
+                       msg->_params = json_parse_string("[]");
+               msg->_params->push(msg->_params, json_parse_string(o->to_json(o)));
+       }
+}
+
+void osrf_message_set_params( osrf_message* msg, object* o ) {
+       if(!msg || !o) return;
+
+       char* j = object_to_json(o);
+       debug_handler("Setting params to\n%s", j);
+       free(j);
+
+       if(msg->parse_json_params) {
+               if(!o->is_array) {
+                       warning_handler("passing non-array to osrf_message_set_params()");
+                       return;
+               }
+               if(msg->_params) free_object(msg->_params);
+               char* j = o->to_json(o);
+               msg->_params = json_parse_string(j);
+               free(j);
+       }
+}
 
 
 /* only works of parse_json_params is false */
@@ -94,6 +132,7 @@ void osrf_message_set_result_content( osrf_message* msg, char* json_string ) {
        msg->result_string =    strdup(json_string);
 
        /* ----------------------------------------------------- */
+       /*
        object* o = json_parse_string(json_string);
        char* string = o->to_json(o);
        debug_handler("---------------------------------------------------");
@@ -103,17 +142,14 @@ void osrf_message_set_result_content( osrf_message* msg, char* json_string ) {
        debug_handler("---------------------------------------------------");
        free_object(o);
        free(string);
+       */
        /* ----------------------------------------------------- */
 
-       debug_handler( "Message Parse JSON is set to: %d",  msg->parse_json_result );
+       debug_handler( "Message Parse JSON result is set to: %d",  msg->parse_json_result );
 
        if(msg->parse_json_result) {
-               msg->result_content = json_tokener_parse(msg->result_string);
+               //msg->result_content = json_tokener_parse(msg->result_string);
                msg->_result_content = json_parse_string(msg->result_string);
-
-               char* j = object_to_json(msg->_result_content);
-               debug_handler("PARSE json result content %s", j);
-               free(j);
        } 
 }
 
@@ -129,8 +165,10 @@ void osrf_message_free( osrf_message* msg ) {
        if( msg->status_text != NULL )
                free(msg->status_text);
 
+       /*
        if( msg->result_content != NULL )
                json_object_put( msg->result_content );
+               */
 
        if( msg->_result_content != NULL )
                free_object( msg->_result_content );
@@ -141,8 +179,10 @@ void osrf_message_free( osrf_message* msg ) {
        if( msg->method_name != NULL )
                free(msg->method_name);
 
+       /*
        if( msg->params != NULL )
                json_object_put( msg->params );
+               */
 
        if( msg->_params != NULL )
                free_object(msg->_params);
@@ -250,7 +290,7 @@ char* osrf_message_to_xml( osrf_message* msg ) {
                                xmlSetProp( method_name_node, BAD_CAST "value", BAD_CAST msg->method_name );
 
                                if( msg->parse_json_params ) {
-                                       if( msg->params != NULL ) {
+                                       if( msg->_params != NULL ) {
 
                                                //char* jj = json_object_to_json_string( msg->params );
                                                char* jj = msg->_params->to_json(msg->_params); 
@@ -492,14 +532,14 @@ int osrf_message_from_xml( char* xml, osrf_message* msgs[] ) {
                                                        if( !strcmp((char*)meth_node->name,"params" ) && meth_node->children->content ) {
                                                                //new_msg->params = json_object_new_string( meth_node->children->content );
                                                                if( new_msg->parse_json_params) {
-                                                                       new_msg->params = json_tokener_parse(meth_node->children->content);
+                                                                       //new_msg->params = json_tokener_parse(meth_node->children->content);
                                                                        new_msg->_params = json_parse_string(meth_node->children->content);
                                                                } else {
                                                                        /* XXX this will have to parse the JSON to 
                                                                                grab the strings for full support! This should only be 
                                                                                necessary for server support of 
                                                                                non-json-param-parsing, though. Ugh. */
-                                                                       new_msg->params = json_tokener_parse(meth_node->children->content);
+                                                                       //new_msg->params = json_tokener_parse(meth_node->children->content);
                                                                        new_msg->_params = json_parse_string(meth_node->children->content);
                                                                }       
                                                        }
index 1104fb1..a49509c 100644 (file)
@@ -1,4 +1,3 @@
-#include "libjson/json.h"
 #include "string_array.h"
 #include "utils.h"
 #include "logging.h"
@@ -65,7 +64,7 @@ struct osrf_message_struct {
        int is_exception;
 
        /* if we're a RESULT */
-       json* result_content;
+       //json* result_content;
        object* _result_content;
 
        /* unparsed json string */
@@ -73,7 +72,7 @@ struct osrf_message_struct {
 
        /* if we're a REQUEST */
        char* method_name;
-       json* params;
+       //json* params;
        object* _params;
 
        /* in case anyone wants to make a list of us.  
@@ -88,7 +87,7 @@ typedef struct osrf_message_struct osrf_message;
 
 
 osrf_message* osrf_message_init( enum M_TYPE type, int thread_trace, int protocol );
-void osrf_message_set_request_info( osrf_message*, char* param_name, json* params );
+//void osrf_message_set_request_info( osrf_message*, char* param_name, json* params );
 void osrf_message_set_status_info( osrf_message*, char* status_name, char* status_text, int status_code );
 void osrf_message_set_result_content( osrf_message*, char* json_string );
 void osrf_message_free( osrf_message* );
@@ -107,6 +106,9 @@ void osrf_message_set_json_parse_result( int ibool );
 void osrf_message_set_json_parse_params( int ibool );
        
 
+void osrf_message_set_params( osrf_message* msg, object* o );
+void osrf_message_set_method( osrf_message* msg, char* method_name );
+void osrf_message_add_object_param( osrf_message* msg, object* o );
 void osrf_message_add_param( osrf_message*, char* param_string );
 
 
index 50687b5..5a2e4ff 100644 (file)
@@ -19,10 +19,6 @@ install:
        @echo "Installing libopensrf_transport..."
        cp $(TMPDIR)/libopensrf_transport.so $(LIBDIR)/
        cp $(HEADERS) $(INCLUDEDIR)/$(OPENSRF)
-#      for h in $(TMPDIR)/$(HEADERS); do
-#              mv $$h $(INCLUDEDIR)/$(OPENSRF);
-#      done
-
 
 clean:
        /bin/rm -f *.o basic_client component
index 7b4c6bc..5e4c80a 100644 (file)
@@ -33,9 +33,11 @@ object* json_parse_string(char* string) {
        object* obj = new_object(NULL);
        unsigned long index = 0;
 
+       json_eat_ws(string, &index, 1); /* remove leading whitespace */
+       if(index == current_strlen) return NULL;
+
        int status = _json_parse_string(string, &index, obj);
-       if(!status)
-               return obj;
+       if(!status) return obj;
 
        if(status == -2)
                return NULL;
index c5ced60..39babe4 100644 (file)
@@ -27,6 +27,23 @@ object* new_object(char* string_value) {
        return _init_object(string_value);
 }
 
+
+object* new_int_object(long num) {
+       object* o = new_object(NULL);
+       o->is_null = 0;
+       o->is_number = 1;
+       o->num_value = num;
+       return o;
+}
+
+object* new_double_object(double num) {
+       object* o = new_object(NULL);
+       o->is_null = 0;
+       o->is_double = 1;
+       o->double_value = num;
+       return o;
+}
+
 object* _init_object(char* string_value) {
 
        object* obj                     = (object*) safe_malloc(sizeof(object));
index 455f53a..0f6dd4b 100644 (file)
@@ -131,6 +131,10 @@ int object_iterator_has_next(object_iterator*);
        is to be a string.  if not, string should be NULL */
 object* new_object(char* string);
 
+object* new_int_object(long num);
+
+object* new_double_object(double num);
+
 /* utility method for initing an object */
 object* _init_object();
 
index 9fdc8a2..fa416c3 100644 (file)
@@ -1,7 +1,7 @@
 # set this shell variable prior to calling make to run with malloc_check enabled
 #MALLOC_CHECK_=1 # XXX debug only
 
-LD_OPTS                += -lc_utils -lxml2 -lopensrf_stack -ljson -lobjson
+LD_OPTS                += -lc_utils -lxml2 -lopensrf_stack -lobjson
 LP                             = ../libtransport
 LIB_SOURCES = $(LP)/transport_socket.c $(LP)/transport_session.c $(LP)/transport_message.c $(LP)/transport_client.c 
 
index 4b6022e..c1ba8a9 100644 (file)
@@ -973,6 +973,7 @@ int router_registrar_handle_app_request(
 
 
 
+
 osrf_message** router_registrar_process_app_request( 
                transport_router_registrar* router, osrf_message* omsg, int* num_responses ) {
 
@@ -987,18 +988,16 @@ osrf_message** router_registrar_process_app_request(
 
        if(!strcmp(omsg->method_name,"opensrf.router.info.class.list")) {
 
-               json* result_content = NULL;
+               object* result_content = json_parse_string("[]");
 
                debug_handler("Processing opensrf.router.info.class.list request");
 
-               result_content = json_object_new_array();
                server_class_node* cur_class = router->server_class_list;
                while( cur_class != NULL ) {
 
                        debug_handler("Adding %s to request list", cur_class->server_class);
 
-                       json_object_array_add(
-                                       result_content, json_object_new_string(cur_class->server_class));
+                       result_content->push(result_content, new_object(cur_class->server_class));
                        cur_class = cur_class->next;
                }
                result_array = safe_malloc(sizeof(osrf_message*));
@@ -1006,9 +1005,9 @@ osrf_message** router_registrar_process_app_request(
 
                result_array[0] = osrf_message_init(
                        RESULT, omsg->thread_trace, omsg->protocol );
-               osrf_message_set_result_content( result_array[0], 
-                               json_object_to_json_string(result_content) );
-               json_object_put(result_content);
+
+               osrf_message_set_result_content( result_array[0], object_to_json(result_content));
+               free_object(result_content);
 
 
        } else if(!strcmp(omsg->method_name,"opensrf.router.info.stats")) {
@@ -1019,8 +1018,8 @@ osrf_message** router_registrar_process_app_request(
 
                debug_handler("Processing opensrf.router.info.stats request");
 
-               json* result_content = NULL;
-               result_content = json_object_new_object();
+               object* result_content = json_parse_string("{}");
+
                server_class_node* cur_class = router->server_class_list;
 
                while( cur_class != NULL ) {
@@ -1029,40 +1028,58 @@ osrf_message** router_registrar_process_app_request(
                        server_node* cur_node = start_node;
                        if( cur_node == NULL ) continue; 
 
-                       json* server_object = json_object_new_object();
+                       object* server_object = json_parse_string("{}");
 
                        do {
 
-                               json* node_stats_array = json_object_new_array();
+                               object* node_stats_array = json_parse_string("[]");
+
+                               object* json_reg_time = json_parse_string("{}");
+
+                               object_add_key( json_reg_time, "reg_time", 
+                                       new_int_object((int) cur_node->reg_time));
+
+                               object_push(  node_stats_array, json_reg_time );
+
+                               object* json_upd_time = json_parse_string("{}");
+
+
+                               object_add_key( json_upd_time, "upd_time", 
+                                       new_int_object((int)cur_node->upd_time));
+
+
+
+                               object_push( node_stats_array, json_upd_time );
+
 
-                               json* json_reg_time = json_object_new_object();
-                               json_object_object_add( json_reg_time, "reg_time", 
-                                               json_object_new_int((int)cur_node->reg_time));
-                               json_object_array_add(  node_stats_array, json_reg_time );
 
-                               json* json_upd_time = json_object_new_object();
-                               json_object_object_add( json_upd_time, "upd_time", 
-                                               json_object_new_int((int)cur_node->upd_time));
-                               json_object_array_add( node_stats_array, json_upd_time );
+                               object* json_la_time = json_parse_string("{}");
 
-                               json* json_la_time = json_object_new_object();
-                               json_object_object_add( json_la_time, "la_time", 
-                                               json_object_new_int((int)cur_node->la_time));
-                               json_object_array_add( node_stats_array, json_la_time );
 
-                               json* json_serve_count = json_object_new_object();
-                               json_object_object_add( json_serve_count, "serve_count", 
-                                               json_object_new_int((int)cur_node->serve_count));
-                               json_object_array_add( node_stats_array, json_serve_count );
 
-                               json_object_object_add( server_object, cur_node->remote_id, node_stats_array );
+                               object_add_key( json_la_time, "la_time", 
+                                               new_int_object((int)cur_node->la_time));
+
+
+                               object_push( node_stats_array, json_la_time );
+
+                               object* json_serve_count = json_parse_string("{}");
+
+
+                               object_add_key( json_serve_count, "serve_count", 
+                                       new_int_object((int)cur_node->serve_count));
+
+                               
+                               object_push( node_stats_array, json_serve_count );
+
+
+                               object_add_key( server_object, cur_node->remote_id, node_stats_array );
 
                                cur_node = cur_node->next;
        
                        } while( cur_node != start_node );
 
-                       json_object_object_add( 
-                                       result_content, cur_class->server_class, server_object ); 
+                       object_add_key( result_content, cur_class->server_class, server_object );
        
                        cur_class = cur_class->next;
 
@@ -1074,48 +1091,50 @@ osrf_message** router_registrar_process_app_request(
 
                result_array[0] = osrf_message_init(
                        RESULT, omsg->thread_trace, omsg->protocol );
-               osrf_message_set_result_content( result_array[0], 
-                               json_object_to_json_string(result_content) );
-               json_object_put(result_content);
+
+               osrf_message_set_result_content(result_array[0], object_to_json(result_content));
+
+               free_object(result_content);
 
 
        } else if(!strcmp(omsg->method_name,"opensrf.system.method.all")) {
 
-               json* content = json_object_new_object();
-               json_object_object_add(content, "api_level", json_object_new_string("1"));
-               json_object_object_add(content, "api_name", json_object_new_string("opensrf.router.info.class.list"));
-               json_object_object_add(content, "server_class", json_object_new_string("router"));
-               json_object_object_add(content, "stream", json_object_new_string("0"));
+               object* content = json_parse_string("{}");
+               object_add_key(content, "api_level", new_object("1"));
+               object_add_key(content, "api_name", new_object("opensrf.router.info.class.list"));
+               object_add_key(content, "server_class", new_object("router"));
+               object_add_key(content, "stream", new_object("0"));
 
-               json* content2 = json_object_new_object();
-               json_object_object_add(content2, "api_level", json_object_new_string("1"));
-               json_object_object_add(content2, "api_name", json_object_new_string("opensrf.router.info.stats"));
-               json_object_object_add(content2, "server_class", json_object_new_string("router"));
-               json_object_object_add(content2, "stream", json_object_new_string("0"));
+               object* content2 = json_parse_string("{}");
+               object_add_key(content2, "api_level", new_object("1"));
+               object_add_key(content2, "api_name", new_object("opensrf.router.info.stats"));
+               object_add_key(content2, "server_class", new_object("router"));
+               object_add_key(content2, "stream", new_object("0"));
 
-               json* content3 = json_object_new_object();
-               json_object_object_add(content3, "api_level", json_object_new_string("1"));
-               json_object_object_add(content3, "api_name", json_object_new_string("opensrf.system.method.all"));
-               json_object_object_add(content3, "server_class", json_object_new_string("router"));
-               json_object_object_add(content3, "stream", json_object_new_string("1"));
+               object* content3 = json_parse_string("{}");
+               object_add_key(content3, "api_level", new_object("1"));
+               object_add_key(content3, "api_name", new_object("opensrf.system.method.all"));
+               object_add_key(content3, "server_class", new_object("router"));
+               object_add_key(content3, "stream", new_object("1"));
 
                result_array = safe_malloc(3*sizeof(osrf_message*));
                *num_responses = 3;
 
                result_array[0] = osrf_message_init(
                        RESULT, omsg->thread_trace, omsg->protocol );
-               osrf_message_set_result_content( result_array[0], json_object_to_json_string(content) );
-               json_object_put(content);
+
+               osrf_message_set_result_content( result_array[0], object_to_json(content));
+               free_object(content);
 
                result_array[1] = osrf_message_init(
                        RESULT, omsg->thread_trace, omsg->protocol );
-               osrf_message_set_result_content( result_array[1], json_object_to_json_string(content2) );
-               json_object_put(content2);
+               osrf_message_set_result_content( result_array[1], object_to_json(content2) );
+               free_object(content2);
 
                result_array[2] = osrf_message_init(
                        RESULT, omsg->thread_trace, omsg->protocol );
-               osrf_message_set_result_content( result_array[1], json_object_to_json_string(content3) );
-               json_object_put(content3);
+               osrf_message_set_result_content( result_array[1], object_to_json(content3) );
+               free_object(content3);
 
 
        }
index 3151a62..8699397 100644 (file)
@@ -1,4 +1,4 @@
-LD_OPTS        += -lobjson -lreadline -lxml2 -lopensrf_transport -lopensrf_stack -ljson -lncurses -lc_utils
+LD_OPTS        += -lobjson -lreadline -lxml2 -lopensrf_transport -lopensrf_stack -lncurses -lc_utils
 
 all: srfsh
 
index fb6d3cf..10ef14e 100644 (file)
@@ -32,9 +32,6 @@ int main( int argc, char* argv[] ) {
 
 
        client = osrf_system_get_transport_client();
-       //osrf_message_set_json_parse_result(1);
-       //osrf_message_set_json_parse_result(1);
-
 
        /* main process loop */
        char* request;
@@ -187,12 +184,22 @@ int parse_request( char* request ) {
 
 int handle_introspect(char* words[]) {
 
-       if(words[1]) {
+       if(words[1] && words[2]) {
                fprintf(stderr, "--> %s\n", words[1]);
                char buf[256];
                memset(buf,0,256);
-               sprintf( buf, "request %s opensrf.system.method.all", words[1] );
+               sprintf( buf, "request %s opensrf.system.method %s", words[1], words[2] );
                return parse_request( buf );
+
+       } else {
+       
+               if(words[1]) {
+                       fprintf(stderr, "--> %s\n", words[1]);
+                       char buf[256];
+                       memset(buf,0,256);
+                       sprintf( buf, "request %s opensrf.system.method.all", words[1] );
+                       return parse_request( buf );
+               }
        }
 
        return 0;
@@ -216,20 +223,12 @@ int handle_login( char* words[]) {
                                "request open-ils.auth open-ils.auth.authenticate.init \"%s\"", username );
                parse_request(buf); 
 
-               //char* hash = json_object_get_string( last_result->result_content );
-
                char* hash;
                if(last_result && last_result->_result_content) {
                        object* r = last_result->_result_content;
                        hash = r->string_data;
                } else return 0;
 
-               /*
-               fprintf(stderr, "HASHES %s : %s\n", hash, hash2);
-               object* r = last_result->_result_content;
-               fprintf(stderr, "%s\n", r->to_json(r));
-               */
-
 
                char* pass_buf = md5sum(password);
 
@@ -248,7 +247,6 @@ int handle_login( char* words[]) {
 
                parse_request( buf2 );
 
-               //login_session = strdup(json_object_get_string( last_result->result_content ));
                login_session = strdup(last_result->_result_content->string_data);
 
                printf("Login Session: %s\n", login_session );
@@ -428,22 +426,28 @@ int send_request( char* server,
        if( server == NULL || method == NULL )
                return 0;
 
-       json* params = NULL;
+       object* params = NULL;
        if( !relay ) {
                if( buffer != NULL && buffer->n_used > 0 ) 
-                       params = json_tokener_parse(buffer->buf);
+                       params = json_parse_string(buffer->buf);
        } else {
-               if(!last_result || ! last_result->result_content) { 
+               if(!last_result || ! last_result->_result_content) { 
                        printf("We're not going to call 'relay' with no result params\n");
                        return 1;
                }
                else {
-                       json* arr = json_object_new_array();
-                       json_object_array_add( arr, last_result->result_content );
-                       params = arr;
+                       object* o = new_object(NULL);
+                       o->push(o, last_result->_result_content );
+                       params = o;
                }
        }
 
+
+       if(buffer->n_used > 0 && params == NULL) {
+               fprintf(stderr, "JSON error detected, not executing\n");
+               return 1;
+       }
+
        osrf_app_session* session = osrf_app_client_session_init(server);
 
        if(!osrf_app_session_connect(session)) {
@@ -452,7 +456,8 @@ int send_request( char* server,
        }
 
        double start = get_timestamp_millis();
-       int req_id = osrf_app_session_make_request( session, params, method, 1, NULL );
+       //int req_id = osrf_app_session_make_request( session, params, method, 1, NULL );
+       int req_id = osrf_app_session_make_req( session, params, method, 1, NULL );
 
 
        osrf_message* omsg = osrf_app_session_request_recv( session, req_id, 60 );
@@ -472,7 +477,7 @@ int send_request( char* server,
 
        while(omsg) {
 
-               if(omsg->result_content) {
+               if(omsg->_result_content) {
 
                        debug_handler("srfsh1");
                        osrf_message_free(last_result);
@@ -480,10 +485,11 @@ int send_request( char* server,
 
                        char* content;
 
-                       if( pretty_print ) 
-                               content = json_printer( omsg->result_content );
-                       else
-                               //content = json_object_get_string(omsg->result_content);
+                       if( pretty_print && omsg->_result_content ) {
+                               char* j = object_to_json(omsg->_result_content);
+                               content = json_printer(j); 
+                               free(j);
+                       } else
                                content = object_get_string(omsg->_result_content);
 
                        debug_handler("srfsh2");
@@ -662,11 +668,7 @@ char* tabs(int count) {
        return final;
 }
 
-char* json_printer( json* object ) {
-
-       if(object == NULL)
-               return NULL;
-       char* string = json_object_get_string(object);
+char* json_printer( char* string ) {
 
        growing_buffer* buf = buffer_init(64);
        int i;
@@ -760,12 +762,12 @@ int do_math( int count, int style ) {
 
        osrf_app_session* session = osrf_app_client_session_init(  "opensrf.math" );
 
-       json* params = json_object_new_array();
-       json_object_array_add(params, json_object_new_string("1"));
-       json_object_array_add(params, json_object_new_string("2"));
+       object* params = json_parse_string("[]");
+       params->push(params,new_object("1"));
+       params->push(params,new_object("2"));
 
        char* methods[] = { "add", "sub", "mult", "div" };
-       char* answers[] = { "3", "-1", "2", "0.5" };
+       char* answers[] = { "\"3\"", "\"-1\"", "\"2\"", "\"0.5\"" };
 
        float times[ count * 4 ];
        memset(times,0,count*4);
@@ -792,8 +794,8 @@ int do_math( int count, int style ) {
                        struct timeb t2;
 
                        ftime(&t1);
-                       int req_id = osrf_app_session_make_request( session, params, methods[j], 1, NULL );
-
+                       //int req_id = osrf_app_session_make_request( session, params, methods[j], 1, NULL );
+                       int req_id = osrf_app_session_make_req( session, params, methods[j], 1, NULL );
 
                        osrf_message* omsg = osrf_app_session_request_recv( session, req_id, 5 );
 
@@ -806,14 +808,16 @@ int do_math( int count, int style ) {
 
                        if(omsg) {
        
-                               if(omsg->result_content) {
-                                       char* jsn = json_object_get_string( omsg->result_content );
+                               if(omsg->_result_content) {
+                                       char* jsn = object_to_json(omsg->_result_content);
                                        if(!strcmp(jsn, answers[j]))
                                                fprintf(stderr, "+");
                                        else
                                                fprintf(stderr, "\n![%s] - should be %s\n", jsn, answers[j] );
+                                       free(jsn);
                                }
 
+
                                osrf_message_free(omsg);
                
                        } else { fprintf( stderr, "\nempty message for tt: %d\n", req_id ); }
@@ -832,7 +836,7 @@ int do_math( int count, int style ) {
        }
 
        osrf_app_session_destroy( session );
-       json_object_put( params );
+       free_object(params);
 
        int c;
        float total = 0;
index 3fd25f0..ef403d2 100644 (file)
@@ -60,7 +60,7 @@ int parse_error( char* words[] );
 int router_query_servers( char* server );
 int srfsh_client_connect();
 int print_help();
-char* json_printer( json* object );
+char* json_printer( char* string );
 char* tabs(int count);
 void sig_child_handler( int s );
 void sig_int_handler( int s );