4 static int get_crc( char *data, int data_size );
10 static char buffer[8192]; /* shouldn't be bigger message */
13 int sock_cli_crc_send( sock, m, size ) int sock,size; void *m; {
14 *(int *)buffer = htonl(get_crc( m, size ));
15 bcopy( m, buffer+sizeof(int), size );
16 return sock_cli_send( sock, buffer, size+sizeof(int) );
19 int sock_cli_crc_recv( sock, m, size ) int sock,size; void *m; {
21 recv_size = sock_cli_recv(sock, buffer, size+sizeof(int) );
22 if( recv_size == 0 ) return 0;
24 if( recv_size < sizeof(int) ) return -1;
26 recv_size-=sizeof(int);
27 bcopy( buffer+sizeof(int), m, recv_size );
28 if( get_crc(m,recv_size)!=ntohl(*(int *)buffer) )
29 return -1; /* error */
35 int sock_srv_crc_send( sock, m, size, addr, namelen )
36 int sock,size,namelen;
38 struct sockaddr_in *addr;
40 *(int *)buffer = htonl(get_crc( m, size ));
41 bcopy( m, buffer+sizeof(int), size );
42 return sock_srv_send( sock, buffer, size+sizeof(int) , addr, namelen );
45 int sock_srv_crc_recv( sock, m, size, addr, namelen )
46 int sock,size,*namelen;
48 struct sockaddr_in *addr;
51 recv_size = sock_srv_recv(sock, buffer, size+sizeof(int), addr, namelen );
52 if( recv_size == 0 ) return -1;
54 if( recv_size < sizeof(int) ) return -1;
56 recv_size-=sizeof(int);
57 bcopy( buffer+sizeof(int), m, recv_size );
58 if( get_crc(m,recv_size)!=ntohl(*(int *)buffer) )
59 return -1; /* error */
67 static int get_crc( data, data_size ) char *data; int data_size; {
70 for( i=0; i<data_size; i++,data++ ){
71 crc ^= (unsigned long)(unsigned char)(*(char *)data);