// 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; }
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; }
/*! * Convert a JSON file into a tree of nodes. * * \param[out] node Tree representation of \p filename. * \param filename Absolute path to JSON file to parse. * * \return \c true on success, else \c false. */ bool clr_oci_json_parse (GNode** node, const gchar* filename) { bool result = false; GError* error = NULL; JsonParser* parser = NULL; JsonNode *root = NULL; if ((!node) || (!filename) || (!(*filename))) { return false; } parser = json_parser_new(); if (! json_parser_load_from_file(parser, filename, &error)) { g_debug("unable to parse '%s'", filename); if (error) { g_debug("Error parsing '%s': %s", filename, error->message); g_error_free(error); } goto exit; } root = json_parser_get_root (parser); if (! root) { goto exit; } *node = g_node_new(g_strdup(filename)); clr_oci_json_parse_aux(root, *node, false); result = true; exit: g_object_unref(parser); return result; }
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 void got_user_cb (RestProxyCall *call, const GError *error, GObject *weak_object, gpointer userdata) { SwService *service = SW_SERVICE (weak_object); SwServiceMySpace *myspace = SW_SERVICE_MYSPACE (service); JsonParser *parser = NULL; JsonNode *node; if (error) { g_message ("Error: %s", error->message); return; } parser = json_parser_new (); node = node_from_call (call, parser); if (node == NULL) return; construct_user_data (myspace, node); g_object_unref (node); g_object_unref (parser); sw_service_emit_capabilities_changed (service, get_dynamic_caps (service)); }
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 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); }
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); }
struct json_rpc_tt *json_rpc_tt_tcp_new(struct json_rpc *jr, struct bufevent *bufev, everrcb ecb, void *arg) { struct json_rpc_tt *jt = json_rpc_tt_new(jr); if (jt == NULL) return NULL; struct jrpc_bufevent *jb = (struct jrpc_bufevent *)malloc(sizeof(struct jrpc_bufevent)); if (jb == NULL) { free(jt); return NULL; } struct json_parser *jp = json_parser_new(json_objectcb, json_errorcb, jt); if (jp == NULL) { free(jb); free(jt); return NULL; } jb->bufev = bufev; jb->jp = jp; jb->err_cb = ecb; jb->cb_arg = arg; jt->impl = jb; jt->free = tt_bufevent_free; jt->write = tt_bufevent_write; bufevent_setcb(bufev, bufevent_readcb, NULL, bufevent_errorcb, jt); return jt; }
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 void gb_project_format_real_open_async (GbProjectFormat *format, const gchar *directory, GInputStream *stream, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; JsonParser *parser; ENTRY; simple = g_simple_async_result_new(G_OBJECT(format), callback, user_data, gb_project_format_real_open_async); g_object_set_data_full(G_OBJECT(simple), "directory", g_strdup(directory), g_free); parser = json_parser_new(); json_parser_load_from_stream_async(parser, stream, cancellable, gb_project_format_real_open_cb, simple); g_object_unref(parser); EXIT; }
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 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); }
/* 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; }
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 GType json_op_register_type_for_file (GTypeModule *type_module, const gchar *filepath) { GType ret = 0; GError *error = NULL; JsonParser *parser = json_parser_new(); const gboolean success = json_parser_load_from_file(parser, filepath, &error); if (success) { JsonNode *root_node = json_node_copy (json_parser_get_root (parser)); JsonObject *root = json_node_get_object (root_node); const gchar *name; gchar *type_name; g_assert(root_node); name = metadata_get_property(root, "name"); type_name = (name) ? component2gtypename(name) : component2gtypename(filepath); ret = json_op_register_type(type_module, type_name, root); g_free(type_name); } // g_object_unref(parser); return ret; }
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; }
/** * 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; }
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); }
static void _got_login_data (RestProxyCall *call, const GError *error, GObject *weak_object, gpointer userdata) { SwService *service = SW_SERVICE (weak_object); SwServicePlurk *plurk = SW_SERVICE_PLURK (service); JsonParser *parser = NULL; JsonNode *root; if (error) { // TODO sanity_check_date (call); g_message ("Error: %s", error->message); plurk->priv->credentials = CREDS_INVALID; sw_service_emit_capabilities_changed (service, get_dynamic_caps (service)); return; } plurk->priv->credentials = CREDS_VALID; parser = json_parser_new (); root = node_from_call (call, parser); construct_user_data (plurk, root); g_object_unref (root); sw_service_emit_capabilities_changed (service, get_dynamic_caps (service)); g_object_unref (call); }
/** * @brief Positive test case of json_parser_new() */ static void utc_libjson_json_parser_new_func_01(void) { JsonParser *parser = NULL; parser = json_parser_new (); dts_check_ne("json_parser_new", parser, NULL); g_object_unref (parser); }
static FBContext *fb_api_init() { FBContext *ctx = (FBContext*)g_malloc0(sizeof(FBContext)); ctx->curl_ctx = curl_easy_init(); ctx->errmsg = g_string_new(""); ctx->json_parser = json_parser_new(); return ctx; }
/*! * 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; }
gsweb_t json_parse_gsweb() { JsonParser *parser; JsonNode *root; JsonReader *reader; GError *error; int array_size = 0; const char * tmp; gsweb_t ret; memset(&ret, 0, sizeof(ret)); g_type_init(); parser = json_parser_new(); error = NULL; json_parser_load_from_file(parser, GTMPFILE, &error); if (error) { g_error_free(error); g_object_unref(parser); ret.success = 2; return ret; } root = json_parser_get_root(parser); reader = json_reader_new(root); json_reader_read_member (reader, "responseData"); json_reader_read_member (reader, "results"); array_size = json_reader_count_elements(reader); if (array_size > 0) { json_reader_read_element (reader, 0); json_reader_read_member (reader, "unescapedUrl"); tmp = json_reader_get_string_value (reader); strncpy(ret.url, tmp, (strlen(tmp) < BUFF_SIZE)?strlen(tmp):BUFF_SIZE); json_reader_end_member (reader); json_reader_read_member (reader, "titleNoFormatting"); tmp = json_reader_get_string_value (reader); strncpy(ret.title, tmp, (strlen(tmp) < BUFF_SIZE)?strlen(tmp):BUFF_SIZE); json_reader_end_member (reader); json_reader_read_member (reader, "content"); tmp = json_reader_get_string_value (reader); strncpy(ret.content, tmp, (strlen(tmp) < BUFF_SIZE)?strlen(tmp):BUFF_SIZE); json_reader_end_member (reader); json_reader_end_element (reader); ret.success = 0; } else ret.success = 1; json_reader_end_member (reader); json_reader_end_member (reader); g_object_unref(parser); g_object_unref(reader); 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; }
GssAdaptive * gss_adaptive_load (GssServer * server, const char *key, const char *dir, const char *version, GssDrmType drm_type, GssAdaptiveStream stream_type) { GssAdaptive *adaptive; char *filename; gboolean ret; GError *error = NULL; JsonParser *parser; g_return_val_if_fail (GSS_IS_SERVER (server), NULL); g_return_val_if_fail (key != NULL, NULL); g_return_val_if_fail (dir != NULL, NULL); GST_DEBUG ("looking for %s", key); parser = json_parser_new (); filename = g_strdup_printf ("%s/gss-manifest", dir); ret = json_parser_load_from_file (parser, filename, &error); if (!ret) { GST_DEBUG ("failed to open %s", filename); g_free (filename); g_object_unref (parser); g_error_free (error); return NULL; } g_free (filename); GST_DEBUG ("loading %s", key); adaptive = gss_adaptive_new (); adaptive->server = server; adaptive->content_id = g_strdup (key); adaptive->kid = create_key_id (key); adaptive->kid_len = 16; adaptive->drm_type = drm_type; adaptive->stream_type = stream_type; gss_playready_generate_key (server->playready, adaptive->content_key, adaptive->kid, adaptive->kid_len); ret = parse_json (adaptive, parser, dir, version); if (!ret) { gss_adaptive_free (adaptive); g_object_unref (parser); GST_WARNING ("json format error in %s/gss-manifest", dir); return NULL; } g_object_unref (parser); GST_DEBUG ("loading done"); return adaptive; }
/** * @brief Negative test case of ug_init json_parser_new() */ static void utc_libjson_json_parser_new_func_02(void) { JsonParser *parser = NULL; parser = json_parser_new(); dts_check_eq("json_parser_new", JSON_IS_PARSER(parser), TRUE); g_object_unref (parser); }