00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "TInetAddress.h"
00021 #include "TClass.h"
00022
00023 ClassImp(TInetAddress)
00024
00025
00026 TInetAddress::TInetAddress()
00027 {
00028
00029
00030 fHostname = "UnknownHost";
00031 AddAddress(0);
00032 fFamily = -1;
00033 fPort = -1;
00034 }
00035
00036
00037 TInetAddress::TInetAddress(const char *host, UInt_t addr, Int_t family, Int_t port)
00038 {
00039
00040
00041
00042
00043 AddAddress(addr);
00044 if (!strcmp(host, "????") || !strcmp(host, "UnNamedHost"))
00045 fHostname = GetHostAddress();
00046 else
00047 fHostname = host;
00048 fFamily = family;
00049 fPort = port;
00050 }
00051
00052
00053 TInetAddress::TInetAddress(const TInetAddress &adr) : TObject(adr)
00054 {
00055
00056
00057 fHostname = adr.fHostname;
00058 fFamily = adr.fFamily;
00059 fPort = adr.fPort;
00060 fAddresses = adr.fAddresses;
00061 fAliases = adr.fAliases;
00062 }
00063
00064
00065 TInetAddress& TInetAddress::operator=(const TInetAddress &rhs)
00066 {
00067
00068
00069 if (this != &rhs) {
00070 TObject::operator=(rhs);
00071 fHostname = rhs.fHostname;
00072 fFamily = rhs.fFamily;
00073 fPort = rhs.fPort;
00074 fAddresses = rhs.fAddresses;
00075 fAliases = rhs.fAliases;
00076 }
00077 return *this;
00078 }
00079
00080
00081 UChar_t *TInetAddress::GetAddressBytes() const
00082 {
00083
00084
00085
00086
00087
00088 UChar_t *addr = new UChar_t[4];
00089
00090 addr[0] = (UChar_t) ((fAddresses[0] >> 24) & 0xFF);
00091 addr[1] = (UChar_t) ((fAddresses[0] >> 16) & 0xFF);
00092 addr[2] = (UChar_t) ((fAddresses[0] >> 8) & 0xFF);
00093 addr[3] = (UChar_t) (fAddresses[0] & 0xFF);
00094
00095 return addr;
00096 }
00097
00098
00099 const char *TInetAddress::GetHostAddress(UInt_t addr)
00100 {
00101
00102
00103
00104
00105 return Form("%d.%d.%d.%d", (addr >> 24) & 0xFF,
00106 (addr >> 16) & 0xFF,
00107 (addr >> 8) & 0xFF,
00108 addr & 0xFF);
00109 }
00110
00111
00112 const char *TInetAddress::GetHostAddress() const
00113 {
00114
00115
00116
00117 return GetHostAddress(fAddresses[0]);
00118 }
00119
00120
00121 void TInetAddress::Print(Option_t *) const
00122 {
00123
00124
00125 if (fPort == -1)
00126 Printf("%s/%s (not connected)", GetHostName(), GetHostAddress());
00127 else
00128 Printf("%s/%s (port %d)", GetHostName(), GetHostAddress(), fPort);
00129
00130 int i = 0;
00131 AddressList_t::const_iterator ai;
00132 for (ai = fAddresses.begin(); ai != fAddresses.end(); ai++) {
00133 if (!i) printf("%s:", fAddresses.size() == 1 ? "Address" : "Addresses");
00134 printf(" %s", GetHostAddress(*ai));
00135 i++;
00136 }
00137 if (i) printf("\n");
00138
00139 i = 0;
00140 AliasList_t::const_iterator ali;
00141 for (ali = fAliases.begin(); ali != fAliases.end(); ali++) {
00142 if (!i) printf("%s:", fAliases.size() == 1 ? "Alias" : "Aliases");
00143 printf(" %s", ali->Data());
00144 i++;
00145 }
00146 if (i) printf("\n");
00147 }
00148
00149
00150 void TInetAddress::AddAddress(UInt_t addr)
00151 {
00152
00153
00154 fAddresses.push_back(addr);
00155 }
00156
00157
00158 void TInetAddress::AddAlias(const char *alias)
00159 {
00160
00161
00162 fAliases.push_back(TString(alias));
00163 }
00164
00165
00166 void TInetAddress::Streamer(TBuffer &R__b)
00167 {
00168
00169
00170 if (R__b.IsReading()) {
00171 UInt_t R__s, R__c;
00172 Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
00173 if (R__v > 2) {
00174 R__b.ReadClassBuffer(TInetAddress::Class(), this, R__v, R__s, R__c);
00175 return;
00176 }
00177
00178 UInt_t address;
00179 TObject::Streamer(R__b);
00180 fHostname.Streamer(R__b);
00181 R__b >> address;
00182 R__b >> fFamily;
00183 R__b >> fPort;
00184 if (R__v == 1)
00185 fAddresses.push_back(address);
00186 if (R__v > 1) {
00187 TInetAddress::AddressList_t &R__stl1 = fAddresses;
00188 R__stl1.clear();
00189 int R__i, R__n;
00190 R__b >> R__n;
00191 R__stl1.reserve(R__n);
00192 for (R__i = 0; R__i < R__n; R__i++) {
00193 unsigned int R__t1;
00194 R__b >> R__t1;
00195 R__stl1.push_back(R__t1);
00196 }
00197 TInetAddress::AliasList_t &R__stl2 = fAliases;
00198 R__stl2.clear();
00199 R__b >> R__n;
00200 R__stl2.reserve(R__n);
00201 for (R__i = 0; R__i < R__n; R__i++) {
00202 TString R__t2;
00203 R__t2.Streamer(R__b);
00204 R__stl2.push_back(R__t2);
00205 }
00206 }
00207 R__b.CheckByteCount(R__s, R__c, TInetAddress::IsA());
00208 } else {
00209 R__b.WriteClassBuffer(TInetAddress::Class(), this);
00210 }
00211 }