SWIipAddress.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. #ifndef SWIIPADDRESS_HPP
  2. #define SWIIPADDRESS_HPP
  3. #include "SWIutilHeaderPrefix.h"
  4. /****************License************************************************
  5.  * Vocalocity OpenVXI
  6.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version 2
  10.  * of the License, or (at your option) any later version.
  11.  *  
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software
  19.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  21.  * registered trademarks of Vocalocity, Inc. 
  22.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  23.  * by Vocalocity.
  24.  ***********************************************************************/
  25. #ifdef _WIN32
  26. #include <winsock2.h>
  27. #else
  28. #include <netinet/in.h>
  29. #ifdef _solaris_
  30. #include <sys/socket.h>
  31. #endif
  32. #endif
  33. #ifdef _WIN32
  34. typedef int socklen_t;
  35. typedef unsigned long in_addr_t;
  36. #else
  37. #if defined(_linux_) && (! defined(IPPROTO_IP))
  38. typedef uint32_t in_addr_t;
  39. #endif
  40. #endif
  41. #include "SWIutilLogger.hpp"
  42. #include "SWIHashable.hpp"
  43. /** Class which implements a network address.  includes functionality
  44.  * to look up network addresses from hostnames or ip addresses as
  45.  * strings.
  46.  */
  47. class SWIUTIL_API_CLASS SWIipAddress : public sockaddr_in, public SWIHashable
  48. {
  49.  public:
  50.   SWIipAddress (const SWIipAddress &);
  51.   SWIipAddress (SWIutilLogger *logger = NULL);
  52.   SWIipAddress (unsigned long addr,
  53.                 int port_no=0,
  54.                 SWIutilLogger *logger = NULL);
  55.   SWIipAddress (const char* host_name,
  56.                 int port_no=0,
  57.                 SWIutilLogger *logger = NULL);
  58.   SWIipAddress (unsigned long addr,
  59.                 const char* service_name,
  60.                 const char* protocol_name="tcp",
  61.                 SWIutilLogger *logger = NULL);
  62.   SWIipAddress (const char* host_name,
  63.                 const char* service_name, const char* protocol_name="tcp",
  64.                 SWIutilLogger *logger = NULL);
  65.   virtual ~SWIipAddress()
  66.   {}
  67.   virtual operator const void*() const
  68.   {
  69.     return (void *)(static_cast<const sockaddr_in*>(this));
  70.   }
  71.   virtual operator void*()
  72.   {
  73.     return (void *)(static_cast<const sockaddr_in*>(this));
  74.   }
  75.   operator const struct sockaddr*() const { return addr (); }
  76.   operator struct sockaddr*() { return addr (); }
  77.   virtual socklen_t size() const { return sizeof (sockaddr_in); }
  78.   virtual int family() const { return sin_family; }
  79.   virtual struct sockaddr* addr()
  80.   {
  81.     return (sockaddr*)(static_cast<sockaddr_in*>(this));
  82.   }
  83.   virtual const struct sockaddr* addr() const
  84.   {
  85.     return (const sockaddr*)(static_cast<const sockaddr_in*>(this));
  86.   }
  87.   int getport() const;
  88.   int gethostname(char *hostname, size_t hostnameLen) const;
  89.  public:
  90.   void setport(int port_no);
  91.  public:
  92.   virtual unsigned int hashCode() const;
  93.   virtual bool equals(const SWIHashable *rhs) const;
  94.   virtual SWIHashable* clone() const;
  95.   bool operator ==(const SWIipAddress& rhs) const;
  96.   bool operator !=(const SWIipAddress& rhs) const
  97.   {
  98.     return !operator==(rhs);
  99.   }
  100.  public:
  101.   int setport(const char* sn, const char* pn="tcp");
  102.   int sethostname(const char* hn);
  103.  protected:
  104.   void herror(const char*) const;
  105.  private:
  106.   SWIutilLogger *_logger;
  107. };
  108. #endif