UnixOperatingSystem.st
changeset 15508 38541f2887de
parent 15492 626feb0ef3a5
child 15513 17c13e65f96a
--- a/UnixOperatingSystem.st	Wed Jul 10 13:09:28 2013 +0000
+++ b/UnixOperatingSystem.st	Wed Jul 10 10:23:04 2013 +0200
@@ -7038,10 +7038,16 @@
 !
 
 getNetworkAddressInfo
-    "return a dictionary filled with
-	key -> name of interface
-	value -> the socket adress of the interface
-     for each interface"
+    "return a Dictionary of network interface information. 
+        key -> name of interface
+        value -> a Set of network address 
+                information for the interface - a dictionaries containing the 
+                information about the configuration of each interface in the system. 
+                The dictionary keys are:
+                    #address
+                    #netmask
+                    #flags
+                    #destAddress"
 
     |returnArray addressArray nameArray noOfIf retDictionary error retIndex|
 
@@ -7061,8 +7067,8 @@
     OBJ t;
 
     if (getifaddrs(&ifap) < 0) {
-	error = __MKSTRING("getifaddrs() failed");
-	goto out;
+        error = __MKSTRING("getifaddrs() failed");
+        goto out;
     }
 
     for (ifaLoop = ifap; ifaLoop != 0; ifaLoop = ifaLoop->ifa_next) n_ifa++;
@@ -7070,49 +7076,49 @@
     returnArray = __ARRAY_NEW_INT(n_ifa*5);
 
     if (returnArray == nil) {
-	/* Creating a string wouldn't work here */
-	error = @symbol(allocationFailure);
-	goto bad;
+        /* Creating a string wouldn't work here */
+        error = @symbol(allocationFailure);
+        goto bad;
     }
 
     for (ifaLoop = ifap; ifaLoop != 0; ifaLoop = ifaLoop->ifa_next) {
-	int family, len;
-
-	if (ifaLoop->ifa_addr == 0)
-	       continue;
-	family = ifaLoop->ifa_addr->sa_family;
-	switch (family) {
-	case AF_INET:
-	    len = sizeof(struct sockaddr_in);
-	    break;
-	case AF_INET6:
-	    len = sizeof(struct sockaddr_in6);
-	    break;
+        int family, len;
+
+        if (ifaLoop->ifa_addr == 0)
+               continue;
+        family = ifaLoop->ifa_addr->sa_family;
+        switch (family) {
+        case AF_INET:
+            len = sizeof(struct sockaddr_in);
+            break;
+        case AF_INET6:
+            len = sizeof(struct sockaddr_in6);
+            break;
 #if 0
-	case AF_PACKET:
-	    len = sizeof(sockaddr_ll);
-	    break;
-#endif
-	default:
-	    /* skip */
-	    continue;
-	};
-	t = __MKSTRING(ifaLoop->ifa_name);
-	__arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
-	t = __MKUINT(ifaLoop->ifa_flags);
-	__arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
-	t = __MKBYTEARRAY((char *)ifaLoop->ifa_addr, len);
-	__arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
-	if (ifaLoop->ifa_netmask != 0) {
-	    t = __MKBYTEARRAY((char *)ifaLoop->ifa_netmask, len);
-	    __arrayVal(returnArray)[retI] = t; __STORE(returnArray, t);
-	}
-	retI++;
-	if (ifaLoop->ifa_dstaddr != 0) {
-	    t = __MKBYTEARRAY((char *)ifaLoop->ifa_dstaddr, len);
-	    __arrayVal(returnArray)[retI] = t; __STORE(returnArray, t);
-	}
-	retI++;
+        case AF_PACKET:
+            len = sizeof(sockaddr_ll);
+            break;
+#endif
+        default:
+            /* skip */
+            continue;
+        };
+        t = __MKSTRING(ifaLoop->ifa_name);
+        __arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
+        t = __MKUINT(ifaLoop->ifa_flags);
+        __arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
+        t = __MKBYTEARRAY((char *)ifaLoop->ifa_addr, len);
+        __arrayVal(returnArray)[retI++] = t; __STORE(returnArray, t);
+        if (ifaLoop->ifa_netmask != 0) {
+            t = __MKBYTEARRAY((char *)ifaLoop->ifa_netmask, len);
+            __arrayVal(returnArray)[retI] = t; __STORE(returnArray, t);
+        }
+        retI++;
+        if (ifaLoop->ifa_dstaddr != 0) {
+            t = __MKBYTEARRAY((char *)ifaLoop->ifa_dstaddr, len);
+            __arrayVal(returnArray)[retI] = t; __STORE(returnArray, t);
+        }
+        retI++;
     }
 
     noOfIf = __mkSmallInteger(n_ifa);
@@ -7137,7 +7143,7 @@
 
     afinet_socket = socket(AF_INET, SOCK_DGRAM, 0);
     if (afinet_socket < 0) {
-	goto bad;
+        goto bad;
     }
 
     /*
@@ -7148,9 +7154,9 @@
     ifc.ifc_buf = (caddr_t) buf;
 
     if (ioctl (afinet_socket, SIOCGIFCONF, (caddr_t) &ifc) < 0) {
-	close(afinet_socket);
-	error = __MKSTRING("ioctl(SIOCGIFCONF) failed");
-	goto bad;
+        close(afinet_socket);
+        error = __MKSTRING("ioctl(SIOCGIFCONF) failed");
+        goto bad;
     }
 
     n_ifs = ifc.ifc_len / sizeof (struct ifreq);
@@ -7159,9 +7165,9 @@
     addressArray = __ARRAY_NEW_INT(n_ifs);
 
     if (nameArray == nil || addressArray == nil) {
-	/* Creating a string wouldn/t work here */
-	error = @symbol(allocationFailure);
-	goto bad;
+        /* Creating a string wouldn/t work here */
+        error = @symbol(allocationFailure);
+        goto bad;
     }
 
     /*
@@ -7171,27 +7177,27 @@
     countOfIf = 0;
 
     for (i=0, ifr = ifc.ifc_req; i < n_ifs; i++, ifr++) {
-	/*
-	** Get address for this interface
-	*/
-	memset (&ifreq, 0, sizeof(ifreq));
-	memcpy (ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name));
-	if (ioctl (afinet_socket, SIOCGIFADDR, &ifreq) >= 0) {
-	    t = __MKBYTEARRAY((char *)&ifreq.ifr_addr, sizeof(ifreq.ifr_addr));
-	    __arrayVal(addressArray)[countOfIf] = t; __STORE(addressArray, t);
-	    t = __MKSTRING(&ifreq.ifr_name);
-	    __arrayVal(nameArray)[countOfIf] = t; __STORE(nameArray, t);
-	    countOfIf++;
-	} else {
-	    fprintf(stderr, "SIOCGIFADDR failed: %s\n", errno);
-	}
-	error = __MKSTRING("ioctl(SIOCGIFCONF) failed");
+        /*
+        ** Get address for this interface
+        */
+        memset (&ifreq, 0, sizeof(ifreq));
+        memcpy (ifreq.ifr_name, ifr->ifr_name, sizeof(ifr->ifr_name));
+        if (ioctl (afinet_socket, SIOCGIFADDR, &ifreq) >= 0) {
+            t = __MKBYTEARRAY((char *)&ifreq.ifr_addr, sizeof(ifreq.ifr_addr));
+            __arrayVal(addressArray)[countOfIf] = t; __STORE(addressArray, t);
+            t = __MKSTRING(&ifreq.ifr_name);
+            __arrayVal(nameArray)[countOfIf] = t; __STORE(nameArray, t);
+            countOfIf++;
+        } else {
+            fprintf(stderr, "SIOCGIFADDR failed: %s\n", errno);
+        }
+        error = __MKSTRING("ioctl(SIOCGIFCONF) failed");
     }
 
     noOfIf = __mkSmallInteger(countOfIf);
 bad:
     if (afinet_socket >= 0)
-	close(afinet_socket);
+        close(afinet_socket);
 #else
     error = @symbol(notSupported);
 #endif /* defined(SIOCGIFADDR) */
@@ -7200,35 +7206,35 @@
 
     retDictionary := Dictionary new:noOfIf.
     error notNil ifTrue:[
-	self primitiveFailed:error.
-	"return empty dictionary if proceeding from error"
-	^  retDictionary.
+        self primitiveFailed:error.
+        "return empty dictionary if proceeding from error"
+        ^  retDictionary.
     ].
 
     retIndex := 1.
 
     1 to:noOfIf do:[:cnt|
-	|name addressBytes set dict|
-
-	name := returnArray at:retIndex.
-	addressBytes := returnArray at:retIndex+2.
-
-	addressBytes notNil ifTrue:[
-	    set := retDictionary at:name ifAbsentPut:[Set new].
-	    dict := Dictionary new:5.
-	    dict at:#flags put:(returnArray at:retIndex+1).
-	    dict at:#address put:(SocketAddress fromBytes:addressBytes).
-	    addressBytes := returnArray at:retIndex+3.
-	    addressBytes notNil ifTrue:[
-		dict at:#netMask put:(SocketAddress fromBytes:addressBytes).
-	    ].
-	    addressBytes := returnArray at:retIndex+4.
-	    addressBytes notNil ifTrue:[
-		dict at:#destAddress put:(SocketAddress fromBytes:addressBytes).
-	    ].
-	    set add:dict.
-	].
-	retIndex := retIndex + 5.
+        |name addressBytes set dict|
+
+        name := returnArray at:retIndex.
+        addressBytes := returnArray at:retIndex+2.
+
+        addressBytes notNil ifTrue:[
+            set := retDictionary at:name ifAbsentPut:[Set new].
+            dict := Dictionary new:5.
+            dict at:#flags put:(returnArray at:retIndex+1).
+            dict at:#address put:(SocketAddress fromBytes:addressBytes).
+            addressBytes := returnArray at:retIndex+3.
+            addressBytes notNil ifTrue:[
+                dict at:#netMask put:(SocketAddress fromBytes:addressBytes).
+            ].
+            addressBytes := returnArray at:retIndex+4.
+            addressBytes notNil ifTrue:[
+                dict at:#destAddress put:(SocketAddress fromBytes:addressBytes).
+            ].
+            set add:dict.
+        ].
+        retIndex := retIndex + 5.
     ].
 
     ^ retDictionary
@@ -13636,11 +13642,11 @@
 !UnixOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.329 2013-07-08 19:27:29 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.330 2013-07-10 08:23:04 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.329 2013-07-08 19:27:29 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.330 2013-07-10 08:23:04 stefan Exp $'
 ! !