コード例 #1
0
GBbool gbLoadRLE (char* path, const char* filename, GBuint16* height, GBuint16** data)
{
	FILE* f;
	GBuint16* out;
	GBuint16 totalCount;

	GB_ASSERT(path && filename && height && data);

	f = gbOpenFileFromPath(path, filename, "rb");
	if (!f)
		return GB_FALSE;

	fread(&totalCount, sizeof(GBuint16), 1, f);
	fread(height, sizeof(GBuint16), 1, f);

	out = (GBuint16*)malloc(sizeof(GBuint16) * ((*height) + totalCount * 2));
	if (!out)
	{
		fclose(f);
		return GB_FALSE;
	}

	fread(out, sizeof(GBuint16), (*height) + totalCount * 2, f);
	fclose(f);

	*data = out;

	return GB_TRUE;
}
コード例 #2
0
void* GBMemory_alloc (GBMemory* mem, GBuint32 bytes)
{
	GBAllocBlock* block;
	void* ptr;
	GB_ASSERT(mem);

	if (mem->used + bytes > mem->limit)
		return NULL;

	ptr = malloc(bytes);
	if (!ptr)
		return NULL;

	block = GBAllocBlock_create(ptr, bytes);
	if (!block)
	{
		free(ptr);
		return NULL;
	}

	mem->used += bytes;

	block->next = mem->firstBlock;
	mem->firstBlock = block;

	return ptr;
}
コード例 #3
0
void GBMemory_free (GBMemory* mem, void* ptr)
{
	GBAllocBlock* last = NULL;
	GBAllocBlock* block;
	GB_ASSERT(mem);

	if (!ptr)
		return;

	block = mem->firstBlock;
	while (block)
	{
		if (block->ptr == ptr)
		{
			if (last)
				last->next = block->next;
			else
				mem->firstBlock = block->next;

			mem->used -= block->bytes;
			GBAllocBlock_destroy(block);
			return;
		}
		last = block;
		block = block->next;
	}
}
コード例 #4
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
int gb28181_init_env(pSipEnv *env)
{
	TRACE("Init GB28181 env\n");
	//constly
	SYSCONF_t *sysconf = SYSCONF_dup();
	pSipEnv p = (pSipEnv)calloc(1,sizeof(sSipEnv));
	*env = p;
	char devip[20];
	SOCK_gethostname(devip);
	GB_ASSERT(*env,"Calloc env  Node failed\n");
	printf("calloc env hdr node %p\n",*env);
	SIP_ENV_insert(p,"Model",sysconf->ipcam.info.device_model);
	SIP_ENV_insert(p,"UserAgent",sysconf->ipcam.info.device_name);
	SIP_ENV_insert(p,"Firmware",sysconf->ipcam.info.software_version);
	SIP_ENV_insert(p,"MaxAlarm","1");
	SIP_ENV_insert(p,"MaxCamera","1");
	SIP_ENV_insert(p,"Manufacturer","JUAN");	

	// variable
	Gb28181Conf_t gb_conf;
	memset(&gb_conf, 0, sizeof(Gb28181Conf_t));
	gb28181_read_env(&gb_conf,sizeof(Gb28181Conf_t));
	if(strlen(gb_conf.SipServerId) > 0)
		//if(0)
	{
		TRACE("use the env in the flash,SipServerId:%s:%d\n",gb_conf.SipServerId,
				strlen(gb_conf.SipServerId));	
		SIP_ENV_insert(p,"Realm",gb_conf.LoginDomain);
		SIP_ENV_insert(p,"SipServerId",gb_conf.SipServerId);
		SIP_ENV_insert(p,"SipServerIp",gb_conf.SipServerIp);
		SIP_ENV_insert(p,"SipServerPort",ITOA(gb_conf.SipServerPort));
		SIP_ENV_insert(p,"UserId",gb_conf.UserId);
		SIP_ENV_insert(p,"UserPwd",gb_conf.UserPwd);
		SIP_ENV_insert(p,"DevPort",ITOA(GB28181_DEFAULT_DEV_PORT));
		SIP_ENV_insert(p,"DevIp",devip);
		SIP_ENV_insert(p,"AliveTime",ITOA(gb_conf.AliveTime));
		SIP_ENV_insert(p,"HeartBeatTime",ITOA(gb_conf.HeartBeatTime));
		SIP_ENV_insert(p,"Alarm1",gb_conf.AlarmId[0]);
		SIP_ENV_insert(p,"Video1",gb_conf.VideoId[0]);
	}
	else{ // use the default gb28181 env
		TRACE("NULL gb28181 env ,use default env\n");
		gb28181_write_env(&def_gb_conf,sizeof(Gb28181Conf_t));
		SIP_ENV_insert(p,"Realm",def_gb_conf.LoginDomain);
		SIP_ENV_insert(p,"SipServerId",def_gb_conf.SipServerId);
		SIP_ENV_insert(p,"SipServerIp",def_gb_conf.SipServerIp);
		SIP_ENV_insert(p,"SipServerPort",ITOA(def_gb_conf.SipServerPort));	
		SIP_ENV_insert(p,"UserId",def_gb_conf.UserId);
		SIP_ENV_insert(p,"UserPwd",def_gb_conf.UserPwd);
		SIP_ENV_insert(p,"DevIp",devip);
		SIP_ENV_insert(p,"DevPort",ITOA(GB28181_DEFAULT_DEV_PORT));
		SIP_ENV_insert(p,"AliveTime",ITOA(def_gb_conf.AliveTime));
		SIP_ENV_insert(p,"HeartBeatTime",ITOA(def_gb_conf.HeartBeatTime));
		SIP_ENV_insert(p,"Alarm1",def_gb_conf.AlarmId[0]);
		SIP_ENV_insert(p,"Video1",def_gb_conf.VideoId[0]);

	}
	return 0;
}
コード例 #5
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
static int gb28181_read_env(unsigned char *addr,int len)
{
	SYSCONF_t* sys_conf = SYSCONF_dup();
	GB_ASSERT(len < sizeof(sys_conf->ipcam.gb28181_param), "No space in sysconf for Gb28181");
	memcpy(addr, sys_conf->ipcam.gb28181_param.buf, len);

	TRACE("Read Gb28181 param from flash size = %d\n", len);
	return 0;
}
コード例 #6
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
static int gb28181_write_env(unsigned char *addr,int len)
{
	SYSCONF_t* sys_conf = SYSCONF_dup();
	GB_ASSERT(len < sizeof(sys_conf->ipcam.gb28181_param), "No space in sysconf for GB28181");
	memcpy(sys_conf->ipcam.gb28181_param.buf, addr, len);
	SYSCONF_save(sys_conf); // save to flash

	TRACE("Write Gb28181 param to flash size = %d\n", len);
	return 0;
}
コード例 #7
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
void *gb28181_alarm_loop(void* session)
{
	GB_ASSERT(session,"NULL sip session handle\n");
	pSipSession s = (pSipSession)session;
	TRACE("now :%s\n",s->get_systime());
	s->pack_msg(s,MSG_ALARM,NULL);
	TRACE("send:\n%s\n",s->sendbuf);
	sendto(s->sock,s->sendbuf,strlen(s->sendbuf),\
			0,(struct sockaddr*)&s->server,sizeof(s->server));	
}
コード例 #8
0
void GBMemory_destroy (GBMemory* mem)
{
	GB_ASSERT(mem);

#ifdef GB_DEVEL
	if (mem->firstBlock)
		printf("Error: Detected memory leaks\n");
#endif

	free(mem);
}
コード例 #9
0
GBAllocBlock* GBAllocBlock_create (void* ptr, GBuint32 bytes)
{
	GBAllocBlock* block;
	GB_ASSERT(ptr);

	block = (GBAllocBlock*)malloc(sizeof(GBAllocBlock));
	if (!block)
		return NULL;

	block->ptr = ptr;
	block->bytes = bytes;
	block->next = NULL;

	return block;
}
コード例 #10
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
void* gb28181_heartbeat_loop(void *session)
{
	pSipSession s = (pSipSession)session;
	GB_ASSERT(s,"heartbeat ,null argument\n");
	time_t cur_time = time(NULL);	
	for(;;)
	{
		usleep(1);
		if(time(NULL)- cur_time > s->heartbeat_time){//send a heartbeat			
			cur_time = time(NULL);
			s->pack_msg(s,MSG_HEARTBEAT,NULL);
			sendto(s->sock,s->sendbuf,strlen(s->sendbuf),\
					0,(struct sockaddr*)&s->server,sizeof(s->server));
		}
		if(0 == s->online)break;
	}
	return NULL;
}
コード例 #11
0
GBuint16 gbReadFromRLE (GBuint32 x, GBuint32 y, GBuint16* rle)
{
	GB_ASSERT(rle);

	while (y--)
		rle += 1 + 2 * rle[0];

	rle++;

	while (x)
	{
		if (rle[0] > x)
		{
			x = 0;
		}
		else
		{
			x -= rle[0];
			rle += 2;
		}
	}

	return rle[1];
}
コード例 #12
0
ファイル: gb28181.c プロジェクト: LinLL/ipc
void* gb28181_msg_loop(void *session)
{
	pSipSession s = (pSipSession)session;
	GB_ASSERT(s,"sip_msg_loop null argument\n");
	int re_cnt = 0;
	char msg_buf[2048];
	char *ptzcmd = NULL;
	s->run_msg_loop  = 1;//that's to say msg_loop is run now;
	char *cmdtype = s->get_tagvalue(s->xml_str,"CmdType");

	if( 0 ==  strcmp("DeviceInfo",cmdtype))
	{
		TRACE("Get a dev info request\n");
		s->pack_msg(s,MSG_DEV_INFO,NULL);		
	}
	else if(0 == strcmp("DeviceStatus",cmdtype))
	{
		TRACE("Get a devicestatus request\n");
		s->pack_msg(s,MSG_DEV_STATUS,NULL);
	}
	else if(0 == strcmp("Alarm",cmdtype))
	{	
		s->pack_msg(s,MSG_200,NULL);			
		sendto(s->sock,s->sendbuf,strlen(s->sendbuf),\
				0,(struct sockaddr*)&s->server,sizeof(s->server));
		goto exit_msg_loop;
	}	
	else if (0 ==  strcmp("DeviceControl",cmdtype))
	{
		if(0 == s->get_subcmd(s,s->xml_str,"RecordCmd","Record"))
		{
			s->pack_msg(s,MSG_DEV_CTRL,NULL);
			s->dev_ctrl(SIP_DEV_CTRL_RECORD_START,NULL);			
		}
		else if(0 == s->get_subcmd(s,s->xml_str,"RecordCmd","StopRecord"))
		{
			s->pack_msg(s,MSG_DEV_CTRL,NULL);
			s->dev_ctrl(SIP_DEV_CTRL_RECORD_STOP,NULL);	
		}
		else if(0 == s->get_subcmd(s,s->xml_str,"GuardCmd","SetGuard"))
		{
			s->pack_msg(s,MSG_DEV_CTRL,NULL);	
			s->dev_ctrl(SIP_DEV_CTRL_GUARD_SET,NULL);
		}
		else if(0 == s->get_subcmd(s,s->xml_str,"GuardCmd","ResetGuard"))
		{
			s->pack_msg(s,MSG_DEV_CTRL,NULL);	
			s->dev_ctrl(SIP_DEV_CTRL_GUARD_RESET,NULL);
		}
		else if(0 == s->get_subcmd(s,s->xml_str,"AlarmCmd","ResetAlarm"))
		{
			s->pack_msg(s,MSG_DEV_CTRL,NULL);
			char *method = s->get_tagvalue(s->xml_str,"AlarmMethod");
			s->dev_ctrl(SIP_DEV_CTRL_ALARM_RESET,method);
		}
		else if(NULL != (ptzcmd = s->get_tagvalue(s->xml_str,"PTZCmd")))
		{
			s->ptz_cmd_parse(s,ptzcmd);	
			s->pack_msg(s,MSG_200,NULL);
			sendto(s->sock,s->sendbuf,strlen(s->sendbuf),\
					0,(struct sockaddr*)&s->server,sizeof(s->server));
			goto exit_msg_loop;
		}
		else if(0 == s->get_subcmd(s,s->xml_str,"TeleBoot","Boot"))
		{
			//login out the sipserver first
			s->pack_msg(s,MSG_200,NULL);
			sprintf(msg_buf,"%s",s->sendbuf);
			s->dev_ctrl(SIP_DEV_CTRL_TELEBOOT,NULL);
			GB_NOTIFY("Loginout ing...\n ");
			s->auth(s,0);	//FIXME this func need 2 do in dev_ctrl later			
			sendto(s->sock,msg_buf,strlen(msg_buf),\
					0,(struct sockaddr*)&s->server,sizeof(s->server));
			sleep(1);
			GB_NOTIFY("Login ing...\n ");
			s->auth(s,1);
			goto exit_msg_loop;
		}

	}
	else if( 0 ==  strcmp("Catalog",cmdtype))
	{
		TRACE("Recv a Catalog msg\n");
		s->pack_msg(s,MSG_CATALOG,NULL);		
	}
	sprintf(msg_buf,"%s",s->sendbuf);
	TRACE("\033[31mSIP PACK MSG:%s\n\033[0m",s->sendbuf);
	time_t cur_time = time(NULL) - 4;	
	for(;;)
	{	
		if(time(NULL)- cur_time > 3){//response a msg 
			sendto(s->sock,msg_buf,strlen(msg_buf),\
					0,(struct sockaddr*)&s->server,sizeof(s->server));					
			cur_time = time(NULL);
			if(++re_cnt >= 3)break;		
		}
		usleep(1);
		if(0 == s->run_msg_loop)break;
	}
exit_msg_loop:
	GB_ERROR("Exit the msg loop\n");
	if(NULL != s->xml_str)
	{
		free(s->xml_str);
		s->xml_str = NULL;
	}
	return NULL;
}
コード例 #13
0
void GBAllocBlock_destroy (GBAllocBlock* block)
{
	GB_ASSERT(block);
	free(block->ptr);
	free(block);
}