1#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <CoreFoundation/CoreFoundation.h>
5#include <SystemConfiguration/SystemConfiguration.h>
6#include <SystemConfiguration/SCPrivate.h>
7
8#include "SCNetworkReachabilityInternal.h"
9
10int
11main(int argc, char **argv)
12{
13	Boolean				ok;
14	SCNetworkReachabilityRef	target1;
15	SCNetworkReachabilityRef	target2;
16	SCNetworkReachabilityRef	target3;
17	SCNetworkReachabilityRef	target4;
18	SCNetworkReachabilityRef	target5;
19
20	_sc_log = FALSE;
21	_sc_debug = TRUE;	// extra reachability logging
22
23	target1 = SCNetworkReachabilityCreateWithName(NULL, "web.apple.com");
24	ok = __SCNetworkReachabilityServer_targetAdd(target1);
25	if (!ok) {
26		SCLog(TRUE, LOG_ERR, CFSTR("No reachability server"));
27		exit(1);
28	}
29
30	target2 = SCNetworkReachabilityCreateWithName(NULL, "www.comcast.net");
31	__SCNetworkReachabilityServer_targetAdd(target2);
32
33	target3 = SCNetworkReachabilityCreateWithName(NULL, "www.comcast.net");
34	__SCNetworkReachabilityServer_targetAdd(target3);
35
36	target4 = SCNetworkReachabilityCreateWithName(NULL, "www.nonexistenthost.com");
37	__SCNetworkReachabilityServer_targetAdd(target4);
38
39	target5 = SCNetworkReachabilityCreateWithName(NULL, "www.washingtonpost.com");
40	__SCNetworkReachabilityServer_targetAdd(target5);
41
42	__SCNetworkReachabilityServer_targetStatus(target1);
43	__SCNetworkReachabilityServer_targetStatus(target2);
44	__SCNetworkReachabilityServer_targetStatus(target3);
45	__SCNetworkReachabilityServer_targetStatus(target4);
46
47	__SCNetworkReachabilityServer_targetMonitor(target1, TRUE);
48	__SCNetworkReachabilityServer_targetMonitor(target4, TRUE);
49	__SCNetworkReachabilityServer_targetMonitor(target5, TRUE);
50
51	__SCNetworkReachabilityServer_targetStatus(target4);
52	__SCNetworkReachabilityServer_targetStatus(target3);
53	__SCNetworkReachabilityServer_targetStatus(target2);
54	__SCNetworkReachabilityServer_targetStatus(target1);
55
56	sleep(2);
57
58	__SCNetworkReachabilityServer_targetStatus(target1);
59	__SCNetworkReachabilityServer_targetStatus(target4);
60	__SCNetworkReachabilityServer_targetStatus(target1);
61	__SCNetworkReachabilityServer_targetStatus(target4);
62
63	__SCNetworkReachabilityServer_targetMonitor(target1, FALSE);
64
65	__SCNetworkReachabilityServer_targetStatus(target1);
66	__SCNetworkReachabilityServer_targetStatus(target4);
67	__SCNetworkReachabilityServer_targetStatus(target1);
68	__SCNetworkReachabilityServer_targetStatus(target4);
69
70	__SCNetworkReachabilityServer_targetMonitor(target4, FALSE);
71
72	__SCNetworkReachabilityServer_targetStatus(target1);
73	__SCNetworkReachabilityServer_targetStatus(target4);
74
75//	SCLog(TRUE, LOG_DEBUG, CFSTR("starting CFRunLoop"));
76//	CFRunLoopRun();
77//	SCLog(TRUE, LOG_DEBUG, CFSTR("CFRunLoop complete"));
78
79	SCLog(TRUE, LOG_DEBUG, CFSTR("sleeping"));
80	sleep(60);
81
82	__SCNetworkReachabilityServer_targetStatus(target5);
83	__SCNetworkReachabilityServer_targetRemove(target5);
84	CFRelease(target5);
85
86	__SCNetworkReachabilityServer_targetRemove(target4);
87	CFRelease(target4);
88
89	__SCNetworkReachabilityServer_targetRemove(target3);
90	CFRelease(target3);
91
92//	__SCNetworkReachabilityServer_targetRemove(target2);
93//	CFRelease(target2);
94
95//	__SCNetworkReachabilityServer_targetRemove(target1);
96//	CFRelease(target1);
97
98	exit(0);
99}
100
101