215 lines
5.5 KiB
C++
215 lines
5.5 KiB
C++
/*
|
|
* 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
|