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 under
7 // the terms of the GNU Lesser General Public License 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.
17 #include <OSD_Host.hxx>
18 #include <OSD_OSDError.hxx>
19 #include <OSD_WhoAmI.hxx>
20 #include <Standard_ConstructionError.hxx>
21 #include <Standard_NullObject.hxx>
22 #include <TCollection_AsciiString.hxx>
24 const OSD_WhoAmI Iam = OSD_WHost;
28 #include <sys/utsname.h> // For 'uname'
29 #include <netdb.h> // This is for 'gethostbyname'
33 #if defined(__osf__) || defined(DECOSF1)
34 #include <sys/types.h>
35 #include <sys/sysinfo.h> // For 'getsysinfo'
36 #include <sys/socket.h> // To get ethernet address
37 #include <sys/ioctl.h>
40 int gethostname(char* address, int len);
44 extern "C" {int sysinfo(int, char *, long);}
47 // =========================================================================
49 OSD_Host::OSD_Host(){}
51 // =========================================================================
53 TCollection_AsciiString OSD_Host::SystemVersion(){
55 TCollection_AsciiString result;
58 result = info.sysname;
60 result += info.release;
64 // =========================================================================
66 OSD_SysType OSD_Host::SystemId()const{
71 if (!strcmp(info.sysname,"SunOS")) return (OSD_UnixBSD);
72 if (!strcmp(info.sysname,"ULTRIX")) return (OSD_UnixBSD);
73 if (!strcmp(info.sysname,"FreeBSD")) return (OSD_UnixBSD);
74 if (!strncmp(info.sysname,"Linux",5)) return (OSD_LinuxREDHAT);
75 if (!strncmp(info.sysname,"IRIX", 4)) return (OSD_UnixSystemV);
76 if (!strncmp(info.sysname,"OSF", 3)) return (OSD_OSF);
77 if (!strcmp(info.sysname,"AIX")) return (OSD_Aix);
78 if (!strcmp(info.sysname,"UNIX_System_V")) return (OSD_UnixSystemV);
79 if (!strcmp(info.sysname,"VMS_POSIX")) return (OSD_VMS);
80 if (!strcmp(info.sysname,"Darwin")) return (OSD_MacOs);
84 // =========================================================================
86 TCollection_AsciiString OSD_Host::HostName(){
87 TCollection_AsciiString result;
91 status = gethostname(value, 64);
92 if (status == -1) myError.SetValue(errno, Iam, "Host Name");
99 // =========================================================================
102 Standard_Integer OSD_Host::AvailableMemory(){
103 Standard_Integer result;
105 #if defined(__osf__) || defined(DECOSF1)
107 //// result = getsysinfo(GSI_PHYSMEM,buffer, 16,0,NULL);
117 // =========================================================================
119 TCollection_AsciiString OSD_Host::InternetAddress(){
120 struct hostent internet_address;
123 TCollection_AsciiString result,host;
126 memcpy(&internet_address,
127 gethostbyname(host.ToCString()),
128 sizeof(struct hostent));
130 // Gets each bytes into integers
131 a = (unsigned char)internet_address.h_addr_list[0][0];
132 b = (unsigned char)internet_address.h_addr_list[0][1];
133 c = (unsigned char)internet_address.h_addr_list[0][2];
134 d = (unsigned char)internet_address.h_addr_list[0][3];
135 sprintf(buffer,"%d.%d.%d.%d",a,b,c,d);
140 // =========================================================================
141 OSD_OEMType OSD_Host::MachineType(){
146 if (!strcmp(info.sysname,"SunOS")) return (OSD_SUN);
147 if (!strcmp(info.sysname,"ULTRIX")) return (OSD_DEC);
148 if (!strncmp(info.sysname,"IRIX",4)) return (OSD_SGI);
149 if (!strcmp(info.sysname,"HP-UX")) return (OSD_HP);
150 if (!strcmp(info.sysname,"UNIX_System_V")) return (OSD_NEC);
151 if (!strcmp(info.sysname,"VMS_POSIX")) return (OSD_VAX);
152 if (!strncmp(info.sysname,"OSF",3)) return (OSD_DEC);
153 if (!strncmp(info.sysname,"Linux",5)) return (OSD_LIN);
154 if (!strcmp(info.sysname,"FreeBSD")) return (OSD_LIN);
155 if (!strncmp(info.sysname,"AIX",3)) return (OSD_AIX);
156 if (!strcmp(info.sysname,"Darwin")) return (OSD_MAC);
157 return (OSD_Unavailable);
161 void OSD_Host::Reset(){
165 Standard_Boolean OSD_Host::Failed()const{
166 return( myError.Failed());
169 void OSD_Host::Perror() {
174 Standard_Integer OSD_Host::Error()const{
175 return( myError.Error());
180 //------------------------------------------------------------------------
181 //------------------- WNT Sources of OSD_Host ---------------------------
182 //------------------------------------------------------------------------
187 #include <OSD_Host.hxx>
189 #if defined(_MSC_VER)
190 #pragma comment( lib, "WSOCK32.LIB" )
193 void _osd_wnt_set_error ( OSD_Error&, OSD_WhoAmI, ... );
195 static BOOL fInit = FALSE;
196 static TCollection_AsciiString hostName;
197 static TCollection_AsciiString version;
198 static TCollection_AsciiString interAddr;
199 static Standard_Integer memSize;
201 OSD_Host :: OSD_Host () {
204 char szHostName[MAX_COMPUTERNAME_LENGTH + 1];
210 OSVERSIONINFOW osVerInfo;
214 nSize = MAX_COMPUTERNAME_LENGTH + 1;
215 osVerInfo.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
217 ZeroMemory (&ms, sizeof(ms));
218 ZeroMemory (szHostName, sizeof(char) * (MAX_COMPUTERNAME_LENGTH + 1));
221 // suppress GetVersionEx() deprecation warning
222 #pragma warning(disable : 4996)
224 if (!GetVersionExW (&osVerInfo))
226 _osd_wnt_set_error (myError, OSD_WHost);
228 else if (!GetComputerNameA (szHostName, &nSize))
230 _osd_wnt_set_error (myError, OSD_WHost);
234 ms.dwLength = sizeof(MEMORYSTATUS);
235 GlobalMemoryStatus (&ms);
238 #pragma warning(default : 4996)
243 memSize = (Standard_Integer) ms.dwAvailPageFile;
245 if ( WSAStartup ( MAKEWORD( 1, 1 ), &wd ) ) {
247 _osd_wnt_set_error ( myError, OSD_WHost );
249 } else if ( ( phe = gethostbyname (szHostName) ) == NULL ) {
251 _osd_wnt_set_error ( myError, OSD_WHost );
255 CopyMemory ( &inAddr, *phe -> h_addr_list, sizeof ( IN_ADDR ) );
256 hostAddr = inet_ntoa ( inAddr );
264 hostName = szHostName;
265 interAddr = Standard_CString ( hostAddr );
267 osVerInfo.szCSDVersion, TEXT( "Windows NT Version %d.%d" ),
268 osVerInfo.dwMajorVersion, osVerInfo.dwMinorVersion
270 version = osVerInfo.szCSDVersion;
284 TCollection_AsciiString OSD_Host :: SystemVersion () {
288 } // end OSD_Host :: SystemVersion
290 OSD_SysType OSD_Host :: SystemId () const {
292 return OSD_WindowsNT;
294 } // end OSD_Host :: SystemId
296 TCollection_AsciiString OSD_Host :: HostName () {
300 } // end OSD_Host :: HostName
302 Standard_Integer OSD_Host :: AvailableMemory () {
306 } // end OSD_Host :: AvailableMemory
308 TCollection_AsciiString OSD_Host :: InternetAddress () {
312 } // end OSD_Host :: InternetAddress
314 OSD_OEMType OSD_Host :: MachineType () {
318 } // end OSD_Host :: MachineTYpe
320 Standard_Boolean OSD_Host :: Failed () const {
322 return myError.Failed ();
324 } // end OSD_Host :: Failed
326 void OSD_Host :: Reset () {
330 } // end OSD_Host :: Reset
332 void OSD_Host :: Perror () {
336 } // end OSD_Host :: Perror
338 Standard_Integer OSD_Host :: Error () const {
340 return myError.Error ();
342 } //end OSD_Host :: Error