📄 ipmpx_dump.c
字号:
/* * GPAC - Multimedia Framework C SDK * * Copyright (c) Jean Le Feuvre 2000-2005 * All rights reserved * * This file is part of GPAC / MPEG-4 ObjectDescriptor sub-project * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <gpac/internal/odf_dev.h>#define GF_IPMPX_MAX_TREE 100#define GF_IPMPX_FORMAT_INDENT( ind_buf, indent ) \ { \ u32 z; \ assert(GF_IPMPX_MAX_TREE>indent); \ for (z=0; z<indent; z++) ind_buf[z] = ' '; \ ind_buf[z] = 0; \ } \static void StartList(FILE *trace, const char *name, u32 indent, Bool XMTDump){ char ind_buf[GF_IPMPX_MAX_TREE]; GF_IPMPX_FORMAT_INDENT(ind_buf, indent); if (XMTDump) { fprintf(trace, "%s<%s>\n", ind_buf, name); } else { fprintf(trace, "%s%s [\n", ind_buf, name); }}static void EndList(FILE *trace, const char *name, u32 indent, Bool XMTDump){ char ind_buf[GF_IPMPX_MAX_TREE]; GF_IPMPX_FORMAT_INDENT(ind_buf, indent); if (XMTDump) { fprintf(trace, "%s</%s>\n", ind_buf, name); } else { fprintf(trace, "%s]\n", ind_buf); }}static void StartElement(FILE *trace, const char *descName, u32 indent, Bool XMTDump){ char ind_buf[GF_IPMPX_MAX_TREE]; GF_IPMPX_FORMAT_INDENT(ind_buf, indent); fprintf(trace, "%s", ind_buf); if (!XMTDump) { fprintf(trace, "%s {\n", descName); } else { fprintf(trace, "<%s ", descName); }}static void EndAttributes(FILE *trace, Bool XMTDump, Bool has_children){ if (XMTDump) { if (has_children) { fprintf(trace, ">\n"); } else { fprintf(trace, "/>\n"); } }}static void EndElement(FILE *trace, const char *descName, u32 indent, Bool XMTDump){ char ind_buf[GF_IPMPX_MAX_TREE]; GF_IPMPX_FORMAT_INDENT(ind_buf, indent); fprintf(trace, "%s", ind_buf); if (!XMTDump) { fprintf(trace, "}\n"); } else { fprintf(trace, "</%s>\n", descName); }}static void StartAttribute(FILE *trace, const char *attName, u32 indent, Bool XMTDump){ char ind_buf[GF_IPMPX_MAX_TREE]; GF_IPMPX_FORMAT_INDENT(ind_buf, indent); if (!XMTDump) { fprintf(trace, "%s%s ", ind_buf, attName); } else { fprintf(trace, "%s=\"", attName); }}static void EndAttribute(FILE *trace, u32 indent, Bool XMTDump){ if (!XMTDump) { fprintf(trace, "\n"); } else { fprintf(trace, "\" "); }}static void DumpInt(FILE *trace, char *attName, u32 val, u32 indent, Bool XMTDump){ if (!val) return; StartAttribute(trace, attName, indent, XMTDump); fprintf(trace, "%d", val); EndAttribute(trace, indent, XMTDump);}static void DumpLargeInt(FILE *trace, char *attName, u64 val, u32 indent, Bool XMTDump){ if (!val) return; StartAttribute(trace, attName, indent, XMTDump); fprintf(trace, LLD, val); EndAttribute(trace, indent, XMTDump);}static void DumpBool(FILE *trace, char *attName, u32 val, u32 indent, Bool XMTDump){ if (!val) return; StartAttribute(trace, attName, indent, XMTDump); fprintf(trace, "%s", val ? "true" : "false"); EndAttribute(trace, indent, XMTDump);}static void DumpData(FILE *trace, const char *name, char *data, u32 dataLength, u32 indent, Bool XMTDump){ u32 i; Bool ASCII_Dump; if (!name && !data) return; if (name) StartAttribute(trace, name, indent, XMTDump); if (!XMTDump) fprintf(trace, "\""); ASCII_Dump = 1; for (i=0; i<dataLength; i++) { if ((data[i]<32) || (data[i]>126)) { ASCII_Dump = 0; break; } } if (!ASCII_Dump && XMTDump) fprintf(trace, "data:application/octet-string,"); for (i=0; i<dataLength; i++) { if (ASCII_Dump) { fprintf(trace, "%c", (unsigned char) data[i]); } else { fprintf(trace, "%%"); fprintf(trace, "%02X", (unsigned char) data[i]); } } if (!XMTDump) fprintf(trace, "\""); if (name) EndAttribute(trace, indent, XMTDump);}static void DumpData_16(FILE *trace, char *name, u16 *data, u16 dataLength, u32 indent, Bool XMTDump){ u32 i; if (!name && !data) return; if (name) StartAttribute(trace, name, indent, XMTDump); if (!XMTDump) fprintf(trace, "\""); for (i=0; i<dataLength; i++) { if (XMTDump) { fprintf(trace, "\'%d\'", data[i]); if (i+1<dataLength) fprintf(trace, " "); } else { fprintf(trace, "%d", data[i]); if (i+1<dataLength) fprintf(trace, ", "); } } if (!XMTDump) fprintf(trace, "\""); if (name) EndAttribute(trace, indent, XMTDump);}static void DumpBin128(FILE *trace, char *name, char *data, u32 indent, Bool XMTDump){ u32 i; if (!name ||!data) return; StartAttribute(trace, name, indent, XMTDump); fprintf(trace, "0x"); i=0; while (!data[i] && (i<16)) i++; if (i==16) { fprintf(trace, "00"); } else { for (; i<16; i++) fprintf(trace, "%02X", (unsigned char) data[i]); } EndAttribute(trace, indent, XMTDump);}static void DumpDate(FILE *trace, char *name, char *data, u32 indent, Bool XMTDump){ u32 i; if (!name ||!data) return; StartAttribute(trace, name, indent, XMTDump); fprintf(trace, "0x"); for (i=0; i<5; i++) fprintf(trace, "%02X", (unsigned char) data[i]); EndAttribute(trace, indent, XMTDump);}void gf_ipmpx_dump_ByteArray(GF_IPMPX_ByteArray *_p, const char *attName, FILE *trace, u32 indent, Bool XMTDump){ if (_p && _p->data) { if (XMTDump) { StartElement(trace, attName ? attName : (char*)"ByteArray", indent, XMTDump); indent++; DumpData(trace, "array", _p->data, _p->length, indent, XMTDump); indent--; EndAttributes(trace, 1, 0); } else { DumpData(trace, attName ? attName : "ByteArray", _p->data, _p->length, indent, 0); } }}void gf_ipmpx_dump_AUTH(GF_IPMPX_Authentication *ipa, FILE *trace, u32 indent, Bool XMTDump){ switch (ipa->tag) { case GF_IPMPX_AUTH_KeyDescr_Tag: { GF_IPMPX_AUTH_KeyDescriptor *p = (GF_IPMPX_AUTH_KeyDescriptor *)ipa; StartElement(trace, "IPMP_KeyDescriptor", indent, XMTDump); DumpData(trace, "keyBody", p->keyBody, p->keyBodyLength, indent+1, XMTDump); if (XMTDump) EndAttributes(trace, 1, 0); else EndElement(trace, "", indent, 0); } break; case GF_IPMPX_AUTH_AlgorithmDescr_Tag: { GF_IPMPX_AUTH_AlgorithmDescriptor *p = (GF_IPMPX_AUTH_AlgorithmDescriptor *)ipa; StartElement(trace, "IPMP_AlgorithmDescriptor", indent, XMTDump); if (p->regAlgoID) { DumpInt(trace, "regAlgoID", p->regAlgoID, indent+1, XMTDump); } else { gf_ipmpx_dump_ByteArray(p->specAlgoID, "specAlgoID", trace, indent+1, XMTDump); } EndAttributes(trace, XMTDump, 1); if (p->OpaqueData) gf_ipmpx_dump_ByteArray(p->OpaqueData, "OpaqueData", trace, indent+1, XMTDump); EndElement(trace, "IPMP_AlgorithmDescriptor", indent, XMTDump); } break; }}void gf_ipmpx_dump_BaseData(GF_IPMPX_Data *_p, FILE *trace, u32 indent, Bool XMTDump){#if 0 if (XMTDump) { StartElement(trace, "IPMP_BaseData", indent, XMTDump); DumpInt(trace, "dataID", _p->dataID, indent, 1); DumpInt(trace, "Version", _p->Version, indent, 1); EndLeafAttribute(trace, indent, XMTDump); } else { DumpInt(trace, "dataID", _p->dataID, indent, 0); DumpInt(trace, "Version", _p->Version, indent, 0); }#endif}GF_Err gf_ipmpx_dump_OpaqueData(GF_IPMPX_Data *_p, FILE *trace, u32 indent, Bool XMTDump){ GF_IPMPX_OpaqueData *p = (GF_IPMPX_OpaqueData *)_p; StartElement(trace, (p->tag==GF_IPMPX_RIGHTS_DATA_TAG) ? "IPMP_RightsData" : "IPMP_OpaqueData", indent, XMTDump); indent++; EndAttributes(trace, XMTDump, 1); gf_ipmpx_dump_BaseData(_p, trace, indent, XMTDump); gf_ipmpx_dump_ByteArray(p->opaqueData, (p->tag==GF_IPMPX_RIGHTS_DATA_TAG) ? "rightsInfo" : "opaqueData", trace, indent, XMTDump); indent--; EndElement(trace, (p->tag==GF_IPMPX_RIGHTS_DATA_TAG) ? "IPMP_RightsData" : "IPMP_OpaqueData", indent, XMTDump); return GF_OK;}GF_Err gf_ipmpx_dump_KeyData(GF_IPMPX_Data *_p, FILE *trace, u32 indent, Bool XMTDump){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -