+Descriptor::Descriptor(byte* data, int startIndex)throw(std::invalid_argument)
+{
+ if (strlen(data) < 2)
+ throw std::invalid_argument("Invalid descriptor");
+ if (startIndex + 2 + data[startIndex + 1] > strlen(data))
+ throw std::invalid_argument("Invalid descriptor");
+ mData = new byte[2 + data[startIndex + 1]];
+ for (int i = 0; i < strlen(mData); i++)
+ mData[i] = data[i + startIndex];
+}
+
+byte Descriptor::GetTag(void)
+{
+ return mData[0];
+}
+
+byte Descriptor::GetLength(void)
+{
+ return mData[1];
+}
+
+byte* Descriptor::GetData(void)
+{
+ return mData;
+}
+
} // namespace
class Descriptor {
public:
- Descriptor(byte* data, int startIndex);
+ Descriptor(byte* data, int startIndex)throw(std::invalid_argument);
+ byte* GetData(void);
+ byte GetTag(void);
+ byte GetLength(void);
+ private:
+ byte* mData;
};
class DTCP_Descriptor : Descriptor {