| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef _RO_H_ |
| #define _RO_H_ |
| |
| #include <rights/Asset.h> |
| #include <rights/Right.h> |
| #include <uvector.h> |
| #include <ustring.h> |
| #include <sistream.h> |
| using namespace ustl; |
| |
| class Asset; |
| class XMLDocumentImpl; |
| class XMLElementImpl; |
| class NodeImpl; |
| |
| class Ro { |
| public: |
| enum ERRCODE { RO_NULL_STREAM, RO_ERR_BAD_XML, RO_OK, RO_BAD }; |
| |
| /** |
| * Constructor for Ro. |
| */ |
| Ro(); |
| |
| /** |
| * Destructor for Ro. |
| */ |
| ~Ro(); |
| |
| /** |
| * Set id for Ro. |
| * @param id the id of Ro. |
| */ |
| void setRoID(string &id); |
| |
| /** |
| * Get the id of Ro. |
| * @return the id of Ro. |
| */ |
| const string& getRoID() const; |
| |
| /** |
| * Set version for Ro. |
| */ |
| void setRoVersion(string &version); |
| |
| /** |
| * Add a asset into ro's asset list. |
| * @param asset the pointer of asset. |
| */ |
| void addAsset(Asset* asset); |
| |
| /** |
| * Add a right into ro's right list. |
| * @param right the pointer of right. |
| */ |
| void addRight(Right* right); |
| |
| /** |
| * Save the Ro. |
| */ |
| bool save(); |
| |
| /** |
| * Verify the Ro. |
| */ |
| bool verify(); |
| |
| /** |
| * Parse the ro from stream. |
| * @param roStream the input ro stream. |
| * @return RO_OK if parse successfully otherwise return error code. |
| */ |
| ERRCODE parse(istringstream *roStream); |
| |
| /** |
| * Check the permission of the content. |
| * @param type the operation type. |
| * @param contentID the specific contentID. |
| * @return true/false to indicate result. |
| */ |
| bool checkPermission(OperationPermission::OPERATION type, |
| const string& contentID); |
| |
| /** |
| * Consume the right related to content. |
| * @param type the operation type. |
| * @param contentID the specific contentID. |
| * @return the status of consume. |
| */ |
| ERRCODE consume(OperationPermission::OPERATION type, |
| const string& contentID); |
| |
| /** |
| * Get CEK of content. |
| * @param contentID the specific content id. |
| * @return "" if not found otherwise return CEK. |
| */ |
| string getContentCek(const string& contentID); |
| |
| /** |
| * Get Digest value of content. |
| * @param contentID the specific content id. |
| * @return "" if not found otherwise return digest value. |
| */ |
| string getContentHash(const string& contentID); |
| |
| PRIVATE: |
| /** |
| * Handle the xml dom document. |
| * @param doc the pointer to the dom document. |
| * @return true/false to indicate the result. |
| */ |
| bool handleDocument(const XMLDocumentImpl* doc); |
| |
| /** |
| * Handle the xml dom node which contains <right> element. |
| * @param curNode the dom node which contains <right> element. |
| * @return true/false to indicate the result. |
| */ |
| bool handleRights(const NodeImpl *curNode); |
| |
| /** |
| * Handle the xml dom node which contains the <agreement> element. |
| * @param curNode the dom node which contains <agreement> element. |
| * @return true/false to indicate the result. |
| */ |
| bool handleAgreement(const NodeImpl *curNode); |
| |
| /** |
| * Handle the xml dom node which contains the <asset> element. |
| * @param curNode the dom node which contains <asset> element. |
| * @return true/false to indicate the result. |
| */ |
| bool handleAsset(const NodeImpl *curNode); |
| |
| /** |
| * Handle the xml dom node which contains the <permission> element. |
| * @param curNode the dom node which contains <permission> element. |
| * @return true/false to indicate the result. |
| */ |
| bool handlePermission(const NodeImpl *curNode); |
| |
| /** |
| * Get the constraint in xml dom node. |
| * @param curNode the dom node which contains constraint. |
| * @return the constraint. |
| */ |
| Constraint* getConstraint(const NodeImpl *curNode); |
| |
| /** |
| * Convert ISO8601 time to long. |
| * @param ts the string with ISO8601 time. |
| * @return the result value. |
| */ |
| long convertISO8601DateTimeToLong(const char* ts); |
| |
| /** |
| * Convert ISO8601 period to long. |
| * @param ts the string with ISO8601 period. |
| * @return the result value. |
| */ |
| long convertISO8601PeriodToLong(const char* ts); |
| |
| /** |
| * Load the rights related with specific contentinto content rights list. |
| * @param contentID the specific content id. |
| */ |
| void loadRights(const string& contentID); |
| |
| /** |
| * Free the current content rights list. |
| */ |
| void freeRights(); |
| |
| PRIVATE: |
| /** |
| * Disable the assignment between rights. |
| */ |
| Ro& operator=(const Ro& ro); |
| |
| /** |
| * Disable copy constructor. |
| */ |
| Ro(const Ro& ro); |
| |
| public: |
| vector<Asset*> mAssetList; |
| vector<Right*> mRightList; |
| |
| PRIVATE: |
| string mRoID; /** the Ro id. */ |
| string mRoVersion; /** the Ro version. */ |
| XMLDocumentImpl *mDoc; /**< the xml document handle. */ |
| vector<Right*> mContentRightList; /**< the right list to store the result related with specific content. */ |
| Right* mProperRight; /**< the right to consume. */ |
| }; |
| #endif |