static gboolean parse_regnode()

in chime/chime-connection.c [399:481]


static gboolean parse_regnode(ChimeConnection *self, JsonNode *regnode)
{
	ChimeConnectionPrivate *priv = CHIME_CONNECTION_GET_PRIVATE (self);
	JsonObject *obj = json_node_get_object(priv->reg_node);
	JsonNode *node, *sess_node = json_object_get_member(obj, "Session");
	const gchar *sess_tok;
	char *express_url, *p;

	if (!sess_node)
		return FALSE;
	if (!parse_string(sess_node, "SessionToken", &sess_tok))
		return FALSE;

	chime_connection_set_session_token(self, sess_tok);

	if (!parse_string(sess_node, "SessionId", &priv->session_id))
		return FALSE;

	obj = json_node_get_object(sess_node);

	node = json_object_get_member(obj, "Profile");
	if (!parse_string(node, "profile_channel", &priv->profile_channel) ||
	    !parse_string(node, "presence_channel", &priv->presence_channel) ||
	    !parse_string(node, "id", &priv->profile_id) ||
	    !parse_string(node, "display_name", &priv->display_name) ||
	    !parse_string(node, "email", &priv->email))
		return FALSE;

	node = json_object_get_member(obj, "Device");
	if (!parse_string(node, "DeviceId", &priv->device_id) ||
	    !parse_string(node, "Channel", &priv->device_channel))
		return FALSE;

	node = json_object_get_member(obj, "ServiceConfig");
	if (!node)
		return FALSE;
	obj = json_node_get_object(node);

	node = json_object_get_member(obj, "Presence");
	if (!parse_string(node, "RestUrl", &priv->presence_url))
		return FALSE;

	node = json_object_get_member(obj, "Push");
	if (!parse_string(node, "ReachabilityUrl", &priv->reachability_url) ||
	    !parse_string(node, "WebsocketUrl", &priv->websocket_url))
		return FALSE;

	node = json_object_get_member(obj, "Profile");
	if (!parse_string(node, "RestUrl", &priv->profile_url))
		return FALSE;

	node = json_object_get_member(obj, "Contacts");
	if (!parse_string(node, "RestUrl", &priv->contacts_url))
		return FALSE;

	node = json_object_get_member(obj, "Messaging");
	if (!parse_string(node, "RestUrl", &priv->messaging_url))
		return FALSE;

	node = json_object_get_member(obj, "Presence");
	if (!parse_string(node, "RestUrl", &priv->presence_url))
		return FALSE;

	node = json_object_get_member(obj, "Conference");
	if (!parse_string(node, "RestUrl", &priv->conference_url))
		return FALSE;

	node = json_object_get_member(obj, "Feature");
	if (!parse_string(node, "RestUrl", &priv->feature_url))
		return FALSE;

	/* Ick. How are we supposed to discover this? */
	express_url = g_strdup(priv->feature_url);
        p = strstr(express_url, "feature");
	if (!p) {
		g_free(express_url);
		return FALSE;
	}
	memcpy(p, "express", 7);
	priv->express_url = express_url;

	return TRUE;
}