manual merge
authorKevron Rees <tripzero.kev@gmail.com>
Sat, 16 Mar 2013 19:21:45 +0000 (12:21 -0700)
committerKevron Rees <tripzero.kev@gmail.com>
Sat, 16 Mar 2013 19:21:45 +0000 (12:21 -0700)
1  2 
plugins/websocketsourceplugin/websocketsource.cpp

@@@ -235,54 -235,41 +235,38 @@@ static int callback_http_only(libwebsoc
  
                        DebugOut(2)<<"websocket source pre-json parse time: "<<prejsonparsetime<<endl;
  
-                       //Incoming JSON reqest.
-                       GError* error = nullptr;
-                       JsonParser* parser = json_parser_new();
-                       if (!json_parser_load_from_data(parser,(char*)in,len,&error))
 -                      json_object *rootobject;
 -                      json_tokener *tokener = json_tokener_new();
 -                      enum json_tokener_error err;
+                       do
                        {
-                               DebugOut(0) << __SMALLFILE__ <<":"<< __LINE__ << "Error loading JSON"<<endl;
-                               DebugOut(0) << (char*)in <<endl;
-                               DebugOut(0) <<error->message<<endl;
-                               return 0;
-                       }
-                       JsonNode* node = json_parser_get_root(parser);
-                       if(node == nullptr)
+                               rootobject = json_tokener_parse_ex(tokener, (char*)in,len);
+                       } while ((err = json_tokener_get_error(tokener)) == json_tokener_continue);
+                       if (err != json_tokener_success)
                        {
-                               DebugOut(0) << __SMALLFILE__ <<":"<< __LINE__ << "Error getting root node of json"<<endl;
-                               //throw std::runtime_error("Unable to get JSON root object");
-                               return 0;
+                               fprintf(stderr, "Error: %s\n", json_tokener_error_desc(err));
+                               // Handle errors, as appropriate for your application.
                        }
-                       JsonReader* reader = json_reader_new(node);
-                       if(reader == nullptr)
+                       if (tokener->char_offset < len) // XXX shouldn't access internal fields
                        {
-                               DebugOut(0) << __SMALLFILE__ <<":"<< __LINE__ << "json_reader is null!"<<endl;
-                               //throw std::runtime_error("Unable to create JSON reader");
-                               return 0;
+                               // Handle extra characters after parsed object as desired.
+                               // e.g. issue an error, parse another object from that point, etc...
                        }
+                       //Incoming JSON reqest.
+                       
  
                        DebugOut(5)<<"source received: "<<string((char*)in)<<endl;
+                       
+                       json_object *typeobject= json_object_object_get(rootobject,"type");
+                       json_object *nameobject= json_object_object_get(rootobject,"name");
+                       json_object *transidobject= json_object_object_get(rootobject,"transactionid");
  
  
-                       string type;
-                       json_reader_read_member(reader,"type");
-                       type = json_reader_get_string_value(reader);
-                       json_reader_end_member(reader);
-                       string  name;
-                       json_reader_read_member(reader,"name");
-                       name = json_reader_get_string_value(reader);
-                       json_reader_end_member(reader);
-                       
+                       string type = string(json_object_get_string(typeobject));
+                       string  name = string(json_object_get_string(nameobject));
                        
                        string id;
-                       json_reader_read_member(reader,"transactionid");
-                       if (strcmp("gchararray",g_type_name(json_node_get_value_type(json_reader_get_value(reader)))) == 0)
+                       
+                       if (json_object_get_type(transidobject) == json_type_string)
                        {
-                               //Type is a string
-                               id = json_reader_get_string_value(reader);
+                               id = json_object_get_string(transidobject);
                        }
                        else
                        {
                        //mlc: I agree with Kevron here, it does explode.
                        //if(error) g_error_free(error);
  
-                       g_object_unref(reader);
-                       g_object_unref(parser);
+                       
                        break;
 +
                }
                case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED:
                {