Changeset 5568

Show
Ignore:
Timestamp:
06/03/08 14:25:43 (4 months ago)
Author:
morris
Message:

Add test for ip, fix problems in implementation to make it pass

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • libwired/trunk/libwired/net/wi-ip.c

    r5565 r5568  
    5353 
    5454 
    55 wi_uinteger_t wi_ip_version(wi_string_t *ip) { 
     55wi_ip_version_t wi_ip_version(wi_string_t *ip) { 
    5656        struct sockaddr_in              sa_in; 
    5757        struct sockaddr_in6             sa_in6; 
     
    5959        if(wi_string_contains_string(ip, WI_STR("."), 0)) { 
    6060                if(inet_pton(AF_INET, wi_string_cstring(ip), &sa_in.sin_addr) > 0) 
    61                         return 4; 
     61                        return WI_IP_IPV4; 
    6262        } 
    6363        else if(wi_string_contains_string(ip, WI_STR(":"), 0)) { 
    6464                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
    6969} 
    7070 
     
    7474 
    7575wi_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        } 
    9795} 
    9896 
     
    132130        uint32_t                cidr, netmask; 
    133131         
    134         array = wi_string_components_separated_by_string(ip, WI_STR("/")); 
     132        array = wi_string_components_separated_by_string(pattern, WI_STR("/")); 
    135133         
    136134        if(wi_array_count(array) != 2) 
     
    163161         
    164162        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         
    167165        return (ip_expanded && pattern_expanded && wi_is_equal(ip_expanded, pattern_expanded)); 
    168166} 
  • libwired/trunk/libwired/net/wi-ip.h

    r5564 r5568  
    3232#include <wired/wi-base.h> 
    3333 
    34 WI_EXPORT wi_uinteger_t         wi_ip_version(wi_string_t *); 
     34enum _wi_ip_version { 
     35        WI_IP_NULL                                      = 0, 
     36        WI_IP_IPV4                                      = 4, 
     37        WI_IP_IPV6                                      = 6 
     38}; 
     39typedef enum _wi_ip_version             wi_ip_version_t; 
    3540 
    36 WI_EXPORT wi_boolean_t          wi_ip_matches_string(wi_string_t *, wi_string_t *); 
     41 
     42WI_EXPORT wi_ip_version_t               wi_ip_version(wi_string_t *); 
     43 
     44WI_EXPORT wi_boolean_t                  wi_ip_matches_string(wi_string_t *, wi_string_t *); 
    3745 
    3846#endif /* WI_IP_H */