Advertisement
Guest User

Untitled

a guest
May 26th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include <netdb.h>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5.  
  6. #include "helper.h"
  7. #include "player.h"
  8. #include "err.h"
  9.  
  10. void send_datagram(Player *player, unsigned char *datagram, int len)
  11. {
  12.     int sflags = 0;
  13.     ssize_t snd_len;
  14.     socklen_t rcva_len;
  15.  
  16.     rcva_len = (socklen_t) sizeof(player->server_address);
  17.     snd_len = sendto(player->sock, datagram, len, sflags,
  18.         (struct sockaddr *) &player->server_address, rcva_len);
  19.     if (snd_len != (ssize_t) len)
  20.         syserr("partial / failed write");
  21. }
  22.  
  23. ssize_t receive_datagram(Player *player, unsigned char *datagram, int len)
  24. {
  25.     int flags = 0;
  26.     socklen_t rcva_len;
  27.     ssize_t rcv_len;
  28.     struct sockaddr_in srvr_address;
  29.  
  30.     memset(datagram, 0, sizeof(datagram));
  31.     rcv_len = recvfrom(player->sock, datagram, len, flags,
  32.         (struct sockaddr *) &srvr_address, &rcva_len);
  33.     return rcv_len;
  34. }
  35.  
  36. uint64_t read_8_byte_number(unsigned char *buffer)
  37. {
  38.     uint64_t result = 0;
  39.     for (size_t i = 0; i < 8; ++i)
  40.         result += buffer[i]*(1LL<<(8*(7-i)));
  41.     return result;
  42. }
  43.  
  44. int8_t read_1_byte_number(unsigned char *buffer)
  45. {
  46.     int8_t result = buffer[0];
  47.     return result;
  48. }
  49.  
  50. uint32_t read_4_byte_number(unsigned char *buffer)
  51. {
  52.     uint32_t result = 0;
  53.     for (size_t i = 0; i < 4; ++i)
  54.         result += buffer[i]*(1LL<<(8*(3-i)));
  55.     return result;
  56. }
  57.  
  58. unsigned long long read_time(unsigned  char* buffer)
  59. {
  60.     unsigned long long res = 0;
  61.     int i;
  62.     for (i = 0; i < 8; ++i)
  63.         res += buffer[i]*(1LL<<(56-8*i));
  64.     return res;
  65. }
  66.  
  67. std::string make_message_from_n_byte(uint64_t timestamp, uint8_t n)
  68. {
  69.     int i;
  70.     std::string message = "";
  71.     for (i = n-1; i >= 0; --i)
  72.         message += make_char(timestamp, 8*i, 8*i+7);
  73.     return message;
  74. }
  75.  
  76. unsigned char make_char(unsigned long long my_time, int from, int to)
  77. {
  78.     unsigned char result = 0;
  79.     int i;
  80.     for (i = from; i <= to; ++i)
  81.         if (my_time&(1LL<<i))
  82.             result += (1<<(i-from));
  83.     return result;
  84. }
  85.  
  86. uint32_t calculate_crc32(std::string str) {
  87.    int i, j;
  88.    unsigned int byte, crc, mask;
  89.    int len = str.size();
  90.  
  91.    i = 0;
  92.    crc = 0xFFFFFFFF;
  93.    while (i < len) {
  94.       byte = str[i];
  95.       crc = crc ^ byte;
  96.       for (j = 7; j >= 0; j--) {
  97.          mask = -(crc & 1);
  98.          crc = (crc >> 1) ^ (0xEDB88320 & mask);
  99.       }
  100.       i = i + 1;
  101.    }
  102.    return ~crc;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement