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

📄 dsmcc-descriptor.c

📁 Parses UK Profile 1.05/1.06 Object Carousel and saves files to disk (all stored under /tmp/cache at
💻 C
字号:
#include <stdlib.h>#include <vdr/receiver.h>#include "dsmcc-descriptor.h"FILE *desc_fd;voidFreeDescriptor(struct descriptor *desc) {		free(desc);}voidProcessDescriptorType(uchar *Data, struct descriptor *desc) {	struct descriptor_type *type = &desc->data.type;	type->text = (char *)malloc(desc->len);	memcpy(type->text, Data, desc->len);}voidProcessDescriptorName(uchar *Data, struct descriptor *desc) {	struct descriptor_name *name = &desc->data.name;	name->text = (char *)malloc(desc->len);	memcpy(name->text, Data, desc->len);}voidProcessDescriptorInfo(uchar *Data, struct descriptor *desc) {	struct descriptor_info *info = &desc->data.info;	memcpy(info->lang_code, Data, 3);	info->text = (char *)malloc(desc->len - 3);	memcpy(info->text, Data+3, desc->len - 3);}voidProcessDescriptorModlink(uchar *Data, struct descriptor *desc) {	struct descriptor_modlink *modlink = &desc->data.modlink;	modlink->position = Data[0];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Modlink -> Position = %d\n", modlink->position);	modlink->module_id = (Data[1] << 8) | Data[2];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Modlink -> Mod Id = %d\n", modlink->module_id);}voidProcessDescriptorCrc32(uchar *Data, struct descriptor *desc) {	struct descriptor_crc32 *crc32 = &desc->data.crc32;	crc32->crc = (Data[0] << 24) | (Data[1] << 16) | (Data[2] << 8) |			Data[3];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> CRC32 -> CRC = %ld\n", crc32->crc);}voidProcessDescriptorLocation(uchar *Data, struct descriptor *desc) {	struct descriptor_location *location = &desc->data.location;	location = new descriptor_location;	location->location_tag = Data[0];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Location -> Tag = %d\n", location->location_tag);}voidProcessDescriptorDltime(uchar *Data, struct descriptor *desc) {	struct descriptor_dltime *dltime = &desc->data.dltime;	dltime->download_time = (Data[0] << 24) | (Data[1] << 16) |				(Data[2] << 8 ) | Data[3];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Download -> Time = %ld\n", dltime->download_time);}voidProcessDescriptorGrouplink(uchar *Data, struct descriptor *desc) {	struct descriptor_grouplink *grouplink = &desc->data.grouplink;	grouplink->position = Data[0];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Grouplink -> Position = %d\n", grouplink->position);	grouplink->group_id = (Data[1] << 24) | (Data[2] << 16) |			      (Data[3] << 8 ) | Data[4];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Grouplink -> Group Id = %ld\n", grouplink->group_id);}voidProcessDescriptorCompressed(uchar *Data, struct descriptor *desc) {	struct descriptor_compressed *compressed = &desc->data.compressed;	compressed->method = Data[0];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Compressed -> Method = %d\n", compressed->method);	compressed->original_size = (Data[1] << 24) | (Data[2] << 16) |				    (Data[3] << 8)  | Data[4];//	fprintf(desc_fd, "Info -> Module -> Descriptor -> Compressed -> Size = %ld\n", compressed->original_size);}/*struct descriptor_private *ProcessDescriptorPrivate(uchar *Data, struct descriptor *desc) {	struct descriptor_private *private = &desc->data.private;	private = new descriptor_private;	private->descriptor = (char *)malloc(desc->len);	memcpy(private->descriptor, Data, desc->len);	return private;}*/struct descriptor *ProcessDescriptor(uchar *Data, int *offset) {	struct descriptor *desc;	int off=0;	desc = new descriptor;	desc->tag = Data[0];	desc->len = Data[1];/*	fprintf(desc_fd, "Info -> Module -> Descriptor -> Tag = %d\n", 				desc->tag);	fprintf(desc_fd, "Info -> Module -> Descriptor -> Length = %d\n", 				desc->len);					fflush(desc_fd);*/	off += 2;	switch(desc->tag) {		case 0x01:			ProcessDescriptorType(Data+2, desc);			break;		case 0x02:			ProcessDescriptorName(Data+2, desc);			break;		case 0x03:			ProcessDescriptorInfo(Data+2, desc);			break;		case 0x04:			ProcessDescriptorModlink(Data+2, desc);			break;		case 0x05:			ProcessDescriptorCrc32(Data+2, desc);			break;		case 0x06:			ProcessDescriptorLocation(Data+2, desc);			break;		case 0x07:			ProcessDescriptorDltime(Data+2, desc);			break;		case 0x08:			ProcessDescriptorGrouplink(Data+2, desc);			break;		case 0x09:			ProcessDescriptorCompressed(Data+2, desc);			break;			/*		case 0x0A:	Subgroup Association			*/		default:			break;/*			if(desc->tag >= 0x80 && 					desc->tag <= 0xFF)				ProcessDescriptorPrivate(Data+2, desc);			}  else if( MHP tag ) */	}	off+= desc->len;	*offset += off;	return desc;}struct descriptor *ProcessDescriptors(uchar *Data, int data_len, int *offset){	int index = 0;	struct descriptor *desc, *last;	//	desc_fd = fopen("/tmp/desc.debug", "a");	desc = last = NULL;	while(data_len > index) {//		fprintf(desc_fd, "Data_len %d Index %d\n", data_len, index);		desc = ProcessDescriptor(Data+index, &index);		if(last == NULL) {			last = desc;		} else {			last->next = desc;			last = desc;		}	}	if(last) 		last->next = NULL;			*offset += index;//	fclose(desc_fd);	return desc;}

⌨️ 快捷键说明

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