Backed out 2 changesets (bug 1881078, bug 1879806) for causing dt failures @ devtools...
[gecko.git] / netwerk / base / ascii_pac_utils.js
blobcedb1a0f212b15ecb86006146a04cdb597c9c38f
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 /* global dnsResolve */
7 function dnsDomainIs(host, domain) {
8   return (
9     host.length >= domain.length &&
10     host.substring(host.length - domain.length) == domain
11   );
14 function dnsDomainLevels(host) {
15   return host.split(".").length - 1;
18 function isValidIpAddress(ipchars) {
19   var matches = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(ipchars);
20   if (matches == null) {
21     return false;
22   } else if (
23     matches[1] > 255 ||
24     matches[2] > 255 ||
25     matches[3] > 255 ||
26     matches[4] > 255
27   ) {
28     return false;
29   }
30   return true;
33 function convert_addr(ipchars) {
34   var bytes = ipchars.split(".");
35   var result =
36     ((bytes[0] & 0xff) << 24) |
37     ((bytes[1] & 0xff) << 16) |
38     ((bytes[2] & 0xff) << 8) |
39     (bytes[3] & 0xff);
40   return result;
43 function isInNet(ipaddr, pattern, maskstr) {
44   if (!isValidIpAddress(pattern) || !isValidIpAddress(maskstr)) {
45     return false;
46   }
47   if (!isValidIpAddress(ipaddr)) {
48     ipaddr = dnsResolve(ipaddr);
49     if (ipaddr == null) {
50       return false;
51     }
52   }
53   var host = convert_addr(ipaddr);
54   var pat = convert_addr(pattern);
55   var mask = convert_addr(maskstr);
56   return (host & mask) == (pat & mask);
59 function isPlainHostName(host) {
60   return host.search("(\\.)|:") == -1;
63 function isResolvable(host) {
64   var ip = dnsResolve(host);
65   return ip != null;
68 function localHostOrDomainIs(host, hostdom) {
69   return host == hostdom || hostdom.lastIndexOf(host + ".", 0) == 0;
72 function shExpMatch(url, pattern) {
73   pattern = pattern.replace(/\./g, "\\.");
74   pattern = pattern.replace(/\*/g, ".*");
75   pattern = pattern.replace(/\?/g, ".");
76   var newRe = new RegExp("^" + pattern + "$");
77   return newRe.test(url);
80 var wdays = { SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6 };
81 var months = {
82   JAN: 0,
83   FEB: 1,
84   MAR: 2,
85   APR: 3,
86   MAY: 4,
87   JUN: 5,
88   JUL: 6,
89   AUG: 7,
90   SEP: 8,
91   OCT: 9,
92   NOV: 10,
93   DEC: 11,
96 function weekdayRange() {
97   function getDay(weekday) {
98     if (weekday in wdays) {
99       return wdays[weekday];
100     }
101     return -1;
102   }
103   var date = new Date();
104   var argc = arguments.length;
105   var wday;
106   if (argc < 1) {
107     return false;
108   }
109   if (arguments[argc - 1] == "GMT") {
110     argc--;
111     wday = date.getUTCDay();
112   } else {
113     wday = date.getDay();
114   }
115   var wd1 = getDay(arguments[0]);
116   var wd2 = argc == 2 ? getDay(arguments[1]) : wd1;
117   if (wd1 == -1 || wd2 == -1) {
118     return false;
119   }
121   if (wd1 <= wd2) {
122     return wd1 <= wday && wday <= wd2;
123   }
125   return wd2 >= wday || wday >= wd1;
128 function dateRange() {
129   function getMonth(name) {
130     if (name in months) {
131       return months[name];
132     }
133     return -1;
134   }
135   var date = new Date();
136   var argc = arguments.length;
137   if (argc < 1) {
138     return false;
139   }
140   var isGMT = arguments[argc - 1] == "GMT";
142   if (isGMT) {
143     argc--;
144   }
145   // function will work even without explict handling of this case
146   if (argc == 1) {
147     let tmp = parseInt(arguments[0]);
148     if (isNaN(tmp)) {
149       return (
150         (isGMT ? date.getUTCMonth() : date.getMonth()) == getMonth(arguments[0])
151       );
152     } else if (tmp < 32) {
153       return (isGMT ? date.getUTCDate() : date.getDate()) == tmp;
154     }
155     return (isGMT ? date.getUTCFullYear() : date.getFullYear()) == tmp;
156   }
157   var year = date.getFullYear();
158   var date1, date2;
159   date1 = new Date(year, 0, 1, 0, 0, 0);
160   date2 = new Date(year, 11, 31, 23, 59, 59);
161   var adjustMonth = false;
162   for (let i = 0; i < argc >> 1; i++) {
163     let tmp = parseInt(arguments[i]);
164     if (isNaN(tmp)) {
165       let mon = getMonth(arguments[i]);
166       date1.setMonth(mon);
167     } else if (tmp < 32) {
168       adjustMonth = argc <= 2;
169       date1.setDate(tmp);
170     } else {
171       date1.setFullYear(tmp);
172     }
173   }
174   for (let i = argc >> 1; i < argc; i++) {
175     let tmp = parseInt(arguments[i]);
176     if (isNaN(tmp)) {
177       let mon = getMonth(arguments[i]);
178       date2.setMonth(mon);
179     } else if (tmp < 32) {
180       date2.setDate(tmp);
181     } else {
182       date2.setFullYear(tmp);
183     }
184   }
185   if (adjustMonth) {
186     date1.setMonth(date.getMonth());
187     date2.setMonth(date.getMonth());
188   }
189   if (isGMT) {
190     let tmp = date;
191     tmp.setFullYear(date.getUTCFullYear());
192     tmp.setMonth(date.getUTCMonth());
193     tmp.setDate(date.getUTCDate());
194     tmp.setHours(date.getUTCHours());
195     tmp.setMinutes(date.getUTCMinutes());
196     tmp.setSeconds(date.getUTCSeconds());
197     date = tmp;
198   }
199   return date1 <= date2
200     ? date1 <= date && date <= date2
201     : date2 >= date || date >= date1;
204 function timeRange() {
205   var argc = arguments.length;
206   var date = new Date();
207   var isGMT = false;
208   if (argc < 1) {
209     return false;
210   }
211   if (arguments[argc - 1] == "GMT") {
212     isGMT = true;
213     argc--;
214   }
216   var hour = isGMT ? date.getUTCHours() : date.getHours();
217   var date1, date2;
218   date1 = new Date();
219   date2 = new Date();
221   if (argc == 1) {
222     return hour == arguments[0];
223   } else if (argc == 2) {
224     return arguments[0] <= hour && hour <= arguments[1];
225   }
226   switch (argc) {
227     case 6:
228       date1.setSeconds(arguments[2]);
229       date2.setSeconds(arguments[5]);
230     // falls through
231     case 4:
232       var middle = argc >> 1;
233       date1.setHours(arguments[0]);
234       date1.setMinutes(arguments[1]);
235       date2.setHours(arguments[middle]);
236       date2.setMinutes(arguments[middle + 1]);
237       if (middle == 2) {
238         date2.setSeconds(59);
239       }
240       break;
241     default:
242       throw new Error("timeRange: bad number of arguments");
243   }
245   if (isGMT) {
246     date.setFullYear(date.getUTCFullYear());
247     date.setMonth(date.getUTCMonth());
248     date.setDate(date.getUTCDate());
249     date.setHours(date.getUTCHours());
250     date.setMinutes(date.getUTCMinutes());
251     date.setSeconds(date.getUTCSeconds());
252   }
253   return date1 <= date2
254     ? date1 <= date && date <= date2
255     : date2 >= date || date >= date1;