Logo ROOT  
Reference Guide
TInetAddress.cxx
Go to the documentation of this file.
1 // @(#)root/base:$Id$
2 // Author: Fons Rademakers 16/12/96
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /** \class TInetAddress
13 \ingroup Base
14 
15 This class represents an Internet Protocol (IP) address.
16 */
17 
18 #include "TInetAddress.h"
19 #include "TBuffer.h"
20 
22 
23 ////////////////////////////////////////////////////////////////////////////////
24 /// Default ctor. Used in case of unknown host. Not a valid address.
25 
27 {
28  fHostname = "UnknownHost";
29  AddAddress(0);
30  fFamily = -1;
31  fPort = -1;
32 }
33 
34 ////////////////////////////////////////////////////////////////////////////////
35 /// Create TInetAddress. Private ctor. TInetAddress objects can only
36 /// be created via the friend classes TSystem, TServerSocket and TSocket.
37 /// Use the IsValid() method to check the validity of a TInetAddress.
38 
39 TInetAddress::TInetAddress(const char *host, UInt_t addr, Int_t family, Int_t port)
40 {
41  AddAddress(addr);
42  if (!strcmp(host, "????") || !strcmp(host, "UnNamedHost"))
44  else
45  fHostname = host;
46  fFamily = family;
47  fPort = port;
48 }
49 
50 ////////////////////////////////////////////////////////////////////////////////
51 /// TInetAddress copy ctor.
52 
54 {
55  fHostname = adr.fHostname;
56  fFamily = adr.fFamily;
57  fPort = adr.fPort;
58  fAddresses = adr.fAddresses;
59  fAliases = adr.fAliases;
60 }
61 
62 ////////////////////////////////////////////////////////////////////////////////
63 /// TInetAddress assignment operator.
64 
66 {
67  if (this != &rhs) {
68  TObject::operator=(rhs);
69  fHostname = rhs.fHostname;
70  fFamily = rhs.fFamily;
71  fPort = rhs.fPort;
72  fAddresses = rhs.fAddresses;
73  fAliases = rhs.fAliases;
74  }
75  return *this;
76 }
77 
78 ////////////////////////////////////////////////////////////////////////////////
79 /// Returns the raw IP address in host byte order. The highest
80 /// order byte position is in addr[0]. To be prepared for 64-bit
81 /// IP addresses an array of bytes is returned.
82 /// User must delete allocated memory.
83 
85 {
86  UChar_t *addr = new UChar_t[4];
87 
88  addr[0] = (UChar_t) ((fAddresses[0] >> 24) & 0xFF);
89  addr[1] = (UChar_t) ((fAddresses[0] >> 16) & 0xFF);
90  addr[2] = (UChar_t) ((fAddresses[0] >> 8) & 0xFF);
91  addr[3] = (UChar_t) (fAddresses[0] & 0xFF);
92 
93  return addr;
94 }
95 
96 ////////////////////////////////////////////////////////////////////////////////
97 /// Returns the IP address string "%d.%d.%d.%d", use it to convert
98 /// alternative addresses obtained via GetAddresses().
99 /// Copy string immediately, it will be reused. Static function.
100 
102 {
103  return Form("%d.%d.%d.%d", (addr >> 24) & 0xFF,
104  (addr >> 16) & 0xFF,
105  (addr >> 8) & 0xFF,
106  addr & 0xFF);
107 }
108 
109 ////////////////////////////////////////////////////////////////////////////////
110 /// Returns the IP address string "%d.%d.%d.%d".
111 /// Copy string immediately, it will be reused.
112 
113 const char *TInetAddress::GetHostAddress() const
114 {
115  return GetHostAddress(fAddresses[0]);
116 }
117 
118 ////////////////////////////////////////////////////////////////////////////////
119 /// Print internet address as string.
120 
122 {
123  if (fPort == -1)
124  Printf("%s/%s (not connected)", GetHostName(), GetHostAddress());
125  else
126  Printf("%s/%s (port %d)", GetHostName(), GetHostAddress(), fPort);
127 
128  int i = 0;
129  AddressList_t::const_iterator ai;
130  for (ai = fAddresses.begin(); ai != fAddresses.end(); ++ai) {
131  if (!i) printf("%s:", fAddresses.size() == 1 ? "Address" : "Addresses");
132  printf(" %s", GetHostAddress(*ai));
133  i++;
134  }
135  if (i) printf("\n");
136 
137  i = 0;
138  AliasList_t::const_iterator ali;
139  for (ali = fAliases.begin(); ali != fAliases.end(); ++ali) {
140  if (!i) printf("%s:", fAliases.size() == 1 ? "Alias" : "Aliases");
141  printf(" %s", ali->Data());
142  i++;
143  }
144  if (i) printf("\n");
145 }
146 
147 ////////////////////////////////////////////////////////////////////////////////
148 /// Add alternative address to list of addresses.
149 
151 {
152  fAddresses.push_back(addr);
153 }
154 
155 ////////////////////////////////////////////////////////////////////////////////
156 /// Add alias to list of aliases.
157 
158 void TInetAddress::AddAlias(const char *alias)
159 {
160  fAliases.push_back(TString(alias));
161 }
162 
163 ////////////////////////////////////////////////////////////////////////////////
164 /// Stream an object of class TInetAddress.
165 
166 void TInetAddress::Streamer(TBuffer &R__b)
167 {
168  if (R__b.IsReading()) {
169  UInt_t R__s, R__c;
170  Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
171  if (R__v > 2) {
172  R__b.ReadClassBuffer(TInetAddress::Class(), this, R__v, R__s, R__c);
173  return;
174  }
175  // process old versions before automatic schema evolution
176  UInt_t address;
177  TObject::Streamer(R__b);
178  fHostname.Streamer(R__b);
179  R__b >> address;
180  R__b >> fFamily;
181  R__b >> fPort;
182  if (R__v == 1)
183  fAddresses.push_back(address);
184  if (R__v > 1) {
186  R__stl1.clear();
187  int R__i, R__n;
188  R__b >> R__n;
189  R__stl1.reserve(R__n);
190  for (R__i = 0; R__i < R__n; R__i++) {
191  unsigned int R__t1;
192  R__b >> R__t1;
193  R__stl1.push_back(R__t1);
194  }
196  R__stl2.clear();
197  R__b >> R__n;
198  R__stl2.reserve(R__n);
199  for (R__i = 0; R__i < R__n; R__i++) {
200  TString R__t2;
201  R__t2.Streamer(R__b);
202  R__stl2.push_back(R__t2);
203  }
204  }
205  R__b.CheckByteCount(R__s, R__c, TInetAddress::IsA());
206  } else {
208  }
209 }
Version_t
short Version_t
Definition: RtypesCore.h:65
TInetAddress::AddAddress
void AddAddress(UInt_t addr)
Add alternative address to list of addresses.
Definition: TInetAddress.cxx:150
ClassImp
#define ClassImp(name)
Definition: Rtypes.h:364
Form
char * Form(const char *fmt,...)
TInetAddress::fAliases
AliasList_t fAliases
Definition: TInetAddress.h:62
TInetAddress::fPort
Int_t fPort
Definition: TInetAddress.h:60
TBuffer::ReadClassBuffer
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
TInetAddress::GetHostName
const char * GetHostName() const
Definition: TInetAddress.h:77
TInetAddress::fFamily
Int_t fFamily
Definition: TInetAddress.h:59
TInetAddress::operator=
TInetAddress & operator=(const TInetAddress &rhs)
TInetAddress assignment operator.
Definition: TInetAddress.cxx:65
TBuffer
Definition: TBuffer.h:43
TBuffer::CheckByteCount
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
TString
Definition: TString.h:136
TInetAddress::GetAddressBytes
UChar_t * GetAddressBytes() const
Returns the raw IP address in host byte order.
Definition: TInetAddress.cxx:84
Option_t
const typedef char Option_t
Definition: RtypesCore.h:66
TBuffer.h
TInetAddress::TInetAddress
TInetAddress()
Default ctor. Used in case of unknown host. Not a valid address.
Definition: TInetAddress.cxx:26
TInetAddress::AliasList_t
std::vector< TString > AliasList_t
Definition: TInetAddress.h:55
TBuffer::WriteClassBuffer
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
TInetAddress::fHostname
TString fHostname
Definition: TInetAddress.h:58
TInetAddress.h
UInt_t
unsigned int UInt_t
Definition: RtypesCore.h:46
TInetAddress::Print
void Print(Option_t *option="") const
Print internet address as string.
Definition: TInetAddress.cxx:121
TBuffer::ReadVersion
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
unsigned int
Printf
void Printf(const char *fmt,...)
TBuffer::IsReading
Bool_t IsReading() const
Definition: TBuffer.h:86
TInetAddress::AddAlias
void AddAlias(const char *alias)
Add alias to list of aliases.
Definition: TInetAddress.cxx:158
TObject::operator=
TObject & operator=(const TObject &rhs)
TObject assignment operator.
Definition: TObject.h:268
UChar_t
unsigned char UChar_t
Definition: RtypesCore.h:38
TInetAddress::fAddresses
AddressList_t fAddresses
Definition: TInetAddress.h:61
TObject
Definition: TObject.h:37
TInetAddress::AddressList_t
std::vector< UInt_t > AddressList_t
Definition: TInetAddress.h:54
Class
void Class()
Definition: Class.C:29
TInetAddress
Definition: TInetAddress.h:36
TInetAddress::GetHostAddress
const char * GetHostAddress() const
Returns the IP address string "%d.%d.%d.%d".
Definition: TInetAddress.cxx:113
int