bool link_transport_checksum_isok(link_pkt_t * pkt){ u8 checksum; if( pkt->size <= LINK_PACKET_DATA_SIZE ){ checksum = pkt->data[pkt->size]; } else { return false; } link_transport_insert_checksum(pkt); if( checksum == pkt_checksum(pkt) ){ return true; } return false; }
int recv_pkt(pkt *Pkt, int socket, struct sockaddr_in *src_addr, uint32_t buffsize) { int flags = 0; int src_addr_len = sizeof(*src_addr); // uint32_t i; if (Pkt != NULL && Pkt->datagram != NULL) { Pkt->datagram_len = s_recvfrom(socket, Pkt->datagram, buffsize+HDR_LEN, flags, (struct sockaddr *)src_addr, (socklen_t *)&(src_addr_len)); Pkt->data_len = Pkt->datagram_len - HDR_LEN; if (pkt_checksum(Pkt) == CHECKSUM_GOOD) { get_hdr(Pkt); // printf("--Recv--\n"); // print_hdr(Pkt); // printf("--------\n"); return 1; } else return 0; } return 0; }