Network.m 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. //
  2. // Network.m
  3. // ZeroTier One
  4. //
  5. // Created by Grant Limberg on 8/4/16.
  6. // Copyright © 2016 ZeroTier, Inc. All rights reserved.
  7. //
  8. #import "Network.h"
  9. NSString *NetworkAddressesKey = @"addresses";
  10. NSString *NetworkBridgeKey = @"bridge";
  11. NSString *NetworkBroadcastKey = @"broadcast";
  12. NSString *NetworkDhcpKey = @"dhcp";
  13. NSString *NetworkMacKey = @"mac";
  14. NSString *NetworkMtuKey = @"mtu";
  15. NSString *NetworkMulticastKey = @"multicast";
  16. NSString *NetworkNameKey = @"name";
  17. NSString *NetworkNetconfKey = @"netconf";
  18. NSString *NetworkNwidKey = @"nwid";
  19. NSString *NetworkPortNameKey = @"port";
  20. NSString *NetworkPortErrorKey = @"portError";
  21. NSString *NetworkStatusKey = @"status";
  22. NSString *NetworkTypeKey = @"type";
  23. NSString *NetworkAllowManagedKey = @"allowManaged";
  24. NSString *NetworkAllowGlobalKey = @"allowGlobal";
  25. NSString *NetworkAllowDefaultKey = @"allowDefault";
  26. @implementation Network
  27. - (id)initWithJsonData:(NSDictionary*)jsonData
  28. {
  29. self = [super init];
  30. if(self) {
  31. if([jsonData objectForKey:@"assignedAddresses"]) {
  32. _assignedAddresses = (NSArray<NSString*>*)[jsonData objectForKey:@"assignedAddresses"];
  33. }
  34. if([jsonData objectForKey:@"bridge"]) {
  35. _bridge = [(NSNumber*)[jsonData objectForKey:@"bridge"] boolValue];
  36. }
  37. if([jsonData objectForKey:@"broadcastEnabled"]) {
  38. _broadcastEnabled = [(NSNumber*)[jsonData objectForKey:@"broadcastEnabled"] boolValue];
  39. }
  40. if([jsonData objectForKey:@"dhcp"]) {
  41. _dhcp = [(NSNumber*)[jsonData objectForKey:@"dhcp"] boolValue];
  42. }
  43. if([jsonData objectForKey:@"mac"]) {
  44. _mac = (NSString*)[jsonData objectForKey:@"mac"];
  45. }
  46. if([jsonData objectForKey:@"mtu"]) {
  47. _mtu = [(NSNumber*)[jsonData objectForKey:@"mtu"] intValue];
  48. }
  49. if([jsonData objectForKey:@"name"]) {
  50. _name = (NSString*)[jsonData objectForKey:@"name"];
  51. }
  52. if([jsonData objectForKey:@"netconfRevision"]) {
  53. _netconfRevision = [(NSNumber*)[jsonData objectForKey:@"netconfRevision"] intValue];
  54. }
  55. if([jsonData objectForKey:@"nwid"]) {
  56. NSString *networkid = (NSString*)[jsonData objectForKey:@"nwid"];
  57. NSScanner *scanner = [NSScanner scannerWithString:networkid];
  58. [scanner scanHexLongLong:&_nwid];
  59. }
  60. if([jsonData objectForKey:@"portDeviceName"]) {
  61. _portDeviceName = (NSString*)[jsonData objectForKey:@"portDeviceName"];
  62. }
  63. if([jsonData objectForKey:@"portError"]) {
  64. _portError = [(NSNumber*)[jsonData objectForKey:@"portError"] intValue];
  65. }
  66. if([jsonData objectForKey:@"allowManaged"]) {
  67. _allowManaged = [(NSNumber*)[jsonData objectForKey:@"allowManaged"] boolValue];
  68. }
  69. if([jsonData objectForKey:@"allowGlobal"]) {
  70. _allowGlobal = [(NSNumber*)[jsonData objectForKey:@"allowGlobal"] boolValue];
  71. }
  72. if([jsonData objectForKey:@"allowDefault"]) {
  73. _allowDefault = [(NSNumber*)[jsonData objectForKey:@"allowDefault"] boolValue];
  74. }
  75. if([jsonData objectForKey:@"status"]) {
  76. NSString *statusStr = (NSString*)[jsonData objectForKey:@"status"];
  77. if([statusStr isEqualToString:@"REQUESTING_CONFIGURATION"]) {
  78. _status = REQUESTING_CONFIGURATION;
  79. }
  80. else if([statusStr isEqualToString:@"OK"]) {
  81. _status = OK;
  82. }
  83. else if([statusStr isEqualToString:@"ACCESS_DENIED"]) {
  84. _status = ACCESS_DENIED;
  85. }
  86. else if([statusStr isEqualToString:@"NOT_FOUND"]) {
  87. _status = NOT_FOUND;
  88. }
  89. else if([statusStr isEqualToString:@"PORT_ERROR"]) {
  90. _status = PORT_ERROR;
  91. }
  92. else if([statusStr isEqualToString:@"CLIENT_TOO_OLD"]) {
  93. _status = CLIENT_TOO_OLD;
  94. }
  95. }
  96. if([jsonData objectForKey:@"type"]) {
  97. NSString *typeStr = (NSString*)[jsonData objectForKey:@"type"];
  98. if([typeStr isEqualToString:@"PRIVATE"]) {
  99. _type = PRIVATE;
  100. }
  101. else if([typeStr isEqualToString:@"PUBLIC"]) {
  102. _type = PUBLIC;
  103. }
  104. }
  105. _connected = YES;
  106. }
  107. return self;
  108. }
  109. - (id)initWithCoder:(NSCoder *)aDecoder
  110. {
  111. self = [super init];
  112. if(self) {
  113. if([aDecoder containsValueForKey:NetworkAddressesKey]) {
  114. _assignedAddresses = (NSArray<NSString*>*)[aDecoder decodeObjectForKey:NetworkAddressesKey];
  115. }
  116. if([aDecoder containsValueForKey:NetworkBridgeKey]) {
  117. _bridge = [aDecoder decodeBoolForKey:NetworkBridgeKey];
  118. }
  119. if([aDecoder containsValueForKey:NetworkBroadcastKey]) {
  120. _broadcastEnabled = [aDecoder decodeBoolForKey:NetworkBroadcastKey];
  121. }
  122. if([aDecoder containsValueForKey:NetworkDhcpKey]) {
  123. _dhcp = [aDecoder decodeBoolForKey:NetworkDhcpKey];
  124. }
  125. if([aDecoder containsValueForKey:NetworkMacKey]) {
  126. _mac = (NSString*)[aDecoder decodeObjectForKey:NetworkMacKey];
  127. }
  128. if([aDecoder containsValueForKey:NetworkMtuKey]) {
  129. _mtu = (int)[aDecoder decodeIntegerForKey:NetworkMtuKey];
  130. }
  131. if([aDecoder containsValueForKey:NetworkNameKey]) {
  132. _name = (NSString*)[aDecoder decodeObjectForKey:NetworkNameKey];
  133. }
  134. if([aDecoder containsValueForKey:NetworkNetconfKey]) {
  135. _netconfRevision = (int)[aDecoder decodeIntegerForKey:NetworkNetconfKey];
  136. }
  137. if([aDecoder containsValueForKey:NetworkNwidKey]) {
  138. _nwid = [(NSNumber*)[aDecoder decodeObjectForKey:NetworkNwidKey] unsignedLongLongValue];
  139. }
  140. if([aDecoder containsValueForKey:NetworkPortNameKey]) {
  141. _portDeviceName = (NSString*)[aDecoder decodeObjectForKey:NetworkPortNameKey];
  142. }
  143. if([aDecoder containsValueForKey:NetworkPortErrorKey]) {
  144. _portError = (int)[aDecoder decodeIntegerForKey:NetworkPortErrorKey];
  145. }
  146. if([aDecoder containsValueForKey:NetworkStatusKey]) {
  147. _status = (enum NetworkStatus)[aDecoder decodeIntegerForKey:NetworkStatusKey];
  148. }
  149. if([aDecoder containsValueForKey:NetworkTypeKey]) {
  150. _type = (enum NetworkType)[aDecoder decodeIntegerForKey:NetworkTypeKey];
  151. }
  152. if([aDecoder containsValueForKey:NetworkAllowManagedKey]) {
  153. _allowManaged = [aDecoder decodeBoolForKey:NetworkAllowManagedKey];
  154. }
  155. if([aDecoder containsValueForKey:NetworkAllowGlobalKey]) {
  156. _allowGlobal = [aDecoder decodeBoolForKey:NetworkAllowGlobalKey];
  157. }
  158. if([aDecoder containsValueForKey:NetworkAllowDefaultKey]) {
  159. _allowDefault = [aDecoder decodeBoolForKey:NetworkAllowDefaultKey];
  160. }
  161. _connected = NO;
  162. }
  163. return self;
  164. }
  165. - (void)encodeWithCoder:(NSCoder *)aCoder
  166. {
  167. [aCoder encodeObject:_assignedAddresses forKey:NetworkAddressesKey];
  168. [aCoder encodeBool:_bridge forKey:NetworkBridgeKey];
  169. [aCoder encodeBool:_broadcastEnabled forKey:NetworkBroadcastKey];
  170. [aCoder encodeBool:_dhcp forKey:NetworkDhcpKey];
  171. [aCoder encodeObject:_mac forKey:NetworkMacKey];
  172. [aCoder encodeInteger:_mtu forKey:NetworkMtuKey];
  173. [aCoder encodeObject:_name forKey:NetworkNameKey];
  174. [aCoder encodeInteger:_netconfRevision forKey:NetworkNetconfKey];
  175. [aCoder encodeObject:[NSNumber numberWithUnsignedLongLong:_nwid]
  176. forKey:NetworkNwidKey];
  177. [aCoder encodeObject:_portDeviceName forKey:NetworkPortNameKey];
  178. [aCoder encodeInteger:_portError forKey:NetworkPortErrorKey];
  179. [aCoder encodeInteger:_status forKey:NetworkStatusKey];
  180. [aCoder encodeInteger:_type forKey:NetworkTypeKey];
  181. [aCoder encodeBool:_allowManaged forKey:NetworkAllowManagedKey];
  182. [aCoder encodeBool:_allowGlobal forKey:NetworkAllowGlobalKey];
  183. [aCoder encodeBool:_allowDefault forKey:NetworkAllowDefaultKey];
  184. }
  185. + (BOOL)defaultRouteExists:(NSArray<Network *>*)netList
  186. {
  187. for(Network *net in netList) {
  188. if (net.allowDefault && net.connected) {
  189. return YES;
  190. }
  191. }
  192. return NO;
  193. }
  194. - (NSString*)statusString {
  195. switch(_status) {
  196. case REQUESTING_CONFIGURATION:
  197. return @"REQUESTING_CONFIGURATION";
  198. case OK:
  199. return @"OK";
  200. case ACCESS_DENIED:
  201. return @"ACCESS_DENIED";
  202. case NOT_FOUND:
  203. return @"NOT_FOUND";
  204. case PORT_ERROR:
  205. return @"PORT_ERROR";
  206. case CLIENT_TOO_OLD:
  207. return @"CLIENT_TOO_OLD";
  208. default:
  209. return @"";
  210. }
  211. }
  212. - (NSString*)typeString {
  213. switch(_type) {
  214. case PUBLIC:
  215. return @"PUBLIC";
  216. case PRIVATE:
  217. return @"PRIVATE";
  218. default:
  219. return @"";
  220. }
  221. }
  222. @end