Exemple #1
1
// 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;
}
Exemple #5
0
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;
}
Exemple #7
0
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;
}
Exemple #9
0
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;
}
Exemple #10
0
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);
}
Exemple #11
0
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);
}
Exemple #13
0
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;
}
Exemple #14
0
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);
}
Exemple #15
0
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;
}
Exemple #23
0
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);
}
Exemple #24
0
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;
}
Exemple #25
0
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);
}
Exemple #26
0
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;
}
Exemple #27
0
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;
}
Exemple #28
0
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);
}
Exemple #29
0
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);
}
Exemple #30
0
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;
}