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

📄 mbus_config.c

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 C
📖 第 1 页 / 共 2 页
字号:
		abort();
	}
	
	line = (char *) xmalloc(s.st_size+1);
	sscanf(buf, "%s", line);
	if (strcmp(line, "[MBUS]") != 0) {
		debug_msg("Invalid .mbus file\n");
		abort();
	}
	pos = strlen(line) + 1;
	while (pos < s.st_size) {
                /* get whole line and filter out spaces */
                /* this is good enough for getting keys */
                linepos=0;
                do {
                    while((buf[pos+linepos]==' ')||(buf[pos+linepos]=='\n')
                                                 ||(buf[pos+linepos]=='\t'))
                        pos++;
                    sscanf(buf+pos+linepos, "%s", line+linepos);                
                    linepos = strlen(line);
                } while((buf[pos+linepos]!='\n') && (s.st_size>(pos+linepos+1)));
                pos += linepos + 1;
		if (strncmp(line, id, strlen(id)) == 0) {
			key->algorithm   = (char *) strdup(strtok(line+strlen(id), ",)"));
			if (strcmp(key->algorithm, "NOENCR") != 0) {
				key->key     = (char *) strtok(NULL  , ")");
                                ASSERT(key->key!=NULL);
				key->key_len = strlen(key->key);
				tmp = (char *) xmalloc(key->key_len);
				key->key_len = base64decode(key->key, key->key_len, tmp, key->key_len);
				key->key = tmp;
			} else {
				key->key     = NULL;
				key->key_len = 0;
			}
			xfree(buf);
			xfree(line);
			return;
		}
	}
	debug_msg("Unable to read hashkey from config file\n");
	xfree(buf);
	xfree(line);
}
#endif

void mbus_get_encrkey(struct mbus_config *m, struct mbus_key *key)
{
	/* This MUST be called while the config file is locked! */
	int		 i, j, k;
#ifdef WIN32
	long		 status;
	DWORD		 type;
	char		*buffer;
	int	 	 buflen = MBUS_BUF_SIZE;
	char		*tmp;

	ASSERT(m->cfg_locked);
	
	/* Read the key from the registry... */
	buffer = (char *) xmalloc(MBUS_BUF_SIZE);
	status = RegQueryValueEx(m->cfgKey, "ENCRYPTIONKEY", 0, &type, buffer, &buflen);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get encrkey: %s\n", buffer);
		abort();
	}
	ASSERT(type == REG_SZ);
	ASSERT(buflen > 0);

	/* Parse the key... */
	key->algorithm   = strdup(strtok(buffer+1, ",)"));
	if (strcmp(key->algorithm, "NOENCR") != 0) {
		key->key     = (char *) strtok(NULL  , ")");
		key->key_len = strlen(key->key);
		tmp = (char *) xmalloc(key->key_len);
		key->key_len = base64decode(key->key, key->key_len, tmp, key->key_len);
		key->key = tmp;
	} else {
		key->key     = NULL;
		key->key_len = 0;
	}
	xfree(buffer);
#else
	mbus_get_key(m, key, "ENCRYPTIONKEY=(");
#endif
	if (strcmp(key->algorithm, "DES") == 0) {
		ASSERT(key->key != NULL);
		ASSERT(key->key_len == 8);

		/* check parity bits */
		for (i = 0; i < 8; ++i) 
		{
			k = key->key[i] & 0xfe;
			j = k;
			j ^= j >> 4;
			j ^= j >> 2;
			j ^= j >> 1;
			j = (j & 1) ^ 1;
			ASSERT((key->key[i] & 0x01) == j);
		}
	}
}

void mbus_get_hashkey(struct mbus_config *m, struct mbus_key *key)
{
	/* This MUST be called while the config file is locked! */
#ifdef WIN32
	long	 status;
	DWORD	 type;
	char	*buffer;
	int	 buflen = MBUS_BUF_SIZE;
	char	*tmp;

	ASSERT(m->cfg_locked);
	
	/* Read the key from the registry... */
	buffer = (char *) xmalloc(MBUS_BUF_SIZE);
	status = RegQueryValueEx(m->cfgKey, "HASHKEY", 0, &type, buffer, &buflen);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get encrkey: %s\n", buffer);
		abort();
	}
	ASSERT(type == REG_SZ);
	ASSERT(buflen > 0);

	/* Parse the key... */
	key->algorithm   = strdup(strtok(buffer+1, ","));
	key->key         = strtok(NULL  , ")");
	key->key_len     = strlen(key->key);

	/* Decode the key... */
	tmp = (char *) xmalloc(key->key_len);
	key->key_len = base64decode(key->key, key->key_len, tmp, key->key_len);
	key->key = tmp;

	xfree(buffer);
#else
	mbus_get_key(m, key, "HASHKEY=(");
#endif
}

void mbus_get_net_addr(struct mbus_config *m, char *net_addr, uint16_t *net_port, int *net_scope)
{
#ifdef WIN32
	long	 status;
	DWORD	 type;
	char	*buffer;
	int	 buflen = MBUS_BUF_SIZE;
	uint32_t port;

	ASSERT(m->cfg_locked);
	
	/* Read the key from the registry... */
	buffer = (char *) xmalloc(MBUS_BUF_SIZE);
        buflen = MBUS_BUF_SIZE;
	status = RegQueryValueEx(m->cfgKey, "ADDRESS", 0, &type, buffer, &buflen);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get address: %s\n", buffer);
		strcpy(net_addr, MBUS_DEFAULT_NET_ADDR);
	} else {
		ASSERT(type == REG_SZ);
		ASSERT(buflen > 0);
		strncpy(net_addr, buffer, buflen);
	}

	buflen = sizeof(port);
	status = RegQueryValueEx(m->cfgKey, "PORT", 0, &type, (uint8_t *) &port, &buflen);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get port: %s\n", buffer);
		*net_port  = MBUS_DEFAULT_NET_PORT;
	} else {
		ASSERT(type == REG_DWORD);
		ASSERT(buflen == 4);
		*net_port = (uint16_t) port;
	}

	buflen = MBUS_BUF_SIZE;
	status = RegQueryValueEx(m->cfgKey, "SCOPE", 0, &type, buffer, &buflen);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get scope: %s\n", buffer);
		*net_scope = MBUS_DEFAULT_SCOPE;
	} else {
		ASSERT(type == REG_SZ);
		ASSERT(buflen > 0);
		if (strncmp(buffer, SCOPE_HOSTLOCAL_NAME, strlen(SCOPE_HOSTLOCAL_NAME)) == 0) {
			*net_scope = SCOPE_HOSTLOCAL;
		} else if (strncmp(buffer, SCOPE_LINKLOCAL_NAME, strlen(SCOPE_LINKLOCAL_NAME)) == 0) {
			*net_scope = SCOPE_LINKLOCAL;
		} else {
			debug_msg("Unrecognized scope: %s\n", buffer);
			*net_scope = MBUS_DEFAULT_SCOPE;
		}
	}
        xfree(buffer);
#else
	struct stat	 s;
	char		*buf;
	char		*line;
	int		 pos;
	int              pos2;
        int              linepos;

	int              scope;
	char            *addr;
	uint16_t        port;

	ASSERT(m->cfg_locked);

	addr = (char *)xmalloc(20);
	memset(addr, 0, 20);
	port = 0;
	scope = -1;
	

	if (lseek(m->cfgfd, 0, SEEK_SET) == -1) {
		perror("Can't seek to start of config file");
		abort();
	}
	if (fstat(m->cfgfd, &s) != 0) {
		perror("Unable to stat config file\n");
		abort();
	}
	/* Read in the contents of the config file... */
	buf = (char *) xmalloc(s.st_size+1);
	memset(buf, '\0', s.st_size+1);
	if (read(m->cfgfd, buf, s.st_size) != s.st_size) {
		perror("Unable to read config file\n");
		abort();
	}
	
	line = (char *) xmalloc(s.st_size+1);
	sscanf(buf, "%s", line);
	if (strcmp(line, "[MBUS]") != 0) {
		debug_msg("Invalid .mbus file\n");
		abort();
	}
	pos = strlen(line) + 1;
	while (pos < s.st_size) {
                /* get whole line and filter out spaces */
                linepos=0;
                do {
                    while((buf[pos+linepos]==' ')||(buf[pos+linepos]=='\n')
                                                 ||(buf[pos+linepos]=='\t'))
                        pos++;
                    sscanf(buf+pos+linepos, "%s", line+linepos);                
                    linepos = strlen(line);
  
                } while((buf[pos+linepos]!='\n') && (s.st_size>(pos+linepos+1)));
                pos += linepos + 1;     
		if (strncmp(line, "SCOPE", strlen("SCOPE")) == 0) {
		    pos2 = strlen("SCOPE") + 1;
		    if (strncmp(line+pos2, SCOPE_HOSTLOCAL_NAME, 
				strlen(SCOPE_HOSTLOCAL_NAME)) == 0) {
			scope = SCOPE_HOSTLOCAL;
		    }
		    if (strncmp(line+pos2, SCOPE_LINKLOCAL_NAME, 
				strlen(SCOPE_LINKLOCAL_NAME)) == 0) {
			scope = SCOPE_LINKLOCAL ;
		    }
		}
		if (strncmp(line, "ADDRESS", strlen("ADDRESS")) == 0) {
		    pos2 = strlen("ADDRESS") + 1;
		    strncpy(addr, line+pos2, 16);
		}
		if (strncmp(line, "PORT", strlen("PORT")) == 0) {
		    pos2 = strlen("PORT") + 1;
		    port = atoi(line+pos2);
		}
		    
	}
	/* If we did not find all values, fill in the default ones */
	*net_port  = (port>0)?port:MBUS_DEFAULT_NET_PORT;
	*net_scope = (scope!=-1)?scope:MBUS_DEFAULT_SCOPE;
	if (strlen(addr)>0) {
		strncpy(net_addr, addr, 16);
	} else {
		strcpy(net_addr, MBUS_DEFAULT_NET_ADDR);
	}
	debug_msg("using Addr:%s Port:%d Scope:%s for MBUS\n", 
		  net_addr, *net_port, (*net_scope==0)?SCOPE_HOSTLOCAL_NAME:SCOPE_LINKLOCAL_NAME);
	xfree(buf);
	xfree(line);
	xfree(addr);
#endif
}

int mbus_get_version(struct mbus_config *m)
{
#ifdef WIN32
	long		status;
	DWORD		type;
	uint32_t	cver;
	int		verl;
	char		buffer[MBUS_BUF_SIZE];

	ASSERT(m->cfg_locked);
	
	/* Read the key from the registry... */
        verl = sizeof(&cver);
	status = RegQueryValueEx(m->cfgKey, "CONFIG_VERSION", 0, &type, (uint8_t *) &cver, &verl);
	if (status != ERROR_SUCCESS) {
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, status, 0, buffer, MBUS_BUF_SIZE, NULL);
		debug_msg("Unable to get version: %s\n", buffer);
		return 0;
	}
	ASSERT(type == REG_DWORD);
	ASSERT(verl == 4);
	return cver;
#else
	struct stat	 s;
	char		*buf;
	char		*line;
	int		 pos;
	int              pos2;
        int              linepos;
	int		 version = 0;

	ASSERT(m->cfg_locked);

	if (lseek(m->cfgfd, 0, SEEK_SET) == -1) {
		perror("Can't seek to start of config file");
		abort();
	}
	if (fstat(m->cfgfd, &s) != 0) {
		perror("Unable to stat config file\n");
		abort();
	}
	/* Read in the contents of the config file... */
	buf = (char *) xmalloc(s.st_size+1);
	memset(buf, '\0', s.st_size+1);
	if (read(m->cfgfd, buf, s.st_size) != s.st_size) {
		perror("Unable to read config file\n");
		abort();
	}
	
	line = (char *) xmalloc(s.st_size+1);
	sscanf(buf, "%s", line);
	if (strcmp(line, "[MBUS]") != 0) {
		debug_msg("Invalid .mbus file\n");
		abort();
	}
	pos = strlen(line) + 1;
	while (pos < s.st_size) {
                /* get whole line and filter out spaces */
                linepos=0;
                do {
			while((buf[pos+linepos]==' ')||(buf[pos+linepos]=='\n') ||(buf[pos+linepos]=='\t')) {
				pos++;
			}
			sscanf(buf+pos+linepos, "%s", line+linepos);                
			linepos = strlen(line);
                } while((buf[pos+linepos]!='\n') && (s.st_size>(pos+linepos+1)));
                pos += linepos + 1;     
		if (strncmp(line, "CONFIG_VERSION", strlen("CONFIG_VERSION")) == 0) {
		    pos2    = strlen("CONFIG_VERSION") + 1;
		    version = atoi(line+pos2);
		}
		    
	}
	xfree(buf);
	xfree(line);
	return version;
#endif
}

struct mbus_config *mbus_create_config(void)
{
	return (struct mbus_config *) xmalloc(sizeof(struct mbus_config));
}

⌨️ 快捷键说明

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