| #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 |