Exemplo n.º 1
0
/*
typedef struct {
    uint16_t number;
    uint8_t data[2];
    uint8_t crc[2];
    char end;
} packet_t;


long M = 2147483647;
 
void AddCongestion(char *data, double p)
{
    char c, *pointer = data;
    int i;
    while (*pointer != '\0') {
   	 c = 0x01;
   	 for ( i = 0; i < 8; i++) {
   		 if ((double)random()/M <= p)
   			 *pointer ^= c;
   		 c <<= 1;
   	 }
   	 pointer++;
    }
}
*/
int main(int argc, char *argv[]) {
    
    packet_t* packet;

    packet->number = 0;
    packet->data[0] = 'a';
    packet->data[1] = 'b';
    
    uint16_t crc = calculate_CCITT16((uint8_t *) packet, 4, GENERATE_CRC);
    packet->crc[0] = (uint8_t)(crc >> 8);
    packet->crc[1] = (uint8_t)(crc & 0xFF);

    packet->end = '\0';

    printf("Packet before introducing error: %d %c%c %02x%02x\n", packet->number, packet->data[0], packet->data[1], packet->crc[0], packet->crc[1]);

    double ber = 1.0;
    AddCongestion((char *) packet, ber);    
    packet->data[0] = 'x';
    printf("Packet after  introducing error: %d %c%c %02x%02x\n", packet->number, packet->data[0], packet->data[1], packet->crc[0], packet->crc[1]);

    
    if (!calculate_CCITT16((char *) packet, 6, CHECK_CRC))
   	 printf("No error!\n");
    else
   	 printf("Error!\n");    

}
Exemplo n.º 2
0
int main(int argc, char** argv)
{
	int fd, s, SenderAddr2Len, do_i_take;
	int n = 0;
	int ack_num = 0;
	double probability;
	socklen_t SenderAddrLen;
	char* buff[8];
	char* ack_pack = malloc(3 * sizeof(char));
	
	if(argc == 1)
	{
		probability = 0.001;
	}
	else
	{
		probability = atof(argv[1]);
	}
	
	//Configure struct for the sender
	SenderAddr.sin_family = AF_INET;
	SenderAddr.sin_port = htons(54841);
	SenderAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	SenderAddrLen = sizeof(SenderAddr);

	//Bind the sender struct to a port to listen
	fd = socket(AF_INET, SOCK_STREAM, 0);
	bind(fd, (struct sockaddr*)&SenderAddr, SenderAddrLen);
	
	//Listen on the new port
	if(DEBUG) printf("Listening\n");
	listen(fd, 2);
	s = accept(fd, (struct sockaddr*)&SenderAddr2, &SenderAddr2Len);
	if(DEBUG) printf("Accepted\n");

	int i = 0;
	for(;;)
	{
		n = read(s, buff, 8);
		buff[n]="";
		if(DEBUG) printf("%s\n", buff);
		if(AddCongestion(probability)==1)
		{
			if(DEBUG) printf("nope\n");
		}
		else if(AddCongestion(probability)==0)
		{
			sleep(1);
			sprintf(ack_pack, "%d", ack_num);
			printf("%s\n", ack_pack);
			write(s, ack_pack, sizeof(ack_pack));
			ack_num++;
		}

	}

	close(fd);
	close(s);

	return 0;
}