Esempio n. 1
0
int checksum_test()
{
	int ret = 0, send_times =0;
	udt_pocketbuf packet;
	u_32 check_sum,cs_tmp ;
	
	int nReadNum = rand() %(_READ_SIZE-10) +1 ;
	char *paddr ;

	FILE *pf = fopen("3.pdf", "r+b") ;
	
	if(!pf) {
		printf("open file error!\n") ;
		return -1;
	}

	init_udt_pocket(&(packet.pocket)) ;
	
	paddr =pocket_data(&(packet.pocket));
	POCKET_TYPE(&(packet.pocket)) = 3 ;
	while(nReadNum=fread(paddr,1,nReadNum,pf)) {
		
		calc_cs(&packet ,nReadNum) ;
		nd_sleep(1);

		check_sum =	POCKET_CHECKSUM(&(packet.pocket))  ;
		POCKET_CHECKSUM(&(packet.pocket)) = 0 ;

		
		nReadNum += ndt_header_size(&(packet.pocket)) ;
		cs_tmp = nd_checksum((NDUINT16*)&(packet.pocket),nReadNum) ;
		if(cs_tmp!=check_sum) {
			ndprintf("test checksum error check_sum=%d cs_tmp=%d\n", check_sum,cs_tmp);
			getch() ;
			exit(1);
		}
		else{
			ndprintf("test check OK\n", ++send_times,ret);
		}

		nReadNum = rand() %(_READ_SIZE-10) +1 ;
		
	}
	
	
	fclose(pf) ;
	
	//nd_connector_send(connect_handle,&msg_buf,ESF_URGENCY) ;

	return 0;	
}
Esempio n. 2
0
//回复对方的连接请求
// 返回-1 出错,0 succes
int _handle_syn(nd_udt_node *socket_node,struct ndudt_pocket *pocket)
{
	if(socket_node->status==NETSTAT_LISTEN) {
		struct ndudt_pocket syn_ack ;		
		init_udt_pocket(&syn_ack) ;
		SET_SYN(&syn_ack) ;

		socket_node->acknowledged_seq = socket_node->send_sequence ;
		socket_node->received_sequence = pocket->sequence + 1;		//接受到对方的系列号+1以便回复对方
		
		set_pocket_ack(&syn_ack,socket_node->received_sequence) ;
		syn_ack.sequence = socket_node->send_sequence ;
		write_pocket_to_socket(socket_node, &syn_ack, ndt_header_size(&syn_ack));
		socket_node->status = NETSTAT_SYNRECV ;
		return 0 ;
	}

	else if(NETSTAT_SYNSEND==socket_node->status){
		//connect (client side received syn ack
		if(!pocket->header.ack || socket_node->send_sequence+1!=pocket->ack_seq) {
			nd_object_seterror((nd_handle)socket_node,NDERR_BADPACKET);
			nd_assert(0) ;
			return -1;
		}
		socket_node->session_id = pocket->session_id ;
		socket_node->received_sequence = pocket->sequence +1 ;
		socket_node->acknowledged_seq = pocket->ack_seq ;		
		
		socket_node->status = NETSTAT_ESTABLISHED;
		++ (socket_node->send_sequence) ;
		udt_send_ack(socket_node) ;
		return 0 ;
	}
	
	else if(socket_node->status < NETSTAT_ACCEPT){
		
		nd_assert(socket_node->received_sequence == pocket->sequence + 1) ;
		if(socket_node->received_sequence == pocket->sequence + 1) {
			udt_send_ack(socket_node) ;
			return 0 ;
		}
		return -1 ;
	}
	else {
		nd_object_seterror((nd_handle)socket_node,NDERR_BADPACKET);
		return -1;
	}
}