Exemplo n.º 1
0
 int cache_att_to_svr(iclock_options_t *opt,PPostAttLog attlog)
{
	FILE *iSvrResp = NULL;
	FILE *fStream = NULL;
	unsigned char head[20480];
	unsigned char postbuf[2048];
	int size = 0;
	int len=0;
	int j=0;
	int i=0;
	int fdatt=-1;
	unsigned char checkcode[4];
	unsigned int macsum;
	unsigned char registerlen[3]={0x00,0x00,0x00};
	unsigned int leftcount=0;	//剩余流水数量

	TYMIP_HEAD recv_head;
	TYMIP_HEAD post_head;
	unsigned char attcount;
	unsigned int transinfolen=0;
	unsigned short tmplem=0;
	unsigned int return_len;
	unsigned char data_return[512];
	BOOL checkFN=FALSE;
	int error_code = -1;

	unsigned int writevalue[2];	//写入BsAtt.dat记录内容
		
	memset(postbuf,0,sizeof(postbuf));
	transinfolen=8+11+1+attlog->reclenght+4+4;

	fdatt=open(BS_TRANS_ATT_FILE,O_RDWR|O_NONBLOCK);

	tmplem=htons(transinfolen);
	memcpy(registerlen+1,&tmplem,2);
	incFN();
	ymip_head_format(&post_head,LICENSEVERSION,registerlen,FramNumber,UPLOADATTDATA);
	
	attcount=(0xFF) & ((attlog->reclenght)/25);			//一个字节来存储发送的数量
	if((attlog->maxrec)>(attlog->currec+attcount))
	{
		leftcount=htonl(attlog->maxrec-(attlog->currec+attcount));
	}
	else
	{
		leftcount=0x00000000;
	}
	memcpy(&gLastAttRec, attlog->attbuffer+attlog->reclenght-4, 4);
	printf("\ngLastAttRec=%d\n", ntohl(gLastAttRec));
	memcpy(postbuf,&post_head,sizeof(TYMIP_HEAD));		//head
	memcpy(postbuf+8,DevNumber,11);					//devnumber
	memcpy(postbuf+8+11,&attcount,1);
	memcpy(postbuf+8+12,attlog->attbuffer,attlog->reclenght);	//att
	memcpy(postbuf+8+12+attlog->reclenght,&leftcount,4);	//leftcount
//MAC check:
	printf("[PUSHSDK]	[%s]__Commkey:\n", __FUNCTION__);
	for(i=0; i<16; i++)
		printf("%02x ", commkey[i]);
	printf("\ttranslen=%d\n", transinfolen-4);
	MACCAL_KEY16(commkey, pRadom, 0, postbuf, transinfolen-4, checkcode);
	memcpy(postbuf+transinfolen-4, checkcode, 4);	//MAC
//end	
	/*如果发送数据后,没有收到服务器确认信息,将重发,三次都失败后,认为发送失败*/

	printf("opt->websvr_time_out=%d\n",opt->websvr_time_out);
//	opt->websvr_time_out=10;	//only test
	while(j<opt->reposttime){
//	for (j=0; j<3;  j++) {
		j++;
		iSvrResp = ymip_att_proc(opt->svrip,opt->svrport, (char *)&recv_head, postbuf, NULL, NULL, opt->error_intval, transinfolen);
		if(iSvrResp==NULL)
		{
			printf("[PUSH SDK]    TRANS ATTLOG (%d)TIMES FAILED\n\n",j);
			continue;
		}
		return_len = svr_return_proc(iSvrResp, data_return, opt->websvr_time_out);
		if((return_len+8)  != GetPacketLength(&recv_head))
		{
			gErrorCode = 0x000a;
			fclose(iSvrResp);
			return -1;
		}
		if(return_len<=0)
		{
			printf("[PUSH SDK]    TRANS ATTLOG (%d)TIMES FAILED\n\n",j);
			continue;
		}
		checkFN=IsRightFN(post_head.FrameNum,recv_head.FrameNum);//帧号检验
		error_code = ProcessService(&recv_head, data_return, opt);
		 if ((error_code < 0)/*||(checkFN==FALSE)*/) {
			printf("[PUSH SDK]    TRANS ATTLOG (%d)TIMES FAILED\n\n",j);
		 } else {
		 	memset(attlog->attbuffer,0,1024);		//发送成功之后,重置数据
		 	attlog->currec+=attcount;
			attlog->reclenght=0;
			writevalue[0]=attlog->currec;
			writevalue[1]=attlog->curfp;
			printf("\n[%s]currec=%d,attcount=%d,maxrec=%d\n",__FUNCTION__,attlog->currec,attcount, attlog->maxrec);
			write_file_with_offset(fdatt,0,(char *)&(writevalue),sizeof(writevalue));
			if(attlog->maxrec<=attlog->currec)
			{
				opt->stat.post_interval = 1;
			}
		 	printf("[PUSH SDK]    TRANS ATTLOG  SUCCESS\n\n");
			 break;
		 }
	}

	if (fStream) {
		fclose(fStream);
	}

	if(fdatt>0)
	{
		close(fdatt);
	}

	if (j >= opt->reposttime) {
		pipe_write_to_parent_cmd(CHILD_CMD_OFFLINE);
		return 0;
	} else {
		return 1;
	}
}
Exemplo n.º 2
0
int main()
{
	int i;

	//(unsigned char* kBuf,unsigned char *pRadom,unsigned 
	//char pRanAdd,unsigned char *data_in,short dlen,unsigned char *pMac)
   unsigned  char _kBuf[16];  
   unsigned	char _pRadom[8];
   unsigned	char _pMac[16];
   unsigned char _pMac2[16];
   unsigned	char _pRanAdd;
   unsigned	char _data_in[16];
   short dlen=4;
	for(i=0;i<16;i++)
	{
		_kBuf[i]=0x00;
		_data_in[i]=0x00;
	}

    _kBuf[0]=0x34;
	_kBuf[1]=0x56;
	_kBuf[2]=0x78;
	_kBuf[3]=0x19;
	_kBuf[4]=0x29;
	_kBuf[5]=0x10;
	_kBuf[6]=0x29;
	_kBuf[7]=0x12;
	_kBuf[8]=0x87;
	_kBuf[9]=0x37;
	_kBuf[10]=0x61;
	_kBuf[11]=0x82;
	_kBuf[12]=0x83;
	_kBuf[13]=0x91;
	_kBuf[14]=0x92;
	_kBuf[15]=0x93;

	_data_in[0]=0x34;
	_data_in[1]=0x56;
	_data_in[2]=0x78;
	_data_in[3]=0x19;
	_data_in[4]=0x35;
	_data_in[5]=0x24;
	_data_in[6]=0x19;
	_data_in[7]=0x0F;


	for(i=0;i<8;i++)
	{
		_pRadom[i]=0x00;
		
	}
	
	_pRanAdd=0;

    	ThreeDES(_kBuf,_data_in,_pMac,1);
	//ThreeDES_DAtA16

	//ThreeDES(_kBuf,_pMac,_pMac2,0);
	ThreeDES(_kBuf,_data_in,_pMac,1);

	MACCAL_KEY16(_kBuf,_pRadom,_pRanAdd,_data_in,dlen,_pMac);



	return i;
}