blob: f3f9ed1e4a4d7bd9df3132c4747670a37dd4e5af [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