NSIS-ka
A free C++ implementation of NSIS protocols

Changeset 4220


Ignore:
Timestamp:
Aug 11, 2009, 9:45:47 AM (8 years ago)
Author:
bless
Message:
  • added a convert_to_ipv4() method
Location:
protlib/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • protlib/trunk/include/address.h

    r4210 r4220  
    163163        /// get as in6_addr?
    164164        const struct in6_addr *get_ip() const { return ipv4flag ? 0 : &ipv6addr; };
    165         /// convert to iPv6
     165        /// convert to IPv6
    166166        virtual void convert_to_ipv6();
     167        /// convert to IPv4 is it is a mapped IPv6 address
     168        virtual void convert_to_ipv4();
    167169        /// are they equivalent
    168170        virtual bool equiv(const hostaddress& h) const;
     
    841843} // end is_ipv6
    842844
    843 /** Check if this is a 6to4 mapped address. */
     845/** Check if this is an IPv4 mapped IPv6 address. */
    844846inline
    845847bool
  • protlib/trunk/src/address.cpp

    r4210 r4220  
    283283                        clear_ip();
    284284                        set_subtype(false);
    285                 } else {
     285                }
     286                else {
    286287                        // map to IPv6
    287288                        struct in6_addr in;
     
    289290                        // set IP
    290291                        set_ip(in);
    291                 } // end if is_ip_unspec()
     292                } // end if
    292293        } // end if ipv4flag
    293294} // end convert_to_ipv6
     295
     296
     297
     298/** Convert the IP address to IPv4 if it is an IPv4 mapped address
     299 */
     300void hostaddress::convert_to_ipv4() {
     301        if (ipv4flag) {
     302                if (is_ip_unspec()) {
     303                        // clear IP and set to IPv4
     304                        clear_ip();
     305                        set_subtype(true);
     306                } else
     307                if (is_mapped_ip()) {
     308                        struct in_addr in;
     309                        get_ip(in);
     310                        // set IP
     311                        set_ip(in);
     312                } // end if is_mapped_ip()
     313        } // end if ipv4flag
     314} // end convert_to_ipv4
     315
    294316
    295317/** Two addresses are equivalent if they are equal after converting both to
Note: See TracChangeset for help on using the changeset viewer.