All pastes #884736 Raw Edit

Mine

public text v1 · immutable
#884736 ·published 2008-01-30 15:49 UTC
rendered paste body
== socketaddress.h ==

class SocketAddress
{
public:
    virtual bool isValid() = 0;
    virtual operator struct sockaddr *() = 0;
    virtual operator socklen_t() = 0;
    virtual ~SocketAddress() {}
    SocketAddress() {}
};

== ipv4address.h ==

class IPv4Address : public SocketAddress
{
        public:
            IPv4Address(char* addr, char* port);
            IPv4Address(uint32_t addr, uint16_t port);
            IPv4Address(char* port);
            IPv4Address(uint16_t port);
            IPv4Address();
            ~IPv4Address();
            operator struct sockaddr * ();
            operator socklen_t();
            bool isValid();
        private:
            struct sockaddr_in m_addr;
};

== IPv4Address.cpp ==

#include "ipv4address.h"
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <arpa/inet.h>


    IPv4Address::IPv4Address(char* addr, char* port)
    {
        IPv4Address(inet_addr(addr),htons(atoi(port)));
    }

    IPv4Address::IPv4Address(char* port)
    {
        IPv4Address(htons(atoi(port)));
    }

    IPv4Address::IPv4Address(uint32_t addr, uint16_t port) : m_addr()
    {
        //memset(&m_addr, 0, sizeof(m_addr));
        m_addr.sin_family = AF_INET;
        m_addr.sin_port = port;
        m_addr.sin_addr.s_addr = addr;
        std::cout << "m_addr.sin_family=" << m_addr.sin_family << " == " << AF_INET << "\n";
    }
    
    IPv4Address::IPv4Address(uint16_t port)
    {
        IPv4Address(htonl(INADDR_ANY), port);
    }
    
    IPv4Address::IPv4Address()
    {
        IPv4Address(htonl(INADDR_ANY), 0);
    }
    
    IPv4Address::~IPv4Address()
    {
    }
    
    IPv4Address::operator socklen_t()
    {
        return sizeof(m_addr);
    }
    
    IPv4Address::operator struct sockaddr *()
    {
        return (struct sockaddr *)&m_addr;
    }
    
    bool IPv4Address::isValid()
    {
        std::cout << "IPv4Address::isValid() m_addr.sin_family == " << m_addr.sin_family << "\n";
        return (m_addr.sin_family == AF_INET);
    }