blob: 0bf0a973c169f59c4cdbc4ac61f1d95b0746db35 [file] [log] [blame]
/*
* 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