⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsmcc.c

📁 Red-Button
💻 C
字号:
/* * dsmcc.c * * helper functions for handling data types for ISO/IEC 13818-6 DSM-CC specs *//* * Copyright (C) 2005, Simon Kilvington * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA */#include <netinet/in.h>#include "dsmcc.h"#include "utils.h"/* * return a ptr to the message following the dsmccMessageHeader */unsigned char *dsmccMessage(struct dsmccMessageHeader *hdr){	unsigned char *byte = (unsigned char *) hdr;	unsigned int offset;	offset = sizeof(struct dsmccMessageHeader);	offset += hdr->adaptionLength;	return &byte[offset];}/* * return the numberOfModules field in a DownloadInfoIndication */uint16_tDII_numberOfModules(struct DownloadInfoIndication *dii){	unsigned char *byte = (unsigned char *) dii;	unsigned int offset;       	offset = sizeof(struct DownloadInfoIndication);	offset += ntohs(dii->compatibilityDescriptor.compatibilityDescriptorLength);	/* uint16_t numberOfModules */	return (byte[offset] << 8) + byte[offset + 1];}/* * return info for module n in a DownloadInfoIndication * numbering starts at 0 */struct DIIModule *DII_module(struct DownloadInfoIndication *dii, uint16_t n){	unsigned char *byte = (unsigned char *) dii;	unsigned int offset;	struct DIIModule *mod;	/* assert */	if(n >= DII_numberOfModules(dii))		fatal("DII_module: index too large");	/* offset to first module */	offset = sizeof(struct DownloadInfoIndication);	offset += ntohs(dii->compatibilityDescriptor.compatibilityDescriptorLength);	offset += sizeof(uint16_t);	/* numberOfModules */	/* find the module we want */	while(n != 0)	{		n --;		mod = (struct DIIModule *) &byte[offset];		offset += sizeof(struct DIIModule);		offset += mod->moduleInfoLength;	}	return (struct DIIModule *) &byte[offset];}/* * returns the number of bytes of data in the DDB block */uint32_tDDB_blockDataLength(struct dsmccMessageHeader *hdr){	uint32_t length;	length = ntohs(hdr->messageLength);	length -= hdr->adaptionLength;	length -= sizeof(struct DownloadDataBlock);	return length;}/* * returns a ptr to the data bytes in the DDB block */unsigned char *DDB_blockDataByte(struct DownloadDataBlock *ddb){	return ((unsigned char *) ddb) + sizeof(struct DownloadDataBlock);}/* * returns a ptr to the private data bytes in the DSI block */unsigned char *DSI_privateDataByte(struct DownloadServerInitiate *dsi){	/* assert */	if(dsi->compatibilityDescriptor.compatibilityDescriptorLength != 0)		fatal("Unexpected DSI format");	return ((unsigned char *) dsi) + sizeof(struct DownloadServerInitiate);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -