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; }
//回复对方的连接请求 // 返回-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; } }