// Parse a json object, a json object stripped of {} or an json array // stripped of [] into a JsonNode. JsonNode *glib_jsonrpc_json_string_to_json_node(const gchar *str) { JsonParser *parser = json_parser_new(); GError *error; // First try to parse the string if (!json_parser_load_from_data(parser, str, -1, &error)) { // Wrap it in a { } pair and try again. g_error_free(error); error = NULL; GString *j_str = g_string_new(""); g_string_append_printf(j_str, "{%s}", str); // Try parsing it as an object if (!json_parser_load_from_data(parser, j_str->str, -1, &error)) { // Still fail, try to parse it as an array g_string_free(j_str, TRUE); g_string_append_printf(j_str, "[%s]", str); if (!json_parser_load_from_data(parser, j_str->str, -1, &error)) { // That's it, we give up. g_object_unref(parser); return NULL; } } } JsonNode *node = json_node_copy(json_parser_get_root(parser)); g_object_unref(parser); return node; }
static void search_response_cb (SoupSession *session, SoupMessage *msg, RBPodcastSearchITunes *search) { JsonParser *parser; GError *error = NULL; int code; g_object_get (msg, SOUP_MESSAGE_STATUS_CODE, &code, NULL); if (code != 200) { char *reason; g_object_get (msg, SOUP_MESSAGE_REASON_PHRASE, &reason, NULL); rb_debug ("search request failed: %s", reason); g_free (reason); rb_podcast_search_finished (RB_PODCAST_SEARCH (search), FALSE); return; } if (msg->response_body->data == NULL) { rb_debug ("no response data"); rb_podcast_search_finished (RB_PODCAST_SEARCH (search), TRUE); return; } parser = json_parser_new (); if (json_parser_load_from_data (parser, msg->response_body->data, msg->response_body->length, &error)) { process_results (search, parser); } else { rb_debug ("unable to parse response data: %s", error->message); g_clear_error (&error); } g_object_unref (parser); rb_podcast_search_finished (RB_PODCAST_SEARCH (search), TRUE); }
static void utc_libjson_json_parser_has_assignment_func_04(void) { JsonParser *parser = NULL; GError *error = NULL; gboolean ret = FALSE; gchar *var = NULL; int i = 0; parser = json_parser_new (); g_assert (JSON_IS_PARSER (parser)); for (i = 0; i < n_test_assignments; i++) { error = NULL; if (!json_parser_load_from_data (parser, test_assignments[i].str, -1, &error)) { g_error_free (error); } else { ret = json_parser_has_assignment (parser, &var); dts_check_eq("json_parser_has_assignment", ret, TRUE); dts_check_ne("json_parser_has_assignment", var, NULL); dts_check_str_eq ("json_parser_has_assignment", var, test_assignments[i].var); } } dts_pass("json_parser_has_assignment", "pass"); g_object_unref (parser); }
static GHashTable* toHashTable(std::string msg) { g_print("toHashTable\n"); JsonParser *parser; GError *error = NULL; parser = json_parser_new (); GHashTable *map = g_hash_table_new(g_str_hash, g_str_equal); if (json_parser_load_from_data (parser, msg.c_str(), -1, &error)) { JsonNode *root; JsonObject *object; g_assert (NULL != json_parser_get_root (parser)); root = json_parser_get_root (parser); if (JSON_NODE_TYPE (root) == JSON_NODE_OBJECT) { object = json_node_get_object (root); g_assert (object != NULL); json_object_foreach_member(object, parseMembers, map); } } else { g_error_free (error); } g_object_unref (parser); return map; }
static JsonObject *gphoto_parse_response(dt_gphoto_context_t *ctx, GString *response) { GError *error = NULL; gboolean ret = json_parser_load_from_data(ctx->json_parser, response->str, response->len, &error); if(ret) { JsonNode *root = json_parser_get_root(ctx->json_parser); // we should always have a dict g_return_val_if_fail((json_node_get_node_type(root) == JSON_NODE_OBJECT), NULL); JsonObject *rootdict = json_node_get_object(root); if(json_object_has_member(rootdict, "error")) { JsonObject *errorstruct = json_object_get_object_member(rootdict, "error"); g_return_val_if_fail((errorstruct != NULL), NULL); const gchar *errormessage = json_object_get_string_member(errorstruct, "message"); g_return_val_if_fail((errormessage != NULL), NULL); g_string_assign(ctx->errmsg, errormessage); return NULL; } return rootdict; } else // not a json response, can be the upload-token { ctx->response = g_string_new(response->str); return NULL; } }
/* grl.lua.json.string_to_table * * @json_str: (string) A Json object as a string. * * @return: All json content as a table. */ static gint grl_json_parse_string (lua_State *L) { JsonParser *parser = NULL; JsonReader *reader = NULL; const gchar *json_str = NULL; GError *err = NULL; luaL_argcheck (L, lua_isstring (L, 1), 1, "json string expected"); json_str = lua_tostring (L, 1); parser = json_parser_new (); if (!json_parser_load_from_data (parser, json_str, -1, &err)) { GRL_DEBUG ("Can't parse json string: '%s'", err->message); g_error_free (err); g_object_unref (parser); return 0; } reader = json_reader_new (json_parser_get_root (parser)); /* The return of recursive function will be a table with all * json content in it */ lua_pushnil (L); build_table_from_json_reader (L, reader); g_object_unref (reader); g_object_unref (parser); return 1; }
gchar * get_value (gchar *data, gchar *key) { JsonParser *parser = json_parser_new (); JsonReader *reader = json_reader_new (NULL); GError *error = NULL; gchar *val = NULL; json_parser_load_from_data (parser, data, -1, &error); if (error) { g_error_free (error); goto out; } json_reader_set_root (reader, json_parser_get_root (parser)); if (!json_reader_is_object (reader)) { goto out; } json_reader_read_member (reader, key); val = g_strdup (json_reader_get_string_value (reader)); json_reader_end_member (reader); out: g_object_unref (parser); g_object_unref (reader); return val; }
gboolean twitter_user_list_load_from_data (TwitterUserList *user_list, const gchar *buffer, GError **error) { JsonParser *parser; GError *parse_error; gboolean retval = TRUE; g_return_val_if_fail (TWITTER_IS_USER_LIST (user_list), FALSE); g_return_val_if_fail (buffer != NULL, FALSE); twitter_user_list_clean (user_list); parser = json_parser_new (); parse_error = NULL; json_parser_load_from_data (parser, buffer, -1, &parse_error); if (parse_error) { g_set_error (error, TWITTER_ERROR, TWITTER_ERROR_PARSE_ERROR, "Parse error (%s)", parse_error->message); g_error_free (parse_error); retval = FALSE; } else twitter_user_list_build (user_list, json_parser_get_root (parser)); g_object_unref (parser); return retval; }
static JsonNode * node_from_call (RestProxyCall *call, JsonParser *parser) { JsonNode *root; GError *error; gboolean ret = FALSE; if (call == NULL) return NULL; if (!SOUP_STATUS_IS_SUCCESSFUL (rest_proxy_call_get_status_code (call))) { g_message ("Error from MySpace: %s (%d)", rest_proxy_call_get_status_message (call), rest_proxy_call_get_status_code (call)); return NULL; } ret = json_parser_load_from_data (parser, rest_proxy_call_get_payload (call), rest_proxy_call_get_payload_length (call), &error); root = json_parser_get_root (parser); if (root == NULL) { g_message ("Error from MySpace: %s", rest_proxy_call_get_payload (call)); return NULL; } return root; }
void twitter_status_load_from_data (TwitterStatus *status, const gchar *buffer) { JsonParser *parser; GError *parse_error; g_return_if_fail (TWITTER_IS_STATUS (status)); g_return_if_fail (buffer != NULL); twitter_status_clean (status); parser = json_parser_new (); parse_error = NULL; json_parser_load_from_data (parser, buffer, -1, &parse_error); if (parse_error) { g_warning ("Unable to parse data into a status: %s", parse_error->message); g_error_free (parse_error); } else twitter_status_build (status, json_parser_get_root (parser)); g_object_unref (parser); }
TwitterUserList * twitter_user_list_new_from_data (const gchar *buffer) { TwitterUserList *retval; JsonParser *parser; GError *parse_error; g_return_val_if_fail (buffer != NULL, NULL); retval = twitter_user_list_new (); parser = json_parser_new (); parse_error = NULL; json_parser_load_from_data (parser, buffer, -1, &parse_error); if (parse_error) { g_warning ("Unable to parse data into a user list: %s", parse_error->message); g_error_free (parse_error); } else twitter_user_list_build (retval, json_parser_get_root (parser)); g_object_unref (parser); return retval; }
static void pb_process_frame(PushBulletAccount *pba, const gchar *frame) { JsonParser *parser = json_parser_new(); JsonNode *root; purple_debug_info("pushbullet", "got frame data: %s\n", frame); if (!json_parser_load_from_data(parser, frame, -1, NULL)) { purple_debug_error("pushbullet", "Error parsing response: %s\n", frame); return; } root = json_parser_get_root(parser); if (root != NULL) { JsonObject *message = json_node_get_object(root); const gchar *type = json_object_get_string_member(message, "type"); if (purple_strequal(type, "tickle")) { pb_get_everything_since(pba, purple_account_get_int(pba->account, "last_message_timestamp", 0)); } else if (purple_strequal(type, "push")) { JsonObject *push = json_object_get_object_member(message, "push"); //{"type":"push","targets":["stream","android","ios"],"push":{"guid":"purple6e94d282","type":"messaging_extension_reply","package_name":"com.pushbullet.android","target_device_iden":"uffvytgsjAoIRwhIL6","conversation_iden":"+6421478252","message":"test2"}} //{"type":"push","targets":["stream"],"push":{"type":"sms_changed"}} type = json_object_get_string_member(push, "type"); if (purple_strequal(type, "sms_changed")) { pb_get_phone_threads(pba, NULL); } } } g_object_unref(parser); }
static JsonNode * postal_http_parse_body (SoupMessage *message, GError **error) { JsonParser *p; JsonNode *ret; g_assert(SOUP_IS_MESSAGE(message)); p = json_parser_new(); if (!json_parser_load_from_data(p, message->request_body->data, message->request_body->length, error)) { g_object_unref(p); return NULL; } if ((ret = json_parser_get_root(p))) { ret = json_node_copy(ret); } g_object_unref(p); if (!ret) { g_set_error(error, postal_json_error_quark(), 0, "Missing JSON payload."); } return ret; }
static void on_web_socket_message(SoupWebsocketConnection *ws, SoupWebsocketDataType type, GBytes *message, void *user_data) { const gchar *data; gsize len; data = g_bytes_get_data (message, &len); imgflo_debug("RECV: %.*s\n", (int)len, data); JsonParser *parser = json_parser_new(); gboolean success = json_parser_load_from_data(parser, data, len, NULL); if (success) { JsonNode *r = json_parser_get_root(parser); g_assert(JSON_NODE_HOLDS_OBJECT(r)); JsonObject *root = json_node_get_object(r); const gchar *protocol = json_object_get_string_member(root, "protocol"); const gchar *command = json_object_get_string_member(root, "command"); JsonNode *pnode = json_object_get_member(root, "payload"); JsonObject *payload = JSON_NODE_HOLDS_OBJECT(pnode) ? json_object_get_object_member(root, "payload") : NULL; UiConnection *ui = (UiConnection *)user_data; ui_connection_handle_message(ui, protocol, command, payload, ws); } else { imgflo_warning("Unable to parse WebSocket message as JSON"); } g_object_unref(parser); }
static void test_invalid_array (gconstpointer user_data) { const char *json = user_data; GError *error = NULL; JsonParser *parser; gboolean res; parser = json_parser_new (); g_assert (JSON_IS_PARSER (parser)); if (g_test_verbose ()) g_print ("invalid data: '%s'...", json); res = json_parser_load_from_data (parser, json, -1, &error); g_assert (!res); g_assert (error != NULL); if (g_test_verbose ()) g_print ("expected error: %s\n", error->message); g_clear_error (&error); g_object_unref (parser); }
static void on_message (FridaScript * script, const gchar * message, GBytes * data, gpointer user_data) { JsonParser * parser; JsonObject * root; const gchar * type; parser = json_parser_new (); json_parser_load_from_data (parser, message, -1, NULL); root = json_node_get_object (json_parser_get_root (parser)); type = json_object_get_string_member (root, "type"); if (strcmp (type, "log") == 0) { const gchar * log_message; log_message = json_object_get_string_member (root, "payload"); g_print ("%s\n", log_message); } else { g_print ("on_message: %s\n", message); } g_object_unref (parser); }
/** * gfbgraph_connectable_default_parse_connected_data: * @self: a #GFBGraphConnectable. * @payload: a const #gchar with the response string from the Facebook Graph API. * @error: (allow-none): a #GError or %NULL. * * In most cases, #GFBGraphConnectable implementers can use this function in order to parse * the response when a gfbgraph_node_get_connection_nodes() is executed and the * gfbgraph_connectable_parse_connected_data() was called. * * Normally, Facebook Graph API returns the connections in the same way, using JSON objects, * with a root object called "data". * * Returns: (element-type GFBGraphNode) (transfer full): a newly-allocated #GList of #GFBGraphNode with the same #GType as @self. **/ GList* gfbgraph_connectable_default_parse_connected_data (GFBGraphConnectable *self, const gchar *payload, GError **error) { GList *nodes_list = NULL; JsonParser *jparser; GType node_type; node_type = G_OBJECT_TYPE (self); jparser = json_parser_new (); if (json_parser_load_from_data (jparser, payload, -1, error)) { JsonNode *root_jnode; JsonObject *main_jobject; JsonArray *nodes_jarray; int i = 0; root_jnode = json_parser_get_root (jparser); main_jobject = json_node_get_object (root_jnode); nodes_jarray = json_object_get_array_member (main_jobject, "data"); for (i = 0; i < json_array_get_length (nodes_jarray); i++) { JsonNode *jnode; GFBGraphNode *node; jnode = json_array_get_element (nodes_jarray, i); node = GFBGRAPH_NODE (json_gobject_deserialize (node_type, jnode)); nodes_list = g_list_append (nodes_list, node); } } g_clear_object (&jparser); return nodes_list; }
//Constructor. GobjectImplStringTopNode::GobjectImplStringTopNode(std::string const & jsonstring):mParser(),mRoot(0) { GobjectImplError lerror; //Resource managed place for storing our error state. json_parser_load_from_data (mParser,jsonstring.c_str(),jsonstring.size(),lerror.errorp()); if (lerror.error()) { throw jsonme::ParseError(lerror.error()->message); } mRoot=new GobjectImplNode(json_parser_get_root(mParser)); //Wrap the root node. }
/*! * Check a QMP "execute" response message. * * \param result Response from server. * \param bytes Size of \p result. * \param expect_empty \c true if the result is expected to be an * empty json message, else \c false. * * \warning FIXME: no validation performed on non-empty QMP messages yet. * * \return \c true on success, else \c false. */ static gboolean clr_oci_qmp_check_result (const char *result, gsize bytes, gboolean expect_empty) { gboolean ret; JsonParser *parser = NULL; JsonReader *reader = NULL; GError *error = NULL; gint count = 0; g_assert (result); parser = json_parser_new (); reader = json_reader_new (NULL); ret = json_parser_load_from_data (parser, result, (gssize)bytes, &error); if (! ret) { g_critical ("failed to check qmp response: %s", error->message); g_error_free (error); goto out; } json_reader_set_root (reader, json_parser_get_root (parser)); ret = json_reader_read_member (reader, "return"); if (! ret) { goto out; } ret = json_reader_is_object (reader); if (! ret) { goto out; } count = json_reader_count_members (reader); if (count && expect_empty) { g_critical ("expected empty object denoting success, " "but found %d members", count); goto out; } ret = true; out: if (reader) { json_reader_end_member (reader); g_object_unref (reader); } if (parser) { g_object_unref (parser); } return ret; }
static void got_token_cb (SoupSession *session, SoupMessage *msg, gpointer user_data) { /* parses the authentication token from the response */ RBAudioscrobblerAccount *account; JsonParser *parser; account = RB_AUDIOSCROBBLER_ACCOUNT (user_data); parser = json_parser_new (); if (msg->response_body->data != NULL && json_parser_load_from_data (parser, msg->response_body->data, msg->response_body->length, NULL)) { JsonObject *root_object; root_object = json_node_get_object (json_parser_get_root (parser)); if (json_object_has_member (root_object, "token")) { char *url; account->priv->auth_token = g_strdup (json_object_get_string_member (root_object, "token")); rb_debug ("granted auth token \"%s\"", account->priv->auth_token); /* send the user to the web page using the token */ url = g_strdup_printf ("%s?api_key=%s&token=%s", rb_audioscrobbler_service_get_auth_url (account->priv->service), rb_audioscrobbler_service_get_api_key (account->priv->service), account->priv->auth_token); rb_debug ("sending user to %s", url); gtk_show_uri (NULL, url, GDK_CURRENT_TIME, NULL); /* add timeout which will ask for session key */ account->priv->session_key_timeout_id = g_timeout_add_seconds (SESSION_KEY_REQUEST_TIMEOUT, request_session_key_timeout_cb, account); g_free (url); } else { rb_debug ("error retrieving auth token: %s", json_object_get_string_member (root_object, "message")); /* go back to being logged out */ rb_audioscrobbler_account_logout (account); } } else { /* treat as connection error */ rb_debug ("empty or invalid response retrieving auth token. treating as connection error"); cancel_session (account); account->priv->login_status = RB_AUDIOSCROBBLER_ACCOUNT_LOGIN_STATUS_CONNECTION_ERROR; g_signal_emit (account, rb_audioscrobbler_account_signals[LOGIN_STATUS_CHANGED], 0, account->priv->login_status); } g_object_unref (parser); }
/*! * Read the expected QMP welcome message. * * \param socket \c GSocket to use. * * \return \c true on success, else \c false. */ static gboolean clr_oci_qmp_check_welcome (GSocket *socket) { GError *error = NULL; JsonParser *parser = NULL; JsonReader *reader = NULL; GSList *msgs = NULL; gsize msg_count = 0; gboolean ret; GString *msg = NULL; g_assert (socket); ret = clr_oci_qmp_msg_recv (socket, 1, &msgs, &msg_count); if (! ret) { goto out; } msg = g_slist_nth_data (msgs, 0); g_assert (msg); parser = json_parser_new (); reader = json_reader_new (NULL); ret = json_parser_load_from_data (parser, msg->str, (gssize)msg->len, &error); if (! ret) { g_critical ("failed to parse json: %s", error->message); g_error_free (error); goto out; } json_reader_set_root (reader, json_parser_get_root (parser)); /* FIXME: perform more checks on the data received */ ret = json_reader_read_member (reader, "QMP"); if (! ret) { g_critical ("unexpected json data"); json_reader_end_member (reader); goto out; } json_reader_end_member (reader); out: if (reader) { g_object_unref (reader); } if (parser) { g_object_unref (parser); } if (msgs) { clr_oci_net_msgs_free_all (msgs); } g_debug ("handled qmp welcome"); return true; }
/* Called by RPC transport. */ gchar* searpc_server_call_function (const char *svc_name, gchar *func, gsize len, gsize *ret_len) { SearpcService *service; JsonParser *parser; JsonNode *root; JsonArray *array; gchar* ret; GError *error = NULL; #ifdef PROFILE struct timeval start, end, intv; gettimeofday(&start, NULL); #endif service = g_hash_table_lookup (service_table, svc_name); if (!service) { char buf[256]; snprintf (buf, 255, "cannot find service %s.", svc_name); return error_to_json (501, buf, ret_len); } parser = json_parser_new (); if (!json_parser_load_from_data (parser, func, len, &error)) { char buf[512]; snprintf (buf, 511, "failed to parse RPC call: %s\n", error->message); g_object_unref (parser); return error_to_json (511, buf, ret_len); } root = json_parser_get_root (parser); array = json_node_get_array (root); const char *fname = json_array_get_string_element(array, 0); FuncItem *fitem = g_hash_table_lookup(service->func_table, fname); if (!fitem) { char buf[256]; snprintf (buf, 255, "cannot find function %s.", fname); g_object_unref (parser); return error_to_json (500, buf, ret_len); } ret = fitem->marshal->mfunc (fitem->func, array, ret_len); #ifdef PROFILE gettimeofday(&end, NULL); timersub(&end, &start, &intv); g_debug ("[searpc] Time spend in call %s: %ds %dus\n", fname, intv.tv_sec, intv.tv_usec); #endif g_object_unref (parser); return ret; }
static void onTaskReadyCallback(GObject * source, GAsyncResult * res, gpointer userData) { GError *err = NULL; //WlDictQuery *query=WL_DICT_QUERY(source); TaskData *td = g_task_get_task_data(G_TASK(res)); gchar *responseBody = g_task_propagate_pointer(G_TASK(res), &err); if (err) { /* Error */ if (td->cb) td->cb(td->from, td->to, td->src, NULL, td->cbData, err); return; } JsonParser *parser = json_parser_new(); if (!json_parser_load_from_data(parser, responseBody, -1, &err)) { if (td->cb) td->cb(td->from, td->to, td->src, NULL, td->cbData, err); g_message("%s", responseBody); return; } JsonNode *rootNode = json_parser_get_root(parser); JsonObject *rootObj = json_node_get_object(rootNode); const gchar *from = json_object_get_string_member(rootObj, "from"); const gchar *to = json_object_get_string_member(rootObj, "to"); if (json_object_has_member(rootObj, "error_code")) { /* 查询出错 */ const gchar *error_msg = json_object_get_string_member(rootObj, "error_msg"); const gchar *error_code = json_object_get_string_member(rootObj, "error_code"); if (td->cb) { GError *error = g_error_new(G_IO_ERROR, atoi(error_code), "%s", error_msg); td->cb(wl_dict_lang_get_enum(from), wl_dict_lang_get_enum(to), json_object_get_string_member(rootObj, "query"), NULL, td->cbData, error); g_error_free(error); } g_object_unref(parser); return; } JsonArray *results = json_object_get_array_member(rootObj, "trans_result"); gint i, len = json_array_get_length(results); for (i = 0; i < len; i++) { JsonObject *resEle = json_array_get_object_element(results, i); const gchar *src = json_object_get_string_member(resEle, "src"); const gchar *dst = json_object_get_string_member(resEle, "dst"); if (td->cb) td->cb(wl_dict_lang_get_enum(from), wl_dict_lang_get_enum(to), src, dst, td->cbData, NULL); } g_object_unref(parser); }
char *json_get (const char *data, const char *path, int *n_objects, int *err) { GError *gerr = NULL; JsonParser *parser; char *ret = NULL; int n = 0; if (data == NULL || path == NULL) { if (n_objects != NULL) { *n_objects = 0; } return NULL; } parser = json_parser_new(); if (parser == NULL) { gretl_errmsg_set("json_parser_new returned NULL!\n"); *err = 1; return NULL; } json_parser_load_from_data(parser, data, -1, &gerr); if (gerr != NULL) { gretl_errmsg_sprintf("Couldn't parse JSON input: %s", gerr->message); g_error_free(gerr); *err = E_DATA; } else { PRN *prn = gretl_print_new(GRETL_PRINT_BUFFER, err); if (!*err) { *err = real_json_get(parser, path, &n, prn); if (!*err) { ret = gretl_print_steal_buffer(prn); } gretl_print_destroy(prn); } } if (*err) { fprintf(stderr, "json_get: err = %d\n", *err); } if (n_objects != NULL) { *n_objects = n; } g_object_unref(parser); return ret; }
static void skypeweb_got_object_for_file(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { SkypeWebFileTransfer *swft = user_data; SkypeWebAccount *sa = swft->sa; PurpleXfer *xfer = swft->xfer; JsonParser *parser; JsonNode *node; JsonObject *obj; gchar *id; sa->url_datas = g_slist_remove(sa->url_datas, url_data); //Get back {"id": "0-cus-d3-deadbeefdeadbeef012345678"} parser = json_parser_new(); if (!json_parser_load_from_data(parser, url_text, len, NULL)) { g_free(swft->from); g_free(swft); g_object_unref(parser); return; } node = json_parser_get_root(parser); if (node == NULL || json_node_get_node_type(node) != JSON_NODE_OBJECT) { g_free(swft->from); g_free(swft); g_object_unref(parser); purple_xfer_cancel_local(xfer); return; } obj = json_node_get_object(node); if (!json_object_has_member(obj, "id")) { g_free(swft->from); g_free(swft); g_object_unref(parser); purple_xfer_cancel_local(xfer); return; } swft->id = g_strdup(json_object_get_string_member(obj, "id")); swft->url = g_strconcat("https://" SKYPEWEB_XFER_HOST "/v1/objects/", purple_url_encode(swft->id), "/views/original/status", NULL); g_object_unref(parser); //Send the data //can't use fetch_url_request because it doesn't handle binary data //TODO make an error handler callback func purple_ssl_connect(sa->account, SKYPEWEB_XFER_HOST, 443, skypeweb_xfer_send_connect_cb, NULL, swft); //poll swft->url for progress purple_timeout_add_seconds(1, poll_file_send_progress, swft); }
int weibo_oauth_access(struct unim_login_info *login_info) { char *req_param, *reply; int rc = -1; int argc = 0; char **argv = NULL; char *postargs = NULL; int i; argc = oauth_split_url_parameters(login_info->access_token_uri, &argv); if (login_info->request_added_argc) { for (i = 0; i < login_info->request_added_argc; i++) { oauth_add_param_to_array(&argc, &argv, login_info->request_added_argv[i]); } } req_param = oauth_serialize_url_parameters(argc, argv); printf("req_param: %s\n", req_param); reply = oauth_http_post(login_info->access_token_uri, req_param); if (reply) { JsonParser *jparser; GError *err; gboolean rb; printf("HTTP-reply:\n\t%s\n", reply); jparser = json_parser_new(); rb = json_parser_load_from_data(jparser, reply, strlen(reply), &err); if (!rb) { printf("json parse failed! err: %s\n", err->message); g_object_unref(jparser); goto error_out; } JsonReader *jreader = json_reader_new(json_parser_get_root(jparser)); rb = json_reader_read_member(jreader, "access_token"); if (rb) { login_info->access_token_key = strdup(json_reader_get_string_value(jreader)); rc = 0; } g_object_unref(jreader); } error_out: if (req_param) free(req_param); if (reply) free(reply); if (postargs) free(postargs); return rc; }
JsonNode * json_node_from_call (RestProxyCall *call) { JsonParser *parser; JsonNode *root = NULL; JsonObject *obj = NULL; GError *error; gboolean ret = FALSE; const char *status; parser = json_parser_new (); if (call == NULL) goto out; if (!SOUP_STATUS_IS_SUCCESSFUL (rest_proxy_call_get_status_code (call))) { g_message ("Error from Google Map: %s (%d)", rest_proxy_call_get_status_message (call), rest_proxy_call_get_status_code (call)); goto out; } ret = json_parser_load_from_data (parser, rest_proxy_call_get_payload (call), rest_proxy_call_get_payload_length (call), &error); if (!ret) goto out; root = json_parser_get_root (parser); if (root == NULL) { g_message ("Error from Google Map: %s", rest_proxy_call_get_payload (call)); goto out; } /* check status */ obj = json_node_get_object (root); status = json_object_get_string_member (obj, "status"); if (g_strcmp0 (status, "OK") != 0) { g_message ("Error from Google Map: %s", status); root = NULL; goto out; } root = json_node_copy (root); out: g_object_unref (parser); return root; }
static void spin_web_json_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { WebJsonData* data = (WebJsonData*) user_data; static GRegex *string_literal_re; gchar *fixed = NULL; JsonParser *parser = NULL; GError *error = NULL; if(!url_text) { data->callback(url_data,data->userdata,NULL,error_message); goto exit; } if(!string_literal_re) /* TODO: race condition */ { GError* error = NULL; string_literal_re = g_regex_new ("(['\"])((?:(?!\\1)[^\\x00-\\x1f\\\\]||\\\\[\\\\/bfnrt]|\\\\\\1" "|\\\\u[0-9a-fA-F]{4}|\\\\[\\x20-\\xff])*)\\1",0,0,&error); g_assert(error == NULL); } parser = json_parser_new(); fixed = g_regex_replace(string_literal_re, url_text,len,0, "\"\\2\"",0,&error); g_assert(error == NULL); g_strstrip(fixed); json_parser_load_from_data(parser,fixed,-1,&error); if(error) { data->callback(url_data,data->userdata,NULL, error->message); g_error_free(error); } else { data->callback(url_data,data->userdata,json_parser_get_root(parser), NULL); } exit: if(parser) g_object_unref(parser); g_free(fixed); g_free(data); }
static void load_account_info_fill(gchar *key, gchar *value, GSList **accountlist) { FBAccountInfo *info = fb_account_info_init(); info->id = g_strdup(key); JsonParser *parser = json_parser_new(); json_parser_load_from_data(parser, value, strlen(value), NULL); JsonNode *root = json_parser_get_root(parser); JsonObject *obj = json_node_get_object(root); info->token = g_strdup(json_object_get_string_member(obj, "token")); info->username = g_strdup(json_object_get_string_member(obj, "username")); *accountlist = g_slist_prepend(*accountlist, info); g_object_unref(parser); }
gboolean tests_common_check_set (GHashTable *data, const gchar *id, GdaSet *set, GError **error) { gchar *s; const gchar *got = NULL; s = tests_common_set_serialize (set); if (id) got = g_hash_table_lookup (data, id); if (!got) { #ifdef HAVE_JSON_GLIB JsonParser *jparser; jparser = json_parser_new (); if (!json_parser_load_from_data (jparser, s, -1, NULL)) g_set_error (error, TEST_ERROR, TEST_ERROR_GENERIC, "Unknown ID '%s', GdaSet is: %s (JSON INVALID)\n", id, s); else { JsonGenerator *jgen; gchar *out; jgen = json_generator_new (); g_object_set (G_OBJECT (jgen), "pretty", TRUE, "indent", 5, NULL); json_generator_set_root (jgen, json_parser_get_root (jparser)); out = json_generator_to_data (jgen, NULL); g_set_error (error, TEST_ERROR, TEST_ERROR_GENERIC, "Unknown ID '%s', GdaSet is: %s\nJSON: %s\n", id, s, out); g_free (out); g_object_unref (jgen); } g_object_unref (jparser); #else g_set_error (error, TEST_ERROR, TEST_ERROR_GENERIC, "Unknown ID '%s', GdaSet is: %s\n", id, s); #endif g_free (s); g_object_unref (set); return FALSE; } if (strcmp (got, s)) { g_set_error (error, TEST_ERROR, TEST_ERROR_GENERIC, "GdaSet error:\nexp: %s\ngot: %s\n", got, s); g_free (s); g_object_unref (set); return FALSE; } g_free (s); return TRUE; }