• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.9.5/pyobjc-42/2.5/pyobjc/pyobjc-framework-SystemConfiguration/Examples/CallbackDemo/
1#!/usr/bin/env python
2"""
3Tells whether the internet is available using the SystemConfiguration
4framework.
5
6Usage:
7    python internetison [address]
8"""
9from SystemConfiguration import *
10import socket, sys
11
12def resultAvailable(target, flags, info):
13    print "got network reachability status for %s:"%(info,)
14
15    if flags & kSCNetworkFlagsTransientConnection:
16        print "- transient connection"
17
18    if flags &  kSCNetworkFlagsReachable:
19        print "- reachable"
20
21    if flags &  kSCNetworkFlagsConnectionRequired:
22        print "- connection required"
23
24    if flags &  kSCNetworkFlagsConnectionAutomatic:
25        print "- connection automatic"
26
27    if flags &  kSCNetworkFlagsInterventionRequired:
28        print "- user intervention required"
29
30    if flags &  kSCNetworkFlagsIsLocalAddress:
31        print "- local interface"
32
33    if flags &  kSCNetworkFlagsIsDirect:
34        print "- directly attached network"
35
36
37    # And stop the program:
38    loop = CFRunLoopGetCurrent()
39    CFRunLoopStop(loop)
40
41
42def main():
43    if len(sys.argv) >= 2:
44        addr = socket.gethostbyname(sys.argv[1])
45    else:
46        addr = '82.94.237.218' # www.python.org
47
48    loop = CFRunLoopGetCurrent()
49
50    target = SCNetworkReachabilityCreateWithAddress(None, (addr, 80))
51    SCNetworkReachabilitySetCallback(target, resultAvailable, addr)
52
53    ok, flags = SCNetworkReachabilityGetFlags(target, None)
54    if ok:
55        resultAvailable(target, flags, addr)
56
57    else:
58        ok = SCNetworkReachabilityScheduleWithRunLoop(target,
59                loop, kCFRunLoopCommonModes)
60
61        CFRunLoopRun()
62
63if __name__ == "__main__":
64    main()
65