PageRenderTime 60ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/Core/CFNetwork.resources/PACSupport.js

http://open-webkit-sharp.googlecode.com/
JavaScript | 442 lines | 374 code | 52 blank | 16 comment | 39 complexity | 6ffc57fcde678ddf29419e619bd14fd8 MD5 | raw file
  1. /*
  2. File: PACSuppport.js
  3. Contains: PAC Support functions
  4. Copyright: Š 2003-2004 by Apple Computer, Inc., all rights reserved
  5. Bugs?: For bug reports, consult the following page on
  6. the World Wide Web:
  7. http://developer.apple.com/bugreporter/
  8. */
  9. var __Apple_dsn_cache = new Array;
  10. function isPlainHostName(host) {
  11. return (host.indexOf('.') == -1 ? true : false);
  12. }
  13. function dnsDomainIs(host, domain) {
  14. var h = host.toLowerCase();
  15. var d = domain.toLowerCase();
  16. var sub = h.substring(h.length - d.length, h.length);
  17. if (sub == d)
  18. return true;
  19. return false;
  20. }
  21. function localHostOrDomainIs(host, hostdom) {
  22. var h1 = host.toLowerCase();
  23. var h2 = hostdom.toLowerCase();
  24. return ((h1 == h2) || (isPlainHostName(h1) & !isPlainHostName(h2))) ? true : false;
  25. }
  26. function isResolvable(host) {
  27. var ip = dnsResolve(host);
  28. return ((typeof ip == "string") && ip.length) ? true : false;
  29. }
  30. function isInNet(host, pattern, mask) {
  31. var ip = dnsResolve(host);
  32. if (ip) {
  33. var p = pattern.split('.');
  34. var m = mask.split('.');
  35. var a = ip.split('.');
  36. if ((p.length == m.length) && (m.length == a.length)) {
  37. for (i = 0; i < p.length; i++) {
  38. if ((p[i]& m[i]) != (m[i]& a[i]))
  39. return false;
  40. }
  41. return true;
  42. }
  43. }
  44. return false;
  45. }
  46. function dnsResolve(host) {
  47. var ips, i;
  48. for (i = 0; i < __Apple_dsn_cache.length; i += 2) {
  49. if (__Apple_dsn_cache[i] == host) {
  50. ips = __Apple_dsn_cache[i + 1];
  51. break;
  52. }
  53. }
  54. if (i >= __Apple_dsn_cache.length) {
  55. ips = __dnsResolve(host);
  56. if (__Apple_dsn_cache.length == 20) {
  57. __Apple_dsn_cache.pop();
  58. __Apple_dsn_cache.pop();
  59. }
  60. __Apple_dsn_cache[__Apple_dsn_cache.length] = host;
  61. __Apple_dsn_cache[__Apple_dsn_cache.length] = ips;
  62. }
  63. if (ips && ips.length) {
  64. for (var i = 0; i < ips.length; i++) {
  65. var bytes = ips[i].split('.');
  66. if (bytes.length == 4)
  67. return ips[i];
  68. }
  69. }
  70. return null;
  71. }
  72. function myIpAddress() {
  73. var ips = __primaryIPv4Addresses();
  74. if (ips && ips.length) {
  75. for (var i = 0; i < ips.length; i++) {
  76. var bytes = ips[i].split('.');
  77. if (bytes.length == 4)
  78. return ips[i];
  79. }
  80. }
  81. return null;
  82. }
  83. function dnsDomainLevels(host) {
  84. var parts = host.split('.');
  85. return parts.length - 1;
  86. }
  87. function shExpMatch(str, shexp) {
  88. var matchStr = shexp;
  89. var myRegex;
  90. if (typeof str != "string" || typeof shexp != "string")
  91. return false;
  92. if (str == "" && shexp == "")
  93. return true;
  94. // My strategy is going to be to piggyback off of the JavaScript
  95. // regex engine. I just have to tweak the incoming pattern...
  96. //escape control chars / classes
  97. matchStr = matchStr.replace(/\\/g, "\\\\");
  98. matchStr = matchStr.replace(/([+,^$|{}().])/g, "\\$1");
  99. //turn shell-wildcards into wildcard/quantifier
  100. matchStr = matchStr.replace(/\*/g, ".*");
  101. matchStr = matchStr.replace(/\?/g, ".?");
  102. matchStr = "^" + matchStr + "$";
  103. //shell expression matching is case-insensitive
  104. myRegex = new RegExp(matchStr, "i");
  105. return str.search(myRegex) != -1;
  106. }
  107. function weekdayRange(wd1, wd2, gmt) {
  108. var today = new Date();
  109. var days = "SUNMONTUEWEDTHUFRISAT";
  110. wd1 = wd1.toUpperCase();
  111. if (wd2 == undefined)
  112. wd2 = wd1;
  113. else
  114. wd2 = wd2.toUpperCase();
  115. var d1 = days.indexOf(wd1);
  116. var d2 = days.indexOf(wd2);
  117. if ((d2 == -1) && (wd2 == "GMT")) {
  118. gmt = wd2;
  119. d2 = d1;
  120. }
  121. if ((d1 == -1) || (d2 == -1))
  122. return false;
  123. d1 = d1 / 3;
  124. d2 = d2 / 3;
  125. if (gmt == "GMT")
  126. today = today.getUTCDay();
  127. else
  128. today = today.getDay();
  129. if ((d1 <= d2) && (today >= d1) && (today <= d2))
  130. return true;
  131. if ((d2 < d1) && ((today <= d2) || (today >= d1)))
  132. return true;
  133. return false;
  134. }
  135. function dateRange() {
  136. var today = new Date();
  137. var num = arguments.length;
  138. var gmt = arguments[num - 1];
  139. if (typeof gmt != "string")
  140. gmt = false;
  141. else {
  142. gmt = gmt.toUpperCase();
  143. if (gmt != "GMT")
  144. gmt = false;
  145. else {
  146. gmt = true;
  147. num--;
  148. }
  149. }
  150. if (!num || (num > 6))
  151. return false;
  152. var d1 = 0;
  153. var d2 = 0;
  154. var m1 = 0;
  155. var m2 = 0;
  156. var y1 = 0;
  157. var y2 = 0;
  158. for (i = 0; i < num; i++) {
  159. var arg = arguments[i];
  160. if (typeof arg == "number") {
  161. if (arg > 31) {
  162. if (!y1)
  163. y1 = arg;
  164. else if (!y2)
  165. y2 = arg;
  166. else
  167. return false;
  168. }
  169. else if (!arg)
  170. return false;
  171. else if (!d1)
  172. d1 = arg;
  173. else if (!d2)
  174. d2 = arg;
  175. else
  176. return false;
  177. }
  178. else if (typeof arg == "string") {
  179. var months = "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";
  180. arg = arg.toUpperCase();
  181. arg = months.indexOf(arg);
  182. if (arg == -1)
  183. return false;
  184. arg /= 3;
  185. arg += 1;
  186. if (!m1)
  187. m1 = arg;
  188. else if (!m2)
  189. m2 = arg;
  190. else
  191. return false;
  192. }
  193. else
  194. return false;
  195. }
  196. if (!y1) y1 = gmt ? today.getUTCFullYear() : today.getFullYear();
  197. if (!y2) y2 = y1;
  198. if (!m1) m1 = (gmt ? today.getUTCMonth() : today.getMonth()) + 1;
  199. if (!m2) m2 = m1;
  200. if (!d1) d1 = gmt ? today.getUTCDate() : today.getDate();
  201. if (!d2) d2 = d1;
  202. var date1;
  203. var date2;
  204. if (gmt) {
  205. date1 = Date.UTC(y1, m1 - 1, d1, 0, 0, 0, 0);
  206. date2 = Date.UTC(y2, m2 - 1, d2, 23, 59, 59, 999);
  207. }
  208. else {
  209. date1 = (Date(y1, m1 - 1, d1, 0, 0, 0, 0)).valueOf();
  210. date2 = (Date(y2, m2 - 1, d2, 23, 59, 59, 999)).valueOf();
  211. }
  212. today = today.valueOf();
  213. return ((date1 <= today) && (today <= date2));
  214. }
  215. function timeRange() {
  216. var date1 = new Date();
  217. var today = new Date();
  218. var date2 = new Date();
  219. var num = arguments.length;
  220. var gmt = arguments[num - 1];
  221. if (typeof gmt != "string")
  222. gmt = false;
  223. else {
  224. gmt = gmt.toUpperCase();
  225. if (gmt != "GMT")
  226. gmt = false;
  227. else {
  228. gmt = true;
  229. num--;
  230. }
  231. }
  232. if (!num || (num > 6) || ((num % 2) && (num != 1)))
  233. return false;
  234. date1.setMinutes(0);
  235. date1.setSeconds(0);
  236. date1.setMilliseconds(0);
  237. date2.setMinutes(59);
  238. date2.setSeconds(59);
  239. date2.setMilliseconds(999);
  240. for (i = 0; i < (num / 2); i++) {
  241. var arg = arguments[i];
  242. if (gmt) {
  243. switch (i) {
  244. case 0:
  245. date1.setUTCHours(arg);
  246. date2.setUTCHours(arg);
  247. break;
  248. case 1:
  249. date1.setUTCMinutes(arg);
  250. date2.setUTCMinutes(arg);
  251. break;
  252. case 2:
  253. date1.setUTCSeconds(arg);
  254. date2.setUTCSeconds(arg);
  255. break;
  256. }
  257. }
  258. else {
  259. switch (i) {
  260. case 0:
  261. date1.setHours(arg);
  262. date2.setHours(arg);
  263. break;
  264. case 1:
  265. date1.setMinutes(arg);
  266. date2.setMinutes(arg);
  267. break;
  268. case 2:
  269. date1.setSeconds(arg);
  270. date2.setSeconds(arg);
  271. break;
  272. }
  273. }
  274. }
  275. if (num != 1) {
  276. date2.setMinutes(0);
  277. date2.setSeconds(0);
  278. date2.setMilliseconds(0);
  279. for (i = 0; i < (num / 2); i++) {
  280. var arg = arguments[(num / 2) + i];
  281. if (gmt) {
  282. switch (i) {
  283. case 0:
  284. date2.setUTCHours(arg);
  285. break;
  286. case 1:
  287. date2.setUTCMinutes(arg);
  288. break;
  289. case 2:
  290. date2.setUTCSeconds(arg);
  291. break;
  292. }
  293. }
  294. else {
  295. switch (i) {
  296. case 0:
  297. date2.setHours(arg);
  298. break;
  299. case 1:
  300. date2.setMinutes(arg);
  301. break;
  302. case 2:
  303. date2.setSeconds(arg);
  304. break;
  305. }
  306. }
  307. }
  308. }
  309. today = today.valueOf();
  310. date1 = date1.valueOf();
  311. date2 = date2.valueOf();
  312. if (date2 < date1)
  313. date2 += 86400000;
  314. return ((date1 <= today) && (today <= date2));
  315. }
  316. function __Apple_FindProxyForURL(url, host) {
  317. __Apple_dsn_cache = new Array;
  318. var result = FindProxyForURL(url, host);
  319. __Apple_dsn_cache = new Array;
  320. return result;
  321. }