Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int number_of_set_bits(int c) {
- int num = 0;
- if (c)
- do num++; while (c &= c - 1);
- return num;
- }
- char get_parity_byte(char payload[], int len) {
- parity_t parity = parity_of_string(payload, len);
- switch(parity) {
- case ODD :
- // return 'c';
- return 1;
- case EVEN :
- // return 'p';
- return 0;
- default: return 'c';
- }
- }
- parity_t parity_of_string(char payload[], int len) {
- // Total number of set bits
- int no_set = 0;
- int i = 0;
- for(i = 0; i < len; i++) {
- no_set += number_of_set_bits(payload[i]);
- }
- return ((no_set % 2) == 0) ? EVEN : ODD;
- }
- if(strncmp(command, "cp ", 3) == 0) {
- // Opening file
- int file = open(&command[3], O_RDONLY);
- int copiat;
- // Size of file
- int file_size = size(&command[3]);
- // size of file
- sprintf(r.payload, "%d", file_size);
- switch(mode) {
- case 0:
- r.len = digitsNo(file_size);
- break;
- case 1:
- r.payload[0] = get_parity_byte(r.payload, r.len);
- sprintf(&r.payload[1], "%d", file_size);
- r.len = digitsNo(file_size) + 1;
- break;
- }
- printByte(r.payload[0]);
- printf("%s\n",&r.payload[1]);
- send_message_until_ACK(&r, ack_len);
- char *buf;
- int size;
- switch(mode) {
- case 0:
- buf = (char *) malloc(1400);
- size = 1400;
- break;
- case 1:
- buf = (char *) malloc(1399);
- size = 1399;
- break;
- }
- lseek(file, 0, SEEK_SET);
- while ((copiat = read(file, buf, size))) {
- // Prepare packet
- r.len = copiat;
- memcpy(r.payload, buf, size);
- // Modifying message according to mode
- switch(mode) {
- case 1:
- r.payload[0] = get_parity_byte(buf, copiat);
- memcpy(&r.payload[1], buf, size);
- r.len ++;
- break;
- }
- // Send packet
- send_message_until_ACK(&r, ack_len);
- }
- close(file);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement