19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __PARSER_REL_H__
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __PARSER_REL_H__
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" {
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <drm_common_types.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define WRITE_RO_FLAG(whoIsAble, boolValue, Indicator, RIGHTS) do{\
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    whoIsAble = boolValue;\
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Indicator |= RIGHTS;\
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}while(0)
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CHECK_VALIDITY(ret) do{\
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if(ret == NULL){\
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if(XML_ERROR_NO_SUCH_NODE != xml_errno)\
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return FALSE;\
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }\
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    else\
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {\
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if(XML_ERROR_OK != xml_errno)\
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return FALSE;\
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }\
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}while(0)
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define YMD_HMS_2_INT(year, mon, day, date, hour, min, sec, time) do{\
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    date = year * 10000 + mon * 100 + day;\
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    time = hour * 10000 + min * 100 + sec;\
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}while(0)
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_UID_LEN         256
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_KEY_LEN         16
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define XML_DOM_PARSER
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_DATETIME {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t date; /**< year * 10000 + mon *100 + day */
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t time; /**< hour * 10000 + min *100 + sec */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_DATETIME;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Rights_Constraint {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t Indicator;          /**< Indicate which is constrainted, the first one indicate 0001, second one indicate 0010 */
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t unUsed[3];
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t Count;              /**< The times that can be used */
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_DATETIME StartTime;   /**< The starting time */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_DATETIME EndTime;     /**< The ending time */
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_DATETIME Interval;    /**< The interval time */
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Rights_Constraint;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Rights {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t Version[8];                         /**< Version number */
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t uid[256];                           /**< record the rights object name */
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint8_t KeyValue[16];                       /**< Decode base64 */
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t bIsPlayable;                        /**< Is playable */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t bIsDisplayable;                     /**< Is displayable */
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t bIsExecuteable;                     /**< Is executeable */
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int32_t bIsPrintable;                       /**< Is printable */
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_Rights_Constraint PlayConstraint;     /**< Play constraint */
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_Rights_Constraint DisplayConstraint;  /**< Display constraint */
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_Rights_Constraint ExecuteConstraint;  /**< Execute constraint */
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    T_DRM_Rights_Constraint PrintConstraint;    /**< Print constraint */
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Rights;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Input year and month, return how many days that month have
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param year          (in)Input the year
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param month         (in)Input the month
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -A positive integer, which is how many days that month have
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -When wrong input, return -1
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t drm_monthDays(int32_t year, int32_t month);
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check whether the date and time is valid.
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param year          year of the date
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param month         month of the date
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param day           day of the date
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param hour          hour of the time
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param min           minute of the time
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param sec           second of the time
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -when it is a valid time, return 0
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -when it is a invalid time, return -1
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t drm_checkDate(int32_t year, int32_t month, int32_t day, int32_t hour, int32_t min, int32_t sec);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parse the rights object include xml format and wbxml format data
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param buffer        (in)Input the DRM rights object data
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param bufferLen     (in)The buffer length
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param format        (in)Which format, xml or wbxml
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param pRights       (out)A structure pointer which save the rights information
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -TRUE, when success
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      -FALSE, when failed
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t drm_relParser(uint8_t* buffer, int32_t bufferLen, int32_t Format, T_DRM_Rights* pRights);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* __PARSER_REL_H__ */
124