blob: 298f4da94fa6892f614f1dec73429de7817453f9 [file] [log] [blame]
#include "casbin/pch.h"
#ifndef PARSEIPV4_CPP
#define PARSEIPV4_CPP
#include "casbin/ip_parser/parser/parseIPv4.h"
namespace casbin {
IP parseIPv4(std::string_view s) {
std::vector<byte> pb(IP ::IPv4len, 0);
IP ipv4;
for (int i = 0; i < IP ::IPv4len; i++) {
if (s.length() == 0) {
// Missing octets.
ipv4.isLegal = false;
return ipv4;
}
if (i > 0) {
if (s[0] != '.') {
ipv4.isLegal = false;
return ipv4;
}
s = s.substr(1, s.length() - 1);
}
std::pair<int, int> p = dtoi(s);
if ((p.first >= big || p.second == 0) || p.first > 0xFF) {
ipv4.isLegal = false;
return ipv4;
}
s = s.substr(p.second, s.length() - p.second);
pb[i] = p.first;
}
if (s.length() != 0) {
ipv4.isLegal = false;
return ipv4;
}
return IPv4(pb[0], pb[1], pb[2], pb[3]);
}
} // namespace casbin
#endif // PARSEIPV4_CPP