1791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang/*
2791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Copyright (C) 2014 The Android Open Source Project
3791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
4791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * you may not use this file except in compliance with the License.
6791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * You may obtain a copy of the License at
7791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
8791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang *
10791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * Unless required by applicable law or agreed to in writing, software
11791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * See the License for the specific language governing permissions and
14791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang * limitations under the License.
15791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang */
16791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#ifndef JSON_ASSET_LOADER_H_
17791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#define JSON_ASSET_LOADER_H_
18791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
19791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <media/stagefright/foundation/ABase.h>
20791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <utils/KeyedVector.h>
21791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <utils/String8.h>
22791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include <utils/StrongPointer.h>
23791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include "protos/license_protos.pb.h"
24791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
25791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#include "jsmn.h"
26791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
27791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangnamespace android {
28791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangstruct ABuffer;
29791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
30791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangnamespace clearkeycas {
31791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
32791a1a206b56be8601a6fffd2614926e67d64790Chong Zhangclass JsonAssetLoader {
33791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang public:
34791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    JsonAssetLoader();
35791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    virtual ~JsonAssetLoader();
36791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
37791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    status_t extractAssetFromString(
38791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const String8& jsonAssetString, Asset *asset);
39791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
40791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang private:
41791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    Vector<jsmntok_t> mJsmnTokens;
42791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    Vector<String8> mJsonObjects;
43791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    Vector<String8> mTokens;
44791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
45791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    static sp<ABuffer> decodeBase64String(
46791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const String8& encodedText);
47791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    bool findKey(const String8& jsonObject, Asset *asset);
48791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    void findValue(
49791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const String8 &key, String8* value);
50791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    bool parseJsonObject(
51791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const String8& jsonObject, Vector<String8>* tokens);
52791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    bool parseJsonAssetString(
53791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang            const String8& jsonString, Vector<String8>* jsonObjects);
54791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
55791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang    DISALLOW_EVIL_CONSTRUCTORS(JsonAssetLoader);
56791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang};
57791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
58791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang}  // namespace clearkeycas
59791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang}  // namespace android
60791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang
61791a1a206b56be8601a6fffd2614926e67d64790Chong Zhang#endif  // JSON_ASSET_LOADER_H_
62