|
@@ -50,7 +50,7 @@ std::shared_ptr<FreeFareTag> FreeFareTagBusiness::getTag() const
|
50
|
50
|
return _tag;
|
51
|
51
|
}
|
52
|
52
|
|
53
|
|
-Result<MappedKeys> FreeFareTagBusiness::mapKeys(std::vector<std::string> keys)
|
|
53
|
+Result<MappedKeys> FreeFareTagBusiness::mapKeys(std::vector<std::string> keys, std::function<void(int, int)> cb)
|
54
|
54
|
{
|
55
|
55
|
std::vector<std::vector<std::pair<std::string, std::string>>> mappedKeys;
|
56
|
56
|
|
|
@@ -58,13 +58,17 @@ Result<MappedKeys> FreeFareTagBusiness::mapKeys(std::vector<std::string> keys)
|
58
|
58
|
std::vector<std::pair<std::string, std::string>> sectorKeys;
|
59
|
59
|
for (int j = 0; j < 4; ++j) {
|
60
|
60
|
std::pair<std::string, std::string> blockKeys;
|
61
|
|
- for (auto key : keys) {
|
|
61
|
+ for (int k = 0; k < keys.size(); ++k) {
|
|
62
|
+ auto key = keys[k];
|
62
|
63
|
if (authenticate(i, j, key, MFC_KEY_A)) {
|
63
|
64
|
blockKeys.first = key;
|
64
|
65
|
}
|
65
|
66
|
if (authenticate(i, j, key, MFC_KEY_B)) {
|
66
|
67
|
blockKeys.second = key;
|
67
|
68
|
}
|
|
69
|
+ if (cb != 0) {
|
|
70
|
+ cb((i * 4 * keys.size()) + (j * keys.size()) + k + 1, 16 * 4 * keys.size());
|
|
71
|
+ }
|
68
|
72
|
if (!blockKeys.first.empty() && !blockKeys.second.empty()) {
|
69
|
73
|
break;
|
70
|
74
|
}
|
|
@@ -77,7 +81,7 @@ Result<MappedKeys> FreeFareTagBusiness::mapKeys(std::vector<std::string> keys)
|
77
|
81
|
return Result<std::vector<std::vector<std::pair<std::string, std::string>>>>::ok(mappedKeys);
|
78
|
82
|
}
|
79
|
83
|
|
80
|
|
-Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(MappedKeys keys)
|
|
84
|
+Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(MappedKeys keys, std::function<void(int, int)> cb)
|
81
|
85
|
{
|
82
|
86
|
if (keys.size() != 16) {
|
83
|
87
|
return Result<std::vector<SectorDbo>>::error("Must have 16 sectors");
|
|
@@ -112,6 +116,9 @@ Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(MappedKeys keys)
|
112
|
116
|
}
|
113
|
117
|
}
|
114
|
118
|
sector.setBlock(b, data);
|
|
119
|
+ if (cb != 0) {
|
|
120
|
+ cb((s * sectorKeys.size()) + b + 1, keys.size() * sectorKeys.size());
|
|
121
|
+ }
|
115
|
122
|
}
|
116
|
123
|
int b = sectorKeys.size() - 1;
|
117
|
124
|
auto blockKey = sectorKeys[b];
|
|
@@ -132,6 +139,9 @@ Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(MappedKeys keys)
|
132
|
139
|
}
|
133
|
140
|
sector.setBlock(b, data);
|
134
|
141
|
AccessBitsDbo accessBitsDbo = sector.getAccessBitsDbo();
|
|
142
|
+ if (cb != 0) {
|
|
143
|
+ cb((s * sectorKeys.size()) + b + 1, keys.size() * sectorKeys.size());
|
|
144
|
+ }
|
135
|
145
|
|
136
|
146
|
sector.setKeyA(keyA ? blockKey.first : "");
|
137
|
147
|
sector.setKeyB(keyB ? blockKey.second : "");
|
|
@@ -150,11 +160,11 @@ Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(MappedKeys keys)
|
150
|
160
|
return Result<std::vector<SectorDbo>>::ok(sectors);
|
151
|
161
|
}
|
152
|
162
|
|
153
|
|
-Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(std::vector<std::string> keys)
|
|
163
|
+Result<std::vector<SectorDbo>> FreeFareTagBusiness::dump(std::vector<std::string> keys, std::function<void(int, int)> mapCb, std::function<void(int, int)> dumpCb)
|
154
|
164
|
{
|
155
|
|
- auto mappedKeysResult = mapKeys(keys);
|
|
165
|
+ auto mappedKeysResult = mapKeys(keys, mapCb);
|
156
|
166
|
if (!mappedKeysResult) {
|
157
|
167
|
return Result<std::vector<SectorDbo>>::error(mappedKeysResult);
|
158
|
168
|
}
|
159
|
|
- return dump(mappedKeysResult.getData());
|
|
169
|
+ return dump(mappedKeysResult.getData(), dumpCb);
|
160
|
170
|
}
|