Changeset 5568
- Timestamp:
- 06/03/08 14:25:43 (4 months ago)
- Files:
-
- libwired/trunk/libwired/net/wi-ip.c (modified) (5 diffs)
- libwired/trunk/libwired/net/wi-ip.h (modified) (1 diff)
- libwired/trunk/test/tests/wi-ip-tests.c (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
libwired/trunk/libwired/net/wi-ip.c
r5565 r5568 53 53 54 54 55 wi_ uinteger_t wi_ip_version(wi_string_t *ip) {55 wi_ip_version_t wi_ip_version(wi_string_t *ip) { 56 56 struct sockaddr_in sa_in; 57 57 struct sockaddr_in6 sa_in6; … … 59 59 if(wi_string_contains_string(ip, WI_STR("."), 0)) { 60 60 if(inet_pton(AF_INET, wi_string_cstring(ip), &sa_in.sin_addr) > 0) 61 return 4;61 return WI_IP_IPV4; 62 62 } 63 63 else if(wi_string_contains_string(ip, WI_STR(":"), 0)) { 64 64 if(inet_pton(AF_INET6, wi_string_cstring(ip), &sa_in6.sin6_addr) > 0) 65 return 6;66 } 67 68 return 0;65 return WI_IP_IPV6; 66 } 67 68 return WI_IP_NULL; 69 69 } 70 70 … … 74 74 75 75 wi_boolean_t wi_ip_matches_string(wi_string_t *ip, wi_string_t *pattern) { 76 wi_uinteger_t ip_version, pattern_version; 77 78 ip_version = wi_ip_version(ip); 79 pattern_version = wi_ip_version(pattern); 80 81 if(ip_version == 0 || pattern_version == 0 || ip_version != pattern_version) 82 return false; 83 84 if(ip_version == 4) { 85 if(wi_string_contains_string(ip, WI_STR("*"), 0)) 86 return _wi_ipv4_match_wildcard(ip, pattern); 87 else if(wi_string_contains_string(ip, WI_STR("*"), 0)) 88 return _wi_ipv4_match_netmask(ip, pattern); 89 else 90 return _wi_ipv4_match_literal(ip, pattern); 91 } 92 else if(ip_version == 6) { 93 return _wi_ipv6_match_literal(ip, pattern); 94 } 95 96 return false; 76 switch(wi_ip_version(ip)) { 77 case WI_IP_IPV4: 78 if(wi_string_contains_string(pattern, WI_STR("*"), 0)) 79 return _wi_ipv4_match_wildcard(ip, pattern); 80 else if(wi_string_contains_string(pattern, WI_STR("/"), 0)) 81 return _wi_ipv4_match_netmask(ip, pattern); 82 else 83 return _wi_ipv4_match_literal(ip, pattern); 84 break; 85 86 case WI_IP_IPV6: 87 return _wi_ipv6_match_literal(ip, pattern); 88 break; 89 90 case WI_IP_NULL: 91 default: 92 return false; 93 break; 94 } 97 95 } 98 96 … … 132 130 uint32_t cidr, netmask; 133 131 134 array = wi_string_components_separated_by_string( ip, WI_STR("/"));132 array = wi_string_components_separated_by_string(pattern, WI_STR("/")); 135 133 136 134 if(wi_array_count(array) != 2) … … 163 161 164 162 ip_expanded = _wi_ipv6_expanded_value(ip); 165 pattern_expanded = _wi_ipv6_expanded_value( ip);166 163 pattern_expanded = _wi_ipv6_expanded_value(pattern); 164 167 165 return (ip_expanded && pattern_expanded && wi_is_equal(ip_expanded, pattern_expanded)); 168 166 } libwired/trunk/libwired/net/wi-ip.h
r5564 r5568 32 32 #include <wired/wi-base.h> 33 33 34 WI_EXPORT wi_uinteger_t wi_ip_version(wi_string_t *); 34 enum _wi_ip_version { 35 WI_IP_NULL = 0, 36 WI_IP_IPV4 = 4, 37 WI_IP_IPV6 = 6 38 }; 39 typedef enum _wi_ip_version wi_ip_version_t; 35 40 36 WI_EXPORT wi_boolean_t wi_ip_matches_string(wi_string_t *, wi_string_t *); 41 42 WI_EXPORT wi_ip_version_t wi_ip_version(wi_string_t *); 43 44 WI_EXPORT wi_boolean_t wi_ip_matches_string(wi_string_t *, wi_string_t *); 37 45 38 46 #endif /* WI_IP_H */
