gnet.h

Go to the documentation of this file.
00001 // gnet.cpp -- Version 0.8
00002 
00003 #ifndef gNET_X_H
00004 #define gNET_X_H
00005 
00006 #include "gstring.h"
00007 #include "glist.h"
00008 #include "gcontrol.h"
00009 
00010 #ifdef linux
00011 #include <netinet/in.h>  //htonl...etc
00012 #else
00013 typedef t_uint32 in_addr_t;
00014 #endif //linux
00015 
00016 #define STG_SVC_IDX_SOCK 1
00017 #define STG_SVC_KND_SOCK 128
00018 ////////////////////////////////////////////////////////////
00019 // Generic definitions
00020 ////////////////////////////////////////////////////////////
00021 typedef t_uint64 t_gIpAddr;  // Least significant nibble is b4
00022 
00023 ////////////////////////////////////////////////////////////
00024 // Specific classes
00025 ////////////////////////////////////////////////////////////
00026 class gIpAddr : public gControl {
00027 public:
00028     gIpAddr (char* ipStr=nil) ;
00029     gIpAddr (t_uint8 c1, t_uint8 c2, t_uint8 c3, t_uint8 c4) ;
00030     virtual ~gIpAddr () ;
00031 
00032     // Public data-members (due to performance)
00033     t_uint8 b1, b2, b3, b4;
00034 
00035     // Get methods
00036     virtual bool IsOk () ;
00037     virtual t_uchar* String () ;
00038     virtual t_uchar* ToString (t_uchar* uBuf) ;
00039 
00040     t_uint8 GetB1 () {
00041         return b1;
00042     }
00043     t_uint8 GetB2 () {
00044         return b2;
00045     }
00046     t_uint8 GetB3 () {
00047         return b3;
00048     }
00049     t_uint8 GetB4 () {
00050         return b4;
00051     }
00052 
00053     // Set methods
00054     virtual void Reset () ;
00055     virtual void SetAddr (t_gIpAddr nboAddr) ;
00056     virtual bool SetAddrFromStr (char* str) ;
00057 
00058     // Specific methods
00059     virtual t_gIpAddr GetNetworkAddress () ;
00060     virtual in_addr_t GetHostAddress () {
00061         return thisGetHostByteOrder( GetNetworkAddress() );
00062     }
00063 
00064     virtual int GetHostByName (char* hostname) ;
00065     virtual int GetHostByAddr (gString& sRes) ;
00066 
00067     // Operators,valid
00068     gIpAddr& operator= (gIpAddr& copy) ;
00069 
00070     // Show methods
00071     virtual void Show (bool doShowAll=true) ;
00072 
00073 protected:
00074     unsigned long thisGetIP (t_uint8 a1, t_uint8 a2, t_uint8 a3, t_uint8 a4) ;
00075     unsigned long thisGetHostByteOrder (t_gIpAddr netByteOrder) ;
00076     int thisSetIPfromHostByteOrder (in_addr_t hostByteOrder) ;
00077     int thisSetIPfromHostEnt (char* h_addr, int h_length) ;
00078     int thisGetHostByAddr (char* ipStr, gString& sRes, gList& lRes) ;
00079 
00080 private:
00081     gString addrStr;
00082 
00083     // Operators,empty
00084     gIpAddr (gIpAddr& ) ; //empty
00085 };
00086 ////////////////////////////////////////////////////////////
00087 class gIpV4Mask : public gSwitch {
00088 public:
00089     // Public enums
00090     // (Class A = /8, Class B = /16, and Class C = /24)
00091     enum eClass {
00092         e_NoClass,
00093         e_ClassA,  // addresses begin with 1..126
00094         e_ClassB,  // 128..191
00095         e_ClassC,  // 192..223
00096         e_ClassD,  // For multicasting (224..239)
00097         e_ClassE   // Only for future use (240..254)
00098         // See excelent guide at: http://www.ralphb.net/IPSubnet/ipaddr.html
00099     };
00100 
00101     // RFC1918:
00102     //    10.0.0.0        -   10.255.255.255  (10/8 prefix)
00103     //    172.16.0.0      -   172.31.255.255  (172.16/12 prefix)
00104     //    192.168.0.0     -   192.168.255.255 (192.168/16 prefix)
00105     enum ePrivateAddrSpace {  // acc.RFC1918
00106         e_none,
00107         e_P010 = 8,
00108         e_P172 = 12,
00109         e_P192 = 16
00110     };
00111 
00112     gIpV4Mask (t_uint32 aMask=0) ;
00113     gIpV4Mask (t_uint8 bitsCIDR) ;
00114     gIpV4Mask (eClass addrClass) ;
00115     virtual ~gIpV4Mask () ;
00116 
00117     // Public data-members
00118     t_uint8 nBitsCIDR;
00119     t_uint32 mask;
00120 
00121     // Methods
00122     virtual void SetBitsCIDR (t_uint8 bitsCIDR) ;
00123 
00124 protected:
00125     int thisSetNBitsFromMask (t_uint32 aMask) ;
00126 
00127 private:
00128     // Operators,empty
00129     gIpV4Mask (gIpV4Mask& ) ; //empty
00130     gIpV4Mask& operator= (gIpV4Mask& ) ; //empty
00131 };
00132 ////////////////////////////////////////////////////////////
00133 class gHostAddr : public gIpAddr {
00134 public:
00135     gHostAddr (char* hostStr) ;
00136     gHostAddr (t_uint8 c1, t_uint8 c2, t_uint8 c3, t_uint8 c4) ;
00137     gHostAddr (gIpAddr& ipAddr) ;
00138     virtual ~gHostAddr () ;
00139 
00140     // Get methods
00141     virtual bool IsOk () ;
00142     virtual t_uchar* String () ;
00143     virtual char* GetHostName () {
00144         return destHostStr.Str();
00145     }
00146 
00147     // Set methods
00148     virtual bool SetHostName (char* hostStr) ;
00149 
00150     // Show methods
00151     virtual void Show (bool doShowAll=true) ;
00152 
00153 protected:
00154     gString destHostStr;
00155 
00156 private:
00157     // Operators,empty
00158     gHostAddr (gHostAddr& ) ; //empty
00159     gHostAddr& operator= (gHostAddr& ) ;
00160 };
00161 ////////////////////////////////////////////////////////////
00162 class gSocket : public gInt {
00163 public:
00164     // Public enums
00165     enum eSocketKind {
00166         e_None,
00167         e_TCP = 1,
00168         e_UDP = 2,
00169         e_other
00170     };
00171 
00172     gSocket (int socketHandle, eSocketKind socketKind) ;
00173     virtual ~gSocket () ;
00174 
00175     // Get methods
00176     virtual bool IsOk () ;
00177     virtual bool IsOpened () ;
00178     virtual bool IsConnected () ;
00179     virtual int Handle () ;
00180 
00181     // Set methods
00182     virtual bool Open (t_uchar* uName) ;
00183     virtual bool Close () ;
00184     bool SetConnection (gIpAddr& ipAddr) ;
00185     bool SetConnection (gHostAddr& hostAddr) ;
00186 
00187 protected:
00188     eSocketKind sockKind;
00189     static int sockCount;
00190 
00191 private:
00192     gHostAddr* hostConnected;
00193 
00194     // Operators,empty
00195     gSocket (gSocket& ) ; //empty
00196     gSocket& operator= (gSocket& ) ; //empty
00197 };
00198 ////////////////////////////////////////////////////////////
00199 class gNetConnect : public gControl {
00200 public:
00201     virtual ~gNetConnect () ;
00202 
00203     // Get methods
00204     virtual int Handle () = 0; //PURE
00205 
00206     // I/O methods
00207     bool Read (t_uchar& c) ;
00208     bool Read (t_uchar* uBuf, unsigned nBytes) ;
00209     virtual bool ReadLine (gString& s) ;
00210     int Write (char* s) ;
00211     int Write (gString& s) ;
00212     int Write (char* s, unsigned nOctets) ;
00213 
00214 protected:
00215     gNetConnect () ;
00216 
00217 private:
00218     // Operators,etc
00219     gNetConnect (gNetConnect& ) ; //empty
00220     gNetConnect& operator= (gNetConnect& ) ; //empty
00221 };
00222 ////////////////////////////////////////////////////////////
00223 class gTcpConnect : public gNetConnect {
00224 public:
00225     gTcpConnect (char* destHostname, t_gPort cPort, bool doConnect=true) ;
00226     gTcpConnect (t_uint8 c1, t_uint8 c2, t_uint8 c3, t_uint8 c4, t_gPort cPort, bool doConnect=true) ;
00227     virtual ~gTcpConnect () ;
00228 
00229     // Public data-members
00230     gHostAddr destAddr;
00231     t_gPort destPort;
00232     gSocket socket;
00233 
00234     // Get methods
00235     virtual bool IsOk () ;
00236     virtual int Handle () ;
00237     virtual t_uchar* String () ;
00238     virtual t_uchar* ToString (t_uchar* uBuf) ;
00239 
00240     // Set methods
00241     bool Connect () ;
00242     virtual bool Close () ;
00243 
00244     // Show methods
00245     virtual void Show (bool doShowAll=true) ;
00246 
00247 protected:
00248     int thisConnect (gSocket& aSocket) ;
00249 
00250 private:
00251     // Operators,empty
00252     gTcpConnect (gTcpConnect& ) ; //empty
00253     gTcpConnect& operator= (gTcpConnect& ) ; //empty
00254 };
00255 ////////////////////////////////////////////////////////////
00256 #endif //gNET_X_H
00257 

Generated on Sat Aug 18 02:40:57 2007 for xpfweb_v2x lib by  doxygen 1.4.2