-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.cpp
102 lines (74 loc) · 2.13 KB
/
utils.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// Created by abnv on 19/11/2019.
//
#include "utils.h"
vector<string> getTokens(const string &line, char DELIM) {
string token;
istringstream ss(line);
vector<string> res;
while (getline(ss, token, DELIM)) {
res.push_back(token);
}
return res;
}
int getFileSize(const string &filePath) {
struct stat st{};
if (stat(filePath.c_str(), &st) != 0) {
return 0;
}
return st.st_size;
}
string getHash(const string &path) {
// Returns hash for given filepath
string fileHash;
int size = getFileSize(path) - 1;
ifstream ifile(path, ios::binary);
int bytesToRead;
if (ifile.good()) {
while (size > 0) {
bytesToRead = min(size, PIECE_SIZE);
char buffer[bytesToRead];
ifile.read(buffer, bytesToRead);
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1((unsigned char *) buffer, bytesToRead, hash);
char hashstr[41];
for (int i = 0; i < 20; ++i)
sprintf(&hashstr[i * 2], "%02x", hash[i]);
hashstr[40] = '\0';
string temp(hashstr);
fileHash += temp;
size -= PIECE_SIZE;
}
}
return fileHash;
}
string getFileNameFromPath(const string &path) {
unsigned found = path.find_last_of("/\\");
clog << "Filepath from path: " << path.substr(0, found) << endl;
clog << "Filename from path: " << path.substr(found + 1) << endl;
return path.substr(found + 1);
}
string getSHAofSHA(string sha) {
int i;
int size = strlen(&sha[0]);
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1((unsigned char *) &sha[0], size, hash);
char hashstr[41];
for (i = 0; i < 20; ++i)
sprintf(&hashstr[i * 2], "%02x", hash[i]);
hashstr[40] = '\0';
string SHA(hashstr);
return SHA;
}
int getRandom(int min, int max) {
//range : [min, max]
static bool first = true;
if (first) {
srand(time(nullptr)); //seeding for the first time only!
first = false;
}
return min + rand() % ((max + 1) - min);
}
string getNodeId(string str) {
return getSHAofSHA(std::move(str));
}