pacparser 1.5.1.dev2__tar.gz → 1.5.1.dev7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pacparser-1.5.1.dev7/MANIFEST.in +8 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/PKG-INFO +1 -1
- pacparser-1.5.1.dev7/pac_utils.h +334 -0
- pacparser-1.5.1.dev7/pacparser.c +578 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser.egg-info/PKG-INFO +1 -1
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser.egg-info/SOURCES.txt +7 -1
- pacparser-1.5.1.dev7/pacparser.h +154 -0
- pacparser-1.5.1.dev7/quickjs/quickjs.c +83853 -0
- pacparser-1.5.1.dev7/quickjs/quickjs.h +1426 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/setup.py +109 -9
- pacparser-1.5.1.dev7/version.mk +1 -0
- pacparser-1.5.1.dev2/MANIFEST.in +0 -2
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser/__init__.py +0 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser.egg-info/dependency_links.txt +0 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser.egg-info/top_level.txt +0 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/pacparser_py.c +0 -0
- {pacparser-1.5.1.dev2 → pacparser-1.5.1.dev7}/setup.cfg +0 -0
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
// Copyright (C) 2007-2023 Manu Garg.
|
|
2
|
+
// Author: Manu Garg <manugarg@gmail.com>
|
|
3
|
+
//
|
|
4
|
+
// pac_utils.h defines some of the functions used by PAC files. This file is
|
|
5
|
+
// packaged with pacparser source code and is required for compiling pacparser.
|
|
6
|
+
// Please read README file included with this package for more information
|
|
7
|
+
// about pacparser.
|
|
8
|
+
|
|
9
|
+
// Note: This file is derived from "nsProxyAutoConfig.js" file that comes with
|
|
10
|
+
// mozilla source code. Please check out the following for initial developer
|
|
11
|
+
// and contributors:
|
|
12
|
+
//http://lxr.mozilla.org/seamonkey/source/netwerk/base/src/nsProxyAutoConfig.js
|
|
13
|
+
//
|
|
14
|
+
// This file is free software; you can redistribute it and/or
|
|
15
|
+
// modify it under the terms of the GNU Lesser General Public
|
|
16
|
+
// License as published by the Free Software Foundation; either
|
|
17
|
+
// version 3 of the License, or (at your option) any later version.
|
|
18
|
+
|
|
19
|
+
// pacparser is distributed in the hope that it will be useful,
|
|
20
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
// Lesser General Public License for more details.
|
|
23
|
+
|
|
24
|
+
// You should have received a copy of the GNU Lesser General Public
|
|
25
|
+
// License along with this library; if not, write to the Free Software
|
|
26
|
+
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
|
27
|
+
// USA
|
|
28
|
+
|
|
29
|
+
static const char *pacUtils =
|
|
30
|
+
"function dnsDomainIs(host, domain) {\n"
|
|
31
|
+
" return (host.length >= domain.length &&\n"
|
|
32
|
+
" host.substring(host.length - domain.length) == domain);\n"
|
|
33
|
+
"}\n"
|
|
34
|
+
|
|
35
|
+
"function dnsDomainLevels(host) {\n"
|
|
36
|
+
" return host.split('.').length-1;\n"
|
|
37
|
+
"}\n"
|
|
38
|
+
|
|
39
|
+
"function convert_addr(ipchars) {\n"
|
|
40
|
+
" var bytes = ipchars.split('.');\n"
|
|
41
|
+
" var result = ((bytes[0] & 0xff) << 24) |\n"
|
|
42
|
+
" ((bytes[1] & 0xff) << 16) |\n"
|
|
43
|
+
" ((bytes[2] & 0xff) << 8) |\n"
|
|
44
|
+
" (bytes[3] & 0xff);\n"
|
|
45
|
+
" return result;\n"
|
|
46
|
+
"}\n"
|
|
47
|
+
|
|
48
|
+
"function isInNet(ipaddr, pattern, maskstr) {\n"
|
|
49
|
+
" var test = /^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/.exec(ipaddr);\n"
|
|
50
|
+
" if (test == null) {\n"
|
|
51
|
+
" ipaddr = dnsResolve(ipaddr);\n"
|
|
52
|
+
" if (ipaddr == null)\n"
|
|
53
|
+
" return false;\n"
|
|
54
|
+
" } else if (test[1] > 255 || test[2] > 255 || \n"
|
|
55
|
+
" test[3] > 255 || test[4] > 255) {\n"
|
|
56
|
+
" return false; // not an IP address\n"
|
|
57
|
+
" }\n"
|
|
58
|
+
" var host = convert_addr(ipaddr);\n"
|
|
59
|
+
" var pat = convert_addr(pattern);\n"
|
|
60
|
+
" var mask = convert_addr(maskstr);\n"
|
|
61
|
+
" return ((host & mask) == (pat & mask));\n"
|
|
62
|
+
" \n"
|
|
63
|
+
"}\n"
|
|
64
|
+
|
|
65
|
+
"function convert_addr6(ipchars) {\n"
|
|
66
|
+
" ipchars = ipchars.replace(/(^:|:$)/, '');\n"
|
|
67
|
+
" var fields = ipchars.split(':');\n"
|
|
68
|
+
" var diff = 8 - fields.length;\n"
|
|
69
|
+
" for (var i = 0; i < fields.length; i++) {\n"
|
|
70
|
+
" if (fields[i] == '') {\n"
|
|
71
|
+
" fields[i] = '0';\n"
|
|
72
|
+
" // inject 'diff' number of '0' elements here.\n"
|
|
73
|
+
" for (var j = 0; j < diff; j++) {\n"
|
|
74
|
+
" fields.splice(i++, 0, '0');\n"
|
|
75
|
+
" }\n"
|
|
76
|
+
" break;\n"
|
|
77
|
+
" }\n"
|
|
78
|
+
" }\n"
|
|
79
|
+
" var result = [];\n"
|
|
80
|
+
" for (var i = 0; i < fields.length; i++) {\n"
|
|
81
|
+
" result.push(parseInt(fields[i], 16));\n"
|
|
82
|
+
" }\n"
|
|
83
|
+
" return result;\n"
|
|
84
|
+
"}\n"
|
|
85
|
+
|
|
86
|
+
"function isInNetEx6(ipaddr, prefix, prefix_len) {\n"
|
|
87
|
+
" if (prefix_len > 128) {\n"
|
|
88
|
+
" return false;\n"
|
|
89
|
+
" }\n"
|
|
90
|
+
" prefix = convert_addr6(prefix);\n"
|
|
91
|
+
" ip = convert_addr6(ipaddr);\n"
|
|
92
|
+
" // Prefix match strategy:\n"
|
|
93
|
+
" // Compare only prefix length bits between 'ipaddr' and 'prefix'\n"
|
|
94
|
+
" // Match in the batches of 16-bit fields \n"
|
|
95
|
+
" prefix_rem = prefix_len % 16;\n"
|
|
96
|
+
" prefix_nfields = (prefix_len - prefix_rem) / 16;\n"
|
|
97
|
+
"\n"
|
|
98
|
+
" for (var i = 0; i < prefix_nfields; i++) {\n"
|
|
99
|
+
" if (ip[i] != prefix[i]) {\n"
|
|
100
|
+
" return false;\n"
|
|
101
|
+
" }\n"
|
|
102
|
+
" }\n"
|
|
103
|
+
" if (prefix_rem > 0) {\n"
|
|
104
|
+
" // Compare remaining bits\n"
|
|
105
|
+
" prefix_bits = prefix[prefix_nfields] >> (16 - prefix_rem);\n"
|
|
106
|
+
" ip_bits = ip[prefix_nfields] >> (16 - prefix_rem);\n"
|
|
107
|
+
" if (ip_bits != prefix_bits) {\n"
|
|
108
|
+
" return false;\n"
|
|
109
|
+
" }\n"
|
|
110
|
+
" }\n"
|
|
111
|
+
" return true;\n"
|
|
112
|
+
"}\n"
|
|
113
|
+
|
|
114
|
+
"function isInNetEx4(ipaddr, prefix, prefix_len) {\n"
|
|
115
|
+
" if (prefix_len > 32) {\n"
|
|
116
|
+
" return false;\n"
|
|
117
|
+
" }\n"
|
|
118
|
+
" var netmask = [];\n"
|
|
119
|
+
" for (var i = 1; i < 5; i++) {\n"
|
|
120
|
+
" var shift_len = 8 * i - prefix_len;\n"
|
|
121
|
+
" if (shift_len <= 0) {\n"
|
|
122
|
+
" netmask.push(255)\n"
|
|
123
|
+
" } else {\n"
|
|
124
|
+
" netmask.push((0xff >> shift_len) << shift_len);\n"
|
|
125
|
+
" }\n"
|
|
126
|
+
" }\n"
|
|
127
|
+
" return isInNet(ipaddr, prefix, netmask.join('.'));\n"
|
|
128
|
+
"}\n"
|
|
129
|
+
|
|
130
|
+
"function isInNetEx(ipaddr, prefix) {\n"
|
|
131
|
+
" prefix_a = prefix.split('/');\n"
|
|
132
|
+
" if (prefix_a.length != 2) {\n"
|
|
133
|
+
" return false;\n"
|
|
134
|
+
" }\n"
|
|
135
|
+
" var test = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(ipaddr);\n"
|
|
136
|
+
" if (!test) {\n"
|
|
137
|
+
" return isInNetEx6(ipaddr, prefix_a[0], prefix_a[1]);\n"
|
|
138
|
+
" } else {\n"
|
|
139
|
+
" return isInNetEx4(ipaddr, prefix_a[0], prefix_a[1]);\n"
|
|
140
|
+
" }\n"
|
|
141
|
+
"}\n"
|
|
142
|
+
|
|
143
|
+
"function isPlainHostName(host) {\n"
|
|
144
|
+
" return (host.search('\\\\.') == -1);\n"
|
|
145
|
+
"}\n"
|
|
146
|
+
|
|
147
|
+
"function isResolvable(host) {\n"
|
|
148
|
+
" var ip = dnsResolve(host);\n"
|
|
149
|
+
" return (ip != null);\n"
|
|
150
|
+
"}\n"
|
|
151
|
+
|
|
152
|
+
"if (typeof(dnsResolveEx) == \"function\") {\n"
|
|
153
|
+
"function isResolvableEx(host) {\n"
|
|
154
|
+
" var ip = dnsResolveEx(host);\n"
|
|
155
|
+
" return (ip != null);\n"
|
|
156
|
+
"}\n"
|
|
157
|
+
"}\n"
|
|
158
|
+
|
|
159
|
+
"function localHostOrDomainIs(host, hostdom) {\n"
|
|
160
|
+
" return (host == hostdom) ||\n"
|
|
161
|
+
" (hostdom.lastIndexOf(host + '.', 0) == 0);\n"
|
|
162
|
+
"}\n"
|
|
163
|
+
|
|
164
|
+
"function shExpMatch(url, pattern) {\n"
|
|
165
|
+
" pattern = pattern.replace(/\\./g, '\\\\.');\n"
|
|
166
|
+
" pattern = pattern.replace(/\\*/g, '.*');\n"
|
|
167
|
+
" pattern = pattern.replace(/\\?/g, '.');\n"
|
|
168
|
+
" var newRe = new RegExp('^'+pattern+'$');\n"
|
|
169
|
+
" return newRe.test(url);\n"
|
|
170
|
+
"}\n"
|
|
171
|
+
|
|
172
|
+
"var wdays = {SUN: 0, MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6};\n"
|
|
173
|
+
|
|
174
|
+
"var months = {JAN: 0, FEB: 1, MAR: 2, APR: 3, MAY: 4, JUN: 5, JUL: 6, AUG: 7, SEP: 8, OCT: 9, NOV: 10, DEC: 11};\n"
|
|
175
|
+
|
|
176
|
+
"function weekdayRange() {\n"
|
|
177
|
+
" function getDay(weekday) {\n"
|
|
178
|
+
" if (weekday in wdays) {\n"
|
|
179
|
+
" return wdays[weekday];\n"
|
|
180
|
+
" }\n"
|
|
181
|
+
" return -1;\n"
|
|
182
|
+
" }\n"
|
|
183
|
+
" var date = new Date();\n"
|
|
184
|
+
" var argc = arguments.length;\n"
|
|
185
|
+
" var wday;\n"
|
|
186
|
+
" if (argc < 1)\n"
|
|
187
|
+
" return false;\n"
|
|
188
|
+
" if (arguments[argc - 1] == 'GMT') {\n"
|
|
189
|
+
" argc--;\n"
|
|
190
|
+
" wday = date.getUTCDay();\n"
|
|
191
|
+
" } else {\n"
|
|
192
|
+
" wday = date.getDay();\n"
|
|
193
|
+
" }\n"
|
|
194
|
+
" var wd1 = getDay(arguments[0]);\n"
|
|
195
|
+
" var wd2 = (argc == 2) ? getDay(arguments[1]) : wd1;\n"
|
|
196
|
+
" return (wd1 == -1 || wd2 == -1) ? false\n"
|
|
197
|
+
" : (wd1 <= wday && wday <= wd2);\n"
|
|
198
|
+
"}\n"
|
|
199
|
+
|
|
200
|
+
"function dateRange() {\n"
|
|
201
|
+
" function getMonth(name) {\n"
|
|
202
|
+
" if (name in months) {\n"
|
|
203
|
+
" return months[name];\n"
|
|
204
|
+
" }\n"
|
|
205
|
+
" return -1;\n"
|
|
206
|
+
" }\n"
|
|
207
|
+
" var date = new Date();\n"
|
|
208
|
+
" var argc = arguments.length;\n"
|
|
209
|
+
" if (argc < 1) {\n"
|
|
210
|
+
" return false;\n"
|
|
211
|
+
" }\n"
|
|
212
|
+
" var isGMT = (arguments[argc - 1] == 'GMT');\n"
|
|
213
|
+
"\n"
|
|
214
|
+
" if (isGMT) {\n"
|
|
215
|
+
" argc--;\n"
|
|
216
|
+
" }\n"
|
|
217
|
+
" // function will work even without explicit handling of this case\n"
|
|
218
|
+
" if (argc == 1) {\n"
|
|
219
|
+
" var tmp = parseInt(arguments[0]);\n"
|
|
220
|
+
" if (isNaN(tmp)) {\n"
|
|
221
|
+
" return ((isGMT ? date.getUTCMonth() : date.getMonth()) ==\n"
|
|
222
|
+
"getMonth(arguments[0]));\n"
|
|
223
|
+
" } else if (tmp < 32) {\n"
|
|
224
|
+
" return ((isGMT ? date.getUTCDate() : date.getDate()) == tmp);\n"
|
|
225
|
+
" } else { \n"
|
|
226
|
+
" return ((isGMT ? date.getUTCFullYear() : date.getFullYear()) ==\n"
|
|
227
|
+
"tmp);\n"
|
|
228
|
+
" }\n"
|
|
229
|
+
" }\n"
|
|
230
|
+
" var year = date.getFullYear();\n"
|
|
231
|
+
" var date1, date2;\n"
|
|
232
|
+
" date1 = new Date(year, 0, 1, 0, 0, 0);\n"
|
|
233
|
+
" date2 = new Date(year, 11, 31, 23, 59, 59);\n"
|
|
234
|
+
" var adjustMonth = false;\n"
|
|
235
|
+
" for (var i = 0; i < (argc >> 1); i++) {\n"
|
|
236
|
+
" var tmp = parseInt(arguments[i]);\n"
|
|
237
|
+
" if (isNaN(tmp)) {\n"
|
|
238
|
+
" var mon = getMonth(arguments[i]);\n"
|
|
239
|
+
" date1.setMonth(mon);\n"
|
|
240
|
+
" } else if (tmp < 32) {\n"
|
|
241
|
+
" adjustMonth = (argc <= 2);\n"
|
|
242
|
+
" date1.setDate(tmp);\n"
|
|
243
|
+
" } else {\n"
|
|
244
|
+
" date1.setFullYear(tmp);\n"
|
|
245
|
+
" }\n"
|
|
246
|
+
" }\n"
|
|
247
|
+
" for (var i = (argc >> 1); i < argc; i++) {\n"
|
|
248
|
+
" var tmp = parseInt(arguments[i]);\n"
|
|
249
|
+
" if (isNaN(tmp)) {\n"
|
|
250
|
+
" var mon = getMonth(arguments[i]);\n"
|
|
251
|
+
" date2.setMonth(mon);\n"
|
|
252
|
+
" } else if (tmp < 32) {\n"
|
|
253
|
+
" date2.setDate(tmp);\n"
|
|
254
|
+
" } else {\n"
|
|
255
|
+
" date2.setFullYear(tmp);\n"
|
|
256
|
+
" }\n"
|
|
257
|
+
" }\n"
|
|
258
|
+
" if (adjustMonth) {\n"
|
|
259
|
+
" date1.setMonth(date.getMonth());\n"
|
|
260
|
+
" date2.setMonth(date.getMonth());\n"
|
|
261
|
+
" }\n"
|
|
262
|
+
" if (isGMT) {\n"
|
|
263
|
+
" var tmp = date;\n"
|
|
264
|
+
" tmp.setFullYear(date.getUTCFullYear());\n"
|
|
265
|
+
" tmp.setMonth(date.getUTCMonth());\n"
|
|
266
|
+
" tmp.setDate(date.getUTCDate());\n"
|
|
267
|
+
" tmp.setHours(date.getUTCHours());\n"
|
|
268
|
+
" tmp.setMinutes(date.getUTCMinutes());\n"
|
|
269
|
+
" tmp.setSeconds(date.getUTCSeconds());\n"
|
|
270
|
+
" date = tmp;\n"
|
|
271
|
+
" }\n"
|
|
272
|
+
" return ((date1 <= date) && (date <= date2));\n"
|
|
273
|
+
"}\n"
|
|
274
|
+
|
|
275
|
+
"function timeRange() {\n"
|
|
276
|
+
" var argc = arguments.length;\n"
|
|
277
|
+
" var date = new Date();\n"
|
|
278
|
+
" var isGMT= false;\n"
|
|
279
|
+
"\n"
|
|
280
|
+
" if (argc < 1) {\n"
|
|
281
|
+
" return false;\n"
|
|
282
|
+
" }\n"
|
|
283
|
+
" if (arguments[argc - 1] == 'GMT') {\n"
|
|
284
|
+
" isGMT = true;\n"
|
|
285
|
+
" argc--;\n"
|
|
286
|
+
" }\n"
|
|
287
|
+
"\n"
|
|
288
|
+
" var hour = isGMT ? date.getUTCHours() : date.getHours();\n"
|
|
289
|
+
" var date1, date2;\n"
|
|
290
|
+
" date1 = new Date();\n"
|
|
291
|
+
" date2 = new Date();\n"
|
|
292
|
+
"\n"
|
|
293
|
+
" if (argc == 1) {\n"
|
|
294
|
+
" return (hour == arguments[0]);\n"
|
|
295
|
+
" } else if (argc == 2) {\n"
|
|
296
|
+
" return ((arguments[0] <= hour) && (hour <= arguments[1]));\n"
|
|
297
|
+
" } else {\n"
|
|
298
|
+
" switch (argc) {\n"
|
|
299
|
+
" case 6:\n"
|
|
300
|
+
" date1.setSeconds(arguments[2]);\n"
|
|
301
|
+
" date2.setSeconds(arguments[5]);\n"
|
|
302
|
+
" case 4:\n"
|
|
303
|
+
" var middle = argc >> 1;\n"
|
|
304
|
+
" date1.setHours(arguments[0]);\n"
|
|
305
|
+
" date1.setMinutes(arguments[1]);\n"
|
|
306
|
+
" date2.setHours(arguments[middle]);\n"
|
|
307
|
+
" date2.setMinutes(arguments[middle + 1]);\n"
|
|
308
|
+
" if (middle == 2) {\n"
|
|
309
|
+
" date2.setSeconds(59);\n"
|
|
310
|
+
" }\n"
|
|
311
|
+
" break;\n"
|
|
312
|
+
" default:\n"
|
|
313
|
+
" throw 'timeRange: bad number of arguments'\n"
|
|
314
|
+
" }\n"
|
|
315
|
+
" }\n"
|
|
316
|
+
"\n"
|
|
317
|
+
" if (isGMT) {\n"
|
|
318
|
+
" date.setFullYear(date.getUTCFullYear());\n"
|
|
319
|
+
" date.setMonth(date.getUTCMonth());\n"
|
|
320
|
+
" date.setDate(date.getUTCDate());\n"
|
|
321
|
+
" date.setHours(date.getUTCHours());\n"
|
|
322
|
+
" date.setMinutes(date.getUTCMinutes());\n"
|
|
323
|
+
" date.setSeconds(date.getUTCSeconds());\n"
|
|
324
|
+
" }\n"
|
|
325
|
+
" return ((date1 <= date) && (date <= date2));\n"
|
|
326
|
+
"}\n"
|
|
327
|
+
|
|
328
|
+
"function findProxyForURL(url, host) {\n"
|
|
329
|
+
" if (typeof FindProxyForURLEx == 'function') {\n"
|
|
330
|
+
" return FindProxyForURLEx(url, host);\n"
|
|
331
|
+
" } else {\n"
|
|
332
|
+
" return FindProxyForURL(url, host);\n"
|
|
333
|
+
" }\n"
|
|
334
|
+
"}\n";
|