1 // Copyright (c) 1998-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
6 // This library is free software; you can redistribute it and / or modify it
7 // under the terms of the GNU Lesser General Public version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
21 #include <Standard_NullObject.hxx>
22 #include <Standard_ConstructionError.hxx>
23 #include <OSD_Host.ixx>
24 #include <OSD_WhoAmI.hxx>
26 const OSD_WhoAmI Iam = OSD_WHost;
30 #ifdef HAVE_SYS_UTSNAME_H
31 # include <sys/utsname.h> // For 'uname'
35 # include <netdb.h> // This is for 'gethostbyname'
40 #ifdef HAVE_SYS_IOCTL_H
41 # include <sys/ioctl.h>
44 #if defined(__osf__) || defined(DECOSF1)
45 #include <sys/types.h>
46 #include <sys/sysinfo.h> // For 'getsysinfo'
47 #include <sys/socket.h> // To get ethernet address
48 #include <sys/ioctl.h>
51 int gethostname(char* address, int len);
56 # include <sysent.h> // for 'gethostname'
59 #ifdef HAVE_SYS_SOCKET_H
60 # include <sys/socket.h>
63 #ifdef HAVE_SYS_UNISTD_H
64 # include <sys/unistd.h>
71 #ifdef HAVE_SYS_SYSTEMINFO_H
72 # include <sys/systeminfo.h>
75 extern "C" {int sysinfo(int, char *, long);}
78 // =========================================================================
80 OSD_Host::OSD_Host(){}
82 // =========================================================================
84 TCollection_AsciiString OSD_Host::SystemVersion(){
86 TCollection_AsciiString result;
87 #ifdef HAVE_SYS_SYSTEMINFO_H
92 result = info.sysname;
94 result += info.release;
95 #ifdef HAVE_SYS_SYSTEMINFO_H
97 sysinfo(SI_ARCHITECTURE,buf,99);
100 sysinfo(SI_HW_PROVIDER,buf,99);
106 // =========================================================================
108 OSD_SysType OSD_Host::SystemId()const{
113 if (!strcmp(info.sysname,"SunOS")) return (OSD_UnixBSD);
114 if (!strcmp(info.sysname,"ULTRIX")) return (OSD_UnixBSD);
115 if (!strcmp(info.sysname,"FreeBSD")) return (OSD_UnixBSD);
116 if (!strncmp(info.sysname,"Linux",5)) return (OSD_LinuxREDHAT);
117 if (!strncmp(info.sysname,"IRIX", 4)) return (OSD_UnixSystemV);
118 if (!strncmp(info.sysname,"OSF", 3)) return (OSD_OSF);
119 if (!strcmp(info.sysname,"AIX")) return (OSD_Aix);
120 if (!strcmp(info.sysname,"UNIX_System_V")) return (OSD_UnixSystemV);
121 if (!strcmp(info.sysname,"VMS_POSIX")) return (OSD_VMS);
122 if (!strcmp(info.sysname,"Darwin")) return (OSD_MacOs);
123 return (OSD_Unknown);
126 // =========================================================================
128 TCollection_AsciiString OSD_Host::HostName(){
129 TCollection_AsciiString result;
133 status = gethostname(value, 64);
134 if (status == -1) myError.SetValue(errno, Iam, "Host Name");
141 // =========================================================================
144 Standard_Integer OSD_Host::AvailableMemory(){
145 Standard_Integer result;
147 #if defined(__osf__) || defined(DECOSF1)
149 //// result = getsysinfo(GSI_PHYSMEM,buffer, 16,0,NULL);
159 // =========================================================================
161 TCollection_AsciiString OSD_Host::InternetAddress(){
162 struct hostent internet_address;
165 TCollection_AsciiString result,host;
168 memcpy(&internet_address,
169 gethostbyname(host.ToCString()),
170 sizeof(struct hostent));
172 // Gets each bytes into integers
173 a = (unsigned char)internet_address.h_addr_list[0][0];
174 b = (unsigned char)internet_address.h_addr_list[0][1];
175 c = (unsigned char)internet_address.h_addr_list[0][2];
176 d = (unsigned char)internet_address.h_addr_list[0][3];
177 sprintf(buffer,"%d.%d.%d.%d",a,b,c,d);
182 // =========================================================================
183 OSD_OEMType OSD_Host::MachineType(){
188 if (!strcmp(info.sysname,"SunOS")) return (OSD_SUN);
189 if (!strcmp(info.sysname,"ULTRIX")) return (OSD_DEC);
190 if (!strncmp(info.sysname,"IRIX",4)) return (OSD_SGI);
191 if (!strcmp(info.sysname,"HP-UX")) return (OSD_HP);
192 if (!strcmp(info.sysname,"UNIX_System_V")) return (OSD_NEC);
193 if (!strcmp(info.sysname,"VMS_POSIX")) return (OSD_VAX);
194 if (!strncmp(info.sysname,"OSF",3)) return (OSD_DEC);
195 if (!strncmp(info.sysname,"Linux",5)) return (OSD_LIN);
196 if (!strcmp(info.sysname,"FreeBSD")) return (OSD_LIN);
197 if (!strncmp(info.sysname,"AIX",3)) return (OSD_AIX);
198 if (!strcmp(info.sysname,"Darwin")) return (OSD_MAC);
199 return (OSD_Unavailable);
203 void OSD_Host::Reset(){
207 Standard_Boolean OSD_Host::Failed()const{
208 return( myError.Failed());
211 void OSD_Host::Perror() {
216 Standard_Integer OSD_Host::Error()const{
217 return( myError.Error());
222 //------------------------------------------------------------------------
223 //------------------- WNT Sources of OSD_Host ---------------------------
224 //------------------------------------------------------------------------
229 #include <OSD_Host.hxx>
231 #pragma comment( lib, "WSOCK32.LIB" )
233 void _osd_wnt_set_error ( OSD_Error&, OSD_WhoAmI, ... );
235 static BOOL fInit = FALSE;
236 static TCollection_AsciiString hostName;
237 static TCollection_AsciiString version;
238 static TCollection_AsciiString interAddr;
239 static Standard_Integer memSize;
241 OSD_Host :: OSD_Host () {
244 Standard_Character szHostName[ MAX_COMPUTERNAME_LENGTH + 1 ];
250 OSVERSIONINFO osVerInfo;
254 nSize = MAX_COMPUTERNAME_LENGTH + 1;
255 osVerInfo.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
257 ZeroMemory (&ms, sizeof(ms));
258 ZeroMemory ( szHostName, sizeof ( Standard_Character ) * (MAX_COMPUTERNAME_LENGTH + 1) );
260 if ( !GetVersionEx ( &osVerInfo ) ) {
262 _osd_wnt_set_error ( myError, OSD_WHost );
264 } else if ( !GetComputerName ( szHostName, &nSize ) ) {
266 _osd_wnt_set_error ( myError, OSD_WHost );
270 ms.dwLength = sizeof ( MEMORYSTATUS );
271 GlobalMemoryStatus ( &ms );
277 memSize = (Standard_Integer) ms.dwAvailPageFile;
279 if ( WSAStartup ( MAKEWORD( 1, 1 ), &wd ) ) {
281 _osd_wnt_set_error ( myError, OSD_WHost );
283 } else if ( ( phe = gethostbyname ( szHostName ) ) == NULL ) {
285 _osd_wnt_set_error ( myError, OSD_WHost );
289 CopyMemory ( &inAddr, *phe -> h_addr_list, sizeof ( IN_ADDR ) );
290 hostAddr = inet_ntoa ( inAddr );
298 hostName = szHostName;
299 interAddr = Standard_CString ( hostAddr );
301 osVerInfo.szCSDVersion, TEXT( "Windows NT Version %d.%d" ),
302 osVerInfo.dwMajorVersion, osVerInfo.dwMinorVersion
304 version = osVerInfo.szCSDVersion;
318 TCollection_AsciiString OSD_Host :: SystemVersion () {
322 } // end OSD_Host :: SystemVersion
324 OSD_SysType OSD_Host :: SystemId () const {
326 return OSD_WindowsNT;
328 } // end OSD_Host :: SystemId
330 TCollection_AsciiString OSD_Host :: HostName () {
334 } // end OSD_Host :: HostName
336 Standard_Integer OSD_Host :: AvailableMemory () {
340 } // end OSD_Host :: AvailableMemory
342 TCollection_AsciiString OSD_Host :: InternetAddress () {
346 } // end OSD_Host :: InternetAddress
348 OSD_OEMType OSD_Host :: MachineType () {
352 } // end OSD_Host :: MachineTYpe
354 Standard_Boolean OSD_Host :: Failed () const {
356 return myError.Failed ();
358 } // end OSD_Host :: Failed
360 void OSD_Host :: Reset () {
364 } // end OSD_Host :: Reset
366 void OSD_Host :: Perror () {
370 } // end OSD_Host :: Perror
372 Standard_Integer OSD_Host :: Error () const {
374 return myError.Error ();
376 } //end OSD_Host :: Error