pacparser 1.5.1.dev4__tar.gz → 1.5.1.dev8__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.
@@ -0,0 +1,8 @@
1
+ include pacparser_py.c
2
+ include pacparser/__init__.py
3
+ include pacparser.h
4
+ include pacparser.c
5
+ include pac_utils.h
6
+ include version.mk
7
+ include quickjs/quickjs.c
8
+ include quickjs/quickjs.h
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pacparser
3
- Version: 1.5.1.dev4
3
+ Version: 1.5.1.dev8
4
4
  Summary: Pacparser package
5
5
  Home-page: https://github.com/manugarg/pacparser
6
6
  Author: Manu Garg
@@ -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";