Advertisement
Guest User

Untitled

a guest
Mar 26th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.25 KB | None | 0 0
  1. int number_of_set_bits(int c) {
  2.     int num = 0;
  3.     if (c)
  4.         do num++; while (c &= c - 1);
  5.     return num;
  6. }
  7. char get_parity_byte(char payload[], int len) {
  8.     parity_t parity = parity_of_string(payload, len);
  9.     switch(parity) {
  10.         case ODD :
  11.             // return 'c';
  12.             return 1;
  13.         case EVEN :
  14.             // return 'p';
  15.             return 0;
  16.         default: return 'c';
  17.     }
  18. }
  19. parity_t parity_of_string(char payload[], int len) {
  20.     // Total number of set bits
  21.     int no_set = 0;
  22.     int i = 0;
  23.     for(i = 0; i < len; i++) {
  24.         no_set += number_of_set_bits(payload[i]);
  25.     }
  26.     return ((no_set % 2) == 0) ? EVEN : ODD;
  27. }
  28. if(strncmp(command, "cp ", 3) == 0) {
  29.             // Opening file
  30.             int file = open(&command[3], O_RDONLY);
  31.             int copiat;
  32.             // Size of file
  33.             int file_size = size(&command[3]);
  34.  
  35.             // size of file
  36.             sprintf(r.payload, "%d", file_size);
  37.             switch(mode) {
  38.                 case 0:
  39.                     r.len = digitsNo(file_size);
  40.                     break;
  41.                 case 1:
  42.                     r.payload[0] = get_parity_byte(r.payload, r.len);
  43.                     sprintf(&r.payload[1], "%d", file_size);
  44.                     r.len = digitsNo(file_size) + 1;
  45.                     break;
  46.             }
  47.             printByte(r.payload[0]);
  48.             printf("%s\n",&r.payload[1]);
  49.  
  50.             send_message_until_ACK(&r, ack_len);
  51.  
  52.             char *buf;
  53.             int size;
  54.             switch(mode) {
  55.                 case 0:
  56.                     buf = (char *) malloc(1400);
  57.                     size = 1400;
  58.                     break;
  59.                 case 1:
  60.                     buf = (char *) malloc(1399);
  61.                     size = 1399;
  62.                     break;
  63.             }
  64.             lseek(file, 0, SEEK_SET);
  65.             while ((copiat = read(file, buf, size))) {
  66.                     // Prepare packet
  67.                     r.len = copiat;
  68.  
  69.                     memcpy(r.payload, buf, size);
  70.                     // Modifying message according to mode
  71.                     switch(mode) {
  72.                         case 1:
  73.                             r.payload[0] = get_parity_byte(buf, copiat);
  74.                             memcpy(&r.payload[1], buf, size);
  75.                             r.len ++;
  76.                             break;
  77.                     }
  78.  
  79.                     // Send packet
  80.                     send_message_until_ACK(&r, ack_len);
  81.             }
  82.             close(file);
  83.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement