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:
{