Compare commits

..

1872 Commits
v0.1.0 ... v0.2

Author SHA1 Message Date
Ryan Dahl
86ddc0965a Apply V8 issue 851 to v0.2 for Mark Wubben
https://groups.google.com/d/topic/nodejs-dev/di7Jv1Umois/discussion
http://code.google.com/p/v8/source/detail?r=5364
http://codereview.chromium.org/3262001
2011-01-19 12:23:55 -08:00
Ryan Dahl
aab4f37e20 Fix test-net-connect-buffer
Change to end() behavior in 82afd0 was breaking it. end() should wait for
connection before dumping. Changed test-net-connect-timeout to use destroy()
instead.
2011-01-12 15:58:50 -08:00
Ryan Dahl
82afd0da35 Add test for connection timeouts
Also make socket.end() destroy connection if still trying to connect.
Previously was ignoring.
2011-01-12 11:12:28 -08:00
Ryan Dahl
f11e24b864 base64 decode should handle whitespace
painfully backported from v0.3 cf1db4f304
2011-01-03 15:02:32 -08:00
Ryan Dahl
6f8d78d84b Bump version to v0.2.6 2010-12-30 21:00:01 -08:00
Jorge Chamorro Bieling
ae91603dd7 Apple's threaded write()s bug
fixes test/simple/test-fs-sir-writes-alot.js on mac
2010-12-30 20:50:59 -08:00
Ryan Dahl
40b6197d9b Default to gcc in V8 build
Fixes detecting gcc toolchain in solaris (NODEJS-7)
2010-12-30 13:39:25 -08:00
Tom Hughes
ea3b78cd49 Don't access buffer data before initializing it.
Prevents valgrind from complaining and still tests that buffer data is
treated as unsigned.
2010-12-22 10:35:30 -08:00
Tom Hughes
a4c53533f6 Fix memory leak in node_crypto.cc.
Both HexDecode and unbase64 allocate buffers, which weren't being freed.
2010-12-22 10:35:27 -08:00
Tom Hughes
6681024a43 Fix memory corruption with unnamed AF_UNIX sockets.
AF_UNIX sockets can have a pathname, be unnamed, or abstract (Linux
only). If an unnamed socket is returned by getsockname, getpeername, or
accept, sun_path should not be inspected.
2010-12-22 10:35:23 -08:00
Ryan Dahl
6acf3b4858 Add toolchain=gcc to V8 build for Sun 2010-12-21 12:21:56 -08:00
Theo Schlossnagle
c3ce41d34f The following error can be thrown from accept on ECONNABORT. Instead, it should be ignored.
net:1100
        if (e.errno != EMFILE) throw e;
                               ^
Error: ECONNABORTED, Software caused connection abort
    at IOWatcher.callback (net:1098:24)
    at node.js:773:9
2010-12-21 10:48:16 -08:00
Ryan Dahl
30a3dfe2b9 Remove unnecessary call to X509_STORE_free 2010-12-01 09:29:27 -08:00
Ryan Dahl
02aaac892b Implement SecureContext destructor 2010-11-30 18:49:44 -08:00
Jeremy Martin
3bb61a913b Fix number of args emitted by EventEmitter during "fast case" (lte 3 args) 2010-11-29 17:32:57 -08:00
Ryan Dahl
06b600b200 Simplify state transitions in http.Client
Fixes new bug shown in test-http-allow-req-after-204-res.js pointed out by
Tom Carden <tom.carden@gmail.com>.
2010-11-29 14:35:26 -08:00
Brian White
3c7200ff66 Fix OpenSSL SSL_library_init function check on OpenBSD. 2010-11-18 21:48:36 -08:00
Brian White
a904d12306 Make sure raw mode is disabled when exiting a terminal-based REPL. 2010-11-17 18:48:44 -08:00
Ryan Dahl
74a1fc334e Bump version to 0.2.5 2010-11-16 21:46:59 -08:00
Ryan Dahl
44fa89cda8 Add ref to buffer during fs.write and fs.read
There was the possibility the buffer could be GCed while the eio_req was
pending.  Still needs test coverage for the fs.read() problem.

See:
http://groups.google.com/group/nodejs/browse_thread/thread/c11f8b683f37cef
2010-11-16 16:45:26 -08:00
Ryan Dahl
ba5ac87b12 Fix OS::GetExecutablePath for platform_none 2010-11-16 10:56:12 -08:00
isaacs
c73041b3d5 writeFile fixes
writeFileSync could exhibit pathological behavior when a buffer could
not be written to the file in a single write() call.

Also, writeFile was not quite as optimized as it could be.
2010-11-16 10:55:30 -08:00
Ben Noordhuis
8d578df4b6 Add --profile flag to configure script, enables gprof profiling. 2010-11-16 10:55:04 -08:00
Ryan Dahl
e006edab57 Fix segfault on test-crypto
Plus random cleanups. This code needs help.

Conflicts:

	src/node_crypto.cc
2010-11-16 10:53:06 -08:00
Ryan Dahl
9a066c99e4 Simplify REPL displayPrompt
Now that we insert \r into the stream and aren't switching back and forth
between termios modes, not need to worry about when to display the prompt.
2010-11-16 10:50:00 -08:00
Ryan Dahl
44db37859d Add writeFilter when in the readline
Switch \n with \r\n for all strings printed out.
Necessary for writev patch.
2010-11-16 10:49:26 -08:00
Ryan Dahl
7590075ea7 Remove -e from echo in test. Non-portable 2010-11-16 10:48:38 -08:00
Ryan Dahl
299eda8a6c Upgrade http-parser 2010-11-16 10:47:39 -08:00
Guillaume Tuton
ebbaa86e7a Set FD_CLOEXEC flag on stdio FDs before spawning.
With regression test.
2010-11-16 10:41:41 -08:00
Ryan Dahl
c6d214739a Remove unnecessary ref/unref in iowatcher cb 2010-11-16 10:41:25 -08:00
Ben Noordhuis
96e0615369 Make writes to process.env update the real environment. Tests included. 2010-11-16 10:41:15 -08:00
Chandra Sekar S
4e0c7dd3be Removed range read optimization as it doesn't work with libeio. 2010-11-16 10:39:02 -08:00
Ryan Dahl
67cc6d70a5 Make sure watcher.set() isn't being called when active
Conflicts:

	lib/dns.js
2010-11-16 10:38:23 -08:00
Ryan Dahl
825308a45c Fix argv[6] comment in node_file 2010-11-16 10:36:57 -08:00
Ryan Dahl
b6eeddeb17 Rewrite libeio After callback to use req->result instead of req->errorno for error checking
Conflicts:

	src/node_file.cc
2010-11-16 10:36:46 -08:00
Ryan Dahl
ae2087460b Abstract out a Server.prototype.pause method 2010-11-16 10:25:58 -08:00
Ryan Dahl
d2828ea2a5 Abstract out net.Server.prototype._rejectPending
Does the same timeout action for maxConnections as it does for EMFILE.

Conflicts:

	lib/net.js
2010-11-16 10:25:53 -08:00
Ryan Dahl
26b3f228ad Module-level EMFILE handling
All net servers now share the same dummy socket. The ulimit warning is
throttled for all servers.

Conflicts:

	lib/net.js
2010-11-16 10:24:48 -08:00
isaacs
3c9746de24 Handle cyclic links smarter in fs.realpath
Rather than aborting in the face of *any* repeated link in a given path,
instead only abort if such a cycle actually makes a given path unresolvable.

Test for this by doing a normal stat.  Still use the seenLinks object to
cache link contents so as to cut own a little bit on readlink calls.

Also add a pathological test that fails without the change to fs.js.
2010-11-16 10:22:46 -08:00
Jorge Chamorro Bieling
f76b65755f make "node --eval" eval in the global scope. 2010-11-16 10:22:30 -08:00
Ryan Dahl
b70149856d Add extra anti-DoS tech to net.Server
Conflicts:

	lib/net.js
2010-11-16 10:20:39 -08:00
Ryan Dahl
9634669cc7 Improve idle benchmarks 2010-11-16 10:14:19 -08:00
Ryan Dahl
ab86f597bc Gracefully handle EMFILE
Implementing a tip from Marc Lehmann:
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#The_special_problem_of_accept_ing_wh

Keep an extra FD around for every server. When you hit EMFILE, destroy that
FD, accept a connection, close it; in this way you can clear the connection
queue and let people know that you're overload.

No more timeout needed.

Conflicts:

	lib/net.js
2010-11-16 10:12:53 -08:00
Ryan Dahl
c42a5cc8eb Fix test-http-buffer-sanity
Backported from 7e24a05cba
Add test/simple/test-http-curl-chunk-problem.js
2010-11-01 18:19:54 -07:00
Ryan Dahl
f8f675ba41 Add broken test passing a buffer through http 2010-11-01 18:19:53 -07:00
Ryan Dahl
428a670121 bump version to 0.2.4 2010-10-24 14:45:39 -07:00
Ryan Dahl
f7bc7fb031 Make sure Error object on exec() gets killed member
Also default to SIGTERM for destruction when exceeding timeout or buffer on
exec()

Back ported from v0.3; original commits:
bd8e4f656e
5a98fa4809
6570cd99e5
9bf2975f78
2010-10-24 12:57:57 -07:00
Ryan Dahl
d3e6834297 Add isatty for isaacs 2010-10-24 12:27:28 -07:00
Ryan Dahl
a958ebfca0 one more 'listening' race condition 2010-10-24 12:26:47 -07:00
Ryan Dahl
78afb12663 Fix a few 'listening' race conditions
in test-http-client-parse-error
2010-10-24 12:26:32 -07:00
Ryan Dahl
ad4fb5319b Do not spin on aceept() with EMFILE
When a server hit EMFILE it would continue to try to accept new connections
from the queue. This patch introduces a timeout of one second where it will
stop trying to accept new files. After the second is over it tries again.

This is a rather serious bug that has been effecting many highly concurrent
programs. It was introduced in 4593c0, version v0.2.0.

TODO: A test for this situation. Currently I test it like this

  termA% cd projects/node
  termA% ulimit -n 256
  termA% ./node benchmark/idle_server.js

  termB% cd projects/node
  termB% ./node benchmark/idle_clients.js

And watch how the server process behaves.
2010-10-24 12:25:04 -07:00
Tom Hughes
1e932ea930 Add signal handlers so we clean up before exiting.
Add SIGTERM and SIGINT signal handlers so that we run the exit handlers
before exiting when getting these signals. Fixes an issue where we
couldn't run vi after CTRL+C'ing node because the stdin fd was left
non-blocking.

Also the test from ceb5331a64
2010-10-23 19:14:08 -07:00
Vitali Lovich
ddb06cb552 Fix parsing of linux memory
If process name contains a space, this parsing fails for no good reason.
2010-10-23 19:08:22 -07:00
Ryan Dahl
60b5bcac0c Write write.txt into the tmpdir 2010-10-23 19:08:15 -07:00
Ryan Dahl
46eda290be Remove a confusing sentence in the docs 2010-10-23 19:08:05 -07:00
Tom Hughes
c19897b76a Add --max-stack-size flag.
v8 doesn't expose a command-line flag to set the stack size, so this
adds a new flag that node understands how to handle and uses v8's
ResourceConstraints API.
2010-10-23 18:32:20 -07:00
Ryan Dahl
8ec4870611 Fix race conditions in test-http-upgrade-client2 2010-10-23 18:30:17 -07:00
Ryan Dahl
8fb9cd2575 Fix test harness for Linux
Mostly just upgraded tools/test.py to the latest one that's in V8.  But also
fixing the before and after hooks to preserve the test/tmp directory so that
running tests manually usually works.
2010-10-23 18:30:04 -07:00
Ryan Dahl
006e283b78 Add idle connection test 2010-10-23 18:27:59 -07:00
Ryan Dahl
bdd82b7c5f Add 'make bench' script 2010-10-23 18:27:52 -07:00
Ryan Dahl
9f25dc1625 Improve benchmark/http_simple.js 2010-10-23 18:27:42 -07:00
Nathan Rajlich
511f80b3c8 http-parser: Allow whitespace in the 'Content-Length' header. 2010-10-23 18:26:46 -07:00
Joshua Peek
13dba0d1c1 Don't flush net writeQueue on end() if its still connecting 2010-10-23 18:26:07 -07:00
Ryan Dahl
97e3040202 Add future API for 'util' module 2010-10-23 18:18:24 -07:00
Rasmus Andersson
78fac9b863 environ symbol fix for Mac OS X 2010-10-23 18:16:40 -07:00
Ryan Dahl
969ee3dd83 Add flag to disable colors in REPL 2010-10-23 18:16:10 -07:00
Ryan Dahl
39a2a9d1b6 TCP clients should buffer writes before connection 2010-10-23 18:15:01 -07:00
TJ Holowaychuk
08f1bf42bb Added -e, --eval 2010-10-23 16:07:02 -07:00
Ryan Dahl
18ff6db648 ClearWeak on ObjectWraps. I /think/ this is the correct semantics 2010-10-23 16:06:51 -07:00
Ryan Dahl
dc103ae020 Bump version to v0.2.3 2010-10-02 06:05:56 -07:00
Ryan Dahl
fea3919d1b Fix zero length buffer bug for http res.end()
Reported by Kadir Pekel <kadirpekel@gmail.com>
2010-10-01 16:16:00 -07:00
Marco Rogers
b5dc54c6ed fix encoding option on ReadStream, updated test 2010-10-01 16:14:22 -07:00
Ryan Dahl
2fb393a768 Fix REPL crash on tabbing 'this.'
Thanks to Tim Becker for pointing this out.
2010-10-01 16:14:13 -07:00
Ryan Dahl
80974dc85b Drop reference to timer callback on clearTimeout
Reported here:
http://groups.google.com/group/nodejs-dev/browse_thread/thread/9e063d0938f99879

Would be good to test this somehow...
2010-10-01 16:13:59 -07:00
Evan Larkin
16f736200a fs.ReadStream: Passing null for file position on all reads except the first read of a range read. 2010-10-01 16:13:12 -07:00
Evan Larkin
d29e62d564 No longer using the global variable "stat" in unwatchFile 2010-10-01 16:11:42 -07:00
Ryan Dahl
41eca918e5 Add test for getting parse error from HTTP client
Made this test in response to this thread:
http://groups.google.com/group/nodejs/browse_thread/thread/f82835007a277de2/
But Node appears to be working correctly.
2010-10-01 16:11:17 -07:00
Ryan Dahl
45a01aff59 Move the http client's initParser() into prototype 2010-10-01 15:56:32 -07:00
Ryan Dahl
55aa7b17ab Put preprocessor defines into CPPFLAGS not compile flags... 2010-10-01 15:55:46 -07:00
Ryan Dahl
1165878e3c Fix timing on I/O benchmark 2010-10-01 15:54:49 -07:00
Ryan Dahl
b98958d7fe Add function_call benchmark 2010-10-01 15:54:44 -07:00
Fedor Indutny
448cbaf395 Fixed 'upgrade' event for httpclient
onend and ondata was cleaning on parser end
2010-10-01 15:54:27 -07:00
Tj Holowaychuk
b8eee9c6f0 Fixed fs.ReadStream() start: 0 bug 2010-10-01 15:53:53 -07:00
Mikeal Rogers
936a038bb7 HTTP: close connection on connection:close header.
rnewson found a good bug in keep-alive. we were only using the request
headers we send to enable/disable keep-alive but when the server sends
Connection: close we need to close down the connection regardless.

I wrote up a patch the Robert verified makes all his test client code work
now and I also added a new unittest for it.
2010-10-01 15:53:26 -07:00
Ryan Dahl
529cdad2dd Don't choose jobs based on processor
Leads to lots of builds with out-of-memory.
2010-10-01 15:53:02 -07:00
Ryan Dahl
7140933fcc More explicit openssl configure warning 2010-10-01 15:52:56 -07:00
Jorge Chamorro Bieling
27f6a20fdb sys.js: --needless Object.keys() --needless .map() in a single patch 2010-10-01 15:51:27 -07:00
Paul Querna
a30daa7b6c Fatal error out if OpenSSL was not explicitly disabled, we just couldn't autodetect it. 2010-10-01 15:50:32 -07:00
Jorge Chamorro Bieling
01035714a5 sys.js: sys.inspect: show function names 2010-10-01 15:50:18 -07:00
Ryan Dahl
f6f739b3a2 Pass correct message in HTTP client upgrade
Simplify and correct test.

Fix by Fedor Indutny.
2010-10-01 15:49:50 -07:00
Ryan Dahl
d7c1690c74 Revert requireNative changes: 4e6b9b0, d429033, 6abbfa0, bcad540 2010-10-01 15:45:21 -07:00
Ryan Dahl
7bf46bc980 bump version to v0.2.2 2010-09-17 11:34:16 -07:00
Ryan Dahl
bcbc52e257 ^c to get out of '...' in REPL 2010-09-17 11:23:08 -07:00
Ryan Dahl
c00a6a7169 Simplify REPL 2010-09-17 11:23:04 -07:00
Ryan Dahl
1d8b154e14 Safe constructors for fs.ReadStream and fs.WriteStream 2010-09-17 11:22:58 -07:00
Ryan Dahl
84f4ce742f Remove old versions of fs.read and fs.write from docs 2010-09-17 11:22:50 -07:00
Paul Querna
f9cc35fa57 Use the Apple recommended way of detecting OSX Versions
to enable KQueue, rather than deciding based on the compiler version.
2010-09-17 11:22:42 -07:00
Ryan Dahl
d506a42765 Handle writeStream errors in sys.pump 2010-09-17 11:21:59 -07:00
Russell Haering
09a41a7f9c Pass an error to the sys.pump callback if one occurs
- Add test case for pumping from unreadable stream.
- Document the sys.pump error handling behavior
2010-09-17 11:21:50 -07:00
Herbert Vojčík
8dcd6dccab Common subexpression in emit. 2010-09-17 11:20:52 -07:00
Herbert Vojčík
1375b8ed39 No need to do if (internalModuleCache...), it's in requireNative. 2010-09-17 11:20:32 -07:00
Herbert Vojčík
a3333e7393 Module system moved to the bottom, where only is it needed.
(this also splits the file into upper "setup" and lower "startup" sections)
2010-09-17 11:20:24 -07:00
Herbert Vojčík
d965640662 m.id unneccessary, id is enough. 2010-09-17 11:20:17 -07:00
Herbert Vojčík
ee253b374d Natives having their own self-contained minimalistic module system.
The main system is built upon this, and is optional, if only natives
are used in application (eg. node-core).

Natives not loaded into own context if NODE_MODULE_CONTEXTS=1.
This have its inner logic, if natives are seen just as lazy-loaded
parts of the core.
2010-09-17 11:19:33 -07:00
Ryan Dahl
b17b28531b shorten some lines in events.js 2010-09-17 11:18:59 -07:00
Ryan Dahl
10af67714b Optimize emit for two arguments 2010-09-17 11:18:54 -07:00
Ryan Dahl
180a04805b Make a list of known globals
And fix missing var!

It would be good to get this script running at the end of every test, so we
know that modules aren't leaking either - but it will require a lot
modification of the tests so that they themselves aren't leaking globals.
2010-09-17 11:18:42 -07:00
Ryan Dahl
ee21920571 Use child_process.exec rather than sys.exec 2010-09-17 11:17:33 -07:00
isaacs
66bce65d33 Bug in realpath with symlinks to absolute folder paths which have children.
Found by Cliffano Subagio
http://groups.google.com/group/nodejs/browse_thread/thread/f46f093938265ac0/387e14da08c7dd7b?
2010-09-17 11:17:26 -07:00
Tony Metzidis
2005ef9e37 Catch Exceptions thrown when openssl is disabled 2010-09-17 11:17:08 -07:00
Tony Metzidis
3816ebc85f - fix AttributeError on "use_openssl" when doing ./configure --without-ssl - error was: AttributeError: Values instance has no attribute 'use_openssl' 2010-09-17 11:17:00 -07:00
Ryan Dahl
4c5520a37e Fix style in node_object_wrap.h 2010-09-17 11:16:45 -07:00
Ryan Dahl
0ddad3fbc7 Fix style in readline 2010-09-17 11:12:01 -07:00
Ryan Dahl
db6a1788b2 Add SIGWINCH handler for readline 2010-09-17 11:11:52 -07:00
Ryan Dahl
1d17874a7d add to todo 2010-09-17 11:11:47 -07:00
Trent Mick
3191802605 add ANSI coloring option to sys.inspect and, by default, to the repl 2010-09-17 11:11:32 -07:00
Ryan Dahl
da235fa12c bump version to v0.2.1 2010-09-10 13:52:33 -07:00
Paul Querna
92fb664bfc Expose fingerproint from getPeerCertificate
Expose the SHA1 digest of the certificate as the fingerprint attribute in
the object returned by getPeerCertificate()
2010-09-10 13:31:46 -07:00
Ryan Dahl
7704fb9711 Fix fs.realpathSync('/') 2010-09-10 13:31:39 -07:00
isaacs
c099e274d2 Better temporary directory handling for tests.
Add a setUp and tearDown function to the test case class, and use it to
create and remove the test/tmp directory for each test.

TODO: amend other tests.
2010-09-10 13:31:34 -07:00
Ryan Dahl
c86f3c5d5c Don't use empty.js - breaks module test 2010-09-10 13:31:27 -07:00
Felix Geisendörfer
9b8577230f Simple benchmark for node's startup time 2010-09-10 13:31:21 -07:00
Ryan Dahl
9f6f26028f Use SetPointerInInternalField 2010-09-10 13:31:16 -07:00
Felix Geisendörfer
44f8756aab Fix: uncaughtException was broken for main module
See: 635986e433
2010-09-10 13:30:48 -07:00
Ryan Dahl
ae2f566fec Call Tick() after coming out of select()
Previously we would only call it before going into select(). This is needed
to fix test/simple/test-next-tick-ordering2.js.
2010-09-10 13:30:38 -07:00
isaacs
2f071ac7d1 Fix issue #262. Allow fs.realpath to traverse above the current working directory. 2010-09-08 17:56:34 -07:00
Tobie Langel
bd8ea2bb85 Test for ReadStream typo 2010-09-08 17:56:25 -07:00
Ryan Dahl
35682ac88e Fix style; undefined reference bug 2010-09-08 17:56:17 -07:00
Tobie Langel
5bbebf3593 Do not emit WriteStream's drain event before ws.write has been called. 2010-09-08 17:56:12 -07:00
Tobie Langel
0b9dab650e Avoid closing a WriteStream before it has been opened. 2010-09-08 17:55:58 -07:00
Tobie Langel
a6659e7612 Avoid missing ref error in WriteStream.prototype.destroy(). 2010-09-08 17:55:53 -07:00
Herbert Vojčík
727843eea1 Make test-global work with NODE_MODULE_CONTEXTS. 2010-09-08 17:55:44 -07:00
Herbert Vojčík
7e9a0173d7 Modifying test-global to accomodate v8 inter-context 'global' protection. 2010-09-08 17:55:38 -07:00
Herbert Vojčík
74b70c3cb1 Removing test-global-between-modules.
Using "global" to push data to require()d modules
not supported under NODE_MODULE_CONTEXTS=1.
2010-09-08 17:55:33 -07:00
Herbert Vojčík
d5deb4c4a3 Removed comment-out code. 2010-09-08 17:48:52 -07:00
Ryan Dahl
cc0164bc12 Increase ReadStream bufferSize to 64k 2010-09-08 17:48:45 -07:00
Trent Mick
ccd1304c5b Ctrl+W support for the REPL
FWIW, command-line style (delete back to whitespace) would be:
    leading = leading.replace(/\S+\s*$/, '');
2010-09-08 17:48:15 -07:00
Felix Geisendörfer
3d3d00d524 Test case showing a bug in nextTick ordering
nextTick should fire before setTimeout in this test, but it doesn't.
2010-09-08 17:48:02 -07:00
Ryan Dahl
dffa9e76a1 test-http-parser should not use private API 2010-09-08 17:47:36 -07:00
Ryan Dahl
90374797f0 Don't refer to private API in test-repl 2010-09-08 17:47:30 -07:00
Ryan Dahl
c1a4e10156 Special deepEquals for buffer 2010-09-08 17:47:23 -07:00
Ryan Dahl
b655ce5c08 typo: forceClose -> destroy for WriteStreams 2010-09-08 17:47:17 -07:00
Benjamin Thomas
b30b60717d Fix bug in process._tickCallback where callbacks can get abandoned.
Change process._tickCallback so that if a callback throws an error but
there are other callbacks after it, we indicate that
process._tickCallback needs to be ran again.

Currently, if a callback in process._tickCallback throws an error, and
that error is caught by an uncaughtException handler and
process.nextTick is never called again, then any other callbacks already
added to the nextTickQueue won't be called again.

Updated the next-tick-errors test to catch this scenario.
2010-09-08 17:46:58 -07:00
isaacs
b2dfea0361 Treat "//some_path" as pathname rather than hostname by default.
Note that "//" is still a special indicator for the hostname, and this does
not change the parsing of mailto: and other "slashless" url schemes.  It
does however remove some oddness in url.parse(req.url) which is the most
common use-case for the url.parse function.
2010-09-08 17:46:50 -07:00
Ryan Dahl
610743daee Make sure setInterval(cb, 0) loops infinitely 2010-09-08 17:46:43 -07:00
Ryan Dahl
df891c36a4 Fix style 2010-09-08 17:46:36 -07:00
Ryan Dahl
f35a8298b1 Fix style in test/simple/test-dgram-unix.js 2010-09-08 17:46:30 -07:00
Ryan Dahl
294c455678 Remove timer from test/simple/test-dgram-unix.js
Test running already has a timeout mechanism.
2010-09-08 17:46:24 -07:00
Marco Rogers
14f16ec592 fix for fs.readFile to return string when encoding specified on zero length read 2010-09-08 17:45:26 -07:00
Marco Rogers
cdee88051d Fixed async fs writes with length 0, it should fire the callback 2010-09-08 17:45:21 -07:00
Bradley Meck
b39b15d53f Allow Strings for ports on net.Server.listen 2010-09-08 17:45:07 -07:00
Fedor Indutny
b895568800 Constants should be readOnly and DontDelete 2010-09-08 17:44:40 -07:00
Ryan Dahl
ead58b9a93 Add failing uncaughtException test
FIXME
2010-09-08 17:44:30 -07:00
Johan Euphrosine
c306fa241c add readline support for meta-d 2010-09-08 17:44:13 -07:00
Benjamin Thomas
22f67f8585 Fix process.nextTick so thrown errors don't confuse it.
If the function for a process.nextTick throws an error, then the
splice() never removes that function from the nextTickQueue array.  This
makes sure the functions that have been run in _tickCallback get removed
regardless of errors.

Also add a test for this.
2010-09-08 17:43:47 -07:00
Ryan Dahl
416aa73946 Safe constructor: net.Server, net.Stream 2010-09-08 17:43:39 -07:00
Ryan Dahl
6a39a7ed83 Safe Constructor: Buffer 2010-09-08 17:43:32 -07:00
Ryan Dahl
ad960f4462 Safe constructors: http.Server and http.Client 2010-09-08 17:43:25 -07:00
Ryan Dahl
f78691e45c Only check for execinfo lib in freebsd
OpenEmbedded doesn't like it when you look in /usr/lib
2010-09-08 17:43:17 -07:00
Johan Euphrosine
3d8137c582 add test for readline putty support 2010-09-08 17:42:59 -07:00
Brian
c14c445cb6 Fix home/end keys in repl for putty/xterm. 2010-09-08 17:42:47 -07:00
Russell Haering
b9ca8435f5 Modify fs.open to use accept a callback without a mode 2010-09-08 17:42:36 -07:00
Johan Euphrosine
baa24bd40e add readline support for meta-f and meta-b 2010-09-08 17:42:23 -07:00
Johan Euphrosine
7a836ef813 add home/end support in rxvt and readline tests 2010-09-08 17:42:09 -07:00
Felix Geisendörfer
a2b9e02d83 Document WriteStream 'open' event 2010-09-08 17:41:59 -07:00
isaacs
3f7c791b13 Add testing items, and make npm lowercase 2010-09-08 17:40:59 -07:00
isaacs
53dac7c341 Missing 'var' in sys.inspect (Found by Oleg Slobodskoi) 2010-09-08 17:40:50 -07:00
Aria Stewart
c43ddf7acd Fix doc.js so that it doesn't misnest menu items in the TOC 2010-09-08 17:40:41 -07:00
Johan Euphrosine
699fdfaa43 fix home/end on GNU/Linux 2010-09-08 17:40:35 -07:00
Johan Euphrosine
8d2e79451e add tests for console.log arguments handling 2010-09-08 17:40:26 -07:00
Aria Stewart
760efc0758 s/HTTPS/SSL/ where appropriate 2010-09-08 17:39:55 -07:00
Ryan Dahl
1b1ad1d363 Improve appendix markdown 2010-09-08 17:39:38 -07:00
Ryan Dahl
c3eafdd3a4 Add appendix to docs 2010-09-08 17:39:28 -07:00
Ryan Dahl
7fc794a8ec Fix default encoding in docs 2010-08-20 08:49:20 -07:00
Ryan Dahl
4fcbc1b64a Update make website-upload 2010-08-20 02:00:37 -07:00
Ryan Dahl
9283e134e5 bump version 2010-08-20 01:53:08 -07:00
Ryan Dahl
51ecba8da9 Add get/set methods to Buffer 2010-08-19 23:29:06 -07:00
Ryan Dahl
0c20c588af Remove YAWS vs Apache benchmark
http://twitter.com/bascule/status/21626934378
2010-08-19 19:25:00 -07:00
Tim Caswell
81a53e83ab Make process.nextTick worlds faster for large queues. 2010-08-19 19:19:18 -07:00
Ryan Dahl
60b93cca6d Fix race conditions in test-dgram-multicast.js 2010-08-19 18:49:27 -07:00
Ryan Dahl
12a169e8ff Add buffer_creation benchmark 2010-08-19 01:40:28 -07:00
Trent Mick
293809b8b6 drop obsolete TODO comment 2010-08-18 23:02:54 -07:00
Trent Mick
1aeaf8d289 repl tab completion: insert common prefix of multiple completions 2010-08-18 23:02:30 -07:00
Trent Mick
5c1ffa165f repl completion: completion for arguments to "require" 2010-08-18 22:59:49 -07:00
Trent Mick
2134982ea4 repl completion: comment/TODO cleanup, no functional change 2010-08-18 22:59:35 -07:00
Herbert Vojčík
c5eb1b55d9 Making "root" available in both context and non-context mode. 2010-08-18 22:50:55 -07:00
Ryan Dahl
0906f945be Fix V8 build for old gcc
also sent upstream: http://codereview.chromium.org/3130033/show
2010-08-18 22:50:16 -07:00
Herbert Vojčík
28b21d15c3 Fix undefined_reference_in_new_context test for own-context module loader. 2010-08-18 14:06:30 -07:00
Ryan Dahl
5bce8ed118 Fix process.platform 2010-08-18 13:16:32 -07:00
Herbert Vojčík
2b126da395 Tests for behaviour of 'global'. 2010-08-18 12:08:39 -07:00
Herbert Vojčík
5dc2b93311 Fix sys.inspect for regex in different context. 2010-08-18 11:47:43 -07:00
Herbert Vojčík
9253333850 Fix registerExtension for NODE_MODULE_CONTEXTS
Fix of registerExtension-produced non-string module loading with own
context. Plus finishing touches to the test.
2010-08-18 11:46:37 -07:00
Ryan Dahl
39b432e42a Add process.versions 2010-08-17 11:25:42 -07:00
Ryan Dahl
41ad33910f Add Paul Querna's io benchmarks 2010-08-17 08:43:26 -07:00
Herbert Vojčík
cf2b206a8e More changes to tests so they really work under context module loader.
Plus, getting rid of test/common.js defining things in global.
2010-08-17 08:41:05 -07:00
Herbert Vojčík
1872719b8c Typo in comment. 2010-08-17 08:38:44 -07:00
Ryan Dahl
91757fa840 Upgrade V8 to 2.3.8 2010-08-17 08:37:25 -07:00
Ryan Dahl
d4f4380f7e Add TODO 2010-08-17 08:16:43 -07:00
Ryan Dahl
03dda31b75 Simplify loading events.js 2010-08-17 08:15:46 -07:00
Herbert Vojčík
32e309440f Fix of 'sys.common.debug' calls in tests. 2010-08-17 08:08:36 -07:00
Marco Rogers
6744e59e46 detect 0 length fs writes with tests 2010-08-16 23:57:01 -07:00
Herbert Vojčík
4db608dbba Get away uint/int comparision warning. 2010-08-16 15:17:17 -07:00
Ryan Dahl
ae5d613b3e Add --without-snapshot configure option 2010-08-15 14:27:05 -07:00
Ryan Dahl
4593c04959 Implement net.Server.maxConnections
Simplify EMFILE behavior.
2010-08-15 14:01:55 -07:00
Illarionov Oleg
cde80d9859 Fix OpenSSL 100% CPU usage on error 2010-08-15 13:23:09 -07:00
Herbert Vojčík
ff953dccf1 Refactor of resolveModulePath to make it clearer. 2010-08-15 11:12:48 -07:00
Herbert Vojčík
13a3bf5b7d Clean up findModulePath
Separating "what to traverse" from "how to traverse and what to do with it "
in findModulePath.  It may also fix one not-yet-found bug (absolute ids
weren't loaded when dirs.length = 0).
2010-08-15 11:06:36 -07:00
Herbert Vojčík
361759d179 Using Array.isArray for Array testing in findModulePath. 2010-08-15 11:05:48 -07:00
Ryan Dahl
1b589be1d6 Remove TODO item 2010-08-14 14:23:09 -07:00
Vanilla Hsu
49cd211dff Add freebsd's process.title support. 2010-08-13 22:29:38 -07:00
Ryan Dahl
b14dd49222 bump version 2010-08-13 09:02:10 -07:00
Ryan Dahl
a8c2bb41af Fix tests 2010-08-13 08:55:42 -07:00
Ryan Dahl
03123435e0 Remove platform specific asserts 2010-08-13 08:13:54 -07:00
Ryan Dahl
4bbab14346 Revert "Upgrade V8 to 2.3.7"
This reverts commit 083ee0f8b7.

V8 build broken on cygwin:
  ./deps/v8/src/handles.h:62: instantiated from `T*
  v8::internal::Handle<T>::operator->() const [with T = v8::internal::Code]'
  ./deps/v8/src/accessors.cc:396: instantiated from here
  ./deps/v8/src/handles-inl.h:50:
  error: call of overloaded `BitCast(v8::internal::Code** const&)' is
  ambiguous
  ./deps/v8/src/utils.h:732: note: candidates are: Dest
  v8::internal::BitCast(const Source&) [with Dest = v8::internal::Code**,
  Source = v8::internal::Code**]
  ./deps/v8/src/utils.h:743:
  note:                 Dest v8::internal::BitCast(Source* const&) [with Dest
  = v8::internal::Code**, Source = v8::internal::Code*]
  scons: *** [obj/release/accessors.o] Error 1
2010-08-13 07:43:53 -07:00
Bert Belder
0e8d858aba One more test with a race condition fixed 2010-08-13 07:18:38 -07:00
Bert Belder
d8642a8aa6 Implement process.title for cygwin 2010-08-13 07:01:32 -07:00
Rasmus Andersson
cf909e8725 added dns.getHostByAddr() -- resolve an external IP address to hostname(s) 2010-08-12 16:25:45 -07:00
Rasmus Andersson
758f12f34c added read and write support for process.title Darwin
This will only manipulate the OS X-level process name, not the title shown
in e.g. ps.
2010-08-12 16:23:41 -07:00
Ryan Dahl
083ee0f8b7 Upgrade V8 to 2.3.7 2010-08-12 10:11:03 -07:00
Ryan Dahl
9acd76ed6e Don't throw on HEAD requests 2010-08-12 10:06:52 -07:00
Trent Mick
72e4a49cac repl completion: multi-column display of completions 2010-08-12 00:07:26 -07:00
Rasmus Andersson
8d5e05668b Added support for multiple listeners to DNS multicast datagrams.
Some platforms require SO_REUSEPORT to be set for the socket.
2010-08-11 19:02:20 -07:00
Bert Belder
7059be19ec Fix http and net tests failing due to race condition
Plus some minor cosmetic corrections
2010-08-11 17:27:44 -07:00
Trent Mick
1c9a85b9a6 First pass at tab-completion in the REPL 2010-08-11 13:42:45 -07:00
Ryan Dahl
06634f48eb Implement process.title for linux 2010-08-11 13:15:00 -07:00
Ryan Dahl
5185c15ef7 Stub out process.title 2010-08-11 12:39:42 -07:00
Fedor Indutny
49888a01c3 Cygwin: process.execPath fix 2010-08-11 11:44:51 -07:00
Ryan Dahl
883b3e2873 Remove -Werror from v8 SConstruct 2010-08-11 00:23:12 -07:00
Rasmus Andersson
fd3cd755d1 [dgram] only look up hostname for the requested address family
- [lib/dns.js] dns.lookup takes a new optional argument "family" which
  should be the integer 4, 6, dns.AF_INET or dns.AF_INET6. Passing a
  non-false "family" argument makes c-ares explicitly look up addresses for
  the specified family.

- [test/simple/test-c-ares.js] test explicit address family lookups
2010-08-10 17:53:32 -07:00
Ryan Dahl
9395786d11 Fix race conditions in tests 2010-08-10 17:48:37 -07:00
Ryan Dahl
3d551e5538 Close fd on readFile(emptyfile) 2010-08-10 14:47:40 -07:00
Ryan Dahl
a5be730906 Upgrade V8 to 2.3.6 2010-08-10 09:17:11 -07:00
Ryan Dahl
1c5d5e0b72 uppercase request methods 2010-08-09 21:23:52 -07:00
Bert Belder
7d4e8a9a71 If no options are given to child_process.spawn, env should default to process.env
Regression.
2010-08-09 15:37:14 -07:00
Ryan Dahl
f4f05a8851 Unset CLOEXEC on spawn's customFds 2010-08-09 15:33:57 -07:00
Rasmus Andersson
e07f568230 ignore test/fixtures/hello.txt created by some test(s) 2010-08-09 13:15:28 -07:00
Brian
3aa5cfde10 Misc. corrections and consistency changes to documentation. 2010-08-09 09:08:08 -07:00
Ryan Dahl
5033da733d Add TODO list items 2010-08-08 13:37:51 -07:00
Ryan Dahl
cf5ae13f85 Remove completed TODO task 2010-08-08 12:13:20 -07:00
Ryan Dahl
7068912fbb Export Interface from readline.js 2010-08-08 11:52:31 -07:00
Trent Mick
e8c2453f6d spelling correction 2010-08-06 14:48:38 -07:00
Bert Belder
aaa1f451e6 Expose cwd option to child_process.exec() 2010-08-06 13:38:41 -07:00
Bert Belder
94914135df New api for child_process.spawn; ability to set cwd for spawn()ed process
Tests for child_process.spawn() use new API

Test for deprecated child_process.spawn() API
2010-08-06 13:37:30 -07:00
Ryan Dahl
d408de87fc Remove module.js - put code into src/node.js 2010-08-06 12:34:02 -07:00
Tj Holowaychuk
e8795cea30 Added console.trace() 2010-08-06 12:15:04 -07:00
Tj Holowaychuk
a8e1e8d057 Added console.{time,timeEnd}() 2010-08-06 12:11:04 -07:00
Tj Holowaychuk
e15221a8de console formatter appends extra arguments
This makes the console methods more "browser-like",
for example:

  console.log("foo", "bar", "baz");
  // foo bar baz

but still works with formatting

  console.log("hey %s", "tj", "whats up");

  // hey tj whats up
2010-08-06 12:10:08 -07:00
cloudhead
fe3e419687 querystring.parse: handle undefined value properly 2010-08-05 10:46:28 -07:00
Felix Geisendörfer
ffbbc465d3 Support inspecting objects with console.log
If the first parameter passed into console.log() is not a string, all
parameters will be printed as formated by sys.inspect. This change
also affects console.info and console.warn.
2010-08-05 10:23:17 -07:00
Ryan Dahl
6cd32fb62e Update AUTHORS 2010-08-04 16:50:59 -07:00
Ryan Dahl
a4906c7c83 Print warning when OpenSSL not found 2010-08-04 16:07:10 -07:00
Nick Stenning
0a3eff8021 Standardise module load order for native and registered file extensions.
This patch standardises the load order for modules. Highest priority is trying to load exactly the file the user specified, followed by native extensions, followed by registered extra extensions, etc.

In full, if we require('foo') having registered '.coffee' as an alternative extension, we try and load the following files in order:

    foo
    foo.js
    foo.node
    foo.coffee
    foo/index.js
    foo/index.node
    foo/index.coffee
2010-08-04 16:03:08 -07:00
Nick Stenning
78520ba482 Don't attempt to load a directory.
This patch replaces the path.exists check for module loading with a call to
fs.statSync (or fs.stat for require.async) which ensures that it's not trying
to load a directory.
2010-08-04 15:55:47 -07:00
Ryan Dahl
0b925d075d bump version 2010-08-04 12:04:12 -07:00
Ryan Dahl
81f5ed5c65 Upgrade V8 to 2.3.5 2010-08-04 11:46:42 -07:00
Ryan Dahl
7db5c8a10d Fix toString('base64') bug
Thanks to Stepan Stolyarov for the test case.
2010-08-04 11:38:48 -07:00
Samuel Shull
24c6d26cca Add node_version.h to install 2010-08-04 10:54:02 -07:00
Ryan Dahl
adec544fdd Revert "Expose the V8 debug object process.debug"
This reverts commit d9fbb8a580.
2010-08-04 10:38:19 -07:00
Ryan Dahl
31b59400f8 Allow null context in Script 2010-08-04 10:20:40 -07:00
isaacs
1a1214866f SetBlocking should set blocking, not toggle it 2010-08-04 09:58:56 -07:00
isaacs
e9aacd40c6 When the parent's stdio FDs are passed to a child, make them temporarily blocking.
Many programs do not handle non-blocking stdio very well.  In particular,
man and less have serious problems with this, and since stdout isn't being
flushed after each write, the output jumps about on the screen as you page
down.  Programs that do use non-blocking stdio will set that flag themselves
(as node does).

This puts the stdio file descriptors into blocking mode before sharing them
with the child process, so that one could spawn a vim subprocess, or some
other program that depends on blocking IO.
2010-08-03 18:11:43 -07:00
Ryan Dahl
a6bc68a83b Upgrade V8 to 2.3.4 2010-08-03 10:33:16 -07:00
Ben Noordhuis
4b19bd2896 Client.onend: Anticipate that the HTTP parser object is uninitialized when the client setup failed. 2010-08-02 11:25:53 -07:00
Ryan Dahl
d9fbb8a580 Expose the V8 debug object process.debug
Add one duplicate test from V8, just to make sure it works.
2010-08-02 00:46:09 -07:00
Mikeal Rogers
3214116be6 Implement keep-alive for http.Client
Send the 'Connection: keep-alive' header in your request to enable.
2010-08-01 22:34:17 -07:00
Brian
71009ad3fe Allow signals to be used with process.on in addition to process.addListener. 2010-08-01 20:23:03 -07:00
isaacs
65037eeb32 Don't let path.normalize get above the root.
Any path.join or path.normalize that starts with a / will not go "above" that after normalization.  This is important because /../foo is almost *always* some sort of error, and doesn't match the corollary in sh: `cd $p; pwd`

At the worse, this can be a vector for exploits, since a static file server might do path.join(docroot, path.normalize("/"+req)) to get the file.  If the normalized request path could be something like "/../../../etc/passwd" then bad things could happen.
2010-08-01 20:20:17 -07:00
Danny Coates
dc8c079d90 remove node::CheckBreak in favor of using the v8 debugger js object 2010-08-01 20:04:31 -07:00
Ryan Dahl
e59b3f0eb3 Upgrade http-parser for clang compat 2010-07-31 14:32:59 -07:00
Ryan Dahl
b2a2bb736b [v8] Remove global.print from v8natives.js (fixes issue 791)
Review URL: http://codereview.chromium.org/3045016
2010-07-30 12:20:32 -07:00
Ryan Dahl
c38dd24dc5 Fix style 2010-07-30 10:54:43 -07:00
Ben Noordhuis
f72ac17c89 Buffer: graciously handle padding in base64-encoded input. 2010-07-30 10:49:00 -07:00
Ryan Dahl
cf49fc7bfe Fix email address in AUTHORS file 2010-07-30 09:42:36 -07:00
Ryan Dahl
f291fbc8a7 Fix ending \0 in base64 decoding 2010-07-29 14:52:40 -07:00
Ben Noordhuis
95638c9b0d Buffer: adjust buffer size so the base64-decoded input fits snugly.
Stops Valgrind from complaining about uninitialized memory access.
2010-07-28 11:37:23 -07:00
Ryan Dahl
b5b83b210b Fix --debug-brk; hacky solution 2010-07-27 20:36:58 -07:00
Ryan Dahl
505178d82b Add todos 2010-07-27 12:19:08 -07:00
Ryan Dahl
8052dd0022 Clarify string encoding docs 2010-07-27 12:16:48 -07:00
Ryan Dahl
5459e5c606 Globalize the Buffer object 2010-07-27 10:58:45 -07:00
Ryan Dahl
b3c0359b56 Only one line break before stacktrace 2010-07-26 19:08:21 -07:00
Ryan Dahl
d489555553 Use kqueue on recent macintosh builds 2010-07-26 19:07:31 -07:00
Matt Ranney
f7c5334195 Check for socket on Unix domain connect.
Change scope to context in REPL docs.
2010-07-26 19:02:15 -07:00
Ryan Dahl
23cf556c6c Upgrade http-parser
support for
- long messages
- spaces in header fields
2010-07-26 15:02:20 -07:00
Ryan Dahl
552cf28260 Upgrade V8 to 2.3.3 2010-07-26 14:26:42 -07:00
Benjamin Kramer
eeaf1ef970 Constify read-only global data
Also silences a compiler warning about deprecated conversion from const
char* to char*.
2010-07-26 22:14:39 +02:00
Benjamin Kramer
93cb09642d Add missing parentheses
& has higher precedence than ==, making this a noop. Use the less
error-prone S_IS* macros instead. Found by clang.
2010-07-26 22:14:10 +02:00
Benjamin Kramer
eeb54c63d8 Fix addrlen for unix_dgram sockets
The old definition was off by one byte on BSD. Also simplify
ADDRESS_TO_JS because sun_path is always zero-terminated now.
2010-07-26 22:13:49 +02:00
Ryan Dahl
28db0c2562 Add write() callback TODO item 2010-07-26 12:42:59 -07:00
Chandra Sekar S
66deea10c7 Support for HOME and END in REPL. 2010-07-26 10:59:34 -07:00
Ryan Dahl
6fdb874e2e Fix DNS example in docs 2010-07-26 10:35:45 -07:00
Ryan Dahl
2a4568c85f bump version 2010-07-25 23:39:58 -07:00
Ryan Dahl
402bcb83bc Add reference to base64 encoding 2010-07-25 23:21:39 -07:00
Dmitry Baranovskiy
8ab3c3e7c3 Added ability to pass offset to buffer write and toString methods as a string, i.e. '2' and encoding as anything 2010-07-25 20:16:37 -07:00
Dmitry Baranovskiy
a585c5bbb3 Fixed format, so it wouldn’t blow up if %d argument is null or undefined + ensure that numbers will be numbers 2010-07-25 20:14:12 -07:00
Ryan Dahl
2c1ca4078d Implement buffer.write for base64
There might be an off-by-one on the returned value.
2010-07-23 16:36:52 -07:00
Ryan Dahl
528015e0d8 Implement buffer.toString('base64') 2010-07-23 13:52:44 -07:00
Ryan Dahl
138593b156 Fix case in docs 2010-07-23 12:14:51 -07:00
isaacs
f0f247d7e5 Fix dirname so that dirname('/a/b/') -> '/a', like sh's does.
Before there was this comment:
  Can't strip trailing slashes since module.js incorrectly
  thinks dirname('/a/b/') should yield '/a/b' instead of '/a'.
But now, such thinking is corrected.
2010-07-23 09:08:49 -07:00
Andrew Naylor
e0d6f14b22 Buffer for Cipher, Decipher, Hmac, Sign and Verify 2010-07-23 09:08:30 -07:00
Ryan Dahl
cb97cdb256 Remove Werror from SConstruct 2010-07-21 12:43:19 -07:00
Ryan Dahl
e4eeaa7fbc Upgrade V8 to 2.3.2 2010-07-21 12:31:46 -07:00
Ryan Dahl
07ab34cd58 TODO items 2010-07-21 11:44:47 -07:00
Chandra Sekar S
f5f7cb9264 Support for reading byte ranges from files using fs.createReadStream. 2010-07-21 11:33:35 -07:00
Peter Griess
56f200af5d Fix Buffer.toString() on 0-length slices.
- Buffer.toString('ascii', 0, 0) incorrectly returns the entire contents
  of the buffer. Fix this.
- Provide similar behavior to Buffer.write() and Buffer.copy() when
  dealing with 0-length in valid and invalid byte ranges.
2010-07-20 15:38:10 -07:00
Sam Shull
8acea2693d Add parenthesis to NODE_VERSION_AT_LEAST 2010-07-20 12:41:39 -07:00
Robert Keizer
5ebf6049d0 Added process.binding('stdio').getRows() 2010-07-20 12:38:03 -07:00
isaacs
d75b63bc3c Support including modules that don't have an extension.
This way, require("/foo") will work if there is a "foo.js", or a file named
simply "foo" with no extension.
2010-07-20 10:26:24 -07:00
Ryan Dahl
7067a7155f Specify env differently in execFile
Callbacks should always be the last argument.
2010-07-19 20:08:35 -07:00
Brian
352b8c3ad5 Consistency changes in api docs 2010-07-19 14:18:55 -07:00
isaacs
49e0f14a2f Cache modules based on filename rather than ID
This is ever so slightly less efficient than caching based on ID, since the
filename has to be looked up before we can check the cache.  However, it's
the most minimal approach possible to get this change in place.  Since
require() is a blocking startup-time operation anyway, a bit of slowness is
not a huge problem.

A test involving require.paths modification and absolute loading. Here's the
gist of it.

Files: /p1/foo.js /p2/foo.js

  1. Add "/p1" to require.paths.
  2. foo1 = require("foo")
  3. assert foo1 === require("/p1/foo") (fail)
  4. Remove /p1 from require.paths.
  5. Add /p2 to require.paths.
  6. foo2 = require("foo")
  7. assert foo1 !== foo2 (fail)
  8. assert foo2 === require("/p2/foo") (fail)

It's an edge case, but it affects how dependencies are mapped by npm.
If your module requires foo-1.2.3, and my module requires foo-2.3.4,
then you should expect to have require("foo") give you foo-1.2.3, and
I should expect require("foo") to give me foo-2.3.4.  However, with
module ID based caching, if your code loads *first*, then your "foo"
is THE "foo", so I'll get your version instead of mine.

It hasn't yet been a problem, but only because there are so few
modules, and everyone pretty much uses the latest version all the
time.  But as things start to get to the 1.x and 2.x versions, it'll
be an issue, I'm sure.  Dependency hell isn't fun, so this is a way to
avoid it before it strikes.
2010-07-19 14:17:22 -07:00
Peter Griess
a9d8cac4b0 Document setuid/setgid sync resolution capability. 2010-07-19 11:47:25 -07:00
Micheil Smith
299671b731 querystring: Removing typecasting of numeric strings to numbers
The tests did not accurately test for a strict equality, meaning that the
number == to the string.
2010-07-19 11:07:08 -07:00
Jan Kassens
f18d9d8466 querystring.js: JSLint warnings fixed 2010-07-19 10:54:50 -07:00
Jan Kassens
c7e0c64506 querystring doc fix 2010-07-19 10:53:54 -07:00
Jan Kassens
bb2acd5e75 querystring.stringify is now more solid
* handles NaN and Infinity
* works with arrays from other contexts
2010-07-19 10:53:32 -07:00
Ryan Dahl
eda1edd07f Add todo item 2010-07-19 10:35:59 -07:00
Ryan Dahl
9a26946aaa Fix for issue #214 2010-07-19 10:32:56 -07:00
Benjamin Fritsch
0ed3532699 added test for Issue #214 2010-07-19 10:16:31 -07:00
Ryan Dahl
65f2e72d77 Fix style in readline 2010-07-19 10:16:20 -07:00
Jérémy Lal
0fd1656d63 Support DEL in the REPL. 2010-07-18 22:20:23 -07:00
Ryan Dahl
02746eddd6 Apple's SUN_LEN is broken, override 2010-07-17 23:26:58 -07:00
Ryan Dahl
341e41726f Set SO_REUSEADDR on all sockets 2010-07-17 23:10:38 -07:00
Ryan Dahl
11a784d6da Upgrade http-parser 2010-07-17 01:22:16 -07:00
Ryan Dahl
fa344d8514 Fix solaris build 2010-07-16 23:24:08 -07:00
Ryan Dahl
0174ceb6b2 bump version 2010-07-16 21:50:26 -07:00
Ryan Dahl
458bbb4687 fs.writeSync should return bytes written 2010-07-16 19:05:28 -07:00
Marco Rogers
1662c37c40 Fix console formatter to recognize json properly 2010-07-15 23:36:35 -07:00
Ryan Dahl
dcd41ca864 Upgrade V8 to 2.3.0 2010-07-15 18:52:48 -07:00
Сергей Крыжановский
078a48a97b added env to child_process.exec 2010-07-15 17:17:03 -07:00
Matt Ranney
98341daee2 Fix unix dgram socket address resolution on Linux. 2010-07-15 16:46:46 -07:00
Ryan Dahl
02729d4af7 instanceof Buffer to Buffer.isBuffer() 2010-07-15 15:58:35 -07:00
Ryan Dahl
6961bc568f More instanceof Array fixes 2010-07-15 14:37:56 -07:00
Ryan Dahl
bd05d83ae7 Update TODO 2010-07-15 14:21:35 -07:00
Ryan Dahl
c926ab7746 Fix test-executable-path.js
Now that process.version doesn't say if the build is debug or not.
2010-07-15 14:21:32 -07:00
Ryan Dahl
8921bf454d Remove race conditions and simplify test-http-exceptions.js 2010-07-15 14:21:32 -07:00
Ryan Dahl
4c6f4dabf5 Adjust tests for error reporting on JSON.parse(undefined)
The V8 upgrade changed the stacktrace reports (?)
2010-07-15 14:21:32 -07:00
Ryan Dahl
9fd5e3c89c Update tests to work with module contexts 2010-07-15 14:21:31 -07:00
Ryan Dahl
9472812569 Fix reference to root global context 2010-07-15 10:52:31 -07:00
Ryan Dahl
ddad872020 Add TODO list 2010-07-15 10:36:35 -07:00
Ryan Dahl
6a57a42109 Use Array.isArray instead of instanceof 2010-07-15 10:35:29 -07:00
Ryan Dahl
3a00470dbb Add 'root' global variable as reference to sandbox 2010-07-15 10:35:29 -07:00
Ryan Dahl
5f30377bbc Load modules in individual contexts
Add NODE_MODULE_CONTEXTS env var

Only one test was modified to check that this works. NEED to go through all
tests and modify them so that

  NODE_MODULE_CONTEXTS=1 make test

passes.
2010-07-15 10:34:39 -07:00
Matt Ranney
4e50197e53 Datagram socket refactor. Add tests and documentation.
Support setTTL() and setBroadcast() socket options.
2010-07-15 10:27:44 -07:00
Peter Griess
e7c4f8cdaa Buffer.copy() should liberally allow empty copies. 2010-07-15 10:20:42 -07:00
Peter Griess
b64a521d66 Buffer('') should create a 0-length buffer 2010-07-15 09:54:53 -07:00
Ryan Dahl
8e2530c320 Upgrade V8 to 2.2.24 2010-07-14 11:16:20 -07:00
Paul Querna
870aa3d97f Move evals to extension module. 2010-07-14 10:55:07 -07:00
Paul Querna
ace2be8aa6 Move the Stat structure functions to node_file.cc
from node.cc, so we can convert fs to a module.
2010-07-14 10:42:32 -07:00
Paul Querna
82daa46e26 Move Buffer to extension model. 2010-07-14 10:37:24 -07:00
Paul Querna
4f7f43762d Move child process to extension model. 2010-07-14 10:36:52 -07:00
Paul Querna
e65c27062f Move http parser to extension model. 2010-07-14 10:36:24 -07:00
Paul Querna
e51aef7f3c Move signal_watcher to extension model. 2010-07-14 10:31:45 -07:00
Paul Querna
208290b524 Move cares to extension model 2010-07-14 10:31:20 -07:00
Paul Querna
e5bb8abc9d Move stdio to extension model. 2010-07-14 10:29:56 -07:00
Paul Querna
8dbfe5ea8f Use the top level check for the bindings cache
(rather than each potential module having its own if check)
2010-07-14 10:23:24 -07:00
Paul Querna
30dadfc033 Register builtin extensions via a macro, rather than a manual strcmp
Set the stage for making the builtin modules more dynamic.

Note: this only converts crypto and net, I will add more extensions in a
later commit.

* node.h: Add utility macro for converting macro values to strings.

* node.h: Include the actual module name inside the module structure, not
  just the file it was built from.

* node.h: New Macro, NODE_MODULE_DECL, for declaring an external reference
  to a module structure.

* node_extensions.cc: New File, implements get_builtin_module, which
  iterates over the module structures that are compiled into node.

* node.cc(node::Binding): Use the new module lookup function to find
  modules.

* node_{net,crypto}.c: Add NODE_MODULEs to generate the module structure.
2010-07-14 10:17:25 -07:00
isaacs
781d51285d Use execPath for default NODE_PATH, not installPrefix 2010-07-14 09:58:18 -07:00
Jérémy Lal
fb645f75fb Update ronnjs (fix rendering of html self-closing tags) 2010-07-14 09:52:59 -07:00
Ryan Dahl
50c38dec70 Update README, remove ref to Ronn 2010-07-14 09:50:17 -07:00
Mikeal Rogers
16cb45103f Adds "pause" and "resume" events to pump and it's readable argument. 2010-07-13 17:17:20 -07:00
David Siegel
2085909aeb fix corner-case bug in Module
and added a test to expose it
2010-07-13 17:15:10 -07:00
Ryan Dahl
6bf294d71a JSON is %j not %f 2010-07-13 10:16:33 -07:00
Paul Querna
367b87d26d Add support for the module structure to process.dlopen. 2010-07-13 07:08:08 -07:00
Paul Querna
49066042a2 Add basic structure and macros for node modules. 2010-07-13 06:59:53 -07:00
Paul Querna
480164f923 Move node version to a single static header file.
Some compile time variables like the cflags and prefix have been moved to
the node_config.h.in, in the anticipation that they will be removed at
somepoint.
2010-07-13 06:39:47 -07:00
Peter Griess
99a5d1e293 Free kbuf[] in Verify::VerifyFinal(). 2010-07-12 16:37:35 -07:00
Peter Griess
ac2404283e Coverity stack size warnings in DefineConstants(). 2010-07-12 16:37:17 -07:00
rick
c9e505791a use delete for removing events after removing the final listener 2010-07-12 16:29:58 -07:00
Jérémy Lal
abd3f8a02a make node.1 depend on make all 2010-07-12 16:29:42 -07:00
Jérémy Lal
4be4b5f6f4 lib/node, not lib/nodejs ! 2010-07-12 15:23:10 -07:00
Brian
554b02a14c Improve docs
Added default values for many parameters, missing properties and methods,
and slight reorganization of the Child Process section.
2010-07-12 14:23:35 -07:00
Ryan Dahl
d700a6f74a Return child from execFile 2010-07-12 14:18:09 -07:00
Peter Griess
7a706e4206 Coverity fixes: src/platform_linux.cc 2010-07-12 13:20:31 -07:00
Peter Griess
6eb0b6ac27 Coverity fixes: src/node_net 2010-07-12 13:20:31 -07:00
Peter Griess
760fb17bbf Coverity fixes: src/node_file 2010-07-12 13:20:31 -07:00
Peter Griess
792c7caf40 Coverity fixes: src/node_crypto 2010-07-12 13:20:31 -07:00
Peter Griess
4e3c5d88b3 Coverity fixes: src/node.cc 2010-07-12 13:20:26 -07:00
Adam Wiggins
c8dba94ff6 docs for dgram module (UDP and unix sockets) 2010-07-12 11:18:52 -07:00
Jérémy Lal
a7763d55e4 Fix spelling error 2010-07-12 10:35:35 -07:00
Jérémy Lal
2b8a9a8358 Use ronnjs 0.2 to generate docs. Small cosmetic change. 2010-07-12 10:24:09 -07:00
Jérémy Lal
a7e1efc5bd Environment variables NODE_PREFIX, NODE_PATH in node-waf
Those variables have following defaults :
 - NODE_PREFIX is relative to the current path of the node_addon.py file
   It is used as the base path of node include files.
 - NODE_PATH is ~/.node_libraries
   It's where modules are installed when calling `node-waf install`
   Note .js files must be explicitely installed by the module's wscript.

Usage :
NODE_PREFIX=/usr/local NODE_PATH=~/.node_libraries node-waf configure
2010-07-12 07:46:45 -07:00
Ryan Dahl
b1901cd5a5 hack fix to v8 2.2.23 2010-07-07 20:10:01 +02:00
Ryan Dahl
facb904c5d Upgrade V8 to 2.2.23 2010-07-07 19:47:38 +02:00
Dmitriy Shalashov
70a8fb3763 Fix headers with empty value. 2010-07-07 18:46:24 +02:00
Brian
1191ca052f Fix docs
Added consistency to the representation of optional parameters and separated
out multiple functions that were in a single heading.
2010-07-07 16:49:04 +02:00
Jerome Etienne
8e9f59a452 Support of console.dir + console.assert 2010-07-07 16:48:59 +02:00
Ryan Dahl
0bceaaa3d4 Fix addon example in docs 2010-07-07 16:48:53 +02:00
Ryan Dahl
3d948d85ce Remove a bunch of useless waf files 2010-07-04 04:16:55 +02:00
Ryan Dahl
0315251d01 Use 'on' in the docs 2010-07-03 10:54:35 +02:00
Ryan Dahl
515dc2161b Experimental: 'on' as alias to 'addListener' 2010-07-03 09:30:32 +02:00
Ryan Dahl
a6b8586e94 bump version 2010-07-03 08:37:46 +02:00
Ryan Dahl
2072925f12 Upgrade V8 to 2.2.21 2010-07-03 08:37:05 +02:00
Peter Griess
94cd83ef34 Doc fixes for FD related features, upgrade.
- Add docs for 'fd' events, Server.listenFD(), Stream.write(...[, fd])
  and http.Client 'upgrade' event.
2010-07-03 08:18:42 +02:00
Ryan Dahl
82ce3481fe Fix undefined_reference_in_new_context test 2010-07-03 08:16:36 +02:00
Ryan Dahl
192234c689 Remove unnecessary defines in node_events.cc 2010-07-01 23:36:56 -07:00
Ryan Dahl
2998e3bafa Add my awk script to update AUTHORS file 2010-07-01 14:31:42 -07:00
Ryan Dahl
24de2bd58c Amend .gitignore 2010-07-01 14:29:50 -07:00
Ryan Dahl
8a52fb7aeb Revert "Fix 'uncaughtException' for top level exceptions"
This reverts commit 8f8dcf8ed6.
2010-07-01 11:10:22 -07:00
Ryan Dahl
8f8dcf8ed6 Fix 'uncaughtException' for top level exceptions
Done by not evaluating the code in the first tick.

This breaks one test in test-error-reporting.js but I believe this to be a
V8 error and I have reported it in
http://code.google.com/p/v8/issues/detail?id=764
2010-06-30 15:04:40 -07:00
Ryan Dahl
ce8c30c9de Clean up indention on module compile
Remove strange code artifact
2010-06-30 14:30:37 -07:00
Ryan Dahl
d49d53fd49 Expose new HTTP methods 2010-06-30 00:54:08 -07:00
Blake Mizerany
8c8534046c fix whitespace errors 2010-06-29 23:59:24 -07:00
Dmitry Baranovskiy
f8ca6b383c Rewrote QueryString.parse to make it smaller and more effective.
Also added ability to parse foo.bar=4 equal to foo[bar]=4
Added tests for this as well
2010-06-29 23:52:42 -07:00
Ryan Dahl
0a8bd34b69 Resolve .local domains with getaddrinfo()
C-Ares doesn't go through the Name Service Switch (NSS) and thus can't
resolve certain classes of names. Generally this doesn't matter and the
whole idea of NSS is rather annoying. Nevertheless until C-Ares gets better
support, adding this hack to go through getaddrinfo() for .local domain look
up.

This reverts commit 9926dacd14.
2010-06-29 22:15:28 -07:00
Matt Ranney
02ed0ec93b On overlapping buffers use memmove 2010-06-29 21:06:00 -07:00
Blake Mizerany
898afbaf34 Buffer.prototype.write: Indifferent order preference of encoding and offset 2010-06-29 19:56:07 -07:00
Ryan Dahl
5e86d01385 Revert "Buffer.copy should copy through sourceEnd, as specified."
This reverts commit a2f70da4c9.

Keep tests modifies a few edge checks on Copy()
2010-06-29 19:40:20 -07:00
Ryan Dahl
0172cb39f0 Fix incorrect output on docs 2010-06-29 19:28:59 -07:00
Dmitry Baranovskiy
8ec12339f5 Refactored isA, isBool, etc functions to use some of ES5 goodness. 2010-06-29 19:22:28 -07:00
Dmitry Baranovskiy
d3f04933f1 sys.inherts to shadow constructor property from enumerability
thanks to ES5 features in V8 it is quite easily possible.
2010-06-29 19:11:40 -07:00
Ryan Dahl
6b430a95c9 console.log: if not string, coerce into one 2010-06-29 09:53:20 -07:00
Ryan Dahl
5aadeae888 Simply C++ event emitter 2010-06-28 21:20:21 -07:00
Ryan Dahl
b69c6a03b1 If not string, console.log should just print it without trying to format 2010-06-28 21:20:21 -07:00
Ryan Dahl
c9e12204a2 Stub out console.log format strings, info, warn, error 2010-06-28 20:47:35 -07:00
Ryan Dahl
23172c5d85 Lint node_script.cc 2010-06-28 19:37:50 -07:00
Ryan Dahl
e2db605308 Use EVBACKEND_POLL on Solaris; select() is just a wrapper anyway 2010-06-28 15:37:29 -07:00
Ruben Rodriguez
242161bef2 Added new API to Script, and implemented it in the REPL 2010-06-28 15:16:26 -07:00
Ryan Dahl
5a25338ac0 Upgrade V8 to 2.2.20 2010-06-28 08:47:01 -07:00
Rasmus Andersson
67f7fe5e5c Use all available CPUs when building
Automatically set Options.options.jobs to the number of CPUs/cores on the
executing machine, unless the environment variable JOBS is set
2010-06-27 08:49:06 -07:00
Ryan Dahl
bbdd61dc3f Fix supported archs on website 2010-06-25 09:46:10 -07:00
Matt Ranney
a2f70da4c9 Buffer.copy should copy through sourceEnd, as specified.
Improve test-buffer.js to cover all copy error cases.

Fix off by one error in string_decoder.
2010-06-25 09:10:49 -07:00
Ryan Dahl
aa491518f4 Fix authors 2010-06-24 14:37:55 -07:00
Ryan Dahl
444b33584d Remove switch-replace residue 2010-06-24 09:37:36 -07:00
Ryan Dahl
0499618c2b Edit binary encoding docs 2010-06-24 07:51:45 -07:00
Ryan Dahl
8825c74e7a Upgrade http-parser 2010-06-23 21:10:13 -07:00
Ryan Dahl
2c0d91be6c Upgrade V8 to 2.2.19 2010-06-23 20:32:06 -07:00
Ryan Dahl
ba792ea202 :%s/sys.puts/console.log/g
and there was much rejoicing
2010-06-23 20:05:29 -07:00
Ryan Dahl
4c21aa736f Fix name in AUTHORS file 2010-06-23 15:27:56 -07:00
Ryan Dahl
7b119f8b38 Fix error message 2010-06-23 09:09:15 -07:00
Ryan Dahl
f541043618 Remove ini.js 2010-06-22 19:37:29 -07:00
Ryan Dahl
fc175a089d Remove mjsunit from repo 2010-06-22 19:33:01 -07:00
Mikeal Rogers
f62979da6b Add sys.pump 2010-06-22 17:58:09 -07:00
Ryan Dahl
20905d9d62 Fix names in AUTHORS file 2010-06-22 13:23:45 -07:00
Ryan Dahl
1b5ec7017d Don't use NULL in realpath() on darwin, doesn't work in older versions
Thanks to Peter Griess <pg@std.in> for the bug report.
2010-06-22 13:19:49 -07:00
Ryan Dahl
7105aeb22f Doc process.execPath 2010-06-22 02:09:58 -07:00
Marshall Culpepper
ca35ba640a Initial implementation of process.execPath
Darwin, Linux, Solaris. FreeBSD still needs testing.

TODO: Amend the tests where we use spawn with argv[0].
2010-06-22 02:02:25 -07:00
Ryan Dahl
95b252e86d Fix bad email addresses in authors file 2010-06-21 20:41:53 -07:00
Ryan Dahl
a8e9923b44 Add Contributor License Agreement. 2010-06-21 19:40:22 -07:00
Ryan Dahl
9bb890271b Add other OSes to website 2010-06-21 17:03:19 -07:00
Ryan Dahl
a620b7298f bump version 2010-06-21 13:34:10 -07:00
Peter Griess
51bd1b4483 Only concatenate some incoming HTTP headers.
- Concatenate 'accept', 'accept-charset', 'accept-encoding',
  'accept-language', 'connection', 'cookie', and 'x-*' headers.
- For all others, drop duplicates.
2010-06-21 12:01:50 -07:00
Ryan Dahl
545e10f239 wscript shouldn't fail if 'git describe' doesn't work 2010-06-21 10:21:55 -07:00
Ryan Dahl
cb79614f73 Don't encourage strange ideas about req race conditions 2010-06-20 11:56:48 -07:00
Ryan Dahl
eda21cccb4 Fix race condition in test-http-exceptions.js 2010-06-19 23:13:28 -07:00
Ryan Dahl
b93faf9afa Comment out lines with full paths in message test.
Note that * in the .out files is a special wildcard.
2010-06-19 22:51:40 -07:00
Ryan Dahl
1c7057f09c Execute message tests by default 2010-06-19 20:30:49 -07:00
Ryan Dahl
f1a4f17897 script.runIn*Context not throwing errors properly. 2010-06-19 19:31:09 -07:00
Ryan Dahl
7d0252eae2 Fix message tests 2010-06-19 17:41:34 -07:00
Ryan Dahl
125b868e06 Add message tests 2010-06-18 18:14:06 -07:00
Micheil Smith
70c3e661b8 test-child-process-custom-fds to cleanup after running 2010-06-18 10:39:17 -07:00
Micheil Smith
e0d30b545a Renaming tcp tests to net tests 2010-06-18 10:34:56 -07:00
Micheil Smith
3f48276bf9 Coding style changes, added tests in for the md5, sha256, etc methods 2010-06-18 10:21:38 -07:00
Ryan Dahl
9bd3942f70 Add platform_none for cygwin build 2010-06-18 09:46:18 -07:00
Ryan Dahl
84c10265db Fix platform_linux.cc, missing include 2010-06-17 18:36:31 -07:00
Ryan Dahl
01a8d270cf Add platform files, move getmem to node::OS class. 2010-06-17 18:23:43 -07:00
Ryan Dahl
964ed9739b Fix text about threads on homepage 2010-06-17 15:38:02 -07:00
Ryan Dahl
1c6671aa67 Upgrade V8 to 2.2.18 2010-06-16 11:46:01 -07:00
Peter Griess
187f191558 Support 'upgrade' event in HTTP client.
- Add a unit test for client HTTP upgrade.
- Move around unit tests for server HTTP upgrade.
2010-06-16 11:27:56 -07:00
Ryan Dahl
cbf2a2233e Add callback to dgramSocket.send() 2010-06-16 11:03:34 -07:00
David Siegel
81ad8106dc Add UDP broadcast support 2010-06-16 10:45:16 -07:00
Ryan Dahl
cf86527a28 Fix writeFile(buffer) test 2010-06-16 10:28:46 -07:00
Micheil Smith
b05daaaf69 Adding path.existsSync (with tests.) 2010-06-16 10:26:11 -07:00
isaacs
73f207fe59 Throw exceptions, not strings 2010-06-16 10:11:08 -07:00
Aaron Heckmann
1d088fb906 fs.writeFile accepts Buffers 2010-06-15 23:58:32 -07:00
Ryan Dahl
c2e2479cc5 Fix Linux build 2010-06-15 20:04:29 -07:00
Peter Dekkers
e48f0d1dd9 Fixed incorrect mask for determining fs.Stats types 2010-06-15 19:52:37 -07:00
isaacs
4ce100fa62 A replacement for decodeURIComponent that doesn't throw.
And add a few more tests.
2010-06-15 19:28:09 -07:00
Ryan Dahl
ed5f4f3a44 RootCaCerts shouldn't be global 2010-06-15 18:29:45 -07:00
Ryan Dahl
6bed15e074 Refactor: Utf8Decoder -> StringDecoder
Instead of just decoding Utf8, this will proxy requests to buffer.toString()
for other encodings. This makes for a simpler interface.
2010-06-15 18:19:27 -07:00
Peter Griess
4b48042c17 Wrap FD in closure before emitting from Stream.
- Without this, recvMsg can be invoked before the event emitter gets a
  chance to run. In this case, recvMsg.fd will be overwritten and the
  original caller can end up emitting null.
2010-06-15 15:10:30 -07:00
Ryan Dahl
bc76624ec7 Upgrade V8 to 2.2.17 2010-06-15 14:52:00 -07:00
Ben Lowery
f3cd7bbe77 Coerce each argument to a String before attempting to print it via sys.print 2010-06-15 14:44:09 -07:00
Ryan Dahl
459440842f More lint on node_crypto 2010-06-15 13:36:01 -07:00
Ryan Dahl
9854216d36 Fix a bunch of memory leaks in node_crypto 2010-06-15 13:31:59 -07:00
Ryan Dahl
5bc00abed7 Lint node_crypto.cc 2010-06-15 13:16:20 -07:00
Ryan Dahl
5f88097eb4 Remove unused code from node_crypto 2010-06-15 12:41:14 -07:00
Ryan Dahl
14414f81f3 Soft deprecation of 'listening' event.
Add callback param to listen() instead
2010-06-15 12:38:25 -07:00
Peter Griess
c9dde726c6 Test case for net.Server.listenFD() 2010-06-15 11:44:33 -07:00
isaacs
1ffdad010b Expose the FD numbers for stdin and stderr on process.binding("stdio") 2010-06-14 15:10:00 -07:00
Ryan Dahl
d6072766ed Fix memory leak in hash.update() 2010-06-14 14:38:40 -07:00
Ryan Dahl
009b4569b3 Merge Hash.init() function into JS constructor 2010-06-14 13:10:23 -07:00
Felix Geisendörfer
5f3906b65e Fix: fs.writeFile could not handle utf8 2010-06-14 10:58:17 -07:00
Paul Querna
02da5ed4a1 Implement datagram sockets
- Adds new dgram module, for all data-gram type transports
- Supports both UDP client and servers
- Supports Unix Daemon sockets in DGRAM mode too (think syslog)
- Uses a shared Buffer and slices that as needed to be reasonably
  performant.
- One supplied test program so far, test-dgram-pingpong
- Passes test cases on osx 10.6 and ubuntu 9.10u
2010-06-12 02:41:45 -07:00
isaacs
e65e6039a8 Fix #169. Expose require members in the repl.
This fixes #169 by putting the require members onto the cwdRequire function
which is exposed to the repl scope.
2010-06-11 14:04:58 -07:00
Brian McKenna
431e72cbe8 Make addon building work for Cygwin. 2010-06-11 13:25:03 -07:00
isaacs
94be898fbc Remove "uri" module.
The deprecation warning was broken, so clearly no one is using this thing.
2010-06-11 13:19:50 -07:00
Ryan Dahl
4e80587cbe Add Orlando to changelog 2010-06-11 13:16:08 -07:00
Ryan Dahl
10d8adb089 bump version 2010-06-11 12:58:14 -07:00
Ryan Dahl
9c85357846 Upgrade C-Ares to 1.7.3 2010-06-11 12:48:58 -07:00
Ryan Dahl
d127d15d1b License file maintenance.
- reference to OpenSSL
- note about http-parser
2010-06-11 12:48:25 -07:00
Matt Ranney
cbd1f1481c Remove setTimeout from initial example and description. 2010-06-10 23:55:46 -07:00
Ryan Dahl
fe89caba2e Improve fs.write tests 2010-06-10 15:17:46 -07:00
Ryan Dahl
0e390d69a8 Don't use bzero 2010-06-10 07:58:24 -07:00
Jérémy Lal
ce347124e6 The underscores are not meant to emphasize. Escape them. 2010-06-10 07:15:27 -07:00
Raffaele Sena
b3b81d67ff Port to cygwin 2010-06-09 15:08:46 -07:00
Ryan Dahl
cd232a9cce Upgrade V8 to 2.2.16 2010-06-09 10:09:37 -07:00
Matt Ranney
cec775a0de Web site example fixes. 2010-06-09 00:52:28 -07:00
Ryan Dahl
0bb47b6c97 Upgrade V8 to 2.2.15 2010-06-09 00:52:06 -07:00
Peter Griess
de6d663a67 Add 'type' parameter to net.Server.listenFD()
This is needed in case the provided socket is not the default 'tcp4' type
(i.e. and needs different read/write/etc methods). With this patch, one can
call listenFD(sock, 'unix') to bind to existing UNIX domain sockets.
2010-06-08 18:09:17 -07:00
Ryan Dahl
bca16a0581 Handle ctrl+z from readline 2010-06-08 17:49:22 -07:00
Ryan Dahl
adc06dd705 Add NODE_NO_READLINE check for REPL
Setting this environmental variable to a non-zero integer will start all
REPL interfaces without readline. For use with rlwrap.
2010-06-08 15:44:43 -07:00
Ryan Dahl
0377b12964 Use strings instead of buffers in readline
For eventual large character support.
2010-06-08 10:00:43 -07:00
Ryan Dahl
a6942b345d Fix test-repl 2010-06-07 17:39:52 -07:00
Matt Ranney
09af242c89 Support more readline navigation keys. 2010-06-07 16:51:07 -07:00
Ryan Dahl
0c3b6aba7a Do not output \n on stderr on output, breaks tests 2010-06-07 16:23:48 -07:00
Ryan Dahl
6056d2ea2c node without arguments starts the REPL 2010-06-07 16:15:41 -07:00
Ryan Dahl
e43d6fc879 Fix misspelling 2010-06-07 16:03:57 -07:00
Ryan Dahl
41f213be18 Add binding to termios, implement readline for repl 2010-06-07 15:24:21 -07:00
Peter Griess
a0134ff0f8 add net.Server.listenFD
Now that FD passing is in master, it'd be great to be able to use a received
socket (which has already had bind(2) and listen(2) called on it) to fire up a
new net.Server instance. This patch adds a net.Server.listenFD() method which
will start up the accept watcher on the provided FD.
2010-06-07 10:13:30 -07:00
Ryan Dahl
9be6c501ec Upgrade http-parser 2010-06-06 17:41:03 -07:00
Ryan Dahl
935f8437fd Allow ObjectWrap destructors before Wrap() 2010-06-04 14:30:59 -07:00
Ryan Dahl
9e8df0e836 More dynamic linking options (again)
Original commit: 75f0cf471a
2010-06-04 11:42:34 -07:00
Peter Griess
78d33f4fd5 Fix options parsing
The current node has a bug where it will fail to pass the option argument
immediately preceding the first non-option argument to V8. That is the
--perf flag will be ignored by V8 when running 'node --perf script.js'.
2010-06-04 08:29:10 -07:00
Ryan Dahl
0055dd133d Apply fix for V8 bug 728 2010-06-03 18:50:44 -07:00
Ryan Dahl
3104662bab Use a less common port in docs 2010-06-03 18:45:35 -07:00
Ryan Dahl
62d9bff06b Fix ability to disable TCP timeouts with setTimeout(0) 2010-06-03 11:01:47 -07:00
Felix Geisendörfer
987cbe35c6 Fix: require.async module exception delegation
The fs.readFile bug was hiding another bug that was causing this test
to pass, even so it was broken:

require.async("../fixtures/throws_error1") in test-module-loading.js

This patch fixes the original test by running _compile within a
try..catch block for _loadScript.

_loadScriptSync also had some useless (deprecated?) code for dealing
with module entry point exceptions. This code was also removed for
greater clarity.
2010-06-03 09:59:56 -07:00
Felix Geisendörfer
55e964ec19 Fix: fs.readFile would execute callbacks twice
fs.readFile was executing a callback in a try..catch context, which is
a problem in itself. To make matters worse, it would re-execute the
same callback if there was an execution.

This patch fixes both of these problems.
2010-06-03 09:40:40 -07:00
rentzsch
55d7352189 DOC note stats.isSymbolicLink() is only valid with fs.lstat().
ref: <http://github.com/ry/node/issues#issue/153>
2010-06-03 00:26:23 -07:00
Peter Griess
8f0b4e9111 Send and receive file descriptors through net.Stream.
a) create a layer of indirection in net.Stream to allow swapping in
different read/write implementations and

b) emit an 'fd' event when file descriptors are received over a UNIX pipe,
as finally as a tangential benefit

c) remove a bunch of conditionals from the primary codepaths for
ease-of-reading.
2010-06-02 18:16:53 -07:00
Ryan Dahl
55a6f01732 Server responses should have a body if HEAD request 2010-06-02 15:07:15 -07:00
Ryan Dahl
ef9f4046c9 Better 'make' output
Removes 'make all-debug' since it is unnecessary now.
2010-06-02 13:03:31 -07:00
Orlando Vazquez
92da636b97 Add a parameter to spawn() that sets the child's stdio file descriptors.
After the child is forked, these file descriptors will get dup2()'d to STDIN,
STDIO, and STDERR.

(API may be changed.)
2010-06-02 10:41:24 -07:00
Ryan Dahl
501136b999 Revert "More dynmaic linking options"
Broke the build. Will fix and reapply soon.

This reverts commit 75f0cf471a.
2010-06-02 09:16:28 -07:00
Ryan Dahl
75f0cf471a More dynmaic linking options
This adds the following options to the `configure` program

  --shared-v8           Link to a shared V8 DLL instead of static linking
  --shared-v8-includes=SHARED_V8_INCLUDES
                        Directory containing V8 header files
  --shared-v8-libpath=SHARED_V8_LIBPATH
                        A directory to search for the shared V8 DLL
  --shared-cares        Link to a shared C-Ares DLL instead of static linking
  --shared-cares-includes=SHARED_CARES_INCLUDES
                        Directory containing C-Ares header files
  --shared-cares-libpath=SHARED_CARES_LIBPATH
                        A directory to search for the shared C-Ares DLL
  --shared-libev        Link to a shared libev DLL instead of static linking
  --shared-libev-includes=SHARED_LIBEV_INCLUDES
                        Directory containing libev header files
  --shared-libev-libpath=SHARED_LIBEV_LIBPATH
                        A directory to search for the shared libev DLL

and removes --system.
2010-06-01 20:18:43 -07:00
Ryan Dahl
d62b0f442a Fix style in sys.js 2010-06-01 09:28:56 -07:00
Ryan Dahl
f86a214357 Upgrade to V8 2.2.13 2010-05-31 11:52:20 -07:00
Ryan Dahl
0c1aa36835 bump version 2010-05-29 19:37:57 -07:00
Ryan Dahl
16818ff250 Remove throttling bug notes 2010-05-29 19:37:56 -07:00
Ryan Dahl
1a5acd9850 API: readFileSync without encoding argument now returns a Buffer
Correctly load utf8 data; add a test test-fs-read-file-sync.js
2010-05-29 13:38:00 -07:00
Ryan Dahl
c82d64649c Deprecate the 'ini' module 2010-05-29 13:14:38 -07:00
Ryan Dahl
78e49f1c88 Rename node_net2.cc to node_net.cc 2010-05-29 13:08:05 -07:00
isaacs
a26f7d753d Make require() from the repl be relative to cwd 2010-05-29 12:35:30 -07:00
isaacs
82813f2f8c Execute repl code in new context 2010-05-29 12:33:55 -07:00
isaacs
3c7873bd3f Use duck-typing as well as instanceof in sys.inspect
This makes it so that inspecting objects from other contexts works as expected.
2010-05-29 12:31:46 -07:00
Ryan Dahl
2fa4de001c addons should have debugging symbols 2010-05-29 12:25:28 -07:00
Tim Caswell
b480184fd6 Check for a couple of edge cases on the inspect hook.
Don't treat sys.inspect special, same with prototype objects.
2010-05-28 15:40:25 -07:00
Tim Caswell
7f5320b167 Provide a hook for user-specified inspect functions 2010-05-28 14:29:51 -07:00
Ryan Dahl
80a8e71fe0 Insert some hot paths into HTTP 2010-05-27 20:43:56 -07:00
Ryan Dahl
74b7fa29a1 Refactor HTTP
Allow throttling from outgoing messages.
2010-05-27 20:41:57 -07:00
Ryan Dahl
0e713e7482 :%s/8000/PORT/g for a few tests 2010-05-27 20:41:57 -07:00
Brian White
72262060db Added support for OpenBSD 32-bit for c-ares 2010-05-27 14:02:16 -07:00
Ryan Dahl
8840ce340d Bugfix: fs.ReadStream.setEncoding
Improve test-fs-read-stream test.
2010-05-26 18:33:38 -07:00
Ryan Dahl
31854c7990 Fix Solaris V8 build
Patch submitted to V8: http://codereview.chromium.org/2282003/show
2010-05-26 18:05:44 -07:00
Micheil Smith
d89de07758 Adding experimental support for fs.chown and fs.chownSync.
Notes:
- Currently only accepts numeric user and group ids.
- No tests, as tests depend on getpwuid and getgrgid.
- No documentation, as there is no tests and this is experimental.
2010-05-26 13:37:45 -07:00
Ryan Dahl
29e867aaa0 Simplify a few internal HTTP events. 2010-05-26 13:37:33 -07:00
Ryan Dahl
311a62dea7 Fix JOBS for Solaris make 2010-05-26 13:07:45 -07:00
Ryan Dahl
4b216d266a Remove -Werror from V8 SConstruct 2010-05-26 10:48:20 -07:00
Ryan Dahl
d4345e1ff8 Upgrade V8 to 2.2.12 2010-05-26 10:15:43 -07:00
Sam Hughes
895f89d62a Avoided sending empty chunkedEncoding chunks in the middle of http responses 2010-05-25 22:58:17 -07:00
Ryan Dahl
15ec99ec59 Fix issue 89, parsing responses to HEAD requests
Test from Mark Hansen (mark at markhansen.co.nz)
2010-05-25 19:25:40 -07:00
Ryan Dahl
35c14f637e In HTTP parser, proxy return value of onHeadersComplete 2010-05-25 19:25:38 -07:00
Ryan Dahl
2fca40e44f Upgrade http-parser 2010-05-25 19:25:35 -07:00
Ryan Dahl
e97a481785 Destroy REPL pipes instead of shutting down. 2010-05-24 17:14:13 -07:00
Ryan Dahl
19f475c573 fs.ReadStream should emit Buffers
And do proper utf8 encoding.
2010-05-24 15:47:42 -07:00
Ryan Dahl
3768aaaea4 Create a public Buffer constructor for use in addons. 2010-05-24 13:26:18 -07:00
Aapo Laitinen
c4876d01a1 Change the behavior of path.extname
Make path.extname return an empty string also if:
- The last dot is not in the last path component
- The last dot starts the last path component
2010-05-24 09:56:28 -07:00
Brian White
ab5c0dd63e Port to OpenBSD 2010-05-23 17:08:57 -07:00
Ryan Dahl
0f143f6c23 Upgrade libeio 2010-05-23 17:02:35 -07:00
Ben Noordhuis
b58db3cd73 Added reason phrases for a bunch of HTTP status codes. 2010-05-23 17:02:35 -07:00
Ryan Dahl
1369d606f7 Add bug notes about HTTP streams and throttling 2010-05-22 13:02:30 -07:00
Mikeal Rogers
fe3d8f2411 Add assert.ifError 2010-05-21 12:06:12 -07:00
Ryan Dahl
2b34363d03 Upgrade V8 to 2.2.11 2010-05-21 09:41:50 -07:00
Ryan Dahl
9514a4d547 bump version 2010-05-21 02:55:38 -07:00
Ryan Dahl
0de138acb5 improve test for stdio non-blockingness 2010-05-21 01:22:20 -07:00
Ryan Dahl
f73b6e2190 Fix opposite logic, which coincidentially works 2010-05-20 22:11:26 -07:00
Ryan Dahl
8c56284776 Remove unneeded fd variables in node_stdio.cc 2010-05-20 22:01:13 -07:00
Felix Geisendörfer
c93e0aaf06 Deprecate string interface for fs.read()
This patch makes buffers the preferred output for fs.read() and
fs.readSync(). The old string interface is still supported by
converting buffers to strings dynamically. This allows to remove the
C++ code for string handling which is also part of this patch.
2010-05-20 16:31:18 -07:00
Ryan Dahl
e84395ff8c Revert "Deprecate string interface for fs.read()"
This reverts commit cbbf9e43d1.
2010-05-20 16:11:33 -07:00
Felix Geisendörfer
cbbf9e43d1 Deprecate string interface for fs.read()
This patch makes buffers the preferred output for fs.read() and
fs.readSync(). The old string interface is still supported by
converting buffers to strings dynamically. This allows to remove the
C++ code for string handling which is also part of this patch.
2010-05-20 15:25:49 -07:00
Ryan Dahl
cbd2c3945b Throwing in a callback should kill the process
There is a difference between errors which happen to a socket - like
receiving EPIPE - an exceptional situation but ultimately okay and the
situation where code throws in a callback - which is not okay.

Fixes test/simple/test-http-exceptions.js

TODO: explain this in docs.
2010-05-20 15:23:36 -07:00
rentzsch
36a45c4e0d FIX path.dirname('/tmp') => '/'.
Previously path.dirname('/tmp') incorrectly returned '.'.

Unfortunately module.js incorrectly thinks dirname('/a/b/') should
yield '/a/b', so I can't strip trailing slashes yet. Once module.js
is fixed, then the commented-out code should be activated and a test
written for it.
2010-05-20 10:16:09 -07:00
Ryan Dahl
022c083848 Deprecate sys.p() 2010-05-20 10:12:05 -07:00
Ryan Dahl
44ad6a7db2 Make buffer's c++ constructor public 2010-05-20 09:44:10 -07:00
isaacs
5b740c488f Fix a leaking global 2010-05-20 09:38:25 -07:00
isaacs
78be1e4930 Remove the ReportException from the Script class
This is so that syntax errors can be handled discretely in places like the
repl, where SyntaxErrors are expected and normal.
2010-05-19 15:02:47 -07:00
Ryan Dahl
d8af9d8edf Minor style changes for fs.write code 2010-05-19 14:59:03 -07:00
Felix Geisendörfer
c46cbe0de4 Deprecate string interface for fs.write()
This patch makes buffers the preferred input for fs.write() and
fs.writeSync(). The old string interface is still supported by
converting strings to buffers dynamically. This allows to remove the
C++ code for string handling which is also part of this patch.
2010-05-19 12:53:43 -07:00
Ryan Dahl
c489c2c1b5 Fix api for request.connection 2010-05-19 11:01:21 -07:00
Peter Griess
2420f07e94 Allow process.setuid() and process.setgid() to accept string names in lieu of numeric IDs 2010-05-18 17:41:10 -07:00
Ryan Dahl
2663c69f8d Fix utf8stream references 2010-05-18 09:32:28 -07:00
Felix Geisendörfer
f987ecf45b Use Utf8Stream for http Streams with utf8 encoding 2010-05-18 01:04:39 -07:00
Felix Geisendörfer
ed5f1162fa Use Utf8Stream for net Streams with utf8 encoding 2010-05-18 01:02:15 -07:00
Felix Geisendörfer
caba9c70c3 Implemented Utf8Decoder module
Allows to safely decode a utf8 stream into strings without breaking
on multibyte characters.
2010-05-17 22:12:30 -07:00
Ryan Dahl
e232f09d38 fs.WriteStream.write should support buffer
Also re-adding the callback parameter.
2010-05-17 19:44:14 -07:00
Ryan Dahl
1036aa9762 Fix errno display in c-ares exceptions 2010-05-17 13:58:15 -07:00
Felix Geisendörfer
0a539865dd Support arrays and strings in buffer constructor
This is be very useful for testing code that deals with buffers.
2010-05-17 11:19:14 -07:00
visionmedia
45948e054d Added better error messages for async and sync fs calls with paths 2010-05-14 19:46:16 -07:00
Jonas Pfenniger
53a9869ff7 FIX: EventEmitter#removeAllListeners signature
This function should return this is all cases.
2010-05-14 19:15:07 -07:00
Jonas Pfenniger
fea6f829bf FIX: EventEmitter#removeListener logic
In the case of one defined listener, the function should only remove it
if it is the same as the passed listener.
2010-05-14 19:13:50 -07:00
Jonas Pfenniger
4274e6b7d0 FIX: signal-unregister bug
We now restore the default signal behavior when all listeners are
removed for a given signal.

Re-enabled test-signal-unregister
2010-05-14 19:05:19 -07:00
Jonas Pfenniger
50148022d1 Thinner SignalWatcher, only using callback
Since it is only used internally, we don't need the complexity of
EventEmitter. The new SignalWatcher's design was copied from
IdleWatcher.
2010-05-14 18:57:17 -07:00
Andrew Johnston
9599607065 Added posix fsync and fdatasync to fs module 2010-05-14 18:42:22 -07:00
Ryan Dahl
ac3a2d899a Changes to work on Solaris 10 2010-05-14 16:38:17 -07:00
Ryan Dahl
a9b962a653 Add --without-ssl configure option 2010-05-14 16:34:47 -07:00
Ryan Dahl
0b7bda8f46 Remove some unused cruft from wscript 2010-05-14 16:30:58 -07:00
Ryan Dahl
da9323040f Simplify stack trace reporting using new V8 API 2010-05-14 11:48:14 -07:00
Ryan Dahl
320d3e9d33 Fix AUTHORS file 2010-05-14 11:15:31 -07:00
Matt Ranney
cd4f94e71a Add test for exceptions in HTTP parser event handlers. 2010-05-14 10:16:55 -07:00
Matt Ranney
307e70afaf Remove unused CSS reference. 2010-05-14 10:12:03 -07:00
Matt Ranney
1f0963558c Add process.version description. 2010-05-14 10:11:47 -07:00
Jérémy Lal
4e40e8804b System EV compatibility fix : use EV_DEFAULT_UC 2010-05-13 16:56:13 -07:00
Ryan Dahl
0914d33842 bump version 2010-05-13 16:24:28 -07:00
Ryan Dahl
23d680bb85 Allow parallel jobs to be passed to V8 build
e.g. JOBS=2 make
2010-05-13 16:24:28 -07:00
Ryan Dahl
ce2d5ad0d7 Change the 'make dist' to remove v8 test dir 2010-05-13 15:55:02 -07:00
Elijah Insua
976926376d Handle empty files with fs.readFile 2010-05-13 12:42:17 -07:00
Ben Noordhuis
c6c77d535f Support for fstat(2) through fs.fstat() and fs.fstatSync(). Added test cases, updated documentation. 2010-05-12 14:20:43 -07:00
Ryan Dahl
67eeedd602 Disable test-signal-unregister.js as functionality doesn't exist yet 2010-05-12 12:45:53 -07:00
Ryan Dahl
1c7670aca2 Remove reference to C++ EventEmitter in docs
I prefer ppl to use ObjectWrap
2010-05-12 12:17:53 -07:00
Ryan Dahl
d0128787e7 Deprecate sendHeader() and writeHeader(), ppl should use writeHead() 2010-05-12 12:15:58 -07:00
Ryan Dahl
7a2e6d674a Default to 2 second timeout for http servers
Taking a performance hit on 'hello world' benchmark by enabling this by
default, but I think it's worth it. Hopefully we can improve performance by
resetting the timeout less often - ideally a 'hello world' benchmark would
only touch the one timer once - if it runs in less than 2 seconds. The rest
should be just link list manipulations.
2010-05-12 11:49:28 -07:00
Ryan Dahl
ed0c109950 Add note about 'error' event to docs 2010-05-12 10:42:14 -07:00
Ryan Dahl
d2cff34fa3 Idle timeout changes
- setTimeout should active the timeout too. (test-net-set-timeout tests
  this.)

- 'timeout' event is not automatically followed by an 'error' event. That
  is the user is now responsible for destroying the stream if there is an
  idle timeout.
2010-05-12 10:06:13 -07:00
Ryan Dahl
f7ff548dd0 Quote variables in configure script 2010-05-11 10:25:27 -07:00
Ryan Dahl
c90e44e582 Just add an extra include for strings.h - don't try to be cute 2010-05-10 16:38:47 -07:00
Ryan Dahl
8e5b91c79b Revert "Check for strings.h"
This reverts commit 032f651824.
2010-05-10 16:38:14 -07:00
Ryan Dahl
032f651824 Check for strings.h 2010-05-10 16:30:31 -07:00
Ryan Dahl
35dd0fb271 Patch v8 build for solaris
Submitted this patch to V8
http://codereview.chromium.org/1990010/show
2010-05-10 16:28:02 -07:00
Ryan Dahl
615d890622 Upgrade V8 to 2.2.9 2010-05-10 09:58:20 -07:00
Ryan Dahl
8ab238e7de Revert "destroy instead of end http connection at end of pipeline"
This reverts commit 4ce1e1fca5.

To fix test-http-full-response.js. Clearly this is not the correct solution.
Probably need idle timeouts.
2010-05-09 21:29:51 -07:00
Ryan Dahl
15bb392afd Disable test-remote-module-loading
In ab068db9b1 this test was broken because (I
think) compile/run errors are set to crash the program instead of being
passed back.

Error reporting is more important than remote loading. Disabling until there
is a fix
2010-05-09 18:46:04 -07:00
Ryan Dahl
b78508266b Change string.h to strings.h compile on solaris 2010-05-09 16:29:23 -07:00
Ryan Dahl
1ecb11f944 Add failing test - http responses not all complete
Report and test by soderblom.peter@gmail.com
2010-05-09 15:08:54 -07:00
Ryan Dahl
ab068db9b1 Improve error reporting
- No more single line "node.js:176:9" errors
- No more strange output when error happens on first line due to
  module wrapper function.
- A few tests to check these things
2010-05-09 13:55:42 -07:00
Ryan Dahl
1d28cfcfb9 Better logic for testing if an argument is a port
If you did server.listen('123') it would open a socket in the current
directory called 123. Now it will interpret it as a port.
2010-05-09 12:10:42 -07:00
Ryan Dahl
d38d96eb61 Don't emit 'exit' twice from child process 2010-05-08 23:28:26 -07:00
Ryan Dahl
d7762dffe3 Forgot to add child_process_should_emit_error.js 2010-05-08 23:24:24 -07:00
Ryan Dahl
264e540d00 Fix error reporting in child_process callbacks
Issue 120, test case by Nathan Ostgard
2010-05-08 22:13:34 -07:00
rentzsch
a5b132ad63 fs.Stats.size V8::Integer => V8::Number.
While VM::Integer::Value() offers an int64_t, V8::Integer::New() only
accepts an int32_t, truncating fs.Stat's size in BuildStatsObject().

I consider this a bug in V8, and we should move back to V8::Integer
when it gets a ctr that allows a int64_t. Until then, this work-around
should hold.
2010-05-08 19:52:22 -07:00
Ryan Dahl
3ac6deefa8 Change GC idle notify so that it runs along side setInterval
Doesn't appear any slower. Also checks for high memory usage and tries to
force more notifications.
2010-05-07 19:06:05 -07:00
isaacs
bc45adcffa Add binding.close to fs.readFile 2010-05-07 13:17:57 -07:00
Tim Caswell
c07c601c3b fs.readFile uses a buffer internally and will return the raw buffer if no encoding is specified. 2010-05-06 22:22:14 -07:00
Ryan Dahl
62b642a88d fix authors file 2010-05-06 14:15:16 -07:00
Ryan Dahl
d2415945c1 Install node_buffer.h on make install 2010-05-06 14:14:52 -07:00
Ryan Dahl
f711d5343b bump version 2010-05-06 10:39:27 -07:00
Ryan Dahl
6aab6ebe61 Upgrade V8 to 2.2.8 2010-05-06 09:59:35 -07:00
Ryan Dahl
4ce1e1fca5 destroy instead of end http connection at end of pipeline 2010-05-06 09:15:44 -07:00
Thomas Lee
3674563dd5 Fix a bug in http.Client where parsers may be prematurely released back to the free pool. 2010-05-06 00:44:07 -07:00
Jonathan Knezek
82c8973dfa Changed undefined pos to null to prevent hanging on SheevaPlug 2010-05-05 22:34:36 -07:00
Jonathan Knezek
874b80bd6a Added c-ares headers for linux-arm 2010-05-05 22:33:53 -07:00
Ryan Dahl
ab723d022d Add buffer response to http_simple.js 2010-05-04 22:35:55 -07:00
Ryan Dahl
1415650463 Use test port instead of 8000 in test-http-304 2010-05-04 22:06:46 -07:00
isaacs
c0d42b0365 Look in /usr/local/lib/node for modules, so that there's a way to install modules globally 2010-05-04 22:02:16 -07:00
Matt Ranney
eb4951d499 Add proper HTML header for changelog so UTF-8 works. 2010-05-04 21:36:10 -07:00
Ryan Dahl
453c9e6411 Fix whitespace 2010-05-04 21:35:46 -07:00
isaacs
3892628657 Emit a better error message when something strange is sent to OutgoingMessage#write 2010-05-04 18:37:00 -07:00
Ryan Dahl
d044e2de07 Lazy load crypto
The whole program is being slowed down by the large CA string in crypto.
Why?
2010-05-04 14:21:14 -07:00
Rhys Jones
afce4c3ae8 Added default CAs, updated openssl verify behaviour, added crypto and https documentation 2010-05-04 14:12:54 -07:00
Ryan Dahl
b6c5cf60b7 Ignore SIGPIPE
Was inadvertently removed with evcom,
c72967d335 (L10L1900)
2010-05-04 10:41:56 -07:00
Peter Griess
d9882395e2 Fix SEGV by setting msg_controllen earlier.
- Some implementations of CMSG_FIRSTHDR() rely on msg_controllen being
  set correctly, else it returns NULL: see <linux/socket.h>.
2010-05-04 10:32:01 -07:00
Rhys Jones
1a317135c5 Additional OpenSSL tests 2010-05-03 16:15:06 -07:00
Paulo Matias
430cfd1825 Read all records to always empty the OpenSSL reading buffer. 2010-05-03 16:11:42 -07:00
Paulo Matias
3fed1cf36f Make it possible to use client certificates to connect with a nodejs server, and make verifyPeer behaviour consistant. 2010-05-03 16:06:42 -07:00
Ryan Dahl
ea37d98949 Implement writeSync for buffers
(Needs tests still)
2010-05-03 13:26:09 -07:00
Ryan Dahl
3202bce288 Implement fs.readSync for buffers 2010-05-03 13:18:33 -07:00
Ryan Dahl
d76091d7d1 Implement fs.read() for Buffers (again) 2010-05-03 12:56:11 -07:00
Ryan Dahl
7a9c81d2dc Fix memory leak with fs.writeSync 2010-05-03 11:41:30 -07:00
Ryan Dahl
b5bdf9434b Add another http upgrade test 2010-05-03 11:23:36 -07:00
Ryan Dahl
f0fec7352a Don't emit error twice from http.Client 2010-05-03 10:53:52 -07:00
Michaeljohn Clement
fd3e1ca3e2 documentation typos and tweaks 2010-05-03 00:15:35 -07:00
Ryan Dahl
48d58f92f1 Add symbols to release build 2010-05-02 18:20:02 -07:00
Ryan Dahl
d13f518010 Revert changes to node_file.cc
Revert "Fix memory leak in fs.writeSync()"

This reverts commit 5457eae28c.

Revert "Implement fs.read() for buffers"

This reverts commit 692f580a07.
2010-05-02 17:38:32 -07:00
Ryan Dahl
99984772df Allow different ports for http_simple.js 2010-05-02 17:26:18 -07:00
Ryan Dahl
5457eae28c Fix memory leak in fs.writeSync() 2010-05-02 17:02:13 -07:00
Ryan Dahl
61364f9443 GnuTLS -> OpenSSL on website 2010-05-02 11:19:01 -07:00
dpb587
a1f23c1aa1 Fix a couple mistypes in API doc 2010-05-01 19:16:00 -07:00
Micheil Smith
3db613e31a Documenting http.Server#event:upgrade 2010-05-01 19:15:50 -07:00
Micheil Smith
aee226b243 Fixing the 1 byte off error in http.Server's upgradeHead
(And fix up some style issues)
2010-05-01 18:05:53 -07:00
Ryan Dahl
67fb0ece6b Fix deprecation message 2010-05-01 14:45:14 -07:00
Micheil Smith
d6110fbd11 Making requestListener for the construction of a http.Server optional, as it is for net.Server 2010-05-01 11:56:00 -07:00
Micheil Smith
f990f24ad3 Implementing the event emit for Upgrade requests, with tests. 2010-05-01 11:52:40 -07:00
Ryan Dahl
692f580a07 Implement fs.read() for buffers 2010-04-30 18:36:36 -07:00
kriskowal
8d1f1186ca Fixed/Completed buffer copy range checks. 2010-04-30 17:36:21 -07:00
Ryan Dahl
20372d2df3 Fix docs in node_file.cc 2010-04-30 15:35:51 -07:00
Ryan Dahl
285c5ed36f Fix some styling in the docs 2010-04-30 10:33:56 -07:00
Ryan Dahl
5b2801e3ea Add http server 'request' event to docs 2010-04-30 10:31:21 -07:00
Ryan Dahl
3b323027be http server emits 'clientError' 2010-04-30 10:29:35 -07:00
Ryan Dahl
557ba6bd97 bump version 2010-04-29 17:44:51 -07:00
Ryan Dahl
301b44d45d Chunk strings together on Stream buffer 2010-04-29 12:00:37 -07:00
Ryan Dahl
c75e4cb48a fix typos 2010-04-29 10:11:06 -07:00
Ryan Dahl
f919216446 Upgrade http-parser, fixes issue 77
http://github.com/ry/node/issues#issue/77
2010-04-28 23:28:52 -07:00
Thomas Lee
a63ce5cd72 Allow callers to disable PHP/Rails style parameter mungeing in querystring.stringify 2010-04-28 16:18:48 -07:00
Herbert Vojčík
039d13b0c3 DRY binding('stdio') 2010-04-28 16:08:36 -07:00
Ryan Dahl
6d85802100 basicRequest -> module.requireNative 2010-04-28 15:28:21 -07:00
Ryan Dahl
3bb21b5191 Fix signo_string for linux and solaris 2010-04-28 15:07:15 -07:00
Herbert Vojčík
7a72885ede process.evalcx has a deprecation message. 2010-04-28 14:40:11 -07:00
Herbert Vojčík
7e4c1285dc Minor stylistic changes. 2010-04-28 14:39:41 -07:00
Herbert Vojčík
5d9753fccf Fix child_process.cc build failure for FreeBSD. 2010-04-28 14:21:52 -07:00
Felix Geisendörfer
f8a3cf980f Properly handle child process exit codes
The child process 'exit' was returning the status of the process, rather than
the exit code. This patch properly deconstructs the status into the exit code
and the term signal a process may have received.

See:
http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#Watcher_Specific_Functions_and_Data_-5
and waitpid(2)
2010-04-28 13:54:17 -07:00
Ryan Dahl
9b2aac61b2 Resolve EWOULDBLOCK to string if different thatn EAGAIN 2010-04-28 12:58:51 -07:00
Ryan Dahl
3b75f5070d Upgrade V8 to 2.2.6 2010-04-28 10:46:26 -07:00
Tim Caswell
8f79169aef Remove node.* deprecation messages. 2010-04-28 09:47:50 -07:00
Ryan Dahl
e7a1fa1293 fs.FileWriteStream -> fs.WriteStream, fs.FileReadStream -> fs.ReadStream 2010-04-27 18:52:16 -07:00
Ryan Dahl
5aea12b4c4 stdout should be writable only 2010-04-27 18:45:10 -07:00
Felix Geisendörfer
203561208e Remove coupling dep 2010-04-27 18:17:30 -07:00
Felix Geisendörfer
c143cba590 Get rid of coupling for stdin 2010-04-27 18:02:30 -07:00
Felix Geisendörfer
f2212fa59d Support for FileReadStream.setEncoding 2010-04-27 17:31:04 -07:00
Felix Geisendörfer
76f98c27de Get rid of coupling for stdout 2010-04-27 17:27:34 -07:00
Ryan Dahl
f618551694 Remove callback argument to FileWriteStream.prototype.write 2010-04-27 17:26:10 -07:00
Matt Ranney
d1b352e4b3 Shorten some long lines. 2010-04-27 00:52:40 -07:00
Ryan Dahl
24931f8405 Upgrade V8 to 2.2.5 2010-04-27 00:31:47 -07:00
Matt Ranney
2374e557e3 More Buffer descriptions and examples.
Updated Script examples for New Script methods.
2010-04-27 00:25:58 -07:00
Ryan Dahl
e235aae018 Fix bug in socket write optimization
Thanks to tlb@tlb.org for finding it!
2010-04-26 20:26:43 -07:00
Ryan Dahl
c7b3c1ecbc Add more asserts to test-http-big-proxy-responses 2010-04-26 20:26:36 -07:00
Ryan Dahl
c6248efd73 Compile for beta versions of OpenSSL 1.0.0 2010-04-26 18:53:30 -07:00
Jérémy Lal
0802326fc9 test-dns so that NXDOMAIN does not rise errors 2010-04-26 15:09:03 -07:00
Jérémy Lal
5caf53a053 Add support for MX queries in dns module, works with c-ares upstream patch. 2010-04-26 15:09:03 -07:00
Jérémy Lal
14d1ab5a3e Apply unreleased upstream patch to support parse_mx_reply. 2010-04-26 15:09:03 -07:00
Jonas Pfenniger
df07a713bd New test-case: signal unregistration
The default signal-handler should be restored if no handlers are
assigned.
2010-04-25 23:14:07 -07:00
Ryan Dahl
cee9080381 Fix typos 2010-04-25 22:44:31 -07:00
Jérémy Lal
610faf713d Drop UDNS from node.uselib. Add CARES for --system. 2010-04-24 01:13:42 -07:00
Ryan Dahl
9926dacd14 Remove getaddrinfo from net2.cc 2010-04-23 17:29:36 -07:00
Ryan Dahl
3d6ebbd296 Don't look for GnuTLS in wscript 2010-04-23 17:24:37 -07:00
Ryan Dahl
c72967d335 Remove http_old tcp_old 2010-04-23 17:19:29 -07:00
Ryan Dahl
caa828a242 bump version 2010-04-23 16:37:14 -07:00
Ryan Dahl
bb4ae1769b Link to old versions 2010-04-23 16:37:14 -07:00
mape
b299b4b7a1 Update API doc 2010-04-23 16:37:10 -07:00
Ryan Dahl
16f02403f8 Catch errors from stream events in net.js
Pipe into 'error' event.
2010-04-23 14:08:54 -07:00
Ryan Dahl
e72b7b8002 Upgrade V8 to 2.2.4.2 2010-04-23 12:05:36 -07:00
Krishna Rajendran
7a34afba77 openssl 1.0.0 constification 2010-04-23 10:53:09 -07:00
Brian Hammond
40820ec8d5 Leave pos as undefined to allow reads from unseekable files like /proc/x/smaps on Linux 2010-04-23 10:34:10 -07:00
Ryan Dahl
c9e27b11c5 Unify ErrnoException creation 2010-04-22 17:53:45 -07:00
Ryan Dahl
0633e5cac9 Optimize for few args in EventEmitter.emit 2010-04-22 17:31:35 -07:00
Ryan Dahl
6abdf051d3 Unhandled 'error' events kill program
By default 'error' throws. addListener to prevent this.
2010-04-22 17:22:06 -07:00
Ryan Dahl
11f673e819 curl after server is listening 2010-04-22 15:48:57 -07:00
Ryan Dahl
76d525b034 Remove assert for no-such-module 2010-04-22 14:43:25 -07:00
Ryan Dahl
d70474dc10 SIGPIPE on stdout should kill the process by default 2010-04-22 14:25:13 -07:00
Ryan Dahl
3934cb5485 Force no body on http 204 and 304
Thanks to tjholowayhuk@gmail.com for the test case.
2010-04-21 15:15:21 -07:00
Ryan Dahl
94f9dc67c0 Add link to older tarball versions 2010-04-21 13:16:46 -07:00
isaacs
cfd459abde Move the module loading framework into lib/module.js. Minimal changes otherwise. 2010-04-21 12:05:01 -07:00
isaacs
e0061a511d refactor path module to lib/path.js 2010-04-21 11:38:51 -07:00
isaacs
7ff53f4c6a Refactor events module to lib/events.js 2010-04-21 11:38:46 -07:00
Herbert Vojčík
4badb227cf Fix TCP_KEEPIDLE build failure in FreeBSD. 2010-04-21 10:51:45 -07:00
Julian Lamb
5f8f561d61 add setKeepAlive function, which enables and sets the TCP keep-alive timer 2010-04-20 16:34:21 -07:00
Ryan Dahl
27ec33aad7 Add some libpaths for SSL 2010-04-20 14:44:05 -07:00
Michaeljohn Clement
ac9d9f4e9f better function test in addEventListener 2010-04-20 12:32:18 -07:00
Tim Caswell
61308a5bff Add a note in the API docs about binding to ports and using strings. 2010-04-19 15:52:51 -07:00
Tim Caswell
60de86351a Add Buffer.byteLength docs 2010-04-19 15:51:32 -07:00
Ryan Dahl
ff6409469d Make 'make distclean' work on solaris 2010-04-19 15:48:12 -07:00
Ryan Dahl
6e715b82d0 Upgrade Waf to 1.5.16 2010-04-18 19:57:13 -04:00
Standa Opichal
fa514a9f16 Do a manual check for openssl if 'pkg-config openssl' fails.
This makes the node_crypto module available for node built using just a
default OS X dev environment (no darwinports or fink).
2010-04-18 17:25:05 -04:00
Herbert Vojčík
8daa1f8d04 Docs for Script class of 'evals' binding. 2010-04-18 17:23:01 -04:00
Ryan Dahl
4ff45c264c Remove old EvalCX 2010-04-18 15:44:23 -04:00
Herbert Vojcik
c2a06725d6 Script class with eval-function-family in binding('evals') plus tests. 2010-04-18 15:01:36 -04:00
Matt Ranney
39464b498f Add docs for new REPL options and fill out description of commands. 2010-04-15 18:03:56 -07:00
Rhys Jones
3510669db2 Fixed ssl client and server examples 2010-04-15 20:03:55 +01:00
Rhys Jones
8efab857d0 Merge branch 'master' into openssl 2010-04-15 19:57:35 +01:00
Rhys Jones
e4a6b72ae3 Added test and started tidy-up of node_crypto.cc 2010-04-15 19:57:17 +01:00
Micheil Smith
6ad18a27a0 Fix upgradeHead bounds. 2010-04-15 11:19:54 -07:00
Rhys Jones
e6a1091cc6 Merge branch 'master' into openssl 2010-04-15 10:56:42 +01:00
Ryan Dahl
311d7dee19 bump version 2010-04-15 02:09:51 -07:00
Ryan Dahl
2ad587cc35 Default to UTF8 on stream write 2010-04-15 02:09:51 -07:00
Ryan Dahl
5281f29012 Use new method of getting chars written for UTF8 2010-04-15 02:09:51 -07:00
Ryan Dahl
d2e1b0855f Move two broken tests to disabled folder 2010-04-15 01:37:27 -07:00
Ryan Dahl
ac3bc2ed41 Simplify GC idle notification
In particular, don't leave the timeout running when the heap is fully
compacted.
2010-04-15 01:30:58 -07:00
Rhys Jones
d27d6dcc6f Merge branch 'master' into openssl 2010-04-15 06:21:15 +01:00
Rhys Jones
fbad5dc062 Updated https support 2010-04-15 06:17:22 +01:00
Ryan Dahl
4efe27bbab Add execFile() for Orlando
Undocumented for now, but basically like exec() with args.
2010-04-14 18:50:44 -07:00
Ryan Dahl
9cf2a02d8b Add timeout and maxBuffer options to child_process.exec 2010-04-14 11:59:24 -07:00
Ryan Dahl
41ef1717e0 Upgrade V8 to 2.2.3.1 2010-04-14 10:34:27 -07:00
Ryan Dahl
760bba5518 Support Upgrade in HTTP messages
This allows for web servers to be "hijacked" and used as Web Socket servers
(or other). You simply listen for requests as normal, but check if

  req.upgrade === true

If so, this will be the last request of the connection. It's your job now to
hijack req.connection and start reading from it. req.upgradeHead is a buffer
containing the first part of the new protocol communication (in the case it
arrived on the same packet).

This needs tests and documentation. API subject to change.
2010-04-14 03:52:15 -07:00
Ryan Dahl
af49187e57 Upgrade http-parser 2010-04-14 03:22:38 -07:00
Ryan Dahl
684740c232 net.js: Slice the right buffer in _writeOut 2010-04-14 00:41:56 -07:00
Ryan Dahl
b8c0349750 Fix triple buffer slice bug 2010-04-14 00:36:34 -07:00
Rhys Jones
144200435f Merge branch 'master' into openssl
Conflicts:
	lib/net.js
	wscript
2010-04-14 07:31:33 +01:00
Ryan Dahl
a934566eb9 Disable test-idle-watcher
IdleWatcher was disabled in a98d23d905
2010-04-13 16:57:19 -07:00
Ryan Dahl
b549b3fcce Fix test case style 2010-04-13 16:43:15 -07:00
Ryan Dahl
6732e7fa17 Add big proxy failing test
GH-77. Code by Robert Newson <robert.newson@gmail.com>
2010-04-13 16:22:14 -07:00
Ryan Dahl
71dc232f93 Use === instead of == for END_OF_FILE compares
This caused a very hard to track down bug. Thanks to Mikeal Rogers for this
fix. Unfortunately we were unable to put together a test case.
2010-04-13 15:56:08 -07:00
Ryan Dahl
a98d23d905 Disable IdleWatcher 2010-04-13 15:43:58 -07:00
Ryan Dahl
4e7e2f8724 Change nextTick implementation for the better
Use a prepare and idle watcher to execute the nextTick callback more
quickly. Test provided by Matt Ranney.
2010-04-13 15:43:46 -07:00
Ryan Dahl
57edff1f31 Remove mixin from docs 2010-04-13 13:50:17 -07:00
Ryan Dahl
b98cd6753b process.mixin: deprecation -> removed 2010-04-13 13:45:31 -07:00
Micheil Smith
57ea07ac91 Moving the http.js, net.js FreeList to being standalone. 2010-04-12 16:57:45 -07:00
Ryan Dahl
b7947e45c0 Recycle http client parsers 2010-04-12 16:34:39 -07:00
Ryan Dahl
1efd261572 doc typo 2010-04-12 16:27:04 -07:00
Matt Ranney
afe3c1cdea Buffer partial reads before doing expect match. 2010-04-12 14:38:16 -07:00
Rhys Jones
80174392bb Moved Credentials into crypto module. Added node_crypto into crypto module 2010-04-12 21:25:16 +01:00
Ryan Dahl
4681e34c1e Fix a race condition or two in net.js
When making a TCP connection, readyState returns 'opening' while resolving
the host. However between the resolving period and the establishing a
connection period, it would return 'closed'. This fixes it.

This change also ensures that the socket is closed before the 'end' event is
emitted in the case that the socket was previously shutdown.
2010-04-12 12:38:11 -07:00
Rhys Jones
45b8d24ea6 Added https server support 2010-04-12 20:36:46 +01:00
Rhys Jones
c9f71a807c Added https support 2010-04-12 18:57:22 +01:00
Tim Caswell
62d9852c3d Replace slow and broken for..in loops with faster for loops over the keys. 2010-04-12 10:34:35 -07:00
Matt Ranney
b7441040f8 REPL can be run from multiple different streams.
e.g. from UNIX sockets with socat.
2010-04-12 00:31:51 -07:00
Ryan Dahl
cc9d5ab546 C-Ares shouldn't iterate over all Object.prototype elements
and furthermore error out of one of them isn't a DNS option.

Test case by Ben Lund <ben.lund@gmail.com>; additional help from Tim Caswell
<tim@creationix.com>.
2010-04-11 16:12:20 -07:00
Matt Ranney
715e119eea Fix typo in comments. 2010-04-11 15:47:29 -07:00
Ryan Dahl
8553e8a15d Add incoming.httpVersion 2010-04-11 15:15:36 -07:00
isaacs
57fbb627ca trailing whitespace fixes 2010-04-11 14:48:23 -07:00
Ryan Dahl
93913dbdb8 Add failing test for HEAD requests
Needs to be fixed for 0.2.
2010-04-11 12:21:36 -07:00
James Herdman
dd50b86449 Fix documentation errors for DNS 2010-04-11 12:16:36 -07:00
Ryan Dahl
07e64d45ff bump version 2010-04-09 17:05:03 -07:00
Ryan Dahl
54f02345b5 Fix doc again 2010-04-09 16:52:10 -07:00
Ryan Dahl
ee3026797c More documentation work. Remove long lines 2010-04-09 15:34:08 -07:00
Ryan Dahl
03ea4b644e Improve(\?) docs 2010-04-09 14:51:20 -07:00
Micheil Smith
fd0bebcdbc Mods to the docs 2010-04-09 12:45:44 -07:00
Ryan Dahl
9331218449 Servers shouldn't die on EMFILE 2010-04-09 10:44:13 -07:00
Ryan Dahl
b36f11d7b5 Set old/new from benchmark script args 2010-04-09 10:42:20 -07:00
Tim Caswell
ff56d6364e Fix child_process to use end() instead of close() in the stdin stream. 2010-04-09 10:01:47 -07:00
Herbert Vojcik
06b9c8bf1f Fix of normalizing paths of form ./../the/rest 2010-04-09 08:01:36 -07:00
Ryan Dahl
a5184fe938 Change api.html style 2010-04-08 22:42:02 -07:00
Ryan Dahl
323a5e11e5 Change how events are represented in docs 2010-04-08 17:39:33 -07:00
Matt Ranney
631e5bf5cb Improve child_process documentation. 2010-04-08 16:31:36 -07:00
Ryan Dahl
08a09bb50a Use some more Binary/F methods for Buffer 2010-04-08 16:31:02 -07:00
Ryan Dahl
b8bb6e9007 Close child process stdin on SIGCHLD 2010-04-08 15:20:13 -07:00
Ryan Dahl
499c615c9e Doc changes for new API (part 1) 2010-04-08 15:00:08 -07:00
Felix Geisendörfer
b544185bd8 Fix doc toc for small screens
Only make the toc fixed position for big screens.
2010-04-08 14:20:43 -07:00
Felix Geisendörfer
1a9c9b0c55 Bring back the old manual style
This brings back the old manual style, including the toc and syntax
highlighting.
2010-04-08 14:20:33 -07:00
Ryan Dahl
50c70ac714 Update stream API: forceClose() -> destroy(), close() -> end() 2010-04-08 12:24:29 -07:00
Ryan Dahl
7faf7d5c8d Put file stream methods into prototype, small style fixes 2010-04-08 11:26:26 -07:00
Ryan Dahl
3819920d77 Rename binding reference in fs.js 2010-04-08 11:26:26 -07:00
Herbert Vojcik
c16508c87a Better require.async throw test 2010-04-08 08:17:58 -07:00
isaacs
de9778b5bd Add line breaks to the code when the user types a line break 2010-04-08 08:12:30 -07:00
Ryan Dahl
7a6b5635eb Revert "Enable TCP timeout by default"
Causing programs to not exit gracefully.

This reverts commit cb84cde4d4.
2010-04-08 07:19:42 -07:00
Ryan Dahl
62277ab79b Support both old and new HTTP closing APIs in benchmark program 2010-04-08 01:00:35 -07:00
Ryan Dahl
cb84cde4d4 Enable TCP timeout by default 2010-04-08 00:59:57 -07:00
Ryan Dahl
d923c94a0c Remove udns 2010-04-07 18:25:37 -07:00
Ryan Dahl
0281e1acf6 Fix benchmark script for testing both old and new version 2010-04-07 16:19:50 -07:00
Ryan Dahl
970e9025fe Remove debugging statements from dns_cares 2010-04-07 16:09:10 -07:00
Ryan Dahl
33e774eeba Use c-ares in lib/net.js 2010-04-07 16:05:07 -07:00
Ryan Dahl
8f671041a5 Check for ip address in dns_cares.lookup 2010-04-07 16:04:33 -07:00
Ryan Dahl
f13e2f96e4 Add a simple c-ares test, dns_cares.lookup() for easy resolv 2010-04-07 15:37:08 -07:00
Ryan Dahl
f56ff0de92 Add darwin-x86, linux-x86_64 c-ares headers 2010-04-07 13:39:11 -07:00
Ryan Dahl
9ea8c9f2b0 Clean up c-ares platform includes, add support for a few more 2010-04-07 13:34:40 -07:00
Ryan Dahl
eac3dc9d5f Bugfix: net.js flushing, _doFlush typo 2010-04-07 11:47:46 -07:00
Herbert Vojcik
d36bb6536e Better require.async tests 2010-04-07 11:47:45 -07:00
Vanilla Hsu
067f4086b6 add c-ares' freebsd support. 2010-04-07 09:36:35 -07:00
Ryan Dahl
888a494ad8 Update LICENSE file with C-Ares info 2010-04-07 01:45:20 -07:00
Krishna Rajendran
96df65e88e Make test-dns.js use dns_cares. 2010-04-07 01:29:20 -07:00
Krishna Rajendran
dc1f4ebd44 c-ares based dns module 2010-04-07 01:29:05 -07:00
Ryan Dahl
e9a116fe02 Include c-ares in deps/ 2010-04-07 01:17:49 -07:00
Vanilla Hsu
25adb2eb55 [FreeBSD] use /dev/null instead /dev/mem
Without this patch, Node needs to setgid kmem when run as normal user.
2010-04-06 22:05:12 -07:00
Ryan Dahl
38041fcaa0 Try out Flatten API
Speeds up WriteUtf8 significantly when dealing with strings made by the
concatenation of many others.
2010-04-06 16:15:09 -07:00
Ryan Dahl
ca0038bf2f Add mising EV_DEFAULT_UC in ev_now() 2010-04-06 15:23:42 -07:00
Vanilla Hsu
d7a4501057 freebsd install execinfo's header to /usr/local, add it to include path. 2010-04-06 10:23:43 -07:00
Ryan Dahl
53dd9fe200 Fix bug in buffer.utf8Write() which included \u0000 2010-04-05 18:10:36 -07:00
isaacs
4befe93a4b Add ini.stringify functionality, a test, and some TODOs in ini.js 2010-04-05 17:05:35 -07:00
Ryan Dahl
1b758ef268 Allow stream to write on close 2010-04-05 16:50:05 -07:00
Ryan Dahl
801fb8a614 Better, faster, idle notification 2010-04-05 14:04:14 -07:00
Ryan Dahl
0301adf9b4 In tests, wait for 'listening' before connecting 2010-04-05 11:32:18 -07:00
Ryan Dahl
b0d1d6c2b9 Reset stdin, stdout fd flags on exit
In vim, lauching node as a child process would mess up the screen. This was
because Node was changing the flags on STDIN_FILENO and STDOUT_FILENO
(particularly adding O_NONBLOCK) but those flags leaked into the parent
process.
2010-04-04 22:51:30 -07:00
Ryan Dahl
85487c82d0 Blob struct should not contain actual data
This is to allow eventual realloc without messing up the data_ references in
all the slices.
2010-04-04 21:37:08 -07:00
Ryan Dahl
01f7d4484e Upgrade to WAF 1.5.15 2010-04-04 21:12:25 -07:00
Ryan Dahl
ec0266a56c Update libev's clock when starting timers
Make the timeouts more accurate. See test/pummel/test-timers.js
2010-04-04 19:33:12 -07:00
Ryan Dahl
b72ffc0e07 Add buffer.copy 2010-04-04 18:59:40 -07:00
Ryan Dahl
cd577d503d Upgrade V8 to 2.2.0.3 2010-04-04 18:07:32 -07:00
Ryan Dahl
129310676d Fix style in SSL patch 2010-04-02 17:30:49 -07:00
Rhys Jones
c55c0a1fca Add SSL tests 2010-04-02 17:14:03 -07:00
Rhys Jones
fb3a9cd0d8 Initial openssl support for net2 2010-04-02 17:13:54 -07:00
Ryan Dahl
ae805f1057 Emit 'error' on tcp connection DNS error 2010-04-02 16:15:53 -07:00
Ryan Dahl
c0e18f37d4 Don't reference fixtures/multipart.js 2010-04-02 16:02:48 -07:00
Ryan Dahl
94644d743c Remove multipart library
Too messy, unmaintainable. Pull it out of the history if you need it.
2010-04-02 16:01:16 -07:00
Ryan Dahl
53530e981a Fix test-http-chunked. Need to check for \0 at end of utf8 strings 2010-04-02 14:55:28 -07:00
Ryan Dahl
b9106b0ecd Use AF_INET sockets instead of always AF_INET6
You can get AF_INET6 still, it's just not the only choice.
2010-04-02 13:20:56 -07:00
Ryan Dahl
fdae14070c Move buffer constants at the top of net.js
Remove some cruft.
2010-04-01 16:46:37 -07:00
Ryan Dahl
e232cf3100 Hack to support UTF8 writes again! 2010-04-01 16:24:36 -07:00
Ryan Dahl
3197cf291d Better flushing
Lost Utf8 support. Waiting for http://codereview.chromium.org/1539013
2010-04-01 15:53:48 -07:00
Tim Caswell
7af9cb9e80 Don't put an extra comma after bases in inspect.
{ [Function]     { [Function]
, more: true  =>   more: true
, more2: true    , more2: true
, more3: true    , more3: true
, more3: true    , more4: true
, more3: true    , more5: true
}                }
2010-04-01 08:58:19 -07:00
Ryan Dahl
4279725d79 Fix thread flags on Solaris
Also on other platforms use -pthread for compiling commands not just
linking because I noticed in the gcc(1) man page

  -pthread
      Adds support for multithreading with the pthreads library. This
      option sets flags for both the preprocessor and linker.

Removing the errno check in deps/coupling because it was a hack
(e165859c2e) added to fix stdio problems.
Without adding -threads, errno is not thread local, and coupling was not
correctly checking the errno. It appears -mt does nothing to gcc/solaris.
2010-03-31 13:44:36 -07:00
Ryan Dahl
d52f63d9b2 fix whitespcae in deps/coupling 2010-03-31 11:27:57 -07:00
Johan Dahlberg
18de108e4c Bugfix: watchFile, unwatch, watch causes error
Fixed bug that caused application to cast a "TypeError: Cannot call method
'addListener' of undefined" when first watching a file, unwatching and then
watching same file again.
2010-03-31 10:38:25 -07:00
Ryan Dahl
aec80d47bb Better check for FDs in net2 bindings 2010-03-31 08:20:59 -07:00
Herbert Vojcik
da16128bf6 missing return after forceClose 2010-03-31 08:13:03 -07:00
Herbert Vojcik
9e97e185ad EAI_NODATA deprecated, patch to use EAI_NONAME if missing (it is in FreeBSD) 2010-03-31 08:12:35 -07:00
Ryan Dahl
52b295400d Revert "Upgrade V8 to 2.2.0"
Experiencing strange errors on all platforms due to this commit. EG
http://buildbot.nodejs.org:8010/builders/Linux%20AMD64/builds/107/steps/shell_2/logs/stdio

This reverts commit 40ea061c30.
2010-03-29 16:42:39 -07:00
Matt Ranney
7c77a56b4a Improve documentation. 2010-03-29 11:23:27 -07:00
Ryan Dahl
40ea061c30 Upgrade V8 to 2.2.0 2010-03-29 01:04:53 -07:00
Ryan Dahl
d1b78c3f5d More efficient Stream.write 2010-03-27 14:07:43 -07:00
Ryan Dahl
aa6a785286 Add note about where to find ronn 2010-03-26 19:32:19 -07:00
Tim Caswell
179f718d62 Conversion to markdown based API docs.
With help from Matt Ranney <mjr@ranney.com>
2010-03-26 18:28:40 -07:00
Ryan Dahl
6ecdeada49 Remove -Werror on V8 -_- 2010-03-26 09:58:21 -07:00
Ryan Dahl
6192b8659a Upgrade V8 to 2.1.10 2010-03-26 09:09:40 -07:00
Ryan Dahl
bb00fef3cd Change Buffer.toString to conform to CommonJS Binary/F
Also add Buffer.inspect
2010-03-26 08:36:08 -07:00
Ryan Dahl
7ed80451ca Increase pool.used before making 'data' event 2010-03-26 08:35:12 -07:00
Ryan Dahl
a49bf8622f Finish V8 update 2010-03-25 15:01:59 -07:00
Ryan Dahl
48f5f77713 Update to V8 2.1.9.1 2010-03-25 09:53:58 -07:00
Ryan Dahl
6740dd48b3 Change Buffer toString() output 2010-03-25 09:50:49 -07:00
Ryan Dahl
3546106c43 Add req.connection and res.connection 2010-03-24 07:21:00 -07:00
Ryan Dahl
6f21ac1282 Don't free http parser for the client!
Fixes test-http-client-race.js, test-http.js
2010-03-23 21:41:42 -07:00
Ryan Dahl
5c6f063ef2 snake to camel in HTTP 2010-03-23 21:31:44 -07:00
Ryan Dahl
70ffdf5db9 Fix HTTP keep-alive 2010-03-23 21:10:01 -07:00
Ryan Dahl
6b6dcf4aad Move test-child-process-spawn-loop to pummel/ 2010-03-23 21:02:30 -07:00
Ryan Dahl
218d7e9f2d Clean up NODE_DEBUG detection
It wasn't detecting if NODE_DEBUG=0
2010-03-23 20:56:51 -07:00
Ryan Dahl
8e9ec4abea Fix idle timeouts
Remove process.now because it doesn't provide enough precision.
2010-03-23 20:54:19 -07:00
Ryan Dahl
3238944c7a Don't use sys.puts for debug in net.js 2010-03-23 18:10:13 -07:00
Ryan Dahl
a01d8a0d68 Timer clean ups
Also bugfix getting pointer to C++ class in watcher
2010-03-23 17:28:26 -07:00
Ryan Dahl
b35d72df76 Upgrade V8 to 2.1.7 2010-03-23 15:19:32 -07:00
isaacs
6e603ccbe2 Fix debug statement that was using puts instead of debug() 2010-03-23 08:54:05 -07:00
arlolra
6f84063a3b Migrates benchmarks to the new api. 2010-03-23 08:13:17 -07:00
Ryan Dahl
54d4efd44b Upgrade http-parser
Now at version 6f72c780f0a237a775150a9963bcdf5299685cde
2010-03-22 09:00:43 -07:00
Ryan Dahl
765f0cdece Fix ChildProcess::Kill 2010-03-22 05:06:13 -07:00
Ryan Dahl
bfdc421dda Don't kill negative PIDs
Fixes issue GH-79.
2010-03-20 03:01:17 -07:00
Ryan Dahl
069099a3e3 Remove old test file 2010-03-19 23:45:28 -07:00
Ryan Dahl
c66a0a739f recvBuffer -> pool 2010-03-19 23:09:16 -07:00
Ryan Dahl
cc053e7df7 Merge branch 'net2'
Expect instability on the master branch for a while.
Problems:
  - Documentation is not yet updated

  - SSL support is gone! It needs to be redone for net.js.  Use 'tcp_old'
    and 'http_old' if you need it. I want to use OpenSSL now, talk to me if
    you'd like to work on it.

  - fs.write() supports Buffers a little. See src/node_file.cc for details
    fs.read() not yet. The file streams need to be updated to handle Buffer.

  - The Buffer API will probably change.
2010-03-19 21:52:09 -07:00
Ryan Dahl
04001fb591 Don't deprecate readyState, yet 2010-03-19 21:51:07 -07:00
Ryan Dahl
ebe2721cbf Don't use sys.debug, it gets preprocessed out
Problem introduced in b29f78772e
2010-03-19 21:50:11 -07:00
Ryan Dahl
903977d5e8 Merge branch 'master' into net2
Conflicts:
	test/simple/test-event-emitter-modify-in-emit.js
2010-03-19 21:48:39 -07:00
Ryan Dahl
139c91e892 Support old 'binary' encoding in net.js 2010-03-19 21:25:29 -07:00
Ryan Dahl
663269f687 old tcp module is now tcp_old 2010-03-19 21:22:11 -07:00
Ryan Dahl
618296ef57 bump version 2010-03-19 21:07:03 -07:00
Ryan Dahl
025116f8d0 Move Buffer into own module 2010-03-19 20:58:24 -07:00
Zoka
b29f78772e Eliminate debug(x) statements from src/node.js and lib/*.js for release build
http://groups.google.com/group/nodejs/browse_thread/thread/8f20bcef6d6d96b7
2010-03-19 20:56:03 -07:00
Ryan Dahl
ac684f3583 Add legacy 'binary' encoding/decoding methods to Buffer 2010-03-19 20:33:09 -07:00
Ryan Dahl
b80f6e9ed1 http2 now default 2010-03-19 19:52:09 -07:00
Ryan Dahl
4278f35e89 Add support for Buffer to fs.write 2010-03-19 18:36:22 -07:00
Ryan Dahl
776c3e2b29 Add note about Buffer abstraction 2010-03-19 12:08:57 -07:00
Ryan Dahl
3a993d8897 Buffer.utf8ByteLength -> Buffer.byteLength 2010-03-19 12:02:59 -07:00
Ryan Dahl
3e969f0f74 Random net.js clean ups 2010-03-19 11:46:35 -07:00
Ryan Dahl
0c64768cb4 Don't error out when buffer.utf8Write() doesn't fit 2010-03-19 11:46:09 -07:00
Ryan Dahl
f8c3b6009d Remove send fd functionality
It was broken anyway. It will go into its own class later.
2010-03-19 11:34:26 -07:00
Ryan Dahl
e01464373f Speed up test-buffer 2010-03-19 11:30:51 -07:00
Ryan Dahl
90295d9fce [net2] inline write on empty write buffer for performance 2010-03-19 02:24:16 -07:00
Herbert Vojcik
9e8afe9133 DRY loading native module 2010-03-18 22:23:13 -07:00
Ryan Dahl
1762abcece http2 now passes all tests 2010-03-18 15:49:42 -07:00
Ryan Dahl
916e057fea Add 'opening' readyState 2010-03-18 14:33:42 -07:00
Carson McDonald
e5cbe73a82 Better EventEmitter modify-in-emit
Changed ReallyEmit so that it clones the Array of listeners before
processing the emit. Added better tests to make sure that modifying
listeners inside event handlers doesn't cause later listeners to be skipped
or added.
2010-03-18 14:08:20 -07:00
Ryan Dahl
33d5c46e8c All tests to use http2 2010-03-18 14:01:17 -07:00
Ryan Dahl
6db43f4c29 net2 HTTPClient work 2010-03-18 13:21:52 -07:00
Scott Taylor
39f0ef9d4a Remove duplicate shebang filtering 2010-03-18 07:56:54 -07:00
Tim-Smart
df8164c1c3 node.cc: EvalCX: Third argument as filename 2010-03-18 07:51:32 -07:00
Ryan Dahl
1332cafb7c s/Socket/Stream/g 2010-03-17 16:31:24 -07:00
Ryan Dahl
b865f9e9c8 Merge branch 'master' into net2 2010-03-17 16:24:43 -07:00
Ryan Dahl
2d7e86ef58 Upgrade V8 to 2.1.5 2010-03-17 15:52:57 -07:00
pyrotechnick
8aaffe71ee Fixing a typo in the fs.readFile example. 2010-03-17 14:44:15 -07:00
Ryan Dahl
04c06b9149 child process now use net.Socket 2010-03-17 14:00:17 -07:00
Krishna Rajendran
84277ea845 Check for callback argument in PTR lookup 2010-03-17 00:46:44 -07:00
isaacs
31ed37fdf0 evalcx shouldn't be too fancy
After getting some feedback from Mikeal Rogers and Tim Smart, it was decided
that evalcx should not try to do any fancy security stuff, and instead leave
that in the hands of the user. To comply more with spidermonkey, everything
is passed in, and objects are passed in by reference rather than being
cloned.
2010-03-16 20:09:13 -07:00
Ryan Dahl
217e4b40d4 Check for callback argument in DNS functions 2010-03-16 10:48:14 -07:00
Krishna Rajendran
3c97a4391a Update test-dns.js to work with latest api 2010-03-16 10:29:43 -07:00
Krishna Rajendran
3847add943 Fix calls to dns bindings in dns.js 2010-03-16 10:29:16 -07:00
isaacs
943b2c61a8 Make evalcx work like it's supposed to.
1. Move the context->Enter() call so that the global obj is available for writing.
2. On success, copy the modified global out to the sandbox object.
3. Don't copy functions in either direction.  They have scope and closures, and make for craziness when trying to keep contexts separate.
4. Only do the ->ToObject->Clone() on objects, so that simple values stay simple.
5. Update the test so that it tests all this stuff.
2010-03-16 10:27:47 -07:00
Ryan Dahl
953fa3a5f5 Move net2 bindings out of process 2010-03-15 16:44:50 -07:00
Ryan Dahl
5d5c8cf04a Fix StatWatcher typo 2010-03-15 15:53:44 -07:00
Ryan Dahl
fdf46a65c9 Use streams for stdout and stdin 2010-03-15 15:11:40 -07:00
Ryan Dahl
cbfd4da818 Merge branch 'master' into net2
Conflicts:
	src/node.cc
2010-03-15 14:34:01 -07:00
Ryan Dahl
6befc72f82 Add missing lib/events.js 2010-03-15 14:25:06 -07:00
Ryan Dahl
c90546f138 Move native js files into binding object 2010-03-15 14:24:15 -07:00
Ryan Dahl
8492c52e15 Use uniform watcher names 2010-03-15 14:24:15 -07:00
Ryan Dahl
627fb5adbb Load c++ modules on demand 2010-03-15 14:24:15 -07:00
Ryan Dahl
3994340a45 Fix gcc warnings in node.cc 2010-03-15 12:50:00 -07:00
Ryan Dahl
5c712a7da5 Lazy load fs.readFile 2010-03-15 10:41:58 -07:00
Ryan Dahl
1256df76bc remove whitespace 2010-03-15 09:02:52 -07:00
Ryan Dahl
d96c52694a Upgrade V8 to 2.1.4 2010-03-15 08:39:56 -07:00
Ryan Dahl
a6f904cab7 Tests should use compiled-in modules not build-dir modules 2010-03-15 08:14:51 -07:00
Ryan Dahl
1395cba6ce Remove require.paths from process object 2010-03-15 08:07:33 -07:00
Ryan Dahl
4ccdc501d4 Include lib/ directory in node executable. Compile on demand.
Instead of installing the files in /usr/lib/node/libraries and loading them
from the file system, the files are built-in to the node executable.
However, they are only compiled on demand.

The reasoning is:
  1. Allow for more complex internal javascript. In particular,
  process.stdout and process.stdin can be js implemented streams.

  2. Ease system installs. Loading from disk each time is unnecessary
  overhead. Note that there is no "system" path for modules anymore. Only
  $HOME/.node_libraries.
2010-03-15 08:04:35 -07:00
Krishna Rajendran
0d5a1fed33 Use gai_strerror when tcp.Server fails to resolve its address or service. 2010-03-14 23:08:45 -07:00
Jed Schmidt
004faf3846 Added check to make sure writeHead() is called before write(), to prevent silent failure. 2010-03-13 22:27:51 -08:00
Herbert Vojčík
49d30c6478 Only Ref in idle watcher when wasn't already active. 2010-03-13 20:45:26 -08:00
Ryan Dahl
7be0d06238 FreeBsd->Solaris on homepage 2010-03-13 12:47:41 -08:00
Scott González
d2ec5c23cf Fixed typo in comment for require.registerExtension(). 2010-03-13 12:29:33 -08:00
Ryan Dahl
ffeb4722d4 small wscript error 2010-03-13 12:20:09 -08:00
Ryan Dahl
61c8014135 bump version 2010-03-12 18:50:46 -08:00
Ryan Dahl
96f08cf05c Work on net2 http client 2010-03-12 18:39:02 -08:00
Ryan Dahl
c6ebfb0cc6 Merge branch 'master' into net2 2010-03-12 13:51:00 -08:00
Ryan Dahl
d7efb0fdb2 Factor out TryCatch in ReallyEmit 2010-03-12 13:48:03 -08:00
Ryan Dahl
2c7cbbc1b0 Optimize event emitter for single listener 2010-03-12 13:47:56 -08:00
Ryan Dahl
aa6eaae0aa Simplify Socket constructor 2010-03-12 13:06:05 -08:00
Ryan Dahl
b571900d9c Fix node_timer bug; sometimes was not initializing watcher 2010-03-12 12:56:10 -08:00
Ryan Dahl
c857d65dd3 Disable test-net-fd-passing for now 2010-03-12 12:43:28 -08:00
Ryan Dahl
28211519b6 Merge branch 'master' into HEAD
Conflicts:
	lib/fs.js
	wscript
2010-03-12 12:42:15 -08:00
Ryan Dahl
3adf7a3dcf TCP timeout opt-in instead of opt-out
For speed, idle connections are super cheap.
2010-03-12 12:39:37 -08:00
Ryan Dahl
b94af8d6b1 Only print readyState deprication message once 2010-03-12 12:34:25 -08:00
Ryan Dahl
836e6a3fcb Adjust object ref count after call to ev_timer_again 2010-03-12 12:27:41 -08:00
Ryan Dahl
177de8fefc Fix some gcc warnings 2010-03-12 12:21:27 -08:00
Ryan Dahl
3d10852c33 Disable AsciiSliceExt
Seems faster and less buggy?
2010-03-12 12:21:27 -08:00
Ryan Dahl
c1613e6ebb Deprecate process.mixin 2010-03-12 09:23:05 -08:00
Tim-Smart
ae10a48383 Initial implementation of process.evalcx 2010-03-12 08:22:48 -08:00
Ryan Dahl
6ec2f877c2 Depreciation -> Deprecation 2010-03-11 23:50:41 -08:00
Vanilla Hsu
b13081691e use getpagesize() to get PAGE_SIZE on FreeBSD. 2010-03-11 23:32:13 -08:00
Vanilla Hsu
116dfb8740 1: sync wscript with libeio.m4 2: try to enable macosx's sendfile. 2010-03-11 22:07:50 -08:00
Ryan Dahl
c96b7e5ca0 Missing EOL semicolons 2010-03-11 22:05:09 -08:00
Ryan Dahl
dd857f9fdf .addon -> .node
How'd that get in there?
2010-03-11 22:04:00 -08:00
Tim-Smart
0c17067d87 Add require.registerExtension 2010-03-11 22:00:55 -08:00
Ryan Dahl
6bd11f147a Fix undefined reference in fs.js 2010-03-11 14:32:10 -08:00
Ryan Dahl
ff2457754c Upgrade libeio 2010-03-11 14:31:51 -08:00
Jérémy Lal
c93bab141c Add --system option to configure, so make uses V8, EV, UDNS system libraries and headers. 2010-03-11 14:00:19 -08:00
Ryan Dahl
6d9227b79a Make relative ref to sys in fs module. 2010-03-11 12:48:47 -08:00
Ryan Dahl
ca862d75de [net2] Add Socket.setTimeout
Still seeing crashes and performance problems.
2010-03-11 12:43:32 -08:00
Ryan Dahl
4635ed7fde Add process.now
Faster way to find out current time.
2010-03-11 12:40:24 -08:00
Ryan Dahl
462a8f8652 add error listener to test-net-pingpong 2010-03-11 12:39:50 -08:00
Ryan Dahl
9b67962a44 Add timer.again method 2010-03-11 12:38:42 -08:00
Ryan Dahl
03f2bfe51f Make relative ref to sys in fs module. 2010-03-11 12:37:37 -08:00
Ryan Dahl
358b7516c7 Adjust process.compile documentation 2010-03-11 10:27:20 -08:00
isaacs
976983960d More ini parser features.
Update the ini parser to support some more whitespace cases, turn lines
without an equal sign into a "flag" that's just true if set, and support
comments.
2010-03-10 21:44:59 -08:00
Ryan Dahl
777e1a6c69 Merge branch 'master' into net2 2010-03-10 11:03:32 -08:00
Ryan Dahl
70b2a44579 Remove -Werror from V8 2010-03-10 11:03:26 -08:00
Ryan Dahl
7eb126474d Merge branch 'master' into net2 2010-03-10 11:02:01 -08:00
Ryan Dahl
073947c150 Upgrade V8 to 2.1.3 2010-03-10 10:50:46 -08:00
Ryan Dahl
0918bb2070 Adjust a few more tests to work with net2 2010-03-09 18:37:23 -08:00
Ryan Dahl
c1a0ade7e7 Further net2 compatibilities 2010-03-09 16:27:49 -08:00
Standa Opichal
c2c0cfb75f Making sure node-waf finds its real bindir even when executed through a symlinked path. 2010-03-09 13:05:44 -08:00
Ryan Dahl
b07f2e25f4 Update http2 for new stream API 2010-03-09 12:00:06 -08:00
Ryan Dahl
264a67aed2 Update net.js for new stream API 2010-03-09 11:59:42 -08:00
Ryan Dahl
dd21a4f4b9 Remove the 'Error: (no message)' exceptions print stack trace instead 2010-03-09 11:21:19 -08:00
Ryan Dahl
6310e717e4 Remove the 'Error: (no message)' exceptions print stack trace instead 2010-03-09 11:20:58 -08:00
Ryan Dahl
93c0c24a4e process.mixin: Return instead of continue in forEach 2010-03-09 10:54:26 -08:00
Ryan Dahl
c69d3f4a35 Don't use process.mixin in test-buffer.js 2010-03-09 10:54:01 -08:00
Ryan Dahl
faffee0c62 Merge branch 'master' into net2 2010-03-09 10:45:06 -08:00
Ryan Dahl
00333d59d6 process.inherits -> sys.inherits 2010-03-09 10:33:19 -08:00
Aaron Heckmann
f8eb163728 Add removeAllListeners 2010-03-09 09:30:14 -08:00
isaacs
b90d63b998 Change the include() message so that it doesn't recommend process.mixin. 2010-03-09 09:05:20 -08:00
isaacs
602d1861a1 Remove process.mixin from repl 2010-03-09 09:04:45 -08:00
Ryan Dahl
fb6dc11f11 Clean up some things in the benchmarks 2010-03-08 19:06:25 -08:00
Ryan Dahl
04999ef969 Remove -Werror from deps/v8/SConstruct
-_-
2010-03-08 18:04:59 -08:00
isaacs
c488e5775a Remove process.mixin dependencies from benchmark scripts 2010-03-08 17:57:38 -08:00
isaacs
a38aa02f9f Remove process.mixin dependency from fs 2010-03-08 17:57:08 -08:00
isaacs
5861db8a69 Remove process.mixin dependency from all tests. 2010-03-08 17:57:04 -08:00
Ryan Dahl
74614c1bf1 Change libev/wscript for waf 1.5.14 2010-03-08 17:45:57 -08:00
Ryan Dahl
5809483b78 Upgrade waf to 1.5.14a 2010-03-08 13:35:08 -08:00
Ryan Dahl
8c4561d2a0 Merge branch 'master' into net2 2010-03-08 11:14:11 -08:00
Ryan Dahl
c9c13e0718 require('fs') in test-http-tls 2010-03-08 11:13:24 -08:00
Felix Geisendörfer
39472709f0 fs.createWriteStream throws fs undefined error
The improved test suite now catches this bug, so hopefully thing like
this will not happen again.

See: http://github.com/ry/node/issues#issue/75
2010-03-08 10:22:19 -08:00
Felix Geisendörfer
44dde5f24c Remove fs/path globals from test suite
It is way too easy to not notice bugs due to those modules being
exported as globals while running the test suite.

See: http://github.com/ry/node/issues#issue/75
2010-03-08 10:20:07 -08:00
Ryan Dahl
e898c1f2e3 Upgrade WAF to 1.5.14 2010-03-08 10:18:24 -08:00
Ryan Dahl
c98b0799bf Upgrade V8 to 2.1.2.6 2010-03-08 09:33:11 -08:00
Ryan Dahl
40e42e8107 Replace --cflags with --vars 2010-03-08 09:10:24 -08:00
Felix Geisendörfer
9a9f08b1bc Add callbacks to stream methods
Allows for more fine graining, especially finding out about an individual
chunk of data being flushed in a write stream rather than the whole queue.

This commit also fixes a bug causing forceClose to fail on a readStream that
did not finish opening yet.
2010-03-08 09:05:56 -08:00
Felix Geisendörfer
c47391526c Fix typo in fs.writeStream docs 2010-03-08 09:05:31 -08:00
Ryan Dahl
209b219b10 Add environmental varibles to help text 2010-03-08 08:33:10 -08:00
Ryan Dahl
d67fdcc177 clean should not docclean 2010-03-07 12:13:16 -08:00
Rasmus Andersson
374300ca8d Updated patch of node.cc for supporting reading of umask 2010-03-07 12:07:57 -08:00
Ryan Dahl
681733d905 Merge branch 'master' into net2 2010-03-05 20:51:26 -08:00
Ryan Dahl
a258992855 Depreciation process.unloop() 2010-03-05 18:07:28 -08:00
Ryan Dahl
39b63dfe17 bump version 2010-03-05 17:55:13 -08:00
Ryan Dahl
b9cd3363ef Bugfix in querystring 2010-03-05 17:07:02 -08:00
Rob Ellis
5c78c45fa3 Added Parse INI to Node, tests 2010-03-05 16:17:57 -08:00
Ryan Dahl
939a6c7484 Clean up homepage 2010-03-05 16:02:06 -08:00
Ryan Dahl
e72b072d53 Decouple timer from EventEmitter 2010-03-05 15:31:26 -08:00
Ryan Dahl
6d60d2db00 Revert "Use kqueue on macintosh"
Experiencing bugs http://github.com/ry/node/issues/#issue/74

This reverts commit 409020a67d.
2010-03-05 14:36:13 -08:00
Ryan Dahl
5217eda1ae Merge remote branch 'felixge/file2' 2010-03-05 11:11:23 -08:00
Felix Geisendörfer
dbf9e466bc Documentation for FileWriteStream 2010-03-05 20:04:19 +01:00
Felix Geisendörfer
a96b5c792e Documentation for FileReadStream 2010-03-05 19:54:28 +01:00
Felix Geisendörfer
78c61000c2 Properly handle read errors
Also set readable to false if the initial fs.open call failed.
2010-03-05 19:53:59 +01:00
Felix Geisendörfer
145fac2b56 Use sys inherits
Also use events.EventEmitter instead of process.EventEmitter.
2010-03-05 19:24:20 +01:00
Felix Geisendörfer
0fcc94525a Renamed fileReadStream -> createReadStream
Did the same for fileWriteStream as well.
2010-03-05 18:56:25 +01:00
Felix Geisendörfer
48562fa938 Updated file streams
Read streams now only support forceClose()

Write streams support close() and forceClose()
2010-03-05 18:43:29 +01:00
Felix Geisendörfer
b4fba5fe8e Simplify buffering
There is no way more than one read event would be buffered.
2010-03-05 18:43:29 +01:00
Felix Geisendörfer
f6e00759ef Initial read stream implementation 2010-03-05 18:43:28 +01:00
Felix Geisendörfer
9415ca909e Use process.mixin instead of sys.mixin
The process namespace has not been cleaned up yet, so mixin is still
attached to process.
2010-03-05 18:42:32 +01:00
Ryan Dahl
e6dbf8d632 Revert "Remove process.unloop()"
People need this for backwards compatibility. Will be removed soon though!

This reverts commit 1e710cafa7.
2010-03-04 13:00:37 -08:00
Ryan Dahl
1e710cafa7 Remove process.unloop() 2010-03-04 11:51:39 -08:00
Ryan Dahl
409020a67d Use kqueue on macintosh 2010-03-04 10:02:41 -08:00
Ryan Dahl
d5ee777af2 Don't allow child process to clobber environ 2010-03-03 15:34:57 -08:00
Ryan Dahl
d1500cee6e Store connection in OutgoingMessage 2010-03-03 13:06:19 -08:00
Ryan Dahl
9d4d232eaa Factor out a http.Client._reconnect() function 2010-03-03 12:49:06 -08:00
Ryan Dahl
64d0e328e8 Remove unused EventEmitter object 2010-03-03 12:41:31 -08:00
isaacs
0dba38eef0 Fix a bug that was suppressing the error in setgid, allowing it to fail silently. 2010-03-03 10:57:01 -08:00
Ryan Dahl
769a35024f Allow passing env to child process 2010-03-03 10:45:58 -08:00
Jacek Becela
548d59d07e Fix fs.readFile handling encoding. Should close issue #72 2010-03-03 10:28:33 -08:00
Ryan Dahl
0e844d3bcb tcp.Connection.prototype.write should return boolean 2010-03-02 21:16:17 -08:00
Rasmus Andersson
5c602b750a Rewrote realpath implementation solving all known failing tests (also added a bunch of new test cases) 2010-03-02 17:35:34 -08:00
Ryan Dahl
9be3df0828 Add sys.log() 2010-03-02 17:35:01 -08:00
Felix Geisendörfer
18a70ffda1 Tweaks
- Add 'writeable' property
- Renamed pump->flush
- Use sys.mixin instead of process.mixin
2010-03-02 23:29:54 +01:00
Felix Geisendörfer
61785afb3d Initial write stream implementation 2010-03-02 23:29:54 +01:00
Ryan Dahl
7881b59f6b Merge branch 'master' into net2 2010-03-02 13:20:07 -08:00
Ryan Dahl
6670154819 'make test' only runs the simple test 2010-03-02 13:18:59 -08:00
Ryan Dahl
776b099d75 Disable ipv6 test on solaris 2010-03-02 21:10:05 +00:00
Ryan Dahl
62c4214711 Properly throw error on failed connection 2010-03-02 20:59:47 +00:00
Ryan Dahl
e165859c2e Fix coupling error on Solaris
Was getting a lot of

  push_pump read(): Resource temporarily unavailable

Apparently Solaris can return read() < 0 but errno == 0 to indicate a
EAGAIN?
2010-03-02 20:39:38 +00:00
Ryan Dahl
7bd3280cc2 process.inherits -> sys.inherits in net.js 2010-03-02 10:59:19 -08:00
Ryan Dahl
d9e3b466a7 Merge branch 'master' into net2 2010-03-02 10:44:25 -08:00
Ryan Dahl
fdbc9a82e4 Use EVBACKEND_SELECT on Solaris
Using EVBACKEND_PORT DTraceToolkit-0.99/Proc/syscallbypid.d reports after 5
seconds

   PID CMD                      SYSCALL                     COUNT
     . .                        .                               .
     . .                        .                               .
     . .                        .                               .
 28551 mysqld                   fcntl                         485
 24793 httpd                    gtime                         528
 28551 mysqld                   read                          707
 28551 mysqld                   gtime                         956
 21050 rsync                    pollsys                       965
 21050 rsync                    read                          965
 24793 httpd                    read                          982
 28551 mysqld                   lwp_sigmask                  1422
  4675 dtrace                   ioctl                        1579
 15136 node                     portfs                      15681
 15136 node                     clock_gettime               31358

On a very simple node process.
2010-03-02 10:39:07 -08:00
Rasmus Andersson
20d5963fae Added fs.realpath and fs.realpathSync (pure javascript versions) 2010-03-01 19:14:24 -08:00
Ryan Dahl
7a251f3bdf Fix shebang in wscript 2010-03-01 19:14:14 -08:00
Felix Geisendörfer
55ab9b4541 Bug fix for deep process.mixin array handling
process.mixin was throwing an exception when trying to do a deep copy
of an object that included an array.

This bug was introduced in: 3bb7ad6fea
2010-03-01 14:13:57 -08:00
Benjamin Thomas
6034701f57 Stop sys.inspect from adding extra new lines for deep objects that are elements in an array.
A couple other small fixes:

If the keys of an object were all numeric they should be quoted. This
way, you can now hypothetically copy and paste the output into your code
(if the object doesn't contain any circular objects, deeply nested
objects, Dates, RegExps or functions. I think).

If a nested object isn't being recursed into, output "[Object]" as
opposed to "[object Object]".

If an object is longer than the max width but it is one line no matter
what, then don't put the closing brace on a new line.

Fix some formatting issues to try and match Node's style guidelines.
2010-03-01 13:34:46 -08:00
Ryan Dahl
b021a845f7 Move process.inherits to sys 2010-03-01 11:39:35 -08:00
Ryan Dahl
30b700ee22 Move watchFile into fs module 2010-03-01 10:42:37 -08:00
Ryan Dahl
810882c1ad Move 'fs' module out of src/node.js into its own file 2010-03-01 10:14:49 -08:00
Ryan Dahl
faa0c6d449 Add note about testing patches with debug build 2010-03-01 09:11:04 -08:00
kriskowal
2b91f8d265 Fixed spurious suffixes on fs.readlink. 2010-02-27 21:33:27 -08:00
arlolra
724ccf10df Tests on common port. 2010-02-26 12:20:10 -08:00
Ryan Dahl
16e32c8fd9 Allow for net reconnects 2010-02-26 12:13:49 -08:00
Ryan Dahl
71d237e6a0 Move net2 tests into test/simple 2010-02-26 12:13:33 -08:00
Ryan Dahl
c6cc386819 Merge branch 'master' into net2 2010-02-26 11:34:24 -08:00
Zoran Tomicic
b2995829e1 Edit PrintHelp() text 2010-02-26 00:30:43 -08:00
Ryan Dahl
c219571eac Use more beautiful object syntax in docs 2010-02-25 18:59:02 -08:00
arlolra
3497da370b Decoupled readdir test. 2010-02-25 18:49:10 -08:00
Benjamin Thomas
de1521413e Make the output of sys.inspect a lot more compact.
See:
http://groups.google.com/group/nodejs/browse_thread/thread/ac060521e27fef65

By default now, sys.inspect doesn't recurse more than two times.  Pass
in null as the third parameter to make it recurse indefinitely.
2010-02-25 18:23:11 -08:00
Benjamin Thomas
a2714be8b5 Add optional third argument sys.inpect to indicate how many times you want it to recurse 2010-02-25 13:17:05 -08:00
Benjamin Thomas
b1b84960ce Rename writeHeader to writeHead 2010-02-25 13:01:21 -08:00
Ryan Dahl
b08f2af344 Update common.js path for new test layout 2010-02-25 12:01:23 -08:00
arlolra
04fac19822 Split tests. 2010-02-25 11:41:11 -08:00
Karl Guertin
9ad7539cf9 Add (unused) callback parameter to fs.readFile, fs.writeFile 2010-02-24 14:46:30 -08:00
Jonas Pfenniger
8f59cccb75 Removed deprecation errors in src/node.cc
Removed constness on string litterals. This should cause no problem
since we're not modifying them.
2010-02-24 13:16:52 -08:00
Ryan Dahl
e0ecf4f8f5 Remove -Werror on V8
Are they ever going to fix this?
2010-02-23 22:58:54 -08:00
Ryan Dahl
b80bdda14e Upgrade V8 to 2.1.2 2010-02-23 17:52:50 -08:00
James Duncan
df1c1e593f Add setgid,getgid 2010-02-23 14:45:02 -08:00
Ryan Dahl
4fd0225e41 Give signal handlers maximum priority 2010-02-23 13:08:04 -08:00
Ryan Dahl
c5b149ab1e Add hack to get error event on socket timeout
See
http://groups.google.com/group/nodejs/browse_thread/thread/4898a1ed3b99dcf0
2010-02-23 13:05:15 -08:00
Rasmus Andersson
b57d946184 added fs.link, fs.symlink, fs.readlink
including sync versions and complete tests
2010-02-22 19:23:06 -08:00
Ryan Dahl
a97fdf5c39 Merge branch 'master' into net2 2010-02-22 14:22:20 -08:00
Ryan Dahl
f0f2d2ee70 Fix readdirSync in docs 2010-02-22 14:04:54 -08:00
Ryan Dahl
dc041628ce Add not about nextTick and setTimeout(fn, 0) 2010-02-22 13:58:48 -08:00
Jérémy Lal
ffb4b47367 Fix for when EV_MULTIPLICITY=1 2010-02-22 13:25:57 -08:00
Ryan Dahl
46ebaa00ce Encoding 0 length data, returns '' instead of null 2010-02-22 12:07:07 -08:00
Ryan Dahl
b8dee2eb20 camel case variables in url module 2010-02-22 06:49:14 -08:00
Ryan Dahl
bb0d1e65e1 bump version 2010-02-22 01:31:14 -08:00
Ryan Dahl
6ee0bf704a Fix dns bug - first cb arg wasn't null 2010-02-22 01:26:40 -08:00
Ryan Dahl
e8363abb6a delete changelog.html on 'make docclean' 2010-02-21 23:13:40 -08:00
Ryan Dahl
05ae932a0e Implement fs.readdirSync() 2010-02-21 23:06:08 -08:00
Benjamin Thomas
49cd1bbf84 Fix bug in process.mixin where deep copies would not work at all.
Before, doing this:

    var sys = require("sys");

    var obj = {
      one: 1,
      two: 2,
      three: {
        value: 3
      }
    };

    sys.p(process.mixin(true, {}, obj));

Would output this:

    {
     "two": 2,
     "three": {
      "one": 1,
      "two": 2,
      "three": {
       "value": 3
      },
      "value": 3
     },
     "one": 1
    }

When it should have outputed this:

    {
     "one": 1,
     "two": 2,
     "three": {
      "value": 3
     }
    }
2010-02-21 22:51:23 -08:00
Ryan Dahl
4c8889bba2 Revert "Add fs.readdirSync()"
Doesn't work on Linux.

This reverts commit 05d6da6c4a.
2010-02-21 21:53:35 -08:00
isaacs
9acc8a686a Expose fs.lstat 2010-02-21 21:43:45 -08:00
Zoran Tomicic
d98ea70168 Configurable debug ports, and --debug-brk 2010-02-21 21:17:25 -08:00
Ryan Dahl
12d78cd1df Rename sendHeader to writeHeader; allow reasonPhrase 2010-02-21 16:53:49 -08:00
Micheil Smith
05d6da6c4a Add fs.readdirSync() 2010-02-21 16:32:20 -08:00
Ryan Dahl
c094dda53c Move errors for readPause and readResume 2010-02-21 16:01:12 -08:00
Ryan Dahl
7a8ede6f80 Add note about Promise removal 2010-02-21 15:48:43 -08:00
Scott González
6eff8937d7 Fixed encoding in fs.writeFile(). 2010-02-21 10:35:48 -08:00
Jeremy Ashkenas
2916a2acd4 Remove '--' from command line parsing 2010-02-20 22:47:49 -08:00
Ryan Dahl
a0c48eecab Rename readPause and readResume to pause/resume 2010-02-20 22:38:42 -08:00
Ryan Dahl
1db824a9c1 Add changelog to website 2010-02-20 22:30:56 -08:00
Tim Caswell
68af59ef6b Fix typo in fs.writeFile 2010-02-20 21:03:03 -08:00
Ryan Dahl
ea4956f046 Simplify call to V8::IdleNotification
Run a max priority ev_timer every 2 seconds. If there aren't any pending
watchers then call V8::IdleNotification() once. This is slower at freeing
memory, but I think simpler and less aggressive.
2010-02-20 20:36:33 -08:00
Ryan Dahl
0485cc41d5 Remove promises 2010-02-20 19:49:00 -08:00
Ryan Dahl
7a51184420 Multipart test no longer depend on Promise 2010-02-20 19:44:47 -08:00
Ryan Dahl
5fbc750db7 multipart no longer depends on Promise 2010-02-20 19:17:58 -08:00
Ryan Dahl
daacb81d3a Experimental idle garbage compact 2010-02-20 18:23:21 -08:00
Ryan Dahl
fcda5e8dfa If ab isn't installed skip keep-alive test 2010-02-19 18:54:25 -08:00
Rasmus Andersson
860fcf23f4 skipping TLS test if node was not compiled with TLS 2010-02-19 18:35:35 -08:00
Ryan Dahl
de7016eac5 sys.exec() no longer uses Promise 2010-02-19 16:55:46 -08:00
Ryan Dahl
c04b679e12 'dns' no longer uses Promise 2010-02-19 16:41:08 -08:00
Ryan Dahl
d0f2d465aa http.cat no longer uses Promise 2010-02-19 16:26:48 -08:00
Ryan Dahl
ef55324f1a Do not use Promise in 'fs' module 2010-02-19 16:02:30 -08:00
Ryan Dahl
662fdfed37 fs.closeSync should return Undefined on success 2010-02-19 16:02:14 -08:00
Ryan Dahl
375131376f Module loading no longer depends on Promise
The module loading code is looking extremely messy. It needs a refactor.
2010-02-19 11:59:05 -08:00
Ryan Dahl
bcf163da27 Upgrade V8 to 2.1.1 2010-02-19 10:40:48 -08:00
Ryan Dahl
764783560e Remove Promise.prototype.wait()
I don't want users to have to think about coroutine safety.

http://thread.gmane.org/gmane.comp.lang.javascript.nodejs/2468/focus=2603
2010-02-19 10:19:46 -08:00
Ryan Dahl
860d008d54 Truly synchronous require()
This is to reduce our dependency on wait(). For some reason this patch
affects the timer test:

  % ./node test/mjsunit/test-timers.js
  diff: 989
  diff: 989
  diff: 1989
  diff: 2989

Previously it showed:

  % ./node test/mjsunit/test-timers.js
  diff: 1000
  diff: 1000
  diff: 2000
  diff: 3000

I'm not sure what caused this change, and it's rather disturbing. However I
want to remove wait() as soon as possible and so am pushing this patch
through.

The module loading code is becoming increasingly ugly - this patch has not
helped. A refactor needs to be done soon.
2010-02-19 10:06:49 -08:00
Ryan Dahl
ca02b4f586 Fix AUTHORS again
I hope I won't spend all my time now maintaining this file...
2010-02-18 16:46:20 -08:00
Ryan Dahl
c5de1b6350 fix email in AUTHORS 2010-02-18 10:17:19 -08:00
Rasmus Andersson
3bb7ad6fea fixed process.mixin to properly copy getters/setters 2010-02-18 10:17:13 -08:00
Micheil Smith
bcc032e43a Adding interface between node and libeio for Chmod. 2010-02-18 10:13:57 -08:00
Ryan Dahl
cb32883537 Add authors file 2010-02-17 22:43:28 -08:00
Ryan Dahl
c2e58c9dee Remove a few wait() calls in the tests 2010-02-17 21:28:31 -08:00
Ryan Dahl
4f01c74e9f Fix long lines in docs 2010-02-17 18:41:56 -08:00
Ryan Dahl
7811fa6fec Update example on index.html 2010-02-17 17:07:08 -08:00
Ryan Dahl
07423f3a87 Merge branch 'master' into net2 2010-02-17 15:46:30 -08:00
Ryan Dahl
7c1c89fc29 Update benchmark script to new API 2010-02-17 15:37:12 -08:00
Ryan Dahl
916d592be1 Fix 'make website-upload' 2010-02-17 15:20:09 -08:00
Ryan Dahl
87d5e5b316 bump version 2010-02-17 15:12:42 -08:00
Ryan Dahl
217b60a272 sed -i 's/git-/git /g' Makefile 2010-02-17 15:07:44 -08:00
Ryan Dahl
0314a10e10 Clean up and rename test-stat-handler 2010-02-17 14:30:50 -08:00
Ryan Dahl
92292c8394 Rename a few remaining fs.cat calls. 2010-02-17 14:00:53 -08:00
Ryan Dahl
0b823dce61 Add /opt/local/lib as a search path for gpg-error
Why doesn't WAF just search LD_LIBRARY_PATH?
2010-02-17 13:56:47 -08:00
Ryan Dahl
c622142692 Add note about gnutls and libgpg-error in installation instructions 2010-02-17 13:39:03 -08:00
Ryan Dahl
d9b0eb3922 Remove references to wait() in docs 2010-02-17 13:29:25 -08:00
Ryan Dahl
df94c763ae documentation clean up 2010-02-17 13:14:34 -08:00
Ryan Dahl
f57b0e993b Add asciidoc-xhtml11.js for use with asciidoc 8.5.1 2010-02-17 12:48:14 -08:00
Ryan Dahl
5013bf1781 API: OutgoingMessage.prototype.finish() renamed to close() 2010-02-17 11:10:10 -08:00
Tim Caswell
6115df6338 File API tweaks
- Rename fs.cat to fs.readFile
- Move file.write to fs.writeFile
- Allow strings for the flag argument to fs.open
  ("r", "r+", "w", "w+", "a", "a+")
- Remove the unused 'File' module / class
2010-02-16 23:55:53 -08:00
Ryan Dahl
ae85d9af97 API: Make request/response object closer to stream interface
- sendBody() renamed to write()
- 'body' event renamed to 'data'
- 'complete' event renamed to 'end'
2010-02-16 22:16:29 -08:00
isaacs
46a47d2799 Add some puts() to test-multipart.js to show what it's doing. 2010-02-16 21:18:02 -08:00
Ryan Dahl
5468173ce9 [debug] Give debug_watcher maximum priority 2010-02-16 19:45:12 -08:00
Ryan Dahl
4322523fcf [debug] Use ProcessDebugMessage() instead of executing empty script
And don't use --debugger_auto_break v8 flag, it seems unnecessary.
2010-02-16 19:45:01 -08:00
Jérémy Lal
5a08a5653c Calculate page size with getpagesize for armel 2010-02-16 16:16:01 -08:00
Ryan Dahl
ecd61742a1 Throw from connection.connect if resolving.
Bug reported by James Golick.
2010-02-16 14:38:51 -08:00
Ryan Dahl
23cf502db7 API: connection.send() renamed to connection.write() 2010-02-16 13:18:42 -08:00
Ryan Dahl
1bf46d1536 Revert "Add process.startTime"
Unnecessary

This reverts commit 896cef23c4.
2010-02-16 09:32:25 -08:00
Zoka
fbef11b679 Use InstanceTemplate() instead of PrototypeTemplate() for accessor methods
This fixes crash that used to happen when Eclipse debugging session hits the
breakpoint that is set either in timer or connection callback.
2010-02-16 09:04:19 -08:00
Felix Geisendörfer
490cac0d7e Fix Promise.wait() for fired promises
Failure introduced in 80ace36e4c
2010-02-15 17:24:07 -08:00
Jonas Pfenniger
80ace36e4c Added failing test: promise.wait() after promise.emitXXX() 2010-02-15 17:22:13 -08:00
Ryan Dahl
95fd370096 Remove unused variable 2010-02-15 17:15:40 -08:00
Yuichiro MASUI
1793ee1c80 Fixed: promise late chain 2010-02-15 17:12:40 -08:00
Mark Hansen
98e61db216 sys.inspect(Date) now shows the date value 2010-02-15 17:08:22 -08:00
visionmedia
9c6263bff8 Added multiple arg support for sys.puts(), print(), etc. 2010-02-12 10:43:07 -08:00
Ryan Dahl
b82ef28d9d Rename 'posix' module to 'fs' 2010-02-12 01:04:14 -08:00
Ryan Dahl
896cef23c4 Add process.startTime 2010-02-12 00:47:35 -08:00
Ryan Dahl
bc17d94a0a API: tcp events 'receive' to 'data', 'eof' to 'end'
No deprecation messages. Not sure how...
2010-02-12 00:25:19 -08:00
Ryan Dahl
7d428a7741 s/tinyclouds.org/nodejs.org/ 2010-02-12 00:08:26 -08:00
Ryan Dahl
b20c343a7a Fix whitespace and warnings in node.cc 2010-02-11 21:55:08 -08:00
Felix Geisendörfer
211e82e8d9 Simple test case for require.async()
This is to make sure this doesn't break after implementing the new
truly sync require() function.
2010-02-11 21:45:03 -08:00
Felix Geisendörfer
6c94b8e4e4 Implemented posix.catSync() 2010-02-11 21:11:16 -08:00
Ryan Dahl
1b42276851 Small clean up to test-timers.js 2010-02-11 15:51:46 -08:00
Ryan Dahl
cd41e30bcc Return chunk & bytes read for posix.readSync() 2010-02-11 15:17:32 -08:00
Felix Geisendörfer
b02b54e003 Fix: Module cache did not propagate
This patch makes sure nested modules are available in their parents
cache. The module simplification broke this behavior.

See:

http://groups.google.com/group/nodejs/browse_thread/thread/e875132469547d2
b73f61a137
2010-02-11 11:23:19 -08:00
Ryan Dahl
dc01587c6c Merge branch 'master' into net2 2010-02-10 14:05:29 -08:00
masuidrive
3337e9da1a Build system: support spaces in directory names 2010-02-10 07:42:16 -08:00
Michael Stillwell
9f6f19df1b Add test: modifying event listeners during callback. 2010-02-09 14:47:37 -08:00
Ryan Dahl
3eaaaffadb Ignore EAGAIN in stderr dumps.
(Going out of the way to be sync)
2010-02-09 14:45:14 -08:00
Ryan Dahl
88b9359284 Fix stderr flushing problem 2010-02-09 14:11:58 -08:00
Ryan Dahl
49de41ef46 bump version 2010-02-09 13:20:20 -08:00
Tim Caswell
3aca908db3 Document the changes to sys.inspect's API.
It now takes an optional showHidden argument that shows hidden/non-enumerable properties of objects.

Also cleanup the lib/sys.js file a bit.
2010-02-09 09:20:15 -08:00
Tim Caswell
e33c66654a Rewrite sys.inspect to be more reliable and handle crazy edge cases. 2010-02-09 08:57:38 -08:00
isaacs
3adcdfc2e1 A rewrite of multipart library.
1. Support streaming in the simple case.  Put huge warnings around the
buffering API.
2. Support nested multipart messages.
3. Support various kinds of multipart messages, including all the various
absurdities of multipart email messages.
4. Error out on various invalid types of data that might come through.
5. Gracefully several edge cases that occur when the chunk size is smaller
than the boundary length, or cuts into the \r\n, etc.
6. Provide both positive and negative tests.
2010-02-08 14:03:06 -08:00
Ryan Dahl
4234ac53e2 Use Google's jsmin.py so that Node can be used for evil 2010-02-08 13:52:13 -08:00
Ryan Dahl
b6edae5671 Expose errno exception creation 2010-02-08 07:36:40 -08:00
Michael Carter
a38607605c Add process.setuid(), getuid() 2010-02-07 22:13:10 -08:00
Ryan Dahl
6f92d8f3b0 Add handlescope and flush to process.reallyExit() 2010-02-07 21:59:56 -08:00
Ryan Dahl
ae1fc497bb Fix stdout flush issue
http://github.com/ry/node/issues#issue/53
2010-02-07 21:56:36 -08:00
Ryan Dahl
a695065305 Add failing test for stdout flush on exit 2010-02-07 18:05:58 -08:00
Ryan Dahl
76c1805c67 Add posix.truncate() 2010-02-07 17:18:28 -08:00
Ryan Dahl
77145ba229 Throw errors from server.listen() 2010-02-07 16:51:20 -08:00
Ryan Dahl
979f5889d5 Optimize: Use callbacks instead of events in net2 2010-02-05 20:14:48 -08:00
Ryan Dahl
d979a7993e Wrap syscalls with try-catch 2010-02-05 19:47:16 -08:00
Ryan Dahl
263813ae3e Whitespace for node_net2.cc 2010-02-05 19:34:27 -08:00
Ryan Dahl
8fdb39a4ae Add errno symbol to error messages 2010-02-05 19:26:55 -08:00
Ryan Dahl
96f42745ff Merge branch 'master' into net2 2010-02-05 19:00:26 -08:00
Matt Brubeck
1737cdc112 Fix the documentation of dns error handling.
These are actually passed as Error objects, not separate "code" and "message"
parameters.
2010-02-05 18:23:32 -08:00
Ryan Dahl
fe85062046 Bugfix: blocked pumping in stdio coupling
This should fix the test in c05b5d8 by Mikeal Rogers.
2010-02-05 17:14:14 -08:00
Mikeal Rogers
c05b5d8b59 Adding test for bug in stdio.
http://groups.google.com/group/nodejs/browse_thread/thread/10fda8eaf7276642/e5d5147f2b666abd
2010-02-05 10:58:00 -08:00
Felix Geisendörfer
b73f61a137 Simplified module system
createModule got removed as it was unnecessary and caused issues by
doing its own cache checks independent of loadModule. Internal modules
are now the only globally cached modules, all other modules are only
cached by inheriting their parent modules cache.

Credits: Module specific cache and a few other diffs by Blaine Cook

431662d25c
http://romeda.org/blog/2010/01/hot-code-loading-in-nodejs.html
http://thread.gmane.org/gmane.comp.lang.javascript.nodejs/1994
2010-02-04 14:08:39 -08:00
Ryan Dahl
e5a41a75b7 Revert "Adding output of Platform information into the test runner"
Broken on at least one platform http://pastie.org/808217

This reverts commit 704f394c66.
2010-02-03 12:57:05 -08:00
Ryan Dahl
0cfa789cc5 bump version 2010-02-03 12:20:27 -08:00
Ryan Dahl
f3ad635576 Downcase process.ARGV/ENV to process.argv/env 2010-02-03 12:19:21 -08:00
Aaron Heckmann
8f52142116 look for -1 instead of false returned from string.indexOf 2010-02-03 10:13:15 -08:00
Ryan Dahl
173a8c9842 Disable dns and fs-sendfile tests. 2010-02-03 10:05:24 -08:00
Ryan Dahl
0b07f32819 Merge branch 'master' into net2 2010-02-03 10:00:39 -08:00
Ryan Dahl
c7cb4daa25 Upgrade V8 to 2.1.0 2010-02-03 09:07:02 -08:00
Ryan Dahl
1660db6b87 Inline Buffer::HasInstance 2010-02-02 19:35:06 -08:00
Ryan Dahl
c723acc721 Remove some HandleScopes from HTTP
for a %2.5 improvement in hello world HTTP score.
2010-02-02 18:45:18 -08:00
Ryan Dahl
7c9919f810 Remove some unnecessary handlescopes 2010-02-02 18:37:14 -08:00
Ryan Dahl
ce4204a069 Upgrade http-parser
Fixes, among other things, a header overflow attack.
2010-02-02 16:40:59 -08:00
Ryan Dahl
987441283b Callbacks from process.fs always start with error object 2010-02-02 11:04:59 -08:00
Ryan Dahl
33509bdbe5 eof -> end 2010-02-01 18:19:14 -08:00
Ryan Dahl
4f56d8ae24 Rename Buffer.utf8Length to Buffer.utf8ByteLength 2010-02-01 13:10:37 -08:00
Ryan Dahl
fc025f878a Remove __wrap__s 2010-01-31 11:13:30 -08:00
Ryan Dahl
9f5643f427 Reorganize the start-up process
- assign 'GLOBAL' (and now 'global') inside src/node.js

- position for eventually allowing replacements to src/node.js for people
  like Kris Kowal who want the nice libev and libeio bindings but not
  necessarily node's choices of modules or promises.
2010-01-30 23:22:34 -08:00
Jonas Pfenniger
7a755e04a9 Was using the old node object to get the int from the constant. 2010-01-30 20:58:24 -08:00
Micheil Smith
704f394c66 Adding output of Platform information into the test runner 2010-01-29 23:46:56 -08:00
Felix Geisendörfer
ac2abe5b1e Bugfix: Handle Content-Type headers with charset
Some HTTP clients include a charset parameter in the Content-Type, e.g:

multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY

This patch makes the multipart parser more forgiving towards unexpected
information included in the Content-Type header.
2010-01-29 18:04:48 -08:00
Ryan Dahl
785531691b Add buffer.unpack 2010-01-29 09:57:47 -08:00
Ryan Dahl
49451c1dab Merge branch 'master' into net2 2010-01-29 00:58:43 -08:00
Ryan Dahl
344243db92 Simplify send buffer logic 2010-01-28 19:13:13 -08:00
Ryan Dahl
aadce8e1a9 Optimize, clean up net2 net.js and http2.js 2010-01-28 14:31:57 -08:00
Ryan Dahl
c328f3e6c6 Add new http server library 2010-01-28 11:17:21 -08:00
Ryan Dahl
4347906b7f Fix require() in test-buffer.js 2010-01-27 18:45:07 -08:00
Ryan Dahl
b06dda1f5e ObjectWrap fixed - buffers working!
Hot bug fix from net2 branch.
2010-01-27 18:33:15 -08:00
Ryan Dahl
b93b09a877 ObjectWrap fixed - buffers working! 2010-01-27 18:23:35 -08:00
Ryan Dahl
e82893d3f2 Clean up IOWatcher 2010-01-27 16:07:15 -08:00
Ryan Dahl
bf803f478b Reimplment Buffers 2010-01-27 15:40:09 -08:00
Standa Opichal
5a70224081 Adding OS X .dmg build scripts.
Simply place this into the root of your nodejs git working copy and
run ./tools/osx-dist.sh. It will create an dist-osx folder which will
comprise of the resulting .dmg file (install path is
/usr/local/nodejs with symlinks added to /usr/local/bin) along with
other files used during its construction.

$ ls -1 dist-osx/
nodejs-v0.1.26-11-gcd6397c
nodejs-v0.1.26-11-gcd6397c.dmg
nodejs-v0.1.26-11-gcd6397c.pkg
nodejs-v0.1.26-11-gcd6397c.plist

The resulting installed package is going to be visible using the
OS X 'pkgutil --packages' command. You can even safely uninstall
sudoing 'pkgutil --unlink org.nodejs.NodeJS-...' and subsequently
let the system forget about the package being ever seen by
'pkgutil --forget org.nodejs.NodeJS-...'.

Here is the current package ID I have installed:

$ pkgutil --pkgs | grep node
org.nodejs.NodeJS-v0.1.26-11-gcd6397c

Use this patch freely without hesitation.

Signed-off-by: Standa Opichal <opichals@gmail.com>
2010-01-27 14:12:31 -08:00
Ryan Dahl
1bb52947e0 Forgot to include fix from HTTP client bug (30b0522) 2010-01-27 10:00:46 -08:00
Ryan Dahl
30b0522157 Bugfix: HTTP client automatically reconnecting
Test case by tlynn.
2010-01-27 09:34:45 -08:00
Ryan Dahl
a668d07484 Clean up http_parser binding - add asserts 2010-01-26 18:37:16 -08:00
Ryan Dahl
824a2fd1c6 Clean up a few bugs in net.js 2010-01-26 18:36:24 -08:00
Ryan Dahl
c106c3740b Use ObjectWrap again for IOWatchers.
I think the problem is in Buffers.
2010-01-26 18:35:01 -08:00
Ryan Dahl
b8c3d715fd use efence again 2010-01-26 18:34:42 -08:00
Ryan Dahl
ccd632f278 Simplify ObjectWrap; make fewer Weak callbacks 2010-01-26 12:00:17 -08:00
Ryan Dahl
741e3fa91b HTTP works somewhat on net2 now
However it's not working very well: Hitting a 'hello world' server with many
requests (ab -t 60 -c 10) will cause it to crash with the following error.

  Obtained 3 stack frames.

  ./node(_Z11print_tracev+0x1c) [0x80d1b3c]
  ./node(_ZN4node6Parser7ExecuteERKN2v89ArgumentsE+0x69) [0x80d3759]
  ./node [0x811f44b]
  TypeError: Already parsing a buffer
      at Socket.<anonymous> (/home/ryan/projects/node/lib/http2.js:393:20)
      at IOWatcher.callback (/home/ryan/projects/node/lib/net.js:81:12)
      at node.js:985:9
      at node.js:989:1
2010-01-25 17:55:08 -08:00
Blaine Cook
cd6397cc45 Add support for MX, TXT, and SRV records in DNS module. 2010-01-25 09:03:27 -08:00
Ryan Dahl
c420c89dbd Make assert.AssertionError instance of Error 2010-01-24 14:39:32 -08:00
cloudhead
3669c75f4d removed inline require call for querystring 2010-01-24 14:25:31 -08:00
Felix Geisendörfer
c86c614cac Bug Fix: Late promise promise callbacks firing
Late promise bindings would fire regardless of the outcome of the
promise.

Test case by: Jonas "zimbatm" Pfenniger <jonas@pfenniger.name>
2010-01-24 14:20:17 -08:00
Ryan Dahl
dda1d681f7 Provide buffer in HTTPParser callbacks. 2010-01-24 14:12:15 -08:00
Ryan Dahl
bffa18befc Expose buffer_root() 2010-01-24 14:06:07 -08:00
Ryan Dahl
42ee16978e Implement new http-parser binding using Buffer 2010-01-24 11:21:45 -08:00
Joseph Pecoraro
c99e33bc90 Fix minor issues in the documentation. 2010-01-24 00:00:27 -08:00
David Sklar
6f738d6e7a Adjust passing-FDs test to wait until socket is really writeable 2010-01-22 14:37:30 -08:00
Felix Geisendörfer
a76c7a89ce Implemented __dirname
It seems that the current __filename module global is mainly used to
determine the directory the current module is in. To make that
easier, this patch adds support for a __dirname module global
directly.
2010-01-22 10:10:15 -08:00
Ryan Dahl
5547450ca5 credit Erich in ChangeLog 2010-01-20 16:33:20 -08:00
Ryan Dahl
2788064bc2 Make callback_symbols static so they don't conflict 2010-01-20 15:43:06 -08:00
Ryan Dahl
653bf580bf Merge branch 'develop' into net2
Conflicts:
	src/node.cc
2010-01-20 15:24:38 -08:00
Jonas Pfenniger
971f43d63b FIX: Promise timeout should not addErrback
Because now, we expect the exception to be thrown if no errback
is given, we can't let timeout() add an errback silently.
2010-01-20 15:01:03 -08:00
Jonas Pfenniger
87d92f619a FIX: EventEmitter call in Promise 2010-01-20 14:59:38 -08:00
Jonas Pfenniger
7f652b63a9 Factorized deprecation messages 2010-01-20 14:58:05 -08:00
Ryan Dahl
fe48b5faa4 Fix author in ChangeLog 2010-01-20 13:48:35 -08:00
Ryan Dahl
da00413196 bump version 2010-01-20 11:28:32 -08:00
Ryan Dahl
f88d39de74 getmem() for solaris 2010-01-20 11:19:17 -08:00
Ryan Dahl
faefb3f5a4 test-http-eof-on-connect missing require('./common') 2010-01-20 10:06:44 -08:00
Ryan Dahl
152d956deb Remove -Werror from V8 2010-01-20 09:39:03 -08:00
Felix Geisendörfer
b57d7d9b4e Treat 'typeof Error' promise errors properly
Instead of JSON encoding them, just rethrow promise errors since that
produces much cleaner error messages.
2010-01-20 09:30:56 -08:00
Ryan Dahl
0c1255453e Initial Solaris support 2010-01-19 16:51:27 -08:00
Ryan Dahl
e60d653a58 Upgrade V8 to 2.0.6.1 2010-01-19 15:45:36 -08:00
Felix Geisendörfer
bfd3144861 Make unhandled Promise errors throw an exception
A promise will throw an exception unless an error handler is attached in the
same "tick" that the error is emitted. This is to avoid silent promise
failures.
2010-01-19 14:29:57 -08:00
Felix Geisendörfer
f64371fccb Support late callback binding for Promises
Listeners attached with addCallback / addErrback will now be executed
right away if the promise has already fired.
2010-01-19 14:29:49 -08:00
Felix Geisendörfer
d9dc2e0709 Fixed misnamed Promise property 2010-01-19 14:29:44 -08:00
Felix Geisendörfer
f2274840a9 Removed Promise.cancel()
The current implementation was bad and nobody is using it. Has a chance
of getting re-implemented by somebody who has an actual need for it.
2010-01-19 14:29:38 -08:00
Michaeljohn Clement
4e16e386fe set default encoding in sendBody 2010-01-19 12:43:19 -08:00
Micheil Smith
6e3d12f617 Allow optional params to setTimeout, setInterval 2010-01-18 10:41:03 -08:00
Ryan Dahl
8abeffa9ea Add process.nextTick()
This is a replacement for the common hack:

  setTimeout(cb, 0);

It's much more efficient.
2010-01-18 10:32:36 -08:00
Ryan Dahl
aeb7d6d168 Add process.IdleWatcher
With priorities. Will be used for process.nextLoop().
2010-01-18 10:12:04 -08:00
Joseph Pecoraro
820ca71a91 Updated out of date LICENSE file. 2010-01-18 09:11:26 -08:00
Joseph Pecoraro
fd183bdb07 Fixed typo in comments. 2010-01-18 09:11:02 -08:00
Ryan Dahl
70293a43c9 API: Move Promise and EventEmitter into 'events' module 2010-01-15 12:46:08 -08:00
Ryan Dahl
8e6dd52683 Hack to display more useful SyntaxError exceptions.
For some reason v8 doesn't include the frame with the syntax error in the
stack trace - so have to special case it.
2010-01-15 10:45:04 -08:00
Vanilla Hsu
6c5c808569 use SUN_LEN to calculate length of unix address @ FreeBSD. 2010-01-15 09:41:33 -08:00
Ryan Dahl
df59f06734 recvMsg shouldn't return array for efficiency. 2010-01-13 08:41:04 -08:00
Ryan Dahl
02e52ef8e9 Merge branch 'master' into net2 2010-01-12 16:59:14 -08:00
Ryan Dahl
c4397b801a Make sure GNUTLS is first on uselib
Why? Because I have two versions of GnuTLS installed - one is old 2.0.X in
/usr and one is new 2.5.X in ~/local/gnutls. waf correctly finds that the
newer version, but because GNUTLS was behind other libraries in the
node.uselib -L/usr/lib was before -L/home/ryan/local/gnutls/lib in the
actual gcc command - hence getting link errors. WAF SUCKS, really.
I wish someone would invent a good build system that could avoid such
problems.
2010-01-12 01:09:58 -08:00
Ben Williamson
a3631a383b Added regression test for issue #44 2010-01-11 16:43:23 -08:00
Ryan Dahl
f379b77735 Error out when no compiler found 2010-01-11 16:43:10 -08:00
Ryan Dahl
8e0dad4a27 Update http benchmark script to new url api. 2010-01-10 23:00:58 -08:00
Ryan Dahl
1b2c57907d Lazy initialize symbols for HTTP. 2010-01-10 22:27:48 -08:00
Ben Williamson
bba23c0998 Fix issue #44, eof on connect to http.
eof_symbol wasn't initialized until the first packet arrived.
In this case no packets arrive before the client closes the socket - eof.
2010-01-10 22:22:21 -08:00
Ryan Dahl
39ca93549a bump version 2010-01-09 02:11:54 -08:00
Ryan Dahl
c9e21435c0 Upgrade http-parser 2010-01-09 01:52:49 -08:00
David Sklar
a876df6c71 Initial take on passing FDs between processes 2010-01-09 01:28:19 -08:00
isaacs
b3349eb33a Documentation for path module changes. 2010-01-09 00:38:05 -08:00
isaacs
988174a629 Add tests for path module. 2010-01-09 00:31:51 -08:00
isaacs
b21056d63a Rename path.filename() to path.basename()
Also make normalizeArray a bit more proper wrt handling dots when keepBlanks
is enabled. Fix indentation.
2010-01-09 00:26:49 -08:00
Benjamin Thomas
73266cb486 Added extname function to path module that returns the extension. 2010-01-08 22:28:27 -08:00
Ryan Dahl
53413598b6 Fix another problem with the EIO interface
Should call eio_poll() when given a done_poll signal as well.

Bug report and test case by Kris Zyp <kriszyp@gmail.com>
2010-01-08 22:20:23 -08:00
Ryan Dahl
75e6c39733 Upgrade http-parser
Fixes \n problem that psanford <pms.mail@gmail.com> reported.
2010-01-07 18:36:28 -08:00
Vanilla Hsu
d22952bfe0 getmem for freebsd 2010-01-06 23:37:27 -08:00
Ryan Dahl
1b9eaf43f5 Update node-waf version to 1.5.10 - to match tools/wafadmin 2010-01-06 17:12:22 -08:00
Benjamin Thomas
947c577c0d Fix bug in the url module's url_parse method if 'parseQueryString' is true 2010-01-06 02:12:11 -08:00
Ryan Dahl
b1e126f415 libeio bugfix part 4
Oops. Last commit broke a few tests. Should work now!
2010-01-06 01:53:34 -08:00
Ryan Dahl
f80cc69c23 libeio bugfix part 3
Finally (hopefully) fix the issue that Felix reported. It's only appearing
on macintosh (test/mjsunit/test-eio-race3.js)

The trick/hack is to call eio_poll() again before reentering the event loop.

Additionally this commit implements a more complex method of calling
eio_poll(), occasionally dropping to an ev_idle watcher.

See also:
3f39772834
http://lists.schmorp.de/pipermail/libev/2010q1/000855.html
http://groups.google.com/group/nodejs/browse_thread/thread/9f8db11c792a68bb/a89705f68971f53c
2010-01-06 01:27:31 -08:00
Ryan Dahl
3f39772834 libeio bugfix part 2
Reverts the change to deps/libeio/eio.c added in
04dd2d51be
It wasn't a bug, I was just using eio incorrectly.

See http://lists.schmorp.de/pipermail/libev/2010q1/000855.html
2010-01-05 21:09:02 -08:00
Felix Geisendörfer
d9085ea0cb Updated docs for multipart errors 2010-01-05 20:15:16 -08:00
Felix Geisendörfer
7d947f8723 Clean up multipart test case 2010-01-05 20:15:03 -08:00
Felix Geisendörfer
f86c1783b7 Handle bad requests in simplified parser API 2010-01-05 22:37:51 +01:00
Felix Geisendörfer
aa73ed973c Added test case for the simple multipart API
So far this didn't have any test coverage.
2010-01-05 22:28:03 +01:00
Felix Geisendörfer
d9a81374b2 Throw exception for invalid multipart streams
When using the multipart parser with an regular http request, the
parser did not complain and just never finished.
2010-01-05 22:23:56 +01:00
elliottcable
52f088b966 Providing the option for a repl-printer other than sys.p 2010-01-05 00:14:03 -08:00
Ryan Dahl
04dd2d51be libeio bugfix: want_poll should be called if breaking on maxreq
Reported by shansen and hassox
http://github.com/ry/node/issues#issue/38

Will send upstream.
2010-01-04 23:26:58 -08:00
Ryan Dahl
933a37cd28 Upgrade libev to 3.9 2010-01-04 22:52:48 -08:00
Ryan Dahl
af6c177b91 Upgrade libeio to latest CVS 2010-01-04 22:46:32 -08:00
Charles Lehner
caf22c8e0a Fixed clearTimeout to check if timer is a Timer 2010-01-04 22:18:06 -08:00
visionmedia
a650138ebf Moved help msg to node-repl 2010-01-04 22:06:18 -08:00
isaacs
2b3d9e4ad0 Use "url" module instead of "uri" module in http.js.
Deprecate the URI module and remove tests for it.
- Rename "uri" to "url".
- Use the "url" module instead of the "uri" module.
- Remove the url parsing from http.js
- Update http.cat with the changed field names.
- Update tests for changes to http.js
- Update documentation for changes in http.js
2010-01-04 21:22:46 -08:00
isaacs
7ff04c1f86 Add URL and QueryString modules, and tests for each.
Also, make a slight change from original on url-module to put the
spacePattern into the function.  On closer inspection, it turns out that the
nonlocal-var cost is higher than the compiling-a-regexp cost.

Also, documentation.
2010-01-04 21:03:54 -08:00
isaacs
d6fe7fb4c3 Documentation for path module 2010-01-04 20:58:16 -08:00
isaacs
7342fecaec Improve path module slightly:
1. Provide a switch to tell it to not remove empty path parts when
   normalizing.
2. Correct the handling of some edge cases when you have lots of dots and
   empty bits, such as paths like "././/./..//." and so on.
2010-01-04 11:36:52 -08:00
Tim Caswell
fd184ee2fa Rename "Dynamic Property" to "Getter/Setter" in sys.inspect. 2010-01-03 21:15:21 -08:00
Tim Caswell
6c68a9679b Fix inspect to not trigger dynamic properties
but to display them as special. Add unit tests to match
2010-01-02 18:18:01 -08:00
Tim Caswell
732c6f2036 Fix inspect for the special case of an Object that inherits from Array, but has other properties. 2009-12-31 09:57:29 -08:00
Ryan Dahl
642c2773a7 bump version 2009-12-31 00:30:53 -08:00
Ryan Dahl
9553503be5 Bugfix: Don't segfault on unknown http method
Reported by Chakrit Wichian.
2009-12-30 22:16:16 -08:00
Ryan Dahl
d9757520fb Merge branch 'master' into net2 2009-12-30 16:37:36 -08:00
Ryan Dahl
8fd46a34d6 Kill -Werror in V8 for GCC 4.4.1 users.
http://code.google.com/p/v8/issues/detail?id=413
2009-12-30 12:59:02 -08:00
Ryan Dahl
20eec646b3 [net2] add unix server to ping-pong test 2009-12-30 11:51:43 -08:00
Ryan Dahl
8d0f756158 [net2] delete unix sockfile on server start and shutdown 2009-12-30 11:32:07 -08:00
Ryan Dahl
a8ede8dd9e [net2] port ping pong test 2009-12-30 10:58:46 -08:00
Ryan Dahl
0d31e9875f [net2] socket.setNoDelay 2009-12-30 10:43:47 -08:00
David Sklar
de9bfdea8e [net2] toRead() for non-linux (SIOCINQ -> FIONREAD) 2009-12-30 10:06:40 -08:00
Ryan Dahl
402755b14a Add socket.address() 2009-12-30 00:57:55 -08:00
Ryan Dahl
2582560f91 [net2] Do hostname lookups in connect and listen 2009-12-30 00:53:14 -08:00
Ryan Dahl
1beb840fec Back to 64kb stack size - enlarging it was a typo 2009-12-30 09:01:28 +01:00
Ryan Dahl
8330316014 Fix errors in getaddrinfo 2009-12-30 08:53:19 +01:00
Ryan Dahl
2c016badc2 'make distclean' should not call 'waf clean'
Because if configure hasn't been run, then an error is reported.
2009-12-30 02:50:06 +01:00
Ryan Dahl
fd73a3a398 Upgrade V8 to 2.0.5.4 2009-12-30 02:35:15 +01:00
Ryan Dahl
07333a4ab0 [net2] Set FD_CLOEXEC on created socket fds. 2009-12-29 21:12:32 +01:00
Ryan Dahl
48ccbb9afa [net2] lower-case socket.type 2009-12-29 21:12:32 +01:00
Ryan Dahl
25700e65ee [net2] Better EOF marking, rename events 2009-12-29 21:12:32 +01:00
Ryan Dahl
153b755936 Change IOWatcher constructor to have no arguments 2009-12-29 21:12:32 +01:00
Ryan Dahl
6e5abf4551 implement getaddrinfo 2009-12-29 21:12:31 +01:00
Ryan Dahl
0618f02f6f Implement half-closed streams 2009-12-29 21:12:31 +01:00
Ryan Dahl
3fce98c853 Add Stream.prototype.connect() and test-net-server.js 2009-12-29 21:12:31 +01:00
Ryan Dahl
b23ed4a98c Rename new streaming code to 'net' 2009-12-29 21:12:31 +01:00
Ryan Dahl
bddd6e9ca3 Implement stream.send() 2009-12-29 21:12:31 +01:00
Ryan Dahl
1da15d623e Fix buffer bug, implement tcp recv 2009-12-29 21:12:30 +01:00
Ryan Dahl
0ecd0fa598 IOWatcher callback isn't internal, fix bug in Accept 2009-12-29 21:12:30 +01:00
Ryan Dahl
469e2648e5 More bindings, beginning tcp server code in js 2009-12-29 21:12:30 +01:00
Ryan Dahl
c819abccb6 Start on net2 2009-12-29 21:12:30 +01:00
Ryan Dahl
f219938b69 add io watcher 2009-12-29 21:12:29 +01:00
Ryan Dahl
3377a30fb8 Move cb_persist functions out of dns module 2009-12-29 21:12:29 +01:00
Ryan Dahl
e2569c402f Add some tests to test-buffer.js 2009-12-29 21:12:28 +01:00
Ryan Dahl
630bb7a012 Rename blob to buffer. 2009-12-29 21:12:28 +01:00
Ryan Dahl
0afed52329 initial blobs 2009-12-29 21:12:28 +01:00
Ryan Dahl
359d0170ab Better error message on bad ARGV[1] 2009-12-29 20:31:56 +01:00
Ryan Dahl
53a841d96a Simplify exception reporting 2009-12-29 20:20:51 +01:00
Ryan Dahl
0accebe583 Stack trace for asserts shouldn't include assert module 2009-12-29 20:15:05 +01:00
Ryan Dahl
dd35637603 Fix assert.js code style 2009-12-29 20:10:59 +01:00
Ryan Dahl
0d7e88a429 Bugfix: libeio race condition
Process at most 10 pending responses from the thread pool in one go.
10 was chosen arbitrarily.
Test and report by Felix Geisendörfer <felix@debuggable.com>
2009-12-29 19:11:04 +01:00
Michaeljohn Clement
3d24e119e0 don't chunk responses to HTTP/1.0 clients, even if they send Connection: Keep-Alive (e.g. wget) 2009-12-23 22:24:29 +01:00
Ryan Dahl
64fe9fb85d fix whitespace 2009-12-22 23:11:54 +01:00
Ryan Dahl
f91e347eee bump version 2009-12-22 20:31:45 +01:00
Felix Geisendörfer
5de04dafc6 Do not pause request for multipart parsing
This is actually undesireable as it takes away control from the user who
may want to pause/resume to throttle the upload stream, or synchronize
it with disk flushing.

I actually ran into memory issues when trying to stream huge files to
disc as the file module was building up a huge action buffer. This can
now easily be avoided like this:

part.addListener('body', function(chunk) {
  req.pause();
  file.write(chunk).addCallback(function() {
    req.resume();
  });
}
2009-12-22 19:28:30 +01:00
Jonas Pfenniger
e6c5ac4f73 posix.cat not using call() correctly
'this' will point to "arguments" and the arguments of the callback itself
will not be set.
2009-12-22 18:01:13 +01:00
Ryan Dahl
120492e5c2 export path.normalizeArray for the uri module 2009-12-22 17:50:23 +01:00
isaacs
4dcdfaf929 Fix require("../blah") issues
Added some more tests, and refactored the uri and path modules to use the
same normalization logic, so that nothing is relying on flaky regexps.

http://groups.google.com/group/nodejs/browse_thread/thread/34779f8c10098c5e
http://groups.google.com/group/nodejs/browse_thread/thread/1aa0146b92582679#msg_9822c03998cb4064
2009-12-22 17:22:12 +01:00
Ryan Dahl
a2d809fe90 bump version 2009-12-19 01:24:59 +01:00
Ryan Dahl
a98afdfb2f Revert "Upgrade V8 to 2.0.5"
This reverts commit 20b945df70.

Broken on Hagen's Macintosh. Don't have time to investigate.
2009-12-19 01:04:19 +01:00
Ryan Dahl
0981e7f663 Fix test-readdir.js
Was broken because I added "throws_error.js" to the fixtures directory.
Problem appeared in bfa36136da.
2009-12-19 00:45:01 +01:00
isaacs
0ea2f9e04b Remove two debug statements that are a bit much. 2009-12-19 00:14:50 +01:00
isaacs
6301f18e62 Bugfix: child modules get wrong id with "index.js"
Fix for bug brought up by nua in irc, where child modules get the wrong id
when loaded from a parent module with an id of index.js or index.addon.
2009-12-19 00:14:10 +01:00
isaacs
c2454a0d06 Inadvertently introduced a bug in how single-dot path parts are handled. 2009-12-19 00:13:20 +01:00
isaacs
3b8e47755a Bugfix: require("../foo")
If you have a circular require chain in which one or more of the modules are
referenced with a ".." relative path, like require("../foo"), node blows up.
This patch un-blows-up that case.  There still seem to be issues with
circularity, but this solves one of the more obnoxious ones.
2009-12-19 00:12:38 +01:00
Ryan Dahl
bfa36136da require() should throw error if module does.
Reported by Kris Zyp
http://groups.google.com/group/nodejs/browse_thread/thread/1feab0309bd5402b
2009-12-18 23:58:04 +01:00
isaacs
4526308560 Update to fix failing test. Rewrite of the resolveObject function, and some tweaks to format. 2009-12-18 19:02:27 +01:00
isaacs
f65b36eec1 Use the new uri parser. 2009-12-18 19:02:16 +01:00
isaacs
4a615ddd9c Add credits, and a "decode" function. 2009-12-18 18:59:02 +01:00
isaacs
2f9722cca0 Pull in the uri.js from Narwhal and create tests, stripping out the cruft from a previous code-surgery. 2009-12-18 18:56:59 +01:00
visionmedia
f3b0cefd0b Replaced several Array.prototype.slice.call() calls with Array.prototype.unshift.call()
Acts in pretty much the same manor just a bit more elegant
2009-12-18 18:42:20 +01:00
Joshaven Potter
7873639f55 syntax fixes in src/node.js 2009-12-18 16:21:21 +01:00
Micheil Smith
d8e69d31b3 Documentation for the assert module 2009-12-18 16:17:10 +01:00
Ryan Dahl
22d1d3dbf7 Fix kqueue check (broke it in last commit) 2009-12-18 15:45:53 +01:00
Rasmus Andersson
6eb8bbc640 note about why execinfo detection fails on Darwin even though it exists 2009-12-18 15:37:24 +01:00
Ryan Dahl
fa667f718c Fix check for epoll_ctl(). Was broken on Linux 2009-12-18 15:36:25 +01:00
Rasmus Andersson
752da03eb0 detect nanosleep on OS X and do not look for functions in libraries we know dows not exist 2009-12-18 15:36:11 +01:00
Rasmus Andersson
87077e03cc fix kqueue feature detection on Mac OS X 10.6 2009-12-18 15:14:33 +01:00
Ryan Dahl
20b945df70 Upgrade V8 to 2.0.5 2009-12-18 15:05:04 +01:00
Ryan McGrath
164ce76e94 Added in API documentation concerning the (seemingly undocumented) process.chdir() method, complementary to process.cwd() 2009-12-18 14:59:33 +01:00
Ryan Dahl
89a3fa93a0 add missing semicolon 2009-12-09 15:59:53 +01:00
Simon Cornelius P. Umacob
e801f420d0 Use conf.fatal() instead of fatal() in order to abort the configure script 2009-12-09 14:28:02 +01:00
Ryan Dahl
a73227bf28 Upgrade waf to 1.5.10 2009-12-09 14:27:33 +01:00
Ryan Dahl
4ddfd8aa42 Fix posix.statSync() 2009-12-09 10:32:19 +01:00
Ryan Dahl
45a806a066 Statically define symbols
~7% improvement in hello world HTTP response bench.
2009-12-09 09:12:01 +01:00
Ryan Dahl
a30ac92b0c Remove accidentally committed files. 2009-12-09 07:44:44 +01:00
Ryan Dahl
89df4d1c86 fix typo 2009-12-08 07:20:51 +01:00
Ryan Dahl
dbb1a267d7 Fix ARGV[0] weirdness 2009-12-08 06:54:26 +01:00
Johan Dahlberg
9599d2d0e9 Added superCtor to ctor.super_ instead superCtor.prototype.
This way let's us do deep comparison between object instances.

I have a suggestion for the sys.inherits function. Today it's impossible to
deep comparison between instance and class.

Take this snippet for example:

function ClassA() {}
function ClassB() {}

sys.inherits(ClassB, ClassA);

var instance = new ClassB();

The instance variable inherits from ClassA but we can't check it (which is
useful sometimes). You can compare the instance against ClassB
(instance.constructor == ClassB) but we can't compare it deeper
(instance.constructor.super == ClassA). The committed change simply assign
super to the super constructor instead of the super prototype.

I can't see any problem with this fix. You can still get the super constructor
by calling super_.prototype.
2009-12-08 06:19:12 +01:00
visionmedia
501b4a54be Export STATUS_CODES
Express (my framework) uses them as a default
response body when non is present. Others
might use them for something as well.

Beats duplicating the list :D
2009-12-08 05:35:56 +01:00
Ryan Dahl
71680f512c Give default encodings for posix.read and posix.write 2009-12-07 18:13:45 +01:00
Ryan Dahl
c1baa70fe5 Attach/Detach -> Ref/Unref 2009-12-07 17:55:19 +01:00
Ryan Dahl
ee8530e0ee offload method look up to http-parser 2009-12-07 15:21:12 +01:00
Xavier Shay
756544fd28 sys.inspect prints out special chars correctly (\n, \u0001, etc...) 2009-12-07 10:05:18 +01:00
Ryan Dahl
c3e0a4bc7c Upgrade http-parser; supports webdav extension methods now 2009-12-06 23:58:16 +01:00
Felix Geisendörfer
876b6d2183 Make process.mixin copy over undefined values
This is not a bug in process.mixin, but I think it is undesirable
behavior. Right now process.mixin will not copy over keys with undefined
values. To me that is an unexpected filtering that should not happen
unless specifically called for.
2009-12-06 19:21:20 +01:00
Felix Geisendörfer
f080de5380 Two bug fixes for process.mixin
Bug #1 occurred when trying to use process.mixin on a function and
produced a fatal exception.

Bug #2 occurred when trying to do a deep merge with an object containing
one or more objects with a nodeType property. In those cases the deep
copy for this part of the object was not performed and a shallow one was
performed instead.

Both of these bugs were artifacts of the jQuery.extend port.
2009-12-06 19:21:06 +01:00
Christopher Lenz
f8ba9c3bc9 Add http.Client.prototype.request()
Change the http.Client API so that it provides a single request() method
taking an optional parameter to specify the HTTP method (defaulting to
"GET"), instead of the five methods get(), head(), post(), del() and put().
2009-12-06 18:36:32 +01:00
Ryan Dahl
c6affb64f9 bump version 2009-12-06 17:59:37 +01:00
Xavier Shay
34c02357ff sys.inspect is totally more awesome now
- No longer relies on JSON.stringify, so it can output nulls and functions
- Handles circular references better
- Has tests
2009-12-06 12:19:23 +01:00
Ryan Dahl
4d818f1fd3 Implement promises entirely in JS 2009-12-06 11:36:22 +01:00
Ryan Dahl
3414eab2f3 Refactor node_file.cc to not use Promises.
At the same time implement synchronous wrappers of the POSIX functions.
These will be undocumented until we settle on an API. Works like this

    // returns promise as before
    posix.mkdir("test").addCallback(function () {
      sys.puts("done");
    });

    // returns undefined, executed synchronously.
    posix.mkdirSync("test");
    sys.puts("done");

This refactoring is a step towards allowing promises to be implemented
purely in javascript.
2009-12-06 10:50:03 +01:00
Ryan Dahl
8141448fe5 Don't use promises internally in DNS module 2009-12-06 09:26:09 +01:00
Ryan Dahl
90ab0794df Use --jobs=1 with WAF
Some people were reporting waf erroring with

  thread.error: can't start new thread

this seems to fix that problem.
2009-12-06 07:35:26 +01:00
Ryan Dahl
48452838b3 Clean up context creation 2009-12-05 18:27:28 +01:00
Ryan Dahl
c8b6ef248e upgrade v8 to 2.0.3 2009-12-05 15:27:56 +01:00
Ryan Dahl
c5d82380f4 Bugfix: Don't use chunked encoding for 1.0 requests.
http://groups.google.com/group/nodejs/browse_thread/thread/b2edb76691b1848c
2009-12-05 08:37:46 +01:00
Ryan Dahl
7538e70767 Expose versionMajor versionMinor to http messages 2009-12-05 07:55:24 +01:00
Karl Guertin
4f679fd8d0 Dependency free assert module with unit tests 2009-12-05 01:05:16 +01:00
Felix Geisendörfer
530328f12b CommonJS testing for node.js
Refactored test suite to use the assert module for testing rather than
mjsunit.
2009-12-05 01:05:16 +01:00
Michaeljohn Clement
485823f3e4 fixed HTTP duplicated header bug
added test case for HTTP duplicated header bug on keepalive
2009-12-05 00:56:22 +01:00
Rhys Jones
5b1a535cd8 Add HTTP client TLS support 2009-11-30 16:51:20 +01:00
jed
a9ea21feb4 fixed check on header type, to check member instead of object. 2009-11-30 10:14:09 +01:00
Friedemann Altrock
1107a1bd1e sys.puts should not kill the process when giving it undefined 2009-11-28 20:56:47 +01:00
Ryan Dahl
aa42c6790d bump version 2009-11-28 17:04:42 +01:00
Ryan Dahl
38e425d9bf Add V8 heap info to process.memoryUsage() 2009-11-28 16:31:29 +01:00
Ryan Dahl
8a58e83870 Add gnutls version to configure script 2009-11-28 15:25:10 +01:00
choonkeat
44d5f212fe Stat::Callback has 2 arguments for callback: current stat info and previous stat info
http://groups.google.com/group/nodejs/msg/f8e51a8e0c74bd85
2009-11-28 15:13:12 +01:00
Ryan Dahl
633d6be328 bump version 2009-11-28 01:49:11 +01:00
Ryan Dahl
0cea946cb9 Fix v8 SConstruct for freebsd 2009-11-28 01:38:32 +01:00
simonw
516874f4a1 Documented repl.scope for explicitly exposing variables within the repl. 2009-11-27 23:02:13 +01:00
Ryan Dahl
4129305b7c Upgrade v8 to 2.0.2 2009-11-27 22:53:39 +01:00
Ryan Dahl
dc093ef833 Add process.loop() process.unloop()!!!
Move the event loop calls into javascript.
Makes life so much easier.
2009-11-23 00:59:39 +01:00
Jan Lehnardt
9c1034b183 detect ccache and bail out since v8 doens't like to build with ccache 2009-11-22 23:42:02 +01:00
Friedemann Altrock
0433d828cf add process.umask() 2009-11-22 19:52:52 +01:00
Friedemann Altrock
2d54d664ff Promises should not be able to be canceled more than once. 2009-11-22 19:18:24 +01:00
Felix Geisendörfer
27fcae738a Reduce multipart memory footprint
Multipart parts kept the first chunk of data after their headers in
memory, even so that was no longer needed.
2009-11-22 15:09:55 +01:00
Rhys Jones
b6dda61249 Initial TLS support 2009-11-22 04:03:53 +01:00
Ryan Dahl
1cacb50f2b Fix memory leak on fs.write()
Reported by onne@onnlucky.com.
2009-11-22 00:47:36 +01:00
Ryan Dahl
8be6a89654 Upgrade http_parser (fixes bug reported by Felix) 2009-11-21 22:03:52 +01:00
Felix Geisendörfer
528c449901 Multipart improvements
Multipart parts now have a name and filename property. Those are the
same as:

part.headers['content-disposition'].name
part.headers['content-disposition'].filename

This patch also updates and improves the docs for the multipart module.
2009-11-21 17:16:06 +01:00
Ryan Dahl
39a12b2a22 Remove debug message 2009-11-21 17:16:05 +01:00
Ryan Dahl
7719ce33db New http-parser
No longer based on Ragel, but hand-written.

Had to add HTTPConnection.resetParser() because the parser is stricter and
will error out when you try to give it a message after the previous had
"Connection: close". The HTTP client was doing that. Thus we reset the
parser manually after each new connection.
2009-11-21 16:27:02 +01:00
Ryan Dahl
1eba0cadc1 Revert "Normalize HTTP headers."
This reverts commit f623fd7658.
But only the changes made in lib/ they were falsely detecting outgoing
headers.
2009-11-21 15:52:12 +01:00
Onne
9d39e18c6d fixes lib/file.js write, it doesnt allways emit errors or success 2009-11-19 19:12:42 +01:00
Ryan Dahl
686bec4f35 Only detach timers when active. 2009-11-19 19:08:47 +01:00
Ryan Dahl
0b441462ab Speed up test-wait-ordering.js 2009-11-18 15:55:02 +01:00
Ryan Dahl
728d8a37f4 Upgrade v8 to 2.0
(With just one change: remove -Werror)
2009-11-18 15:28:54 +01:00
Ryan Dahl
8195e0f723 Fix default value for persistent in watchFile() 2009-11-17 23:07:31 +01:00
Ryan Dahl
6de2173d7c Add options to process.watchFile() 2009-11-17 22:35:47 +01:00
Ryan Dahl
027829d285 bump version 2009-11-17 15:05:10 +01:00
Ryan Dahl
6cb0e0e5f5 Test runner should only run test-*.js 2009-11-17 15:05:10 +01:00
Ryan Dahl
6e6562e551 Fix stat handler test for macintosh 2009-11-17 15:05:01 +01:00
Ryan Dahl
0bf34b598f add link to slides on web page 2009-11-17 14:22:23 +01:00
Ryan Dahl
8d2f9e83a4 Add process.watchFile() process.unwatchFile()
This is an interface to libev's ev_stat watcher.
2009-11-17 14:07:48 +01:00
Ryan Dahl
55f9fdd6b5 Upgrade libev to latest CVS 2009-11-17 12:41:19 +01:00
Felix Geisendörfer
6e9e61b9df Format JSON for inspecting objects
This patch enables formatting for inspecting JSON objects. Example:

p({foo: "bar", deep: {foo: "bar"}})

becomes:

{
 "foo": "bar",
 "deep": {
  "foo": "bar"
 }
}
2009-11-16 12:40:58 +01:00
Ryan Dahl
ca2c7d1745 Add doc for uncaughtException 2009-11-15 01:06:13 +01:00
Felix Geisendörfer
2b252acea4 Implement process "uncaughtException" event
This event can be used to overwrite the default exception mechanism which
reports the exception and kills the node process.

See google group post:
http://groups.google.com/group/nodejs/browse_thread/thread/9721dc3a2638446f
2009-11-14 23:46:37 +01:00
fwg
bd6c08a984 Add EventEmitter.removeListener 2009-11-13 17:12:41 +01:00
Johan Sørensen
04f9c9fb09 Supply the strerror as a second arg to the tcp.Connection close event 2009-11-13 15:17:23 +01:00
Ryan Dahl
06d493e7e3 Remove debug message 2009-11-12 12:47:02 +01:00
Felix Geisendörfer
bb8f0725da Bugfix, Promise.timeout() blocked the event loop
Promise.timeout() was blocking the event loop from shutting down while it
was waiting for an internal timer to fire. This timer is now cleared when
it is no longer needed, causing the event loop to shut down as fast as
possible.
2009-11-12 12:45:06 +01:00
Felix Geisendörfer
bffee5eda4 Bugfix for sendBody() and chunked utf8 strings
Http expects chunked byte offsets and ignores the encoding specified in the
header. This patch makes node behave accordingly.

Bug report:
http://groups.google.com/group/nodejs/browse_thread/thread/ab701d49cb059317
2009-11-11 18:53:05 +01:00
Felix Geisendörfer
7371fcb312 Temporary function to determine str byte length
Will need a better place later on
2009-11-11 18:42:46 +01:00
Felix Geisendörfer
1026ffea40 Proper deprecation message for process.inherits 2009-11-11 17:38:45 +01:00
Ryan Dahl
2ca788e6e2 Add 'drain' event to tcp.Connection 2009-11-10 17:43:37 +01:00
Ryan Dahl
d1f69ef35d bump version 2009-11-07 20:20:30 +01:00
Felix Geisendörfer
a021db151a Bug fix for test-remote-module-loading.js
Fix bug that caused test-remote-module-loading.js
to use the installed version of the http library
rather than the build one.
2009-11-07 20:07:55 +01:00
Ryan Dahl
6c9ec1ac40 Use '127.0.0.1' instead of 'localhost' for keep-alive test
ab seems to have to problem resolving 'localhost' on Urban's computer.
2009-11-07 17:31:42 +01:00
Ryan Dahl
cff1df1f9b Fix ev_unref error in signal handler 2009-11-07 17:18:23 +01:00
Ryan Dahl
42dd629c16 deprecation error for process.inherits() 2009-11-07 16:27:18 +01:00
Ryan Dahl
9cfa4fd7d6 Output stderr from test-remote-module-loading.js
There is a small problem with test-remote-module-loading.js.
When it starts a child "node", the child uses the default require.paths
instead unshifting the build lib/
2009-11-07 15:08:46 +01:00
Ryan Dahl
1020efb6f7 Create require.main, remove process.cat() 2009-11-07 14:57:49 +01:00
Ryan Dahl
43121c15be API: rename process.inherits to sys.inherits 2009-11-07 14:45:39 +01:00
Ryan Dahl
d737a060c8 Combine all compiled javascript files into src/node.js 2009-11-07 14:37:22 +01:00
Ryan Dahl
b833aa48e9 Add test to ensure the server can handle keep-alive 2009-11-06 13:42:56 +01:00
Ryan Dahl
54c8ea5ea2 Fix http_simple server for new API 2009-11-06 12:53:27 +01:00
Ryan Dahl
51c1526b6a Revert "Upgrade http parser, change node as needed."
Something is broken in how keep-alive is working. Reverting until I can fix
it.

This reverts commit b893859c34.
2009-11-06 12:44:20 +01:00
Ryan Dahl
8ad47c8de7 Expose http.IncomingMessage and http.OutgoingMessage 2009-11-05 00:02:15 +01:00
Ryan Dahl
c6bd0e56cb Fix regexp in file extension checking 2009-11-04 12:39:08 +01:00
Ryan Dahl
60131fc88c Expose http.ClientRequest and http.ServerResponse 2009-11-04 12:37:52 +01:00
Ryan Dahl
711774c1f0 Remove unreachable lines 2009-11-04 02:18:31 +01:00
Ryan Dahl
d3de943eb1 Fix google-analytics on index.html 2009-11-04 00:18:05 +01:00
Brandon Beacher
47fcf785ac Added process.chdir() 2009-11-03 19:22:37 +01:00
Ryan Dahl
726865af7b bump version 2009-11-03 13:48:02 +01:00
Ryan Dahl
b3b3cfe007 Move memoryUsage() into C on Linux 2009-11-03 13:00:42 +01:00
Ryan Dahl
3a70129a9c Add sys.memoryUsage() 2009-11-03 01:30:01 +01:00
Ryan Dahl
f481183140 Add process.platform 2009-11-03 00:21:00 +01:00
Ryan Dahl
f97d339ce7 Add requires to google example in docs. 2009-11-02 23:09:57 +01:00
Felix Geisendörfer
43d651daef The return of relative module loading 2009-11-02 21:26:55 +01:00
Felix Geisendörfer
7069bee982 The return of absolute Module loading 2009-11-02 21:20:44 +01:00
Ryan Dahl
2e40a9e15f Add mediacoder's logo to website 2009-11-02 12:28:08 +01:00
Felix Geisendörfer
8fd472b9a1 The return of remote module loading 2009-11-01 15:39:49 +01:00
Ryan Dahl
9bd2717e74 require.paths aliased as process.path 2009-11-01 09:30:01 +01:00
Ryan Dahl
cf652b82a3 Update webpage with new module api 2009-10-31 20:26:03 +01:00
Ryan Dahl
d582599c14 Upgrade benchmark scripts for new module API 2009-10-31 20:06:46 +01:00
Ryan Dahl
f230e45183 Update deprecation errors. 2009-10-31 20:03:40 +01:00
Ryan Dahl
9a7321ebb0 Don't call process.exit() on missing module.
Just raise exception naturally.
2009-10-31 19:53:09 +01:00
Ryan Dahl
f683867b98 module.name renamed to module.id for commonjs compat 2009-10-31 19:47:41 +01:00
Ryan Dahl
f5c95c388c Fix search-replace errors in api.txt 2009-10-31 19:14:24 +01:00
Ryan Dahl
7a2e784ad7 Module refactor - almost CommonJS compatible now
API change summary:

  * require("/sys.js") becomes require("sys")

  * require("circle.js") becomes require("./circle")

  * process.path.join() becomes require("path").join()
2009-10-31 19:10:30 +01:00
Ryan Dahl
36f3bc33a3 forgot to add lib/dns.js in c53672 2009-10-31 12:19:23 +01:00
Ryan Dahl
57890465bd A few more node->process changes 2009-10-30 05:49:23 +01:00
Ryan Dahl
ad0a4cefb8 Namespace EVERYTHING under process; introduce GLOBAL
http://groups.google.com/group/nodejs/browse_thread/thread/1034fd2ad2cd93e8
2009-10-29 23:36:41 +01:00
Ryan Dahl
6959a1d6d1 Upgrade v8 to 1.3.18 2009-10-29 16:11:05 +01:00
Felix Geisendörfer
659954d842 The return of Promise.cancel() with some additional tests & docs 2009-10-29 11:24:08 +01:00
Ryan Dahl
7b2fdc098b Clean up posix module docs 2009-10-29 11:17:26 +01:00
Ryan Dahl
c536728335 Move node.dns.* into /dns.js 2009-10-28 23:02:52 +01:00
Ryan Dahl
3d8b14e6f7 node.fs.* moved into "/posix.js"
use require("/posix.js") to access them.
2009-10-28 22:45:46 +01:00
Ryan Dahl
ae7c9909be fix error from v8 upgrade 2009-10-28 21:35:49 +01:00
Ryan Dahl
50f45d14b4 Upgrade v8 to 1.3.17 2009-10-28 19:25:22 +01:00
Tim Caswell
3558952899 DRY up the open, write, read, and close methods on the File prototype. 2009-10-28 19:17:02 +01:00
Ryan Dahl
eca2de73ed bump version 2009-10-28 16:36:44 +01:00
Ryan Dahl
910c627fc6 Revert "Change HTTP back to a 1.1 client."
This reverts commit 9a70abbf13.
2009-10-28 15:37:58 +01:00
Ryan Dahl
efe34f5023 Only allow a promise to fire once, remove promise.cancel()
promise.cancel() is due to return at some point.
2009-10-28 15:37:03 +01:00
Ryan Dahl
fc937aa3e5 Use full path to link to libv8.a and libudns.a
Previously was linking just by doing -lv8 or -ludns which could confuse the
build when a system libv8 or libudns was installed.
2009-10-28 12:34:47 +01:00
Ryan Dahl
122e74b49b Link to objects instead of shlibs for evcom, http_parser, coupling 2009-10-27 22:26:53 +01:00
Ryan Dahl
5f466c8762 fix make install (was broken from node_ prefix change) 2009-10-27 20:17:03 +01:00
Ryan Dahl
c779647600 Link libev and libeio as a normal .o instead of as .a
Using WAF "staticlib" to compile libev tends to confuse it with a system
version. Thanks to mr.binary42 for helping debug.
2009-10-27 18:50:41 +01:00
Ryan Dahl
132d685796 Add symlinks in root directory to executables after build. 2009-10-27 18:11:07 +01:00
Ryan Dahl
2b743aa5bb Enable large file support. 2009-10-27 12:05:38 +01:00
Ryan Dahl
a5df0f6a65 Prefix all source files with node_ 2009-10-27 11:46:58 +01:00
Ryan Dahl
2bac299aed Remove unused macro 2009-10-27 11:08:50 +01:00
Ryan Dahl
9a70abbf13 Change HTTP back to a 1.1 client.
This was modified in b893859c34 even though it
wasn't really required. Some users are experiencing problems after changing
to 1.0 - once those are identified the client will returned to 1.0.
2009-10-26 23:07:37 +01:00
Ryan Dahl
7d9d881e22 Correctly guess x64 architecture
Previously was dependent on how python was compiled, and this was causing
build errors for some Macintosh Snow Leopard users. The solution is to use
a functionality already in WAF which looks at the output of

  echo | gcc -E -dM -
2009-10-26 22:27:52 +01:00
Ryan Dahl
04e53cab90 Rename node.libraryPaths to require.paths
to be more inline with CommonJS.
2009-10-25 22:51:57 +01:00
Ryan Dahl
4bcb01c8bf Add work-around for configure --debug with Python 2.4.3
This is the error that was encountered:

  : make
  Waf: Entering directory `/dcs/06/csugds/node/ry-node-cfe5876/build'
  Traceback (most recent call last):
    File "tools/waf-light", line 148, in ?
      Scripting.prepare(t, cwd, VERSION, wafdir)
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Scripting.py", line 142, in prepare
      prepare_impl(t, cwd, ver, wafdir)
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Scripting.py", line 132, in prepare_impl
      main()
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Scripting.py", line 185, in main
      fun(ctx)
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Scripting.py", line 382, in build
      return build_impl(bld)
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Scripting.py", line 395, in build_impl
      bld.add_subdirs([os.path.split(Utils.g_module.root_path)[0]])
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Build.py", line 924, in add_subdirs
      self.recurse(dirs, 'build')
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/Utils.py", line 599, in recurse
      f(self)
    File "<string>", line 312, in build
    File "/dcs/06/csugds/node/ry-node-cfe5876/tools/wafadmin/TaskGen.py", line 297, in clone
      setattr(newobj, x, copy.copy(getattr(self, x)))
    File "/usr/lib/python2.4/copy.py", line 108, in copy
      return _reconstruct(x, rv, 0)
    File "/usr/lib/python2.4/copy.py", line 336, in _reconstruct
      y = callable(*args)
    File "/usr/lib/python2.4/copy_reg.py", line 92, in __newobj__
      return cls.__new__(cls, *args)
  TypeError: function() takes at least 2 arguments (0 given)
  make: *** [all] Error 1
2009-10-16 22:53:44 +02:00
Ryan Dahl
cfe5876350 Add v8 patch to fix mac x64 build.
http://codereview.chromium.org/284012
2009-10-16 18:00:06 +02:00
Ryan Dahl
8e6d978bba Upgrade v8 to 1.3.16
and apply my V8 patch for debugging.
2009-10-16 14:30:27 +02:00
Ryan Dahl
5f82c4baf0 Improve webpage
- add google-analytics
- add example to front-page
2009-10-16 14:29:51 +02:00
Ryan Dahl
b893859c34 Upgrade http parser, change node as needed.
The latest version of http-parser is a bit more stringent EOF semantics.
2009-10-15 19:18:18 +02:00
Ryan Dahl
3456a16f71 Accept string representations of signals in node.kill and child.kill 2009-10-15 15:45:04 +02:00
Brandon Beacher
334d56d2be Added external interface for signal handlers.
Also process.pid and node.kill().
2009-10-15 14:40:52 +02:00
Ryan Dahl
0283e68129 Upgrade http_parser, allows quotes in URI
http_parser needs to be upgraded to latest code. Currently running off the
v0.2 branch, which is missing the latest fixes.
2009-10-14 19:29:17 +02:00
Connor Dunn
2dbd0d3806 Add node.fs.sendfile() 2009-10-14 18:51:23 +02:00
Ryan Dahl
a1e5089d9b Add connection.fd getter. 2009-10-14 17:07:50 +02:00
Tim Caswell
d2f5094096 Fix the link to the new Contribute section 2009-10-14 14:21:30 +02:00
Felix Geisendörfer
fd189c8a73 New section about contributing for the homepage 2009-10-13 19:55:34 +02:00
Timothy Caswell
2b9a9f9140 Clean up many of the reccommendations from jslint in the file.js library 2009-10-13 19:55:33 +02:00
Timothy Caswell
8bf9a42c70 Cleanup node.fs.cat to follow the newer style to match the code of file.writeFile 2009-10-13 19:55:33 +02:00
Ryan Dahl
2b8ab7e24f utils.js links to sys.js instead of other way around 2009-10-13 19:55:28 +02:00
Felix Geisendörfer
0329468e73 Fix for confusing deprecation message 2009-10-12 22:23:17 +02:00
Ryan Dahl
12c2ea05ca Bugfix: 'data' event for stdio should emit a string
Was emitting a single element array where array[0] was the input.
2009-10-12 21:09:26 +02:00
Felix Geisendörfer
f09d0cd93c Documentation for Promise.timeout() and Promise.cancel() 2009-10-12 17:07:17 +02:00
Ryan Dahl
d949074014 Add some code comments to net.cc 2009-10-12 16:46:18 +02:00
Felix Geisendörfer
0dbf2d7792 Implemented Promise.timeout() and Promise.cancel() 2009-10-12 16:17:42 +02:00
Ryan Dahl
e7d0dcee10 Use bundle flags for osx in node-waf 2009-10-12 16:01:22 +02:00
Ryan Dahl
8b62e8616b Fix tabs in changelog 2009-10-10 11:58:36 +02:00
Ryan Dahl
d79b6e9f7f bump version 2009-10-09 18:15:16 +02:00
Ryan Dahl
e7096fd769 ACTUALLY remove node_version.h from node.h 2009-10-09 17:49:29 +02:00
Ryan Dahl
0ae02c9f04 Internalize node_version.h.
With the more detailed node.version changing (every commit), having
node_version.h exposed to all modules required a complete recompile each
time a commit was made.

People can use the javascript interface to get the version.
2009-10-09 17:47:04 +02:00
Ryan Dahl
388145546d Add comments to node.cc 2009-10-09 17:44:59 +02:00
Ryan Dahl
962e9291f7 'git-describe' to 'git describe' 2009-10-09 16:16:27 +02:00
Ryan Dahl
d979ac9c7f Put git revision into version string 2009-10-09 15:00:12 +02:00
Ryan Dahl
78d06eec06 Clean up README. 2009-10-09 14:55:29 +02:00
Ryan Dahl
2060e32ec9 Kill -Werror in V8 for GCC 4.4.1 users.
http://code.google.com/p/v8/issues/detail?id=413
2009-10-09 14:21:41 +02:00
Ryan Dahl
335d9af71f Update docs to use sys.js and not so much mixin(). 2009-10-09 14:18:10 +02:00
Ryan Dahl
349200bd1c symlink sys.js to utils.js 2009-10-09 14:09:42 +02:00
Ryan Dahl
6325878d43 Raise helpful error when include() is called. 2009-10-09 13:30:27 +02:00
Ryan Dahl
e742d077e0 Enable debugging.
Use the --debug command line flag to enable.

It appears that d8 sucks. Luckily it can be rewritten rather easily with the
repl and tcp client libraries.

Node's CL option parsing is getting rather unwieldy - needs refactor.
2009-10-09 13:26:23 +02:00
Ryan Dahl
59b7a1bf26 More updates to wscripts v8 building.
This allows me to hack on V8 without recompiling the whole thing.
2009-10-09 12:59:42 +02:00
Ryan Dahl
d85724d741 Fix wscript for python 2.4 2009-10-09 00:34:39 +02:00
Ryan Dahl
53ebe75930 Improve build for V8
Users following HEAD should 'make distclean' and reconfigure after this
update.
2009-10-08 23:20:14 +02:00
Ryan Dahl
e46a832ded Use /bin/sh from exec() 2009-10-08 01:30:26 +02:00
Felix Geisendörfer
6219f2a2be Removed getHeader() function thanks to f623f 2009-10-07 17:30:30 +02:00
Ryan Dahl
f623fd7658 Normalize HTTP headers.
"Content-Length" becomes "content-length".
2009-10-07 16:56:19 +02:00
Ryan Dahl
d03b67669c Upgrade v8 to 1.3.15 2009-10-07 16:02:34 +02:00
Ryan Dahl
b404996cf3 Fix --v8-options command line argument. 2009-10-07 16:01:03 +02:00
Ryan Dahl
b76d853f0d Fix test-signal-handler.js on macintosh - pause before exit. 2009-10-07 15:39:39 +02:00
Ryan Dahl
be2ca1ec80 Fix build.
- Add -f flag to rm on make clean.
- Use old jsmin - the new one seems to be broken.
2009-10-07 15:02:42 +02:00
Ryan Dahl
e982349b16 Fix 'make distclean' 2009-10-07 12:43:21 +02:00
Ryan Dahl
1f31a7dbfe Upgrade v8 to 1.3.14 2009-10-07 11:53:45 +02:00
Ryan Dahl
1a2762b78e Update benchmarks with new createChildProcess API 2009-10-07 10:24:50 +02:00
Felix Geisendörfer
abbc624f52 Multipart test now uses a fixture instead of CURL 2009-10-07 02:03:24 +02:00
Felix Geisendörfer
3fd1cba073 Fixed bad indention in multipart.js 2009-10-07 02:03:24 +02:00
Ryan Dahl
1817d4b062 ev_unref() the signal handlers.
That means even if they are Attached(), libev will still exit if there is
nothing else to do.
2009-10-07 01:35:21 +02:00
Brandon Beacher
f068251494 Added signal handler.
To be used internally. Needs an exposed interface.
2009-10-07 01:23:29 +02:00
Ryan Dahl
82465fc4b1 Do not use /bin/sh to create child processes.
Instead directly call execvp(). This change is needed for the
soon-to-be-added signal handlers because the /bin/sh parent process does not
pass all signals to it's children, particularly SIGUSR1 on Linux.

The parameters of createChildProcess had to be changed slightly.
utils.exec() also has a changed implementation. A bug involving quoted
arguments was knowingly introduced into utils.exec(). Will fix later.
2009-10-07 01:08:33 +02:00
Ryan Dahl
39c61367a7 Only arguments before -- should be passed to V8. 2009-10-06 16:28:52 +02:00
Ryan Dahl
2b994d9e37 Also accept 'utf-8' to specify utf8 encodings. 2009-10-06 10:45:18 +02:00
Ryan Dahl
ae6a172308 Simplify 'make distclean' by just doing 'rm -rf build' 2009-10-06 00:44:08 +02:00
Ryan Dahl
d67288b643 Add __module to reference current node.Module object. 2009-10-05 21:01:30 +02:00
Ryan Dahl
78f8b6771c Add require.async(). 2009-10-05 20:35:48 +02:00
Ryan Dahl
d703813c27 Remove target argument from node.Module#newChild. 2009-10-05 20:35:05 +02:00
Ryan Dahl
a0c464638c Remove old references to node.loadingModules 2009-10-05 20:29:59 +02:00
Ryan Dahl
3e9dd0e2e3 Remove include() from website. 2009-10-05 19:15:38 +02:00
Ryan Dahl
8185e1fd25 Remove include() add node.mixin()
include() should not be used by libraries because it will pollute the global
namespace. To discourage this behavior and bring Node more in-line with
the current CommonJS module system, include() is removed.

Small scripts like unit tests often times do want to pollute the global
namespace for ease. To avoid the boiler plate code of

  var x = require("/x.js");
  var foo = x.foo;
  var bar = x.bar;

The function node.mixin() is stolen from jQuery's jQuery.extend. So that it
can be written:

  node.mixin(require("/x.js"));

Reference:
http://docs.jquery.com/Utilities/jQuery.extend
http://groups.google.com/group/nodejs/browse_thread/thread/f9ac83e5c11e7e87
2009-10-05 15:46:31 +02:00
Ryan Dahl
522909bcbf Parse queryString into req.uri.params 2009-10-05 14:52:26 +02:00
Ryan Dahl
4c51af882d Fix typo 2009-10-05 13:16:56 +02:00
Ryan Dahl
bac16bd8ac Remove node.pc 2009-10-05 13:04:21 +02:00
Ryan Dahl
e2b7902469 Don't use parseUri for HTTP server
The big parseUri RE was showing up often in profiles - this is simpler and
yields better performance by taking advantage of the C http parser.
2009-10-04 12:19:01 +02:00
Ryan Dahl
7b8842b619 Modify node_addon configure api 2009-10-04 11:50:53 +02:00
Ryan Dahl
5c9fe1fce1 Update addon documentation 2009-10-04 11:14:39 +02:00
Ryan Dahl
39e6d959d7 Add node-waf to help with building addons. 2009-10-04 10:33:39 +02:00
Ryan Dahl
13793aed20 Add Makefiles which were forgotten. 2009-10-03 22:48:44 +02:00
Ryan Dahl
bf0d278a45 Improve "make dist" remove generated doc from repo. 2009-10-03 22:48:33 +02:00
Ryan Dahl
861f28f37a Don't unnecessarily output the makefile from the configure script. 2009-10-03 21:46:59 +02:00
Ryan Dahl
6f17ca51c3 Install wafadmin into $PREFIX/lib/node/wafadmin
This is in preparation for a special node_waf script for building external
modules.

Also change system library path to $PREFIX/lib/node/libraries
2009-10-03 19:09:00 +02:00
Felix Geisendörfer
eeaa267cbe Documentation for Multipart parser
Also added multipart.parse as a convenience function
2009-10-03 18:06:24 +02:00
Ryan Dahl
602f9dbf3f SetClassName on internal classes. 2009-10-03 15:08:03 +02:00
Ryan Dahl
b66c5c9808 Replace DEFINE_SIMPLE_CALLBACK macros with explicit functions 2009-10-03 14:45:35 +02:00
Ryan Dahl
84d2966377 Use waf-light instead of waf
This way there won't be strange tools/.waf-12343 directories hanging about.
All that waf needs to run is inside the tools/wafadmin directory.
2009-10-02 17:05:42 +02:00
Ryan Dahl
763137e705 chat.tinyclouds.org -> chat.nodejs.org 2009-10-02 16:24:49 +02:00
Ryan Dahl
bc9b343fd3 Add note about symbol visibility in V8 to wscript 2009-10-02 14:10:40 +02:00
Ryan Dahl
9c9d67eb6c bump version 2009-09-30 23:21:25 +02:00
Ryan Dahl
7b337096c9 Add a third argument to http.cat to specify req headers. 2009-09-30 11:55:03 +02:00
isaacs
45f5402446 Pass the Host header in http.cat calls, if it was specified in the URL passed to http.cat. 2009-09-29 16:38:07 -07:00
Ryan Dahl
a8c0211e73 Bugfix: require() and include() should work in callbacks.
Removing requireAsync and includeAsync from global scope for now as a
temporary fix.  Reported by Yuffster.
2009-09-29 19:28:54 +02:00
Ryan Dahl
1ae69a68a4 Clean up some text in documentation. 2009-09-29 18:06:36 +02:00
Ryan Dahl
cda659a8c8 Camel-case all http events 2009-09-29 18:06:14 +02:00
Ryan Dahl
18da8ffaee Copy Python's shutil.copytree into wscript.
It's broken in Python 2.4.4. One gets this message when trying to run
configure:

  [...]
  Checking for SYS_clock_gettime           : ok
  Checking for library rt                  : ok
  Checking for function clock_gettime      : ok
  Checking for function nanosleep          : ok
  Checking for function ceil               : ok
  ---- deps/udns ----
  Traceback (most recent call last):
    File "/path/to/node/tools/waf", line 148, in ?
      Scripting.prepare(t, cwd, VERSION, wafdir)
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 102, in prepare
      prepare_impl(t,cwd,ver,wafdir)
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 95, in prepare_impl
      main()
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 130, in main
      fun(ctx)
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Scripting.py", line 168, in configure
      conf.sub_config([''])
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Configure.py", line 100, in sub_config
      self.recurse(k,name='configure')
    File "/path/to/node/tools/.waf-1.5.8-3e327cd9534c48e6762f56fdb1332663/wafadmin/Utils.py", line 391, in recurse
      f(self)
    File "<string>", line 82, in configure
    File "<string>", line 48, in conf_subproject
    File "/usr/lib/python2.4/shutil.py", line 111, in copytree
      os.mkdir(dst)
  OSError: [Errno 2] No such file or directory: '/sites/rabidlabs.net/sandboxes/m/public_html/projects/0909.node/node/build/default/deps/udns'

The problem is probably this:
http://mail.python.org/pipermail/python-bugs-list/2005-January/027118.html

As a solution I am copying 2.6's version of the function in.
2009-09-28 22:39:00 +02:00
Ryan Dahl
4ba5b7e24b Add doc for node.compile() 2009-09-28 22:16:43 +02:00
Ryan Dahl
e972add0ea Update module loading docs 2009-09-28 19:44:40 +02:00
Ryan Dahl
b7526eb324 Add warning when coroutine stack size grows too large.
For the moment too large is 10.
2009-09-28 18:48:19 +02:00
Ryan Dahl
9f07a690c6 docs: Reference node.libraryPaths in helpers section. 2009-09-28 18:48:19 +02:00
Ryan Dahl
27738d8e60 Clean up some things in the repl, add docs. 2009-09-28 18:48:19 +02:00
Ryan Dahl
835554c92b Error message on bad module load. 2009-09-28 18:48:19 +02:00
Ryan Dahl
23c7f472d0 API: Move node.exit() to process.exit(). 2009-09-28 18:48:18 +02:00
Ryan Dahl
c27d9f986a include utils in the repl. 2009-09-28 18:48:18 +02:00
Ryan Dahl
459d644a5a Don't delete timer object on clearTimeout.
I've heard delete is inefficient in v8. Better to let the garbage collector
take care of it naturally.
2009-09-28 18:48:18 +02:00
Ryan Dahl
095470854b Move tcp library to /tcp.js 2009-09-28 18:48:18 +02:00
Ryan Dahl
0955b0c8de Add forgotten file lib/utils.js 2009-09-28 18:48:17 +02:00
Ryan Dahl
83c9e64889 http.js license reference 2009-09-28 18:48:17 +02:00
Ryan Dahl
f6657c3c9d Move http library to /http.js 2009-09-28 12:36:36 +02:00
Ryan Dahl
7abad8b7b3 API: Move node.puts(), node.exec() and others to /utils.js 2009-09-28 12:06:30 +02:00
Ryan Dahl
c35dfdfd5e Remove api.xml from gitignore 2009-09-28 11:46:09 +02:00
Felix Geisendörfer
27c750154e Multipart stream parser 2009-09-27 16:58:56 +02:00
Ryan Dahl
3e7f0deef9 Add docbook documentation 2009-09-27 12:52:28 +02:00
Ryan Dahl
4f69871c17 Add node.inspect() and deprecate p(). 2009-09-27 12:33:44 +02:00
Ryan Dahl
9cd7864fd9 readFile/writeFile to read/write in file library.
as suggested by Bluebie.
2009-09-27 11:07:54 +02:00
Jeremy Lal
5e7a8dc75e Fixes for libeio wscript on Debian.
- Link libeio to pthread.
- Add -D_GNU_SOURCE to libeio wscript.
2009-09-27 10:55:18 +02:00
Ryan Dahl
45ea62a0f6 Changes to compile on Andrew Miller's very old machine 2009-09-26 15:11:31 +02:00
Ryan Dahl
0eb8d880f8 Remove -Werror on v8, for compiling on GCC 4.4 2009-09-25 08:40:47 +02:00
RayMorgan
028e24c9f5 When printing, check to see if value is undefined. If so, print nothing. 2009-09-24 22:16:07 -07:00
RayMorgan
7674bd5004 Added _ that is te result of the previous command. 2009-09-24 19:53:11 -07:00
RayMorgan
6915188a46 Enhanced the repl library.
Now supports:
- command options: .help, .break, .clear, .exit
- local vars and global functions
- ability to print 0, false and ""
- when value is a function, prints [Function]
- when object is circular, prints [Circular Object] instead of throwing an error
2009-09-24 18:56:37 -07:00
Ryan Dahl
2f56ccb45e bump version 2009-09-24 13:51:10 +02:00
Ryan Dahl
cfffa0bdd8 Clean up website a bit. 2009-09-24 13:44:25 +02:00
Ryan Dahl
ffded5ac86 Extract the good parts of node-repl into standalone library.
Now you can require("/repl.js") in your server to be able to examine it
while it's running.
2009-09-24 00:56:24 +02:00
Ryan Dahl
55a2e8271e Decrease default TCP backlog to 128
...after seeing http://lionet.livejournal.com/42016.html
2009-09-23 17:57:12 +02:00
Ryan Dahl
2d256f34c5 Change example at beginning of api.txt 2009-09-23 17:00:20 +02:00
Ryan Dahl
8c7babdf10 Syntax highlighting for <tt> elements. 2009-09-23 16:58:28 +02:00
Ryan Dahl
a3229ed7b7 Add documentation about requiring system modules. 2009-09-23 16:53:34 +02:00
Ryan Dahl
106287c368 Tighten window on timer test. 2009-09-23 16:40:04 +02:00
Ryan Dahl
8a5194b7cf cpplint.js file.{cc,h} 2009-09-23 16:33:24 +02:00
Ryan Dahl
c53aeb5a02 Call "connection" event after connection object is fully formed.
This became an apparent problem when adding setNoDelay because the command
was ignored if issued during the "connection" event.
2009-09-23 16:09:40 +02:00
Ryan Dahl
e0ec0036ca Add connection.setNoDelay() to disable Nagle algorithm. 2009-09-23 15:36:34 +02:00
Ryan Dahl
2df13c7310 Upgrade v8 to 1.3.13 2009-09-23 14:49:51 +02:00
Felix Geisendörfer
be3dddeec9 Syntax highlighting for api.html.
Asciidoc does not seem to support including custom JS, so this patch is a hack
for toc.js to dynamically include the needed CSS / JS. It should be ok unless
somebody has a better approach ...
2009-09-23 11:25:31 +02:00
Ryan Dahl
76f4962636 Bugfix: EIOPromise::Create was allocating two EIOPromise objects
This is because it would call the javascript initializer which executed
Promise::New, and then it would rewrap the handle. Instead I make an
explicit inheritance from EIOPromise to Promise.

This seems to fix a memory leak which was reported by Ray Morgan:
http://groups.google.com/group/nodejs/browse_thread/thread/e38949b1989da1d7
2009-09-23 00:17:50 +02:00
Ryan Dahl
663deb3828 delete[] instead of delete for arrays. 2009-09-23 00:17:49 +02:00
Ryan Dahl
8549994c4b Add readFile to '/file.js'
Thanks Hagen.
2009-09-22 17:28:04 +02:00
Ryan Dahl
a02ca7a590 Add writeFile() to /file.js
Initial patch by Tim Caswell.
2009-09-22 12:15:49 +02:00
Ryan Dahl
07792afe0a Remove "raw" encoding. Rename "raws" to "binary".
Deprecation warnings have been added to help the conversion to this new API.
2009-09-21 12:27:22 +02:00
Ryan Dahl
2db7d6755e Move node-repl to bin/node-repl 2009-09-20 20:54:19 +02:00
Ryan Dahl
cd70d4a9c0 Add "/file.js" buffered disk I/O object.
This is similar to the class node.File which was removed in
82cb1b5acb.

Needs documentation.
2009-09-20 20:42:23 +02:00
Ryan Dahl
4b8f503fac Move mjsunit.js to system module directory. 2009-09-20 18:19:33 +02:00
Ryan Dahl
7ddf1f569a Improve error message for requiring system modules. 2009-09-20 18:03:55 +02:00
Ryan Dahl
949f24305b Add node.error(); p() outputs to stderr. 2009-09-20 17:40:14 +02:00
Ryan Dahl
3311122ccb Throw ret value from wait() only if it's there. 2009-09-20 17:35:07 +02:00
Ryan Dahl
389c80aece return error from cat_promise in node.fs.cat 2009-09-20 17:34:27 +02:00
Ryan Dahl
c8b143bf30 Absolute path names for require() refer to node.libraryPaths 2009-09-19 17:21:12 +02:00
Ryan Dahl
5ddc4f5d0c bump version 2009-09-18 18:32:25 +02:00
Ryan Dahl
ab530bb211 Upgrade v8 to 1.3.11 2009-09-17 16:16:41 +02:00
Ryan Dahl
605b7e9763 Add node.installPrefix 2009-09-17 15:36:31 +02:00
Ryan Dahl
6f31a3763d Add more explanation to docs for request.finish(). 2009-09-17 15:15:05 +02:00
Ryan Dahl
b54fad9b3f Bugfix: node.fs.write() was stack allocating buffer.
Since the buffer is passed to the thread pool it needs to be heap allocated.
Thanks to Jon Crosby and Tim Caswell for debugging this.
2009-09-17 14:58:18 +02:00
Jon Crosby
e57c16bc2d Add failing spec for node.fs.write 2009-09-17 14:58:01 +02:00
Ryan Dahl
9db2e5f375 Default to utf8 encoding for node.fs.cat() 2009-09-15 22:41:25 +02:00
Ryan Dahl
16185ae57e update doc for node.fs.write() 2009-09-15 22:32:37 +02:00
Ryan Dahl
083d150bc4 Add node.exec() 2009-09-15 15:42:16 +02:00
Ryan Dahl
fdc136df69 Add documentation for promise.emitSuccess and emitError 2009-09-15 15:25:06 +02:00
Ryan Dahl
7fa694a3b6 fix typo on website 2009-09-14 22:44:25 +02:00
Ryan Dahl
5fdf9bbaa9 Remove unused variable in http.cc 2009-09-14 16:34:31 +02:00
Ryan Dahl
4f98e2deb3 Fix buffering logic for HTTP outgoing messages.
Was sending two packets instead of one for some short messages, and even 3,
for short chunked-encoded messages. Also use the more general Encode()
function for receiving HTTP bodies.

Gives ~6% improvement on "hello world" web server benchmarks.
2009-09-14 16:25:41 +02:00
Ryan Dahl
f389f923b8 Remove erroneously placed EV_DEFAULT_UC_ 2009-09-13 23:44:56 +02:00
Ryan Dahl
0d1ec5fdbe API: node.fs.read() takes a normal encoding parameter.
Removes node.UTF8, node.RAW, node.ASCII enum versions of the encodings.
node.fs.read() now supports "raws" encoding.
2009-09-13 18:31:17 +02:00
Ryan Dahl
d1a13bdd35 Fix default encoding for outgoing HTTP messages
Was causing send() to throw argument errors because arrays of ints would get
paired with the "raws" encoding. The bug was introduced in 8eb1294.
2009-09-13 18:19:03 +02:00
Ryan Dahl
ef300d19cb Bugfix: ReportException shouldn't forget the top frame. 2009-09-13 17:43:19 +02:00
Ryan Dahl
8eb1294f87 Bugfix: sendBody wasn't setting encoding 2009-09-13 12:44:09 +02:00
Ryan Dahl
69e8a01c58 Fix broken asciidoc section 2009-09-12 19:14:16 +02:00
Jeff Smick
bc6f381c98 Use "platform.architecture()" to find the proper architecture.
In Snow Leopard "platform.machine()" returns "i386" while
"platform.architecture()" returns ('64bit',''). Using information from both
we can determine the proper architecture

This reverts commit ea29e137b5 re-enabling the
64bit build on Macintosh.
2009-09-12 14:22:57 +02:00
Ryan
227638bac1 Lint 2009-09-12 14:21:37 +02:00
Ryan
dbe116ddfe API: Change arguments of emit(), emitSuccess(), emitError()
Instead of

  myemitter.emit("event", [arg1, arg2, arg3]);

the API is now

  myemitter.emit("event", arg1, arg2, arg3);

This change saves the creation of an extra array object for each event.
The implementation is also slightly more simple.
2009-09-12 14:21:37 +02:00
Ryan
97355f3613 spell check api.txt 2009-09-11 21:27:20 +02:00
Ryan
12bb0d46ce bump version 2009-09-11 21:06:50 +02:00
Ryan
5629fd574a Add doc note about 'raws' encoding 2009-09-11 21:04:02 +02:00
Ryan
d03c7e38e9 Just add the gernerated doc files. Make life easier. 2009-09-11 20:51:39 +02:00
Ryan
d851bf9a66 Revert "Add xsl files to doc directory so people can build docs easily"
This reverts commit 412b4636c8.
2009-09-11 20:47:45 +02:00
Ryan
412b4636c8 Add xsl files to doc directory so people can build docs easily 2009-09-11 20:34:55 +02:00
Ryan
8c41adb628 Add node-repl 2009-09-11 20:32:24 +02:00
Ryan
1910c113cc Add '--' to seperate v8 args from program args 2009-09-11 20:05:22 +02:00
Ryan
d6c9d31cb5 cpplint.py node.cc and node.h 2009-09-11 16:02:29 +02:00
Ryan
241950c1df Add isDirectory(), isFile(), isSocket(), ... methods to stats object.
Thanks to Felix Geisendörfer for the initial patch.
2009-09-11 13:41:47 +02:00
Ryan
3e4fc9f966 Add 'extern char **environ' so that the new ENV code compiles.
Problem appeared in dc39e82024.
2009-09-10 16:48:54 +02:00
Ryan
dc39e82024 Add access to user environment via ENV 2009-09-10 14:07:35 +02:00
Ryan
68dda0a7d8 Man page generation. 2009-09-10 13:40:38 +02:00
Ryan
8e5d4f9a69 Remove debug agent. It shouldn't have been commited!
Appeared accidentally in 6dd850aa.
2009-09-10 12:41:18 +02:00
Ryan
2337630746 Move arg parsing to beginning of main()
For faster "./node -v"
2009-09-10 12:34:51 +02:00
Ryan
d7e220cee1 Add a few fflush(stderr) calls to track down missing stacktraces. 2009-09-09 22:39:27 +02:00
Ryan
fcff66bf29 Upgrade v8 to 1.3.10 2009-09-09 22:01:54 +02:00
Ryan
efb2b703a6 Remove compiler warning with extra assert. 2009-09-09 18:06:58 +02:00
Ryan
393caeb4c9 Add Exception::Error where missing. 2009-09-09 17:35:59 +02:00
Ryan
8890070b88 Introduce "raws" encoding. Raw String.
This allows you to have binary data imported into your application via
strings instead of arrays of numbers! This needs testing before release.
2009-09-09 17:22:20 +02:00
Ryan
21a1b045f5 Byte stream to V8 decoding and encoding.
This does not (should not) change behavior.  Pulls those two functions
(encode/decode) out into node.cc.
2009-09-09 15:52:46 +02:00
Ryan
6dd850aa16 node.assert() was broken. 2009-09-08 14:59:43 +02:00
Ryan
063890b8da Internally use full paths when loading modules.
This completes shebang support begun in
6acac912dd.
2009-09-07 14:46:56 +02:00
Ryan
1a2696f10a Almost completely remove onExit and onLoad.
They were deprecated in 723c7d9f7c and
31265be4a6.

Still retaining error message.
2009-09-07 14:45:48 +02:00
Ryan
0407145c11 Exit the process on module load error. (temporary) 2009-09-07 14:13:32 +02:00
Ryan
86051ca5d2 Add note about sendBody buffering to docs 2009-09-07 12:56:10 +02:00
Ryan
94e627dc32 Add some links to the website 2009-09-07 12:54:08 +02:00
Ryan
2f46540d30 Create NODE_UNIXTIME macros 2009-09-07 12:53:44 +02:00
Ryan
ba6c5e38d5 bump version 2009-09-05 14:47:56 +02:00
Ryan
ea29e137b5 Hack for compiling on Snow Leopard.
I don't have access to this OS to fix the issue properly, so for the moment
I'm reverting back to 32bit build on Darwin. We changed to native 64bit in
8ddf930901.

Thanks to Johan Dahlberg and Tim Caswell for reporting and debugging this.
2009-09-05 14:40:12 +02:00
Ryan
485a9c1487 Small change to website index.html 2009-09-05 14:39:24 +02:00
Ryan
9dbd92476e Bugfix: Trap exceptions in URIParser.
A user was able to crash chat.tinyclouds.org by sending it a malformed URL!
Not good.
2009-09-04 17:42:00 +02:00
Ryan
734e86b9e5 bump version 2009-09-04 12:35:30 +02:00
Ryan
733ee426dc Fix slowness in debug run of test-tcp-many-clients
I'm not sure what is actually causing

  node_g test/mjsunit/test-tcp-many-clients.js

to run slowly, but I traced the problem to
afd9e714d3.
Somehow it has to do with promoting the compilation of src/util.js. That
change wasn't actually intended to be included in afd9e7 commit anyway, so
I'm reverting it here.
2009-09-04 12:15:21 +02:00
Ryan
2097b9d2e5 Upgrade evcom - disable EPIPE error output. 2009-09-04 11:46:56 +02:00
Ryan
1bd5277233 Add test-mkdir-rmdir.js 2009-09-04 11:46:31 +02:00
Ryan
b6eed30379 Sort files in readdir test. 2009-09-03 21:59:31 +02:00
Ryan
3736bf9f49 Add node.fs.mkdir() 2009-09-03 21:57:15 +02:00
Ryan
9b3e2ae192 Add node.fs.readdir() 2009-09-03 21:32:27 +02:00
Ryan
747d6723aa Clean up eio wrappers. Create EIOPromise. 2009-09-03 21:32:21 +02:00
Ryan
c13773a71f Clean up text on website. 2009-09-03 18:12:50 +02:00
Ryan
1645b8f8b0 Asyncly do getaddrinfo() on Apple. 2009-09-03 16:01:45 +02:00
Ryan
1df6d61208 Upgrade libeio, increase xthread stacksize to 64kb.
64kb seems to be the magic number for getaddrinfo() to work on Macintosh.
2009-09-03 15:59:48 +02:00
Ryan
342da69701 Add extension API documentation 2009-09-03 15:00:06 +02:00
Ryan
aefbd57514 Add stack to promise.wait().
The problem was that if promise A was waiting and promise B was created and
then also told to wait (from some callback coming off the event loop), and
then promise A finished, promise B's wait would return. Promise A's wait
would not return until promise B was finished. This is incorrect.

To solve this issue properly, one probably needs to allocate separate
execution stacks. I use, instead, Poor Man's Coroutines. We continue to use
the main execution stack and force promises created most recently to return
first.

That is even if Promise A finishes first, neither wait() returns. Not until
Promise B finishes, will its wait() return. After that is complete, Promise
A's wait() will return.

This introduces the problem of growing the "wait stack" infinitely. Thus
I've added a strong warning to the documentation only to use this operation
sparingly. require() and include() seem to be the proper use case for such a
thing: they are called usually at program start up - they don't take too
long to finish and they won't be called so often.

Let's experiment with this stop-gap. If the infinite promise stack becomes a
problem for many, then I will remove promise.wait() entirely or perhaps only
use it for thread pool events.
2009-09-03 10:48:39 +02:00
Ryan
8ddf930901 Build natively on x64.
Had to add some waf hackery to override V8's architecture choice. They
probably have a reason for defaulting still to IA32, but all tests are
passing for me, and it makes it easier on users-and I think chrome is using
x64 builds too. So let's go for it!
2009-09-02 20:19:52 +02:00
Ryan
82d986db24 Add limits.h to src/node.cc for PATH_MAX 2009-09-02 20:18:57 +02:00
Ryan
97ce138621 Upgrade V8 to 1.3.9 2009-09-02 11:13:46 +02:00
Ryan
78bb53b009 Set module.loaded=true for dll modules. 2009-09-01 15:43:56 +02:00
Ryan
ed9c3362ee Remove --lib option since there is no more libnode 2009-09-01 15:28:10 +02:00
Ryan
8152f9cff2 Revert static library build.
Not necessary to build dll modules after all.
2009-09-01 14:15:29 +02:00
Michael Carter
8ea6adcae6 Feature: add node.cwd() to access the current working directory. 2009-09-01 11:39:30 +02:00
Ryan
fbf65b58f9 Use Error exceptions where possible in net.cc and file.cc 2009-08-31 18:57:01 +02:00
Ryan
3862fdade4 Throw Error exceptions from node.dlopen() 2009-08-31 18:48:47 +02:00
Ryan
afd9e714d3 Stack traces for mjsunit errors, better error reporting function.
The error reporting function tries to look at the "stack" element of the
exception.
2009-08-31 18:42:50 +02:00
Ryan
7beea2cd5f Upgrade evcom; Add setTimeout method to node.tcp.Connection
The default timeout is 60 seconds, but it can now be changed.

evcom upgrade includes fixes to force_close.
2009-08-31 18:26:50 +02:00
Ryan
18a1923604 Update test script to use new debug build's name: node_g 2009-08-31 16:12:27 +02:00
Ryan
a97dce7523 Build static executable.
- Fix a few errors with node.dlopen()

- Report errors to stderr (this should probably be a separate commit, but
  whatever)
2009-08-31 11:45:44 +02:00
Ryan
b73264d9b3 Add command line arguments for accessing build flags.
node --cflags
node --libs

At the expense of some WAF nastiness.
2009-08-27 16:08:47 +02:00
Ryan
4d92199d18 Add pkgconfig files to help with dll builds. 2009-08-27 16:08:47 +02:00
Ryan
2b6d72431b First attempt at node.dlopen
Compiled first working 'hello world' module with this config
2009-08-27 16:08:40 +02:00
Ryan
31db4f1ed8 bump version 2009-08-27 12:31:52 +02:00
Ryan
00a03dfee2 Fix text on index.html 2009-08-27 12:23:53 +02:00
Ryan
ad9d683f9f API: rename node.Process to node.ChildProcess
This is to avoid confusion with the global "process" object, especially for
the instances of node.Process.
2009-08-26 22:36:45 +02:00
Ryan
116f4dea05 lint 2009-08-26 22:14:45 +02:00
Ryan
723c7d9f7c Replace onExit() with process.addListener("exit")
- Update documentation.

- Depreciation message for onExit().
2009-08-26 22:14:44 +02:00
Ryan
6025da2153 Introduce 'process' object. Also is the global object. 2009-08-26 22:14:44 +02:00
Ryan
31265be4a6 Depreciate onLoad 2009-08-26 22:14:44 +02:00
Ryan
79f121044c Synchronous module loading.
`include` and `require now` call `promise.wait` on their retrieval functions
making them synchronous.  Introduce `include_async` and `require_async` to
do asynchronous retrievals.

`include_async` and `require_async` need testing and documentation.

Update documentation for include, require().  I am mostly removing
information about onLoad(). onLoad is to be depreciated.
2009-08-26 22:14:01 +02:00
Ryan
7e7deed510 Add node.assert for internal debugging. 2009-08-26 18:02:13 +02:00
Ryan
18d0511777 promise.block() renamed to promise.wait()
promise.wait() now returns the arguments of the "success" event.  If there
was only a single argument, then it is returned.  If there was more than
one, they are returned as an array.  If there was an error, it is thrown.
See documentation.
2009-08-26 17:28:49 +02:00
Ryan
51addf19d8 Improve Promise documentation. 2009-08-26 11:25:53 +02:00
Ryan
8781b969e9 Modify website layout. 2009-08-26 11:25:10 +02:00
Ryan
db42ad959d API: All EventEmitters emit "newListener" when listeners are added.
The "newListener" event will also be emitted for listeners to "newListener".
Maybe useful?
2009-08-25 17:28:06 +02:00
Ryan
b5a1585470 Restyle website/api.html. Now looks like the front page.
Made a few other little corrections too.
2009-08-25 17:25:39 +02:00
Ryan
b5b65ddcd7 Upgrade v8 to 1.3.7 2009-08-25 13:47:18 +02:00
Ryan
b0a362a727 Fix coupling problems on OSX 2009-08-25 13:33:19 +02:00
Ryan
aa664c8040 Add close() to coupling pump. Wasn't getting EOF. 2009-08-25 12:56:54 +02:00
Ryan
19f182a39f Experimental support for Promise.block() 2009-08-25 04:25:35 +02:00
Ryan
82cb1b5acb API: Remove buffered file object (node.File)
With the addition of non-libeio stdio (17c6a67f15)
this class is no longer being used internally. It has proved buggy and isn't
full-featured enough to be very useful.  Since it's implemented entirely in
javascript it will be easy for someone to extra into their own library if
needed.
2009-08-25 01:18:44 +02:00
Ryan
8658999c7d Refactor node.Process to take advantage of evcom_reader/writer. 2009-08-25 01:06:49 +02:00
Ryan
17c6a67f15 Introduce node.stdio
Remove old stdout, stderr, stdin objects.
2009-08-24 21:20:26 +02:00
Ryan
0727fcc9ed Speed up test-tcp-throttle.js 2009-08-24 21:11:02 +02:00
Ryan
69a9f66b07 Add sha1 hashes to ChangeLog 2009-08-24 13:02:55 +02:00
Ryan
4fab9dfc36 Remove outdated todo list 2009-08-24 13:00:45 +02:00
Ryan
1bbd5c6d55 Add node node_g to gitignore. 2009-08-24 12:59:17 +02:00
Ryan
316e2833f0 Use flat object instead of array-of-arrays for HTTP headers.
E.G. { "Content-Length": 10, "Content-Type": "text/html" } instead of
[["Content-Length", 10], ["Content-Type", "text/html"]].
The main reason for this change is object-creation efficiency.

This still needs testing and some further changes (like when receiving
multiple header lines with the same field-name, they are concatenated with a
comma but some headers ("Content-Length") should not be concatenated ; the
new header line should replace the old value).

Various thoughts on this subject:
http://groups.google.com/group/nodejs/browse_thread/thread/9a67bb32706d9efc#
http://four.livejournal.com/979640.html
http://mail.gnome.org/archives/libsoup-list/2009-March/msg00015.html
2009-08-23 12:32:49 +02:00
Ryan
9c97b1db30 bump version 2009-08-22 13:07:31 +02:00
Ryan
a8813fcdf5 evcom upgrade - ignore sigpipe. remove error output. 2009-08-22 12:04:45 +02:00
Ryan
a73998d6f4 bump version 2009-08-21 18:03:15 +02:00
Kevin van Zonneveld
8489bdbaeb Buggy connections could crash node.js. Now check connection before sending data every time
http://groups.google.com/group/nodejs/browse_thread/thread/16abfa87c32408f3

We have our node.js server monitored by monit, however it seems monit is pretty
agressive / quick about closing its connection and thus we've gotten into a
loop of errors like this:

    at #<a ServerResponse>.flush
    at #<a ServerResponse>.sendBody
    at [object Object].json
    at [object Object].[anonymous]
    at [object Object].[anonymous]
    at [object Object].[anonymous]
http.js:353: Socket is not open for writing
      connection.send(out, out.encoding);
                 ^

Below is a patch that basically cause flushMessageQueue to check the connection
state for each item in the queue rather than just a single time in the
beginning.
2009-08-21 17:54:10 +02:00
Ryan
ed3602dddc Sync evcom 2009-08-21 14:53:58 +02:00
Ryan
f7f11352b7 Don't Close TCP Connection/Server on destruction.
If the connection is open when the destructor is called it's a bug! Don't
want to try to compensate for bugs.
2009-08-21 14:47:33 +02:00
Ryan
048a1b8b9e Upgrade v8 to 1.3.6 2009-08-21 13:13:04 +02:00
Ryan
90ac9ab078 Remove connnection.fullClose() from documentation.
This function was removed in 368ea93bfe.
2009-08-19 17:46:44 +02:00
Ryan
368ea93bfe Upgrade evcom - fix API issues. 2009-08-19 17:41:32 +02:00
Ryan
0cec74d03d Upgrade v8 to 1.3.5 2009-08-19 16:37:15 +02:00
Ryan
b590a45849 Return the EventEmitter from addListener for chaining.
http://groups.google.com/group/nodejs/browse_thread/thread/13708eacedb40b36
2009-08-19 13:29:22 +02:00
Abe Fettig
53b3d6be35 Bugfix: stdin fd (0) being ignored by node.File.
In the case of stdin options.fd is 0, which is considered false, therefore fd
gets set to null intead of 0.
http://groups.google.com/group/nodejs/msg/80849f6aa0b0eaa0
2009-08-19 12:58:02 +02:00
Ryan
7aaab320b3 API: tcp.Connection "disconnect" event renamed to "close".
More semantic, since the event will be emitted on connection error,
when the connection was ever established.
2009-08-14 12:51:46 +02:00
Ryan
95f9209966 Clarify some of the TCP API documentation. 2009-08-14 12:43:46 +02:00
Ryan
0f888ed6de bump version 2009-08-13 15:52:55 +02:00
Ryan
b41ea5289e Upgrade libev to 3.8 2009-08-13 15:07:37 +02:00
Ryan
9dc621f83a Upgrade v8 to 1.3.4 2009-08-13 15:06:34 +02:00
Ryan
dd5ae3183b Enable test-tcp-many-clients. 2009-08-13 15:05:02 +02:00
Ryan
af40ae6b8f Remove debugging messages in HTTP client 2009-08-13 15:03:28 +02:00
Ryan
79ff085c4a Upgrade v8 to 1.3.3 2009-08-13 13:52:47 +02:00
Ryan
3b0408ec1c Sync evcom after refactor; fix binding issues 2009-08-13 13:47:16 +02:00
Ryan
4253baf4ab Sync evcom. 2009-08-10 12:54:57 +02:00
Ryan
ca0dda797a (evcom) SOL_SOCKET got renamed in socket,stream renaming
This was breaking the build on Macintosh.
2009-08-10 12:46:22 +02:00
Ryan
738d20f6f0 (evcom) Add fix for pausing against big buffers.
discussion:
http://groups.google.com/group/nodejs/browse_thread/thread/11a920da4d0ed21d
2009-08-10 12:32:54 +02:00
Ryan
0638a3a3ab Add IncomingMessage.prototype.pause() and resume(). 2009-08-09 19:16:25 +02:00
Ryan
94e8721771 Add connection.readPause() and connection.readResume() 2009-08-09 19:12:12 +02:00
Ryan
7d60998ee1 Upgrade evcom
Made API changes in evcom and had to make minor change src/net.cc to comply.
2009-08-09 18:42:06 +02:00
Ryan
ed8c43d2f3 Bugfix: Negative ints in HTTP's on_body and node.fs.read()
Similar to the error fixed in
9d3ed1bb92.

Reported by Felix Geisendörfer.
2009-08-09 18:10:16 +02:00
Ryan
75fc21537a Bugfix: response.setBodyEncoding("ascii") not working.
This is same error that was fixed in 216fb3b9b2.

Reported by Felix Geisendörfer.
2009-08-09 18:04:10 +02:00
Ryan
65ec2d5db4 Fix http benchmark. Wasn't correctly dispatching. 2009-08-08 21:51:28 +02:00
Ryan
abaab2ce9b Add -m32 gcc flag to udns build.
This is a temporary fix until V8 supports 64bit systems natively.
2009-08-08 16:58:06 +02:00
Ryan
d8226af7f5 Upgrade http_parser to v0.2 2009-08-07 18:25:25 +02:00
Ryan
6ffe389c97 Add SHA1 hash values to ChangeLog and fix formating. 2009-08-07 15:45:11 +02:00
Ryan
78024fa689 Remove extra ev_timer_stop() in src/dns.cc 2009-08-07 14:10:40 +02:00
Ryan
0486c091e1 (evcom) Increase recv buffer from 4 bytes (!!!) to 8192 2009-08-06 15:08:07 +02:00
Ryan
7464d42310 bump version 2009-08-06 14:01:26 +02:00
Ryan
7946e98c1f Delete v8 file that was removed in 1.3.2 2009-08-06 13:59:09 +02:00
Ryan
8bb8b4b570 Upgrade v8 to 1.3.2 2009-08-06 13:36:45 +02:00
Ryan
b849d50288 Remove unused symbols. 2009-08-06 13:33:42 +02:00
Ryan
216fb3b9b2 Bugfix: node.http.ServerRequest.setBodyEncoding('ascii') not working
Pointed out by Felix Geisendörfer.
http://groups.google.com/group/nodejs/browse_thread/thread/d061fe62eba6d3b3#
2009-08-06 13:29:24 +02:00
Ryan
9b3baf3d50 Bugfix: node.encodeUtf8 was broken. (Connor Dunn)
http://groups.google.com/group/nodejs/browse_thread/thread/5ad0660a0959d885#
2009-08-06 13:17:30 +02:00
Ryan
fb7dd02929 Add ranlib to udns Makefile
Thanks to Urban Hafner.
http://groups.google.com/group/nodejs/browse_thread/thread/25867dba9db11d8
2009-08-06 13:03:57 +02:00
Ryan
e111ccc014 Add Felix Geisendörfer's HTTP stress test.
Does not pass on Macintosh and FreeBSD.
2009-08-05 11:17:26 +02:00
Ryan
396ed96b2d Upgrade evcom - fix accepting too many connections issue 2009-08-04 14:51:41 +02:00
Ryan
2312ff4b23 Apply patch for V8 bug 414
http://groups.google.com/group/nodejs/browse_thread/thread/25867dba9db11d8
http://code.google.com/p/v8/issues/detail?id=414
http://codereview.chromium.org/159659
2009-08-04 12:05:59 +02:00
Ryan
6acac912dd Initial support for shebang.
There are some issues with loading modules from shebang-executed scripts
that will still need to be addressed, but this works for simple single
script situations.
2009-08-03 18:42:56 +02:00
Ryan
11df252cb9 Add simple command line switches 2009-08-03 18:21:34 +02:00
Ryan
1bf9be6b37 Add node.version 2009-08-03 17:51:35 +02:00
Ryan
e10fbab00f bump version 2009-08-01 14:56:45 +02:00
Ryan
207bd3c764 Add header to src/dns.cc to compile on FreeBSD. 2009-08-01 12:58:39 +02:00
Ryan
c745383b31 Add examples of reading a file to documentation. 2009-07-31 20:01:49 +02:00
Ryan
4f46c47773 node.fs.File was not passing args to promise callbacks.
Reported by Jacob Rus.
2009-07-31 19:48:19 +02:00
Ryan
9d3ed1bb92 Bugfix: negative integers in raw encoding stream.
Add test. Reported by Tim Caswell.
2009-07-31 19:16:08 +02:00
Ryan
e25afc35bd Hack to fix module line numbers in stack traces.
This code is going to be refactored with the introduction of the "process"
object. This is just temporary.
2009-07-31 18:49:30 +02:00
Ryan
b27f8ba06d Default to chunked for client requests without C-Length.
Also add test. Reported by Felix Geisendörfer.
2009-07-31 18:34:27 +02:00
Ryan
2ebd692151 Upgrade V8 to 1.3.1 2009-07-31 14:36:48 +02:00
Ryan
5373c6869a node.tcp.Server's backlog option is now an argument to listen() 2009-07-31 11:59:36 +02:00
Ryan
4db8bb9375 Simplify the DNS usage example. 2009-07-30 15:54:38 +02:00
Ryan
41d89f611f Add DNS API.
Missing functional tests. I'm not sure how to do tests because I don't want
to rely on the fact that users have an internet connection.
2009-07-28 12:36:41 +02:00
Ryan
77d407df28 bump version 2009-07-27 15:48:16 +02:00
Ryan
d41197e02c Disable test-tcp-many-clients.js. It's broken on macintosh - don't want to fix right now. 2009-07-27 15:30:07 +02:00
Ryan
0fb0af3a6c Rename evnet to evcom. 2009-07-25 17:52:26 +02:00
Ryan
842eaf446d Move EventEmitter.prototype.emit() completely into C++.
This shows a healthy speed up.
2009-07-24 22:23:50 +02:00
Ryan
4aac515202 Remove unused 'using namespace std' lines. 2009-07-24 22:22:08 +02:00
Ryan
b3e828991b Remove unused symbols from http.cc. 2009-07-24 20:42:54 +02:00
Ryan
854538d094 Missing HandleScope in GetMethod(). Thanks Brian. 2009-07-24 20:20:01 +02:00
Ryan
d2222efc5e Add note to README about wiki page 2009-07-24 15:14:59 +02:00
Ryan
50c0d16208 Fix memory leak. It was only a missing HandleScope in Emit()!
This change also tries to optimize Emit by looping through the listeners in
C++. The javascript version of this function is still there and being used,
but only by javascript code. Not an ideal solution - there should only be
one implementation - however for now it seems to help.

This doesn't solve all of the memory leaks that we're experiencing, there
seems to be another subtle problem.
2009-07-24 15:11:18 +02:00
Ryan
78aaf8df67 Remove unused static object. 2009-07-24 01:15:21 +02:00
Ryan
646829262f Fix evnet_buf size calculation for V8::AdjustAmountOfExternalAllocatedMemory(). 2009-07-23 18:36:28 +02:00
Ryan
dd1750f573 Clean up little errors in events.js 2009-07-23 18:35:43 +02:00
Ryan
0462b5d1ec ObjectWrap: MakeWeak again after each Weak callback. 2009-07-23 18:35:03 +02:00
Ryan
b1588e78d9 Fix utf8 scripts, add test. Thanks Urban. 2009-07-20 21:22:19 +02:00
Ryan
e8a5d3d311 remove the callback from node.cat, node.fs.cat 2009-07-20 21:09:37 +02:00
Ryan
b07dc31e1b root_module should be a local variable 2009-07-20 18:30:15 +02:00
Ryan
2a695a9721 Array.prototype.encodeUtf8 renamed to node.encodeUtf8(array) 2009-07-20 18:19:13 +02:00
Ryan
88e9a5f122 Upgrade V8 to 1.2.14 2009-07-20 13:18:42 +02:00
Ryan
f4dfbe37a3 Upgrade libev to 3.7 2009-07-20 13:01:40 +02:00
Ryan
e7bbda0b7f Attach connections on Macintosh too. 2009-07-20 12:52:03 +02:00
Ryan
eb10553634 Move node.inherit, node.path, node.cat to new file: util.js 2009-07-16 17:19:36 +02:00
Ryan
22e85cbc0b Fix 'make test-debug' 2009-07-16 16:54:55 +02:00
Ryan
edbae656d6 Add IsNearDeath assertion to ObjectWrap destructor 2009-07-16 15:43:03 +02:00
Ryan
56c785ceae small clean ups to http.js 2009-07-16 11:23:37 +02:00
Ryan
8b819d8546 Upgrade evnet. 2009-07-15 17:52:38 +02:00
Ryan
0292dea847 Better error output for socket errors. Temporary. 2009-07-15 17:52:11 +02:00
Ryan
1b6bbc619d Bugfix: Server-side clients not attached between creation and on_connect.
Solution is to manually add Attach() to OnConnection.

For client side it seems there is no Detach() being called after NS
resolution? Otherwise I would have removed it. That was another bug.

Note: We don't want to modify evnet's behavior to have on_connect called
directly when the socket is accepted. evnet needs to support SSL, and
on_connect is supposed to signal that the SSL connection is established. The
point here is that being "connected" and being "attached" to the event loop
are two different things. SSL stuff may be transmitted when a socket is not
"connected" but it must always be attached.
2009-07-15 17:36:30 +02:00
Ryan
fc02221393 Remove unused variable from ~Connection 2009-07-15 17:36:30 +02:00
Ryan
5e2a6f8c46 Upgrade evnet to fix close() bug. Add test for bug.
evnet wasn't properly closing sockets if they didn't have data to write.
2009-07-15 07:54:08 +02:00
Ryan
ef09b2c65d large http.js refactor 2009-07-14 18:31:50 +02:00
Ryan
216e6204f0 http: Add IncomingMessage as abstract base class of ServerReq ClientRes 2009-07-14 12:03:47 +02:00
Ryan
116069fab3 upgrade http_parser 2009-07-14 00:00:07 +02:00
Ryan
2819e3bcb8 Replace some printf() in src/net with asserts 2009-07-13 16:38:55 +02:00
Ryan
f99fbc61e1 Add 'close' event to tcp.Server 2009-07-13 16:38:55 +02:00
Ryan
05d6319fa0 Add benchmark scripts.
To use the benchmarks:

  node benchmarks/run.js

or:

  make benchmark

The numbers reported are the elapsed milliseconds the script took to
complete. Currently only benching HTTP code and timers.
2009-07-13 16:38:55 +02:00
Ryan
bf6a457f64 Use assert() for Unwrap checks instead of JS error. 2009-07-13 16:38:55 +02:00
Ryan
041af82b8c Bugfix: Sockets not properly reattached if reconnected during disconnect event.
The problem was that Connection::on_close was calling Detach() directly
after executing the "disconnect" event. Since we had a boolean attach count,
this was leaving sockets detached even if they had reattached in during the
event.

 * Added many asserts in http.cc and net.cc to ensure that sockets are
   connected when they should be.

 * Changed ObjectWrap to use a reference count instead of boolean attached_
   value.

 * Fixed similar bug in Timer.
2009-07-13 16:38:55 +02:00
Ryan
d4fcc0a753 add bug to TODO 2009-07-13 16:38:54 +02:00
Ryan
996d5ef5f1 Add res.client to ClientResponse 2009-07-13 16:38:54 +02:00
Ryan
c5ab0d5a80 Upgrade liboi, which is now called evnet. 2009-07-13 16:38:25 +02:00
Ryan
51e77c37b5 Do not call Detach() from Server::~Server. 2009-07-11 11:43:06 +02:00
Ryan
22c3a1e2a5 Templatize ObjectWrap::Unwrap. Remove NODE_UNWRAP macro. 2009-07-10 13:57:58 +02:00
Ryan
1fc4dce08b Simplify and cleanup ObjectWrap.
Simplify and inline ObjectWrap::Wrap

    Inline and clean up ObjectWrap::Unwrap

    Move ObjectWrap into its own file.

    Remove handle from ObjectWrap constructor. add obj->Wrap(handle)

    Simplify Attach/Detach in ObjectWrap

    Remove ObjectWrap::InformV8ofAllocation. (Too messy/complex.)
2009-07-10 13:38:53 +02:00
Joshaven Potter
4b9f26c51a validate js 2009-07-01 02:33:08 +02:00
Ryan
0640517a91 fix example on website 2009-06-30 15:56:52 +02:00
1432 changed files with 489979 additions and 97306 deletions

13
.gitignore vendored
View File

@@ -2,6 +2,15 @@ build
.waf*
tags
.lock-wscript
Makefile
*.pyc
website/api.html
*.patch
doc/api.xml
doc/api.html
doc/changelog.html
doc/node.1
test/fixtures/hello.txt
tmp/
node
node_g
*.swp
.benchmark_reports

133
AUTHORS Normal file
View File

@@ -0,0 +1,133 @@
# Authors ordered by first contribution.
Ryan Dahl <ry@tinyclouds.org>
Urban Hafner <urban@bettong.net>
Joshaven Potter <yourtech@gmail.com>
Abe Fettig <abefettig@gmail.com>
Kevin van Zonneveld <kevin@vanzonneveld.net>
Michael Carter <cartermichael@gmail.com>
Jeff Smick <sprsquish@gmail.com>
Jon Crosby <jon@joncrosby.me>
Felix Geisendörfer <felix@debuggable.com>
Ray Morgan <rmorgan@zappos.com>
Jérémy Lal <kapouer@melix.org>
Isaac Z. Schlueter <i@izs.me>
Brandon Beacher <brandon.beacher@gmail.com>
Tim Caswell <tim@creationix.com>
Connor Dunn <connorhd@gmail.com>
Johan Sørensen <johan@johansorensen.com>
Friedemann Altrock <frodenius@gmail.com>
Onne Gorter <onne@onnlucky.com>
Rhys Jones <rhys@wave.to>
Jan Lehnardt <jan@apache.org>
Simon Willison <simon@simonwillison.net>
Chew Choon Keat <choonkeat@gmail.com>
Jered Schmidt <tr@nslator.jp>
Michaeljohn Clement <inimino@inimino.org>
Karl Guertin <grayrest@gr.ayre.st>
Xavier Shay <xavier@rhnh.net>
Christopher Lenz <cmlenz@gmail.com>
TJ Holowaychuk <tj@vision-media.ca>
Johan Dahlberg <jfd@distrop.com>
Simon Cornelius P. Umacob <simoncpu@gmail.com>
Ryan McGrath <ryan@venodesigns.net>
Rasmus Andersson <rasmus@notion.se>
Micheil Smith <micheil@brandedcode.com>
Jonas Pfenniger <jonas@pfenniger.name>
David Sklar <david.sklar@gmail.com>
Charles Lehner <celehner1@gmail.com>
Elliott Cable <me@ell.io>
Benjamin Thomas <benjamin@benjaminthomas.org>
San-Tai Hsu <v@fatpipi.com>
Ben Williamson <benw@pobox.com>
Joseph Pecoraro <joepeck02@gmail.com>
Erich Ocean <erich.ocean@me.com>
Alexis Sellier <self@cloudhead.net>
Blaine Cook <romeda@gmail.com>
Stanislav Opichal <opichals@gmail.com>
Aaron Heckmann <aaron.heckmann@gmail.com>
Mikeal Rogers <mikeal.rogers@gmail.com>
Matt Brubeck <mbrubeck@limpet.net>
Michael Stillwell <mjs@beebo.org>
Yuichiro MASUI <masui@masuidrive.jp>
Mark Hansen <mark@markhansen.co.nz>
Zoran Tomicic <ztomicic@gmail.com>
Jeremy Ashkenas <jashkenas@gmail.com>
Scott González <scott.gonzalez@gmail.com>
James Duncan <james@joyent.com>
Arlo Breault <arlolra@gmail.com>
Kris Kowal <kris.kowal@cixar.com>
Jacek Becela <jacek.becela@gmail.com>
Rob Ellis <kazoomer@gmail.com>
Tim Smart <timehAndGod@gmail.com>
Herbert Vojčík <herby@mailbox.sk>
Krishna Rajendran <krishna@emptybox.org>
Nicholas Kinsey <pyrotechnick@feistystudios.com>
Scott Taylor <scott@railsnewbie.com>
Carson McDonald <carson@ioncannon.net>
Matt Ranney <mjr@ranney.com>
James Herdman <james.herdman@gmail.com>
Julian Lamb <thepurlieu@gmail.com>
Brian Hammond <brian@fictorial.com>
Mathias Pettersson <mape@mape.me>
Trevor Blackwell <tlb@tlb.org>
Thomas Lee <thomas.lee@shinetech.com>
Daniel Berger <code+node@dpbis.net>
Paulo Matias <paulo.matias@usp.br>
Peter Griess <pg@std.in>
Jonathan Knezek <jdknezek@gmail.com>
Jonathan Rentzsch <jwr.git@redshed.net>
Ben Noordhuis <info@bnoordhuis.nl>
Elijah Insua <tmpvar@gmail.com>
Andrew Johnston <apjohnsto@gmail.com>
Brian White <mscdex@mscdex.net>
Aapo Laitinen <aapo.laitinen@iki.fi>
Sam Hughes <sam@samuelhughes.com>
Orlando Vazquez <ovazquez@gmail.com>
Raffaele Sena <raff367@gmail.com>
Brian McKenna <brian@brianmckenna.org>
Paul Querna <pquerna@apache.org>
Ben Lowery <ben@blowery.org>
Peter Dekkers <soderblom.peter@gmail.com>
David Siegel <david@artcom.de>
Marshall Culpepper <marshall.law@gmail.com>
Ruben Rodriguez <cha0s@therealcha0s.net>
Dmitry Baranovskiy <Dmitry@Baranovskiy.com>
Blake Mizerany <blake.mizerany@gmail.com>
Jerome Etienne <jerome.etienne@gmail.com>
Dmitriy Shalashov <skaurus@gmail.com>
Adam Wiggins <adam@heroku.com>
Rick Olson <technoweenie@gmail.com>
David Siegel <david.siegel@artcom.de>
Sergey Kzyzhanovsky <skryzhanovsky@gmail.com>
Marco Rogers <marco.rogers@gmail.com>
Benjamin Fritsch <beanie@benle.de>
Jan Kassens <jan@kassens.net>
Robert Keizer <root@black.bluerack.ca>
Sam Shull <brickysam26@gmail.com>
Chandra Sekar S <chandru.in@gmail.com>
Andrew Naylor <argon@mkbot.net>
Benjamin Kramer <benny.kra@gmail.com>
Danny Coates <dannycoates@gmail.com>
Samuel Shull <brickysam26@gmail.com>
Nick Stenning <nick@whiteink.com>
Bert Belder <bertbelder@gmail.com>
Trent Mick <trentm@gmail.com>
Fedor Indutny <fedor.indutny@gmail.com>
Illarionov Oleg <oleg@emby.ru>
Aria Stewart <aredridel@nbtsc.org>
Johan Euphrosine <proppy@aminche.com>
Russell Haering <russellhaering@gmail.com>
Bradley Meck <bradley.meck@gmail.com>
Tobie Langel <tobie.langel@gmail.com>
Tony Metzidis <tonym@tonym.us>
Jorge Chamorro Bieling <jorge@jorgechamorro.com>
Evan Larkin <evan.larkin.il.com>
Joshua Peek <josh@joshpeek.com>
Nathan Rajlich <nathan@tootallnate.net>
Tom Hughes <tom.hughes@palm.com>
Vitali Lovich <vitali.lovich@palm.com>
Guillaume Tuton <guillaume@tuton.fr>
Jeremy Martin <jmar777@gmail.com>
Theo Schlossnagle <jesus@omniti.com>

1202
ChangeLog

File diff suppressed because it is too large Load Diff

35
LICENSE
View File

@@ -3,32 +3,43 @@ maintained libraries. The externally maintained libraries used by Node
are:
- v8, located under deps/v8, which is copyrighted by the Google, Inc.
v8 has an MIT license.
v8 has a BSD license.
- libev, located under deps/libev, and libeio, located at deps/libeio.
This code is copyrighted by Marc Alexander Lehmann. Both are dually
licensed under MIT and GPL2.
- JSMin JavaScript minifier, located at tools/jsmin.py. This code is
copyrighted by Douglas Crockford and Baruch Even and has an MIT license.
- parseUri, a URI parser, is located in src/http.js. This is just a small
snippit. It is copyrighted 2007 by Steven Levithan and released under an
MIT license.
- WAF build system, located at tools/waf. Copyrighted Thomas Nagy.
Released under an MIT license.
- The SCONS build system, located at tools/scons. Copyrighted by the SCONS
Foundation. Released under an MIT license.
Additionally deps/http_parser is based on Zed Shaw's Mongrel. Mongrel is
copyrighted by Zed Shaw and distributed under GPL2 or a permissive open
licence. See deps/http_parser/LICENCE for more information.
- C-Ares, an asynchronous DNS client, located at deps/c-ares. Copyright by
the Massachusetts Institute of Technology; authored by Greg Hudson,
Daniel Stenberg and others. Released under an MIT license.
- Node, optionally, dynmaically links to OpenSSL, cryptographic software
written by Eric Young (eay@cryptsoft.com) to provide SSL/TLS encryption.
OpenSSL is copyrighted by The OpenSSL Project. OpenSSL has a simple
Apache-style license. OpenSSL is not included in the Node distribution.
See http://openssl.org/ for more information.
- HTTP Parser, located at deps/http_parser, is a small C library
copyrighted by Ryan Lienhart Dahl and has a MIT license.
- RonnJS, located at tools/ronnjs, is a library that generates man pages
and HTML from markdown. RonnJS is released under an MIT-style license
and has copyrights from Jérémy Lal, Ryan Tomayko, Dominic Baggott, Ash
Berlin, and Joey Mazzarelli.
- src/platform_darwin_proctitle.cc, has code taken from the Chromium
project copyright Google Inc. and released with the BSD license.
Node's license follows:
Copyright 2009, Ryan Lienhart Dahl. All rights reserved.
Copyright 2009, 2010 Ryan Lienhart Dahl. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the

94
Makefile Normal file
View File

@@ -0,0 +1,94 @@
WAF=python tools/waf-light
all:
@$(WAF) build
all-progress:
@$(WAF) -p build
install:
@$(WAF) install
uninstall:
@$(WAF) uninstall
test: all
python tools/test.py --mode=release simple message
test-all: all
python tools/test.py --mode=debug,release
test-release: all
python tools/test.py --mode=release
test-debug: all
python tools/test.py --mode=debug
test-message: all
python tools/test.py message
test-simple: all
python tools/test.py simple
test-pummel: all
python tools/test.py pummel
test-internet: all
python tools/test.py internet
# http://rtomayko.github.com/ronn
# gem install ronn
doc: doc/node.1 doc/api.html doc/index.html doc/changelog.html
## HACK to give the ronn-generated page a TOC
doc/api.html: all doc/api.markdown doc/api_header.html doc/api_footer.html
build/default/node tools/ronnjs/bin/ronn.js --fragment doc/api.markdown \
| sed "s/<h2>\(.*\)<\/h2>/<h2 id=\"\1\">\1<\/h2>/g" \
| cat doc/api_header.html - doc/api_footer.html > doc/api.html
doc/changelog.html: ChangeLog doc/changelog_header.html doc/changelog_footer.html
cat doc/changelog_header.html ChangeLog doc/changelog_footer.html > doc/changelog.html
doc/node.1: doc/api.markdown all
build/default/node tools/ronnjs/bin/ronn.js --roff doc/api.markdown > doc/node.1
website-upload: doc
scp doc/* ryan@nodejs.org:~/web/nodejs.org/
docclean:
@-rm -f doc/node.1 doc/api.html doc/changelog.html
clean:
@$(WAF) clean
@-find tools -name "*.pyc" | xargs rm -f
distclean: docclean
@-find tools -name "*.pyc" | xargs rm -f
@-rm -rf build/ node node_g
check:
@tools/waf-light check
VERSION=$(shell git describe)
TARNAME=node-$(VERSION)
dist: doc/node.1 doc/api.html
git archive --format=tar --prefix=$(TARNAME)/ HEAD | tar xf -
mkdir -p $(TARNAME)/doc
cp doc/node.1 $(TARNAME)/doc/node.1
cp doc/api.html $(TARNAME)/doc/api.html
rm -rf $(TARNAME)/deps/v8/test # too big
tar -cf $(TARNAME).tar $(TARNAME)
rm -rf $(TARNAME)
gzip -f -9 $(TARNAME).tar
bench:
benchmark/http_simple_bench.sh
bench-idle:
./node benchmark/idle_server.js &
sleep 1
./node benchmark/idle_clients.js &
.PHONY: bench clean docclean dist distclean check uninstall install all test test-all website-upload

30
README
View File

@@ -1,12 +1,24 @@
Purely evented I/O for V8 javascript.
Evented I/O for V8 javascript.
See http://tinyclouds.org/node for more information.
To build:
For help and discussion subscribe to the mailing list at
http://groups.google.com/group/nodejs or send an email to
./configure
make
make install
To run the tests:
make test
To build the documentation:
make doc
To read the documentation:
man doc/node.1
See http://nodejs.org/ for more information. For help and discussion
subscribe to the mailing list by visiting
http://groups.google.com/group/nodejs or by sending an email to
nodejs+subscribe@googlegroups.com.
To build
./configure
make
make install

43
TODO
View File

@@ -1,21 +1,22 @@
Major features planned: (somewhat ordered)
- C++ API for external modules/plugins
(Some sort of module build system?)
- Posgres module
(http://www.postgresql.org/docs/8.1/static/libpq-async.html)
- Support AF_UNIX named pipes
- Signal handlers
- Internally replace getaddrinfo() with udns
http://www.corpit.ru/mjt/udns.html
JS resolver interface
- TLS
- UDP interface
- Socket pairs
- tmp directory test/tmp for all files created during tests.
- fix tests for NODE_MODULE_CONTEXTS=1
- readline
- fix for two column glyphs. use Markus Kuhn's wcwidth.c
- fix for commands that extend beyond term width
- SSL should be factored out of net.js into standalone stream object
- add completion callbacks to all stream write() methods
- Erradicate all traces of 'binary' encoding. Only used, now, in OpenSSL
binding.
- Documentation needs a major refactor; should generate more than one HTML
page/man page from the single api.markdown file. Deep sections should be
allowed.
- debug and production modes
- EventSource branch merged
- TCP servers should have an optional number of maximum connections. When
the maximum is reached it stops accepting new connections.
- compile under clang
- Use C++ style casts everywhere.
- fs.readFile[Sync] should not call stat() and use the length.
Test on Linux's /proc/sys/kernel/hostname
- Ruby-like Process#detach (is that possible?)
- stderr isn't flushing on exit

View File

@@ -0,0 +1,6 @@
for (var i = 0; i < 9e7; i++) {
b = new Buffer(10);
b[1] = 2
}

View File

@@ -0,0 +1,35 @@
var binding = require('./build/default/binding');
c = 0
function js() {
return c++; //(new Date()).getTime();
}
var cxx = binding.hello;
var i, N = 100000000;
console.log(js());
console.log(cxx());
var start = new Date();
for (i = 0; i < N; i++) {
js();
}
var jsDiff = new Date() - start;
console.log(N +" JS function calls: " + jsDiff);
var start = new Date();
for (i = 0; i < N; i++) {
cxx();
}
var cxxDiff = new Date() - start;
console.log(N +" C++ function calls: " + cxxDiff);
console.log("\nJS speedup " + (cxxDiff / jsDiff));

View File

@@ -0,0 +1,19 @@
#include <v8.h>
#include <node.h>
#include <time.h>
using namespace v8;
static int c = 0;
static Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
//time_t tv = time(NULL);
return scope.Close(Integer::New(c++));
}
extern "C" void init (Handle<Object> target) {
HandleScope scope;
//target->Set(String::New("hello"), String::New("World"));
NODE_SET_METHOD(target, "hello", Hello);
}

View File

@@ -0,0 +1,15 @@
srcdir = '.'
blddir = 'build'
VERSION = '0.0.1'
def set_options(opt):
opt.tool_options('compiler_cxx')
def configure(conf):
conf.check_tool('compiler_cxx')
conf.check_tool('node_addon')
def build(bld):
obj = bld.new_task_gen('cxx', 'shlib', 'node_addon')
obj.target = 'binding'
obj.source = 'binding.cc'

View File

@@ -1,23 +1,52 @@
path = require("path");
exec = require("child_process").exec;
http = require("http");
port = parseInt(process.env.PORT || 8000);
console.log('pid ' + process.pid);
fixed = ""
for (var i = 0; i < 20*1024; i++) {
fixed += "C";
}
var uname, rev;
exec('git rev-list -1 HEAD', function (e, stdout) {
if (e) {
console.error("Problem executing: 'git rev-list -1 HEAD'");
throw new Error(e);
}
rev = stdout.replace(/\s/g, '');
});
exec('uname -a', function (e, stdout) {
if (e) {
console.error("Problem executing: 'uname -a'");
throw new Error(e);
}
uname = stdout.replace(/[\r\n]/g, '');
});
stored = {};
node.http.createServer(function (req, res) {
var commands = req.uri.path.split("/");
storedBuffer = {};
var server = http.createServer(function (req, res) {
var commands = req.url.split("/");
var command = commands[1];
var body = "";
var arg = commands[2];
var status = 200;
//p(req.headers);
if (command == "bytes") {
var n = parseInt(arg, 10)
if (n <= 0)
throw "bytes called with n <= 0"
throw "bytes called with n <= 0"
if (stored[n] === undefined) {
puts("create stored[n]");
console.log("create stored[n]");
stored[n] = "";
for (var i = 0; i < n; i++) {
stored[n] += "C"
@@ -25,6 +54,18 @@ node.http.createServer(function (req, res) {
}
body = stored[n];
} else if (command == "buffer") {
var n = parseInt(arg, 10)
if (n <= 0) throw new Error("bytes called with n <= 0");
if (storedBuffer[n] === undefined) {
console.log("create storedBuffer[n]");
storedBuffer[n] = new Buffer(n);
for (var i = 0; i < n; i++) {
storedBuffer[n][i] = "C".charCodeAt(0);
}
}
body = storedBuffer[n];
} else if (command == "quit") {
res.connection.server.close();
body = "quitting";
@@ -32,6 +73,9 @@ node.http.createServer(function (req, res) {
} else if (command == "fixed") {
body = fixed;
} else if (command == "info") {
body = 'rev=' + rev + '\nuname="' + uname + '"\n';
} else {
status = 404;
body = "not found\n";
@@ -39,12 +83,13 @@ node.http.createServer(function (req, res) {
var content_length = body.length.toString();
res.sendHeader( status
, [ ["Content-Type", "text/plain"]
, ["Content-Length", content_length]
]
);
res.sendBody(body);
res.finish();
}).listen(8000);
res.writeHead(status, { "Content-Type": "text/plain",
"Content-Length": content_length });
res.end(body);
});
server.listen(port, function () {
console.log('Listening at http://127.0.0.1:'+port+'/');
});

View File

@@ -7,45 +7,45 @@ end
def wait(seconds)
n = (seconds / 0.01).to_i
n.times do
n.times do
sleep(0.01)
#File.read(DIR + '/yahoo.html')
#File.read(DIR + '/yahoo.html')
end
end
class SimpleApp
@@responses = {}
def initialize
@count = 0
end
def deferred?(env)
false
end
def call(env)
path = env['PATH_INFO'] || env['REQUEST_URI']
commands = path.split('/')
@count += 1
if commands.include?('periodical_activity') and @count % 10 != 1
return [200, {'Content-Type'=>'text/plain'}, "quick response!\r\n"]
end
if commands.include?('fibonacci')
n = commands.last.to_i
raise "fibonacci called with n <= 0" if n <= 0
body = (1..n).to_a.map { |i| fib(i).to_s }.join(' ')
status = 200
elsif commands.include?('wait')
n = commands.last.to_f
raise "wait called with n <= 0" if n <= 0
wait(n)
body = "waited about #{n} seconds"
status = 200
elsif commands.include?('bytes')
n = commands.last.to_i
raise "bytes called with n <= 0" if n <= 0
@@ -56,17 +56,17 @@ class SimpleApp
n = 20 * 1024;
body = @@responses[n] || "C"*n
status = 200
elsif commands.include?('test_post_length')
input_body = ""
while chunk = env['rack.input'].read(512)
input_body << chunk
input_body << chunk
end
if env['CONTENT_LENGTH'].to_i == input_body.length
body = "Content-Length matches input length"
status = 200
else
body = "Content-Length doesn't matches input length!
body = "Content-Length doesn't matches input length!
content_length = #{env['CONTENT_LENGTH'].to_i}
input_body.length = #{input_body.length}"
status = 500
@@ -75,7 +75,7 @@ class SimpleApp
status = 404
body = "Undefined url"
end
body += "\r\n"
headers = {'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s }
[status, headers, [body]]
@@ -90,6 +90,6 @@ if $0 == __FILE__
require 'thin'
require 'ebb'
# Rack::Handler::Mongrel.run(SimpleApp.new, :Port => 8000)
Thin::Server.start("0.0.0.0", 8000, SimpleApp.new)
Thin::Server.start("0.0.0.0", 8000, SimpleApp.new)
# Ebb::start_server(SimpleApp.new, :port => 8000)
end

77
benchmark/http_simple_bench.sh Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/sh
SERVER=127.0.0.1
PORT=8000
# You may want to configure your TCP settings to make many ports available
# to node and ab. On macintosh use:
# sudo sysctl -w net.inet.ip.portrange.first=32768
# sudo sysctl -w net.inet.tcp.msl=1000
if [ ! -d benchmark/ ]; then
echo "Run this script from the node root directory"
exit 1
fi
if [ $SERVER == "127.0.0.1" ]; then
./node benchmark/http_simple.js &
node_pid=$!
sleep 1
fi
info=`curl -s http://$SERVER:$PORT/info`
eval $info
date=`date "+%Y%m%d%H%M%S"`
ab_hello_world() {
local type="$1"
local ressize="$2"
if [ $type == "string" ]; then
local uri="bytes/$ressize"
else
local uri="buffer/$ressize"
fi
name="ab-hello-world-$type-$ressize"
dir=".benchmark_reports/$name/$rev/"
if [ ! -d $dir ]; then
mkdir -p $dir
fi
summary_fn="$dir/$date.summary"
data_fn="$dir/$date.data"
echo "Bench $name starts in 3 seconds..."
# let shit calm down
sleep 3
# hammer that as hard as it can for 10 seconds.
ab -g $data_fn -c 100 -t 10 http://$SERVER:$PORT/$uri > $summary_fn
# add our data about the server
echo >> $summary_fn
echo >> $summary_fn
echo "webserver-rev: $rev" >> $summary_fn
echo "webserver-uname: $uname" >> $summary_fn
grep Req $summary_fn
echo "Summary: $summary_fn"
echo
}
# 1k
ab_hello_world 'string' '1024'
ab_hello_world 'buffer' '1024'
# 100k
ab_hello_world 'string' '102400'
ab_hello_world 'buffer' '102400'
if [ ! -z $node_pid ]; then
kill -9 $node_pid
fi

49
benchmark/idle_clients.js Normal file
View File

@@ -0,0 +1,49 @@
net = require('net');
var errors = 0, connections = 0;
var lastClose = 0;
function connect () {
process.nextTick(function () {
var s = net.Stream();
var gotConnected = false;
s.connect(9000);
s.on('connect', function () {
gotConnected = true;
connections++;
connect();
});
s.on('close', function () {
if (gotConnected) connections--;
lastClose = new Date();
});
s.on('error', function () {
errors++;
});
});
}
connect();
var oldConnections, oldErrors;
// Try to start new connections every so often
setInterval(connect, 5000);
setInterval(function () {
if (oldConnections != connections) {
oldConnections = connections;
console.log("CLIENT %d connections: %d", process.pid, connections);
}
if (oldErrors != errors) {
oldErrors = errors;
console.log("CLIENT %d errors: %d", process.pid, errors);
}
}, 1000);

31
benchmark/idle_server.js Normal file
View File

@@ -0,0 +1,31 @@
net = require('net');
connections = 0;
var errors = 0;
server = net.Server(function (socket) {
socket.on('error', function () {
errors++;
});
});
//server.maxConnections = 128;
server.listen(9000);
var oldConnections, oldErrors;
setInterval(function () {
if (oldConnections != server.connections) {
oldConnections = server.connections;
console.log("SERVER %d connections: %d", process.pid, server.connections);
}
if (oldErrors != errors) {
oldErrors = errors;
console.log("SERVER %d errors: %d", process.pid, errors);
}
}, 1000);

110
benchmark/io.c Normal file
View File

@@ -0,0 +1,110 @@
/**
* gcc -o iotest io.c
*/
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/time.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
int tsize = 1000 * 1048576;
const char *path = "/tmp/wt.dat";
int c = 0;
char* bufit(size_t l)
{
char *p = malloc(l);
memset(p, '!', l);
return p;
}
void writetest(int size, size_t bsize)
{
int i;
char *buf = bufit(bsize);
struct timeval start, end;
double elapsed;
double mbps;
int fd = open(path, O_CREAT|O_WRONLY, 0644);
if (fd < 0) {
perror("open failed");
exit(254);
}
assert(0 == gettimeofday(&start, NULL));
for (i = 0; i < size; i += bsize) {
int rv = write(fd, buf, bsize);
if (c++ % 2000 == 0) fprintf(stderr, ".");
if (rv < 0) {
perror("write failed");
exit(254);
}
}
#ifdef __linux__
fdatasync(fd);
#else
fsync(fd);
#endif
close(fd);
assert(0 == gettimeofday(&end, NULL));
elapsed = (end.tv_sec - start.tv_sec) + ((double)(end.tv_usec - start.tv_usec))/100000.;
mbps = ((tsize/elapsed)) / 1048576;
fprintf(stderr, "\nWrote %d bytes in %03fs using %ld byte buffers: %03fmB/s\n", size, elapsed, bsize, mbps);
free(buf);
}
void readtest(int size, size_t bsize)
{
int i;
char *buf = bufit(bsize);
struct timeval start, end;
double elapsed;
double mbps;
int fd = open(path, O_RDONLY, 0644);
if (fd < 0) {
perror("open failed");
exit(254);
}
assert(0 == gettimeofday(&start, NULL));
for (i = 0; i < size; i += bsize) {
int rv = read(fd, buf, bsize);
if (rv < 0) {
perror("write failed");
exit(254);
}
}
close(fd);
assert(0 == gettimeofday(&end, NULL));
elapsed = (end.tv_sec - start.tv_sec) + ((double)(end.tv_usec - start.tv_usec))/100000.;
mbps = ((tsize/elapsed)) / 1048576;
fprintf(stderr, "Read %d bytes in %03fs using %ld byte buffers: %03fmB/s\n", size, elapsed, bsize, mbps);
free(buf);
}
void cleanup() {
unlink(path);
}
int main()
{
int i;
int bsizes[] = {1024, 4096, 8192, 16384, 32768, 65536, 0};
for (i = 0; bsizes[i] != 0; i++) {
writetest(tsize, bsizes[i]);
}
for (i = 0; bsizes[i] != 0; i++) {
readtest(tsize, bsizes[i]);
}
atexit(cleanup);
return 0;
}

109
benchmark/io.js Normal file
View File

@@ -0,0 +1,109 @@
var fs = require('fs');
var sys = require('sys');
var Buffer = require('buffer').Buffer;
var path = "/tmp/wt.dat";
var tsize = 1000 * 1048576;
var bsizes = [1024, 4096, 8192, 16384, 32768, 65536];
function bufit(size) {
var buf = new Buffer(size);
for (var i = 0; i <buf.length ; i += 1) {
buf[i] = 33;
}
return buf;
}
function once(emitter, name, cb) {
function incb() {
cb.apply(undefined, arguments);
emitter.removeListener(name, incb);
}
emitter.addListener(name, incb);
}
c = 0
function writetest(size, bsize) {
var s = fs.createWriteStream(path, {'flags': 'w', 'mode': 0644});
var remaining = size;
var buf = bufit(bsize);
function dowrite() {
var rv = s.write(buf);
remaining -= buf.length;
if (remaining > 0) {
//if (remaining % 90000 == 0) console.error("remaining: %d", remaining);
//process.nextTick(dowrite);
} else {
s.emit('done')
s.end();
}
}
s.on('drain', function () {
dowrite();
if (c++ % 2000 == 0) sys.print(".");
});
dowrite();
return s;
}
function readtest(size, bsize) {
var s = fs.createReadStream(path, {'flags': 'r', 'encoding': 'binary', 'mode': 0644, 'bufferSize': bsize});
s.addListener("data", function (chunk) {
// got a chunk...
});
return s;
}
function wt(tsize, bsize, done) {
var start = Date.now();
s = writetest(tsize, bsizes[0]);
s.addListener('close', function() {
var end = Date.now();
var diff = end - start;
console.log('Wrote '+ tsize +' bytes in '+ diff/1000 +'s using '+ bsize +' byte buffers: '+ ((tsize/(diff/1000)) / 1048576) +' mB/s');
done();
});
}
function rt(tsize, bsize, done) {
var start = Date.now();
s = readtest(tsize, bsizes[0]);
s.addListener('close', function() {
var end = Date.now();
var diff = end - start;
console.log('Read '+ tsize +' bytes in '+ diff/1000 +'s using '+ bsize +' byte buffers: '+ ((tsize/(diff/1000)) / 1048576) +' mB/s');
done();
});
}
var bs= 0;
function nextwt() {
if (bsizes.length <= bs) {
bs = 0;
nextrt();
return;
}
wt(tsize, bsizes[bs], nextwt);
bs += 1;
}
function nextrt() {
if (bsizes.length <= bs) {
fs.unlink(path, function (err) {
if (err) throw err;
console.log('All done!');
});
return;
}
rt(tsize, bsizes[bs], nextrt);
bs += 1;
}
nextwt();

19
benchmark/process_loop.js Normal file
View File

@@ -0,0 +1,19 @@
var sys = require("sys"),
childProcess = require("child_process");
function next (i) {
if (i <= 0) return;
var child = childProcess.spawn("echo", ["hello"]);
child.stdout.addListener("data", function (chunk) {
sys.print(chunk);
});
child.addListener("exit", function (code) {
if (code != 0) process.exit(-1);
next(i - 1);
});
}
next(500);

31
benchmark/run.js Normal file
View File

@@ -0,0 +1,31 @@
var path = require("path");
var sys = require("sys");
var childProcess = require("child_process");
var benchmarks = [ "timers.js"
, "process_loop.js"
, "static_http_server.js"
];
var benchmarkDir = path.dirname(__filename);
function exec (script, callback) {
var start = new Date();
var child = childProcess.spawn(process.argv[0], [path.join(benchmarkDir, script)]);
child.addListener("exit", function (code) {
var elapsed = new Date() - start;
callback(elapsed, code);
});
}
function runNext (i) {
if (i >= benchmarks.length) return;
sys.print(benchmarks[i] + ": ");
exec(benchmarks[i], function (elapsed, code) {
if (code != 0) {
console.log("ERROR ");
}
console.log(elapsed);
runNext(i+1);
});
};
runNext(0);

26
benchmark/startup.js Normal file
View File

@@ -0,0 +1,26 @@
var spawn = require('child_process').spawn,
path = require('path'),
emptyJsFile = path.join(__dirname, '../test/fixtures/semicolon.js'),
starts = 100,
i = 0,
start;
function startNode() {
var node = spawn(process.execPath || process.argv[0], [emptyJsFile]);
node.on('exit', function(exitCode) {
if (exitCode !== 0) {
throw new Error('Error during node startup');
}
i++;
if (i < starts) {
startNode();
} else{
var duration = +new Date - start;
console.log('Started node %d times in %s ms. %d ms / start.', starts, duration, duration / starts);
}
});
}
start = +new Date;
startNode();

View File

@@ -0,0 +1,48 @@
var http = require("http");
var concurrency = 30;
var port = 12346;
var n = 7; // several orders of magnitude slower
var bytes = 1024*5;
var requests = 0;
var responses = 0;
var body = "";
for (var i = 0; i < bytes; i++) {
body += "C";
}
var server = http.createServer(function (req, res) {
res.writeHead(200, {
"Content-Type": "text/plain",
"Content-Length": body.length
});
res.write(body);
res.close();
})
server.listen(port);
function responseListener (res) {
res.addListener("end", function () {
if (requests < n) {
var req = res.client.request("/");
req.addListener('response', responseListener);
req.close();
requests++;
}
if (++responses == n) {
server.close();
}
});
}
for (var i = 0; i < concurrency; i++) {
var client = http.createClient(port);
client.id = i;
var req = client.request("/");
req.addListener('response', responseListener);
req.close();
requests++;
}

View File

@@ -0,0 +1,6 @@
for (var i = 0; i < 9e7; i++) {
s = '01234567890';
s[1] = "a";
}

5
benchmark/timers.js Normal file
View File

@@ -0,0 +1,5 @@
function next (i) {
if (i <= 0) return;
setTimeout(function () { next(i-1); }, 1);
}
next(700);

8
bin/node-repl Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env node
console.log("Type '.help' for options.");
console.log("(The REPL can also be started by typing 'node' without arguments)");
require('repl').start();
// vim:ft=javascript

17
bin/node-waf Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env python
import os, sys
join = os.path.join
bindir = os.path.dirname(os.path.realpath(__file__))
prefix = join(bindir, "..")
wafdir = join(prefix, "lib", "node")
w = join(wafdir, 'wafadmin')
t = join(w, 'Tools')
sys.path = [w, t] + sys.path
import Scripting
VERSION="1.5.16"
Scripting.prepare(t, os.getcwd(), VERSION, wafdir)
sys.exit(0)

134
configure vendored
View File

@@ -1,137 +1,21 @@
#! /bin/sh
# waf configure wrapper
# Fancy colors used to beautify the output a bit.
#
NORMAL=""
BOLD=""
RED=""
YELLOW=""
GREEN=""
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_ERROR=2
EXIT_BUG=10
# v8 doesn't like ccache
if [ ! -z "`echo $CC | grep ccache`" ]; then
echo "Error: V8 doesn't like cache. Please set your CC env var to 'gcc'"
echo " (ba)sh: export CC=gcc"
exit 1
fi
CUR_DIR=$PWD
#possible relative path
WORKINGDIR=`dirname $0`
cd $WORKINGDIR
cd "$WORKINGDIR"
#abs path
WORKINGDIR=`pwd`
cd $CUR_DIR
cd "$CUR_DIR"
WAF="${WORKINGDIR}/tools/waf"
# Checks for WAF. Honours $WAF if set. Stores path to 'waf' in $WAF.
# Requires that $PYTHON is set.
#
checkWAF()
{
printf "Checking for WAF\t\t\t: "
#installed miniwaf in sourcedir
if [ -z "$WAF" ] ; then
if [ -f "${WORKINGDIR}/waf" ] ; then
WAF="${WORKINGDIR}/waf"
if [ ! -x "$WAF" ] ; then
chmod +x $WAF
fi
fi
fi
if [ -z "$WAF" ] ; then
if [ -f "${WORKINGDIR}/waf-light" ] ; then
${WORKINGDIR}/waf-light --make-waf
WAF="${WORKINGDIR}/waf"
fi
fi
#global installed waf with waf->waf.py link
if [ -z "$WAF" ] ; then
WAF=`which waf 2>/dev/null`
fi
# neither waf nor miniwaf could be found
if [ ! -x "$WAF" ] ; then
printf $RED"not found"$NORMAL"\n"
echo "Go to http://code.google.com/p/waf/"
echo "and download a waf version"
exit $EXIT_FAILURE
else
printf $GREEN"$WAF"$NORMAL"\n"
fi
}
# Generates a Makefile. Requires that $WAF is set.
#
generateMakefile()
{
cat > Makefile << EOF
#!/usr/bin/make -f
# Waf Makefile wrapper
WAF_HOME=$CUR_DIR
all:
@$WAF build
all-debug:
@$WAF -v build
all-progress:
@$WAF -p build
install:
if test -n "\$(DESTDIR)"; then \\
$WAF install --destdir="\$(DESTDIR)" ; \\
else \\
$WAF install ; \\
fi;
uninstall:
@if test -n "\$(DESTDIR)"; then \\
$WAF uninstall --destdir="\$(DESTDIR)" ; \\
else \\
$WAF uninstall ; \\
fi;
test: all
python tools/test.py --mode=release
test-all: all
python tools/test.py --mode=debug,release
website: website/api.html website/index.html
website/api.html: website/api.txt
asciidoc -a toc -o website/api.html website/api.txt
website-upload: website
scp website/* linode:~/tinyclouds/node/
clean:
@$WAF clean
distclean:
@$WAF distclean
@-rm -rf _build_
@-rm -f Makefile
@-rm -f *.pyc
check:
@$WAF check
dist:
@$WAF dist
.PHONY: clean dist distclean check uninstall install all test test-all website website-upload
EOF
}
checkWAF
generateMakefile
"${WAF}" configure $*
"${WORKINGDIR}/tools/waf-light" --jobs=1 configure $*
exit $?

37
deps/c-ares/AUTHORS vendored Normal file
View File

@@ -0,0 +1,37 @@
c-ares is based on ares, and these are the people that have worked on it since
the fork was made:
Alexander Lazic
Alexey Simak
Andreas Rieke
Ashish Sharma
Brad House
Brad Spencer
Bram Matthys
Dan Fandrich
Daniel Stenberg
Dirk Manske
Dominick Meglio
Doug Goldstein
Duncan Wilcox
Eino Tuominen
Erik Kline
George Neill
Gisle Vanem
Guilherme Balena Versiani
Gunter Knauf
Henrik Stoerner
James Bursa
Michael Wallner
Nick Mathewson
Phil Blundell
Ravi Pratap
Robin Cornelius
Sebastian at basti79.de
Shmulik Regev
Steinar H. Gunderson
Tofu Linden
Vlad Dinulescu
William Ahern
Yang Tse
liren at vivisimo.com

1179
deps/c-ares/CHANGES vendored Normal file

File diff suppressed because it is too large Load Diff

21
deps/c-ares/NEWS vendored Normal file
View File

@@ -0,0 +1,21 @@
Major changes since:
* see the CHANGES file
Major changes in release 1.1.1:
* ares should now compile as C++ code (no longer uses reserved word
"class").
* Added SRV support to adig test program.
* Fixed a few error handling bugs in query processing.
Major changes in release 1.1.0:
* Added ares_free_string() function so that memory can be freed in the
same layer as it is allocated, a desirable feature in some
environments.
* A few of the ares_dns.h macros are fixed to use the proper bitwise
operator.
* Fixed a couple of fenceposts fixed in ares_expand_name()'s
bounds-checking.
* In process_timeouts(), extract query->next before calling
next_server() and possibly freeing the query structure.
* Casted arguments to ctype macros casted to unsigned char, since not
all char values are valid inputs to those macros according to ANSI.

60
deps/c-ares/README vendored Normal file
View File

@@ -0,0 +1,60 @@
c-ares
======
This is c-ares, an asynchronous resolver library. It is intended for
applications which need to perform DNS queries without blocking, or need to
perform multiple DNS queries in parallel. The primary examples of such
applications are servers which communicate with multiple clients and programs
with graphical user interfaces.
The full source code is available in the 'c-ares' release archives, and in a
git repository: http://github.com/bagder/c-ares
If you find bugs, correct flaws, have questions or have comments in general in
regard to c-ares (or by all means the original ares too), get in touch with us
on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares
c-ares is of course distributed under the same MIT-style license as the
original ares.
You'll find all c-ares details and news here:
http://c-ares.haxx.se/
NOTES FOR C-ARES HACKERS
The following notes apply to c-ares version 1.7.0 and later.
* The distributed ares_build.h file is only intended to be used on systems
which can not run the also distributed configure script.
* The distributed ares_build.h file is generated as a copy of ares_build.h.dist
when the c-ares source code distribution archive file is originally created.
* If you check out from git on a non-configure platform, you must run the
appropriate buildconf* script to set up ares_build.h and other local files
before being able of compiling the library.
* On systems capable of running the configure script, the configure process
will overwrite the distributed ares_build.h file with one that is suitable
and specific to the library being configured and built, this new file is
generated from the ares_build.h.in template file.
* If you intend to distribute an already compiled c-ares library you _MUST_
also distribute along with it the generated ares_build.h which has been
used to compile it. Otherwise the library will be of no use for the users of
the library that you have built. It is _your_ responsibility to provide this
file. No one at the c-ares project can know how you have built the library.
* File ares_build.h includes platform and configuration dependent info,
and must not be modified by anyone. Configure script generates it for you.
* We cannot assume anything else but very basic compiler features being
present. While c-ares requires an ANSI C compiler to build, some of the
earlier ANSI compilers clearly can't deal with some preprocessor operators.
* Newlines must remain unix-style for older compilers' sake.
* Comments must be written in the old-style /* unnested C-fashion */

13
deps/c-ares/README.cares vendored Normal file
View File

@@ -0,0 +1,13 @@
c-ares
======
This package is based on ares 1.1.1 (written by Greg Hudson). I decided to
fork and release a separate project since the ares author didn't want the
improvements that were vital for our use of it.
This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use
within the curl project (hence the letter C) and it makes a nice pun. Also,
c-ares is not API compatible with ares: a new name makes that more obvious to
the public.
The original libares was distributed at athena-dist.mit.edu:pub/ATHENA/ares.

118
deps/c-ares/README.msvc vendored Normal file
View File

@@ -0,0 +1,118 @@
___ __ _ _ __ ___ ___
/ __| ___ / _` | '__/ _ \/ __|
| (_ |___| (_| | | | __/\__ \
\___| \__,_|_| \___||___/
How to build c-ares using MSVC or Visual Studio
=================================================
How to build using MSVC from the command line
---------------------------------------------
Open a command prompt window and ensure that the environment is properly
set up in order to use MSVC or Visual Studio compiler tools.
Change to c-ares source folder where Makefile.msvc file is located and run:
> nmake -f Makefile.msvc
This will build all c-ares libraries as well as three sample programs.
Once the above command has finished a new folder named MSVCXX will exist
below the folder where makefile.msvc is found. The name of the folder
depends on the MSVC compiler version being used to build c-ares.
Below the MSVCXX folder there will exist four folders named 'cares',
'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that
holds the c-ares libraries you have just generated, the other three
hold sample programs that use the libraries.
The above command builds four versions of the c-ares library, dynamic
and static versions and each one in release and debug flavours. Each
of these is found in folders named dll-release, dll-debug, lib-release,
and lib-debug, which hang from the 'cares' folder mentioned above. Each
sample program also has folders with the same names to reflect which
library version it is using.
How to build using Visual Studio 6 IDE
--------------------------------------
A VC++ 6.0 reference workspace (vc6aws.dsw) is available within the 'vc'
folder to allow proper building of the library and sample programs.
1) Open the vc6aws.dsw workspace with MSVC6's IDE.
2) Select 'Build' from top menu.
3) Select 'Batch Build' from dropdown menu.
4) Make sure that the sixteen project configurations are 'checked'.
5) Click on the 'Build' button.
6) Once the sixteen project configurations are built you are done.
Dynamic and static c-ares libraries are built in debug and release flavours,
and can be located each one in its own subdirectory, dll-debug, dll-release,
lib-debug and lib-release, all of them below the 'vc\cares' subdirectory.
In the same way four executable versions of each sample program are built,
each using its respective library. The resulting sample executables are
located in its own subdirectory, dll-debug, dll-release, lib-debug and
lib-release, below the 'vc\acountry', 'vc\adig' and 'vc\ahost'folders.
These reference VC++ 6.0 configurations are generated using the dynamic CRT.
How to build using Visual Studio 2003 or newer IDE
--------------------------------------------------
First you have to convert the VC++ 6.0 reference workspace and project files
to the Visual Studio IDE version you are using, following next steps:
1) Open vc\vc6aws.dsw with VS20XX.
2) Allow VS20XX to update all projects and workspaces.
3) Save ALL and close VS20XX.
4) Open vc\vc6aws.sln with VS20XX.
5) Select batch build, check 'all' projects and click 'build' button.
Same comments relative to generated files and folders as done above for
Visual Studio 6 IDE apply here.
Relationship between c-ares library file names and versions
-----------------------------------------------------------
c-ares static release library version files:
libcares.lib -> static release library
c-ares static debug library version files:
libcaresd.lib -> static debug library
c-ares dynamic release library version files:
cares.dll -> dynamic release library
cares.lib -> import library for the dynamic release library
cares.exp -> export file for the dynamic release library
c-ares dynamic debug library version files:
caresd.dll -> dynamic debug library
caresd.lib -> import library for the dynamic debug library
caresd.exp -> export file for the dynamic debug library
caresd.pdb -> debug symbol file for the dynamic debug library
How to use c-ares static libraries
----------------------------------
When using the c-ares static library in your program, you will have to
define preprocessor symbol CARES_STATICLIB while building your program,
otherwise you will get errors at linkage stage.
Have Fun!

21
deps/c-ares/README.node vendored Normal file
View File

@@ -0,0 +1,21 @@
Library: c-ares, DNS resolver
Version: 1.7.3 (11 June, 2010)
Authors: Greg Hudson, Daniel Stenberg
License: MIT
Notes:
Just use waf instead of the autoconf based configure script. Delete most of
the documentation and other files distributed with it. To upgrade, run
./configure on linux, macintosh, solaris (and other supported platforms) and
copy
- ares_config.h
- ares_setup.h
- ares_build.h
into the appropriate directory.

12
deps/c-ares/RELEASE-NOTES vendored Normal file
View File

@@ -0,0 +1,12 @@
c-ares version 1.7.3
Fixed:
o builds on Android
o now includes all files necessary to build it (1.7.2 lacked a file)
Thanks go to these friendly people for their efforts and contributions:
Yang Tse, Bogdan Vatra
Have fun!

23
deps/c-ares/TODO vendored Normal file
View File

@@ -0,0 +1,23 @@
TODO
====
ares_reinit()
- To allow an app to force a re-read of /etc/resolv.conf etc, pretty much
like the res_init() resolver function offers
ares_gethostbyname
- When built to support IPv6, it needs to also support PF_UNSPEC or similar,
so that an application can ask for any protocol and then c-ares would return
all known resolves and not just explicitly IPv4 _or_ IPv6 resolves.
ares_process
- Upon next ABI breakage ares_process() should be changed to return 'int'
and return ARES_ENOTINITIALIZED if ares_library_init() has not been called.
ares_process_fd
- Upon next ABI breakage ares_process_fd() should be changed to return
'int' and return ARES_ENOTINITIALIZED if library has not been initialized.

518
deps/c-ares/ares.h vendored Normal file
View File

@@ -0,0 +1,518 @@
/* Copyright 1998, 2009 by the Massachusetts Institute of Technology.
* Copyright (C) 2007-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifndef ARES__H
#define ARES__H
#include "ares_version.h" /* c-ares version defines */
#include "ares_build.h" /* c-ares build definitions */
#include "ares_rules.h" /* c-ares rules enforcement */
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && \
!defined(WIN32) && !defined(__SYMBIAN32__)
# define WIN32
#endif
#include <sys/types.h>
/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
libc5-based Linux systems. Only include it on system that are known to
require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY)
#include <sys/select.h>
#endif
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
#include <sys/bsdskt.h>
#endif
#if defined(WATT32)
# include <netinet/in.h>
# include <sys/socket.h>
# include <tcp.h>
#elif defined(WIN32)
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# include <winsock2.h>
# include <ws2tcpip.h>
#else
# include <sys/socket.h>
# include <netinet/in.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
** c-ares external API function linkage decorations.
*/
#if !defined(CARES_STATICLIB) && \
(defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
/* __declspec function decoration for Win32 and Symbian DLL's */
# if defined(CARES_BUILDING_LIBRARY)
# define CARES_EXTERN __declspec(dllexport)
# else
# define CARES_EXTERN __declspec(dllimport)
# endif
#else
/* visibility function decoration for other cases */
# if !defined(CARES_SYMBOL_HIDING) || \
defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
# define CARES_EXTERN
# else
# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN
# endif
#endif
#define ARES_SUCCESS 0
/* Server error codes (ARES_ENODATA indicates no relevant answer) */
#define ARES_ENODATA 1
#define ARES_EFORMERR 2
#define ARES_ESERVFAIL 3
#define ARES_ENOTFOUND 4
#define ARES_ENOTIMP 5
#define ARES_EREFUSED 6
/* Locally generated error codes */
#define ARES_EBADQUERY 7
#define ARES_EBADNAME 8
#define ARES_EBADFAMILY 9
#define ARES_EBADRESP 10
#define ARES_ECONNREFUSED 11
#define ARES_ETIMEOUT 12
#define ARES_EOF 13
#define ARES_EFILE 14
#define ARES_ENOMEM 15
#define ARES_EDESTRUCTION 16
#define ARES_EBADSTR 17
/* ares_getnameinfo error codes */
#define ARES_EBADFLAGS 18
/* ares_getaddrinfo error codes */
#define ARES_ENONAME 19
#define ARES_EBADHINTS 20
/* Uninitialized library error code */
#define ARES_ENOTINITIALIZED 21 /* introduced in 1.7.0 */
/* ares_library_init error codes */
#define ARES_ELOADIPHLPAPI 22 /* introduced in 1.7.0 */
#define ARES_EADDRGETNETWORKPARAMS 23 /* introduced in 1.7.0 */
/* More error codes */
#define ARES_ECANCELLED 24 /* introduced in 1.7.0 */
/* Flag values */
#define ARES_FLAG_USEVC (1 << 0)
#define ARES_FLAG_PRIMARY (1 << 1)
#define ARES_FLAG_IGNTC (1 << 2)
#define ARES_FLAG_NORECURSE (1 << 3)
#define ARES_FLAG_STAYOPEN (1 << 4)
#define ARES_FLAG_NOSEARCH (1 << 5)
#define ARES_FLAG_NOALIASES (1 << 6)
#define ARES_FLAG_NOCHECKRESP (1 << 7)
/* Option mask values */
#define ARES_OPT_FLAGS (1 << 0)
#define ARES_OPT_TIMEOUT (1 << 1)
#define ARES_OPT_TRIES (1 << 2)
#define ARES_OPT_NDOTS (1 << 3)
#define ARES_OPT_UDP_PORT (1 << 4)
#define ARES_OPT_TCP_PORT (1 << 5)
#define ARES_OPT_SERVERS (1 << 6)
#define ARES_OPT_DOMAINS (1 << 7)
#define ARES_OPT_LOOKUPS (1 << 8)
#define ARES_OPT_SOCK_STATE_CB (1 << 9)
#define ARES_OPT_SORTLIST (1 << 10)
#define ARES_OPT_SOCK_SNDBUF (1 << 11)
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
#define ARES_OPT_TIMEOUTMS (1 << 13)
#define ARES_OPT_ROTATE (1 << 14)
/* Nameinfo flag values */
#define ARES_NI_NOFQDN (1 << 0)
#define ARES_NI_NUMERICHOST (1 << 1)
#define ARES_NI_NAMEREQD (1 << 2)
#define ARES_NI_NUMERICSERV (1 << 3)
#define ARES_NI_DGRAM (1 << 4)
#define ARES_NI_TCP 0
#define ARES_NI_UDP ARES_NI_DGRAM
#define ARES_NI_SCTP (1 << 5)
#define ARES_NI_DCCP (1 << 6)
#define ARES_NI_NUMERICSCOPE (1 << 7)
#define ARES_NI_LOOKUPHOST (1 << 8)
#define ARES_NI_LOOKUPSERVICE (1 << 9)
/* Reserved for future use */
#define ARES_NI_IDN (1 << 10)
#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
/* Addrinfo flag values */
#define ARES_AI_CANONNAME (1 << 0)
#define ARES_AI_NUMERICHOST (1 << 1)
#define ARES_AI_PASSIVE (1 << 2)
#define ARES_AI_NUMERICSERV (1 << 3)
#define ARES_AI_V4MAPPED (1 << 4)
#define ARES_AI_ALL (1 << 5)
#define ARES_AI_ADDRCONFIG (1 << 6)
/* Reserved for future use */
#define ARES_AI_IDN (1 << 10)
#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
#define ARES_AI_CANONIDN (1 << 13)
#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
ARES_AI_ADDRCONFIG)
#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
many sockets */
#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
ARES_GETSOCK_MAXNUM)))
/* c-ares library initialization flag values */
#define ARES_LIB_INIT_NONE (0)
#define ARES_LIB_INIT_WIN32 (1 << 0)
#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
/*
* Typedef our socket type
*/
#ifndef ares_socket_typedef
#ifdef WIN32
typedef SOCKET ares_socket_t;
#define ARES_SOCKET_BAD INVALID_SOCKET
#else
typedef int ares_socket_t;
#define ARES_SOCKET_BAD -1
#endif
#define ares_socket_typedef
#endif /* ares_socket_typedef */
typedef void (*ares_sock_state_cb)(void *data,
ares_socket_t socket_fd,
int readable,
int writable);
struct apattern;
/* NOTE about the ares_options struct to users and developers.
This struct will remain looking like this. It will not be extended nor
shrunk in future releases, but all new options will be set by ares_set_*()
options instead of with the ares_init_options() function.
Eventually (in a galaxy far far away), all options will be settable by
ares_set_*() options and the ares_init_options() function will become
deprecated.
When new options are added to c-ares, they are not added to this
struct. And they are not "saved" with the ares_save_options() function but
instead we encourage the use of the ares_dup() function. Needless to say,
if you add config options to c-ares you need to make sure ares_dup()
duplicates this new option.
*/
struct ares_options {
int flags;
int timeout; /* in seconds or milliseconds, depending on options */
int tries;
int ndots;
unsigned short udp_port;
unsigned short tcp_port;
int socket_send_buffer_size;
int socket_receive_buffer_size;
struct in_addr *servers;
int nservers;
char **domains;
int ndomains;
char *lookups;
ares_sock_state_cb sock_state_cb;
void *sock_state_cb_data;
struct apattern *sortlist;
int nsort;
};
struct hostent;
struct timeval;
struct sockaddr;
struct ares_channeldata;
typedef struct ares_channeldata *ares_channel;
typedef void (*ares_callback)(void *arg,
int status,
int timeouts,
unsigned char *abuf,
int alen);
typedef void (*ares_host_callback)(void *arg,
int status,
int timeouts,
struct hostent *hostent);
typedef void (*ares_nameinfo_callback)(void *arg,
int status,
int timeouts,
char *node,
char *service);
typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd,
int type,
void *data);
CARES_EXTERN int ares_library_init(int flags);
CARES_EXTERN void ares_library_cleanup(void);
CARES_EXTERN const char *ares_version(int *version);
CARES_EXTERN int ares_init(ares_channel *channelptr);
CARES_EXTERN int ares_init_options(ares_channel *channelptr,
struct ares_options *options,
int optmask);
CARES_EXTERN int ares_save_options(ares_channel channel,
struct ares_options *options,
int *optmask);
CARES_EXTERN void ares_destroy_options(struct ares_options *options);
CARES_EXTERN int ares_dup(ares_channel *dest,
ares_channel src);
CARES_EXTERN void ares_destroy(ares_channel channel);
CARES_EXTERN void ares_cancel(ares_channel channel);
CARES_EXTERN void ares_set_socket_callback(ares_channel channel,
ares_sock_create_callback callback,
void *user_data);
CARES_EXTERN void ares_send(ares_channel channel,
const unsigned char *qbuf,
int qlen,
ares_callback callback,
void *arg);
CARES_EXTERN void ares_query(ares_channel channel,
const char *name,
int dnsclass,
int type,
ares_callback callback,
void *arg);
CARES_EXTERN void ares_search(ares_channel channel,
const char *name,
int dnsclass,
int type,
ares_callback callback,
void *arg);
CARES_EXTERN void ares_gethostbyname(ares_channel channel,
const char *name,
int family,
ares_host_callback callback,
void *arg);
CARES_EXTERN int ares_gethostbyname_file(ares_channel channel,
const char *name,
int family,
struct hostent **host);
CARES_EXTERN void ares_gethostbyaddr(ares_channel channel,
const void *addr,
int addrlen,
int family,
ares_host_callback callback,
void *arg);
CARES_EXTERN void ares_getnameinfo(ares_channel channel,
const struct sockaddr *sa,
ares_socklen_t salen,
int flags,
ares_nameinfo_callback callback,
void *arg);
CARES_EXTERN int ares_fds(ares_channel channel,
fd_set *read_fds,
fd_set *write_fds);
CARES_EXTERN int ares_getsock(ares_channel channel,
ares_socket_t *socks,
int numsocks);
CARES_EXTERN struct timeval *ares_timeout(ares_channel channel,
struct timeval *maxtv,
struct timeval *tv);
CARES_EXTERN void ares_process(ares_channel channel,
fd_set *read_fds,
fd_set *write_fds);
CARES_EXTERN void ares_process_fd(ares_channel channel,
ares_socket_t read_fd,
ares_socket_t write_fd);
CARES_EXTERN int ares_mkquery(const char *name,
int dnsclass,
int type,
unsigned short id,
int rd,
unsigned char **buf,
int *buflen);
CARES_EXTERN int ares_expand_name(const unsigned char *encoded,
const unsigned char *abuf,
int alen,
char **s,
long *enclen);
CARES_EXTERN int ares_expand_string(const unsigned char *encoded,
const unsigned char *abuf,
int alen,
unsigned char **s,
long *enclen);
/*
* NOTE: before c-ares 1.7.0 we would most often use the system in6_addr
* struct below when ares itself was built, but many apps would use this
* private version since the header checked a HAVE_* define for it. Starting
* with 1.7.0 we always declare and use our own to stop relying on the
* system's one.
*/
struct ares_in6_addr {
union {
unsigned char _S6_u8[16];
} _S6_un;
};
struct ares_addrttl {
struct in_addr ipaddr;
int ttl;
};
struct ares_addr6ttl {
struct ares_in6_addr ip6addr;
int ttl;
};
struct ares_srv_reply {
struct ares_srv_reply *next;
char *host;
unsigned short priority;
unsigned short weight;
unsigned short port;
};
struct ares_mx_reply {
struct ares_mx_reply *next;
char *host;
unsigned short priority;
};
struct ares_txt_reply {
struct ares_txt_reply *next;
unsigned char *txt;
size_t length; /* length excludes null termination */
};
/*
** Parse the buffer, starting at *abuf and of length alen bytes, previously
** obtained from an ares_search call. Put the results in *host, if nonnull.
** Also, if addrttls is nonnull, put up to *naddrttls IPv4 addresses along with
** their TTLs in that array, and set *naddrttls to the number of addresses
** so written.
*/
CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf,
int alen,
struct hostent **host,
struct ares_addrttl *addrttls,
int *naddrttls);
CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf,
int alen,
struct hostent **host,
struct ares_addr6ttl *addrttls,
int *naddrttls);
CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf,
int alen,
const void *addr,
int addrlen,
int family,
struct hostent **host);
CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf,
int alen,
struct hostent **host);
CARES_EXTERN int ares_parse_srv_reply(const unsigned char* abuf,
int alen,
struct ares_srv_reply** srv_out);
CARES_EXTERN int ares_parse_mx_reply(const unsigned char* abuf,
int alen,
struct ares_mx_reply** mx_out);
CARES_EXTERN int ares_parse_txt_reply(const unsigned char* abuf,
int alen,
struct ares_txt_reply** txt_out);
CARES_EXTERN void ares_free_string(void *str);
CARES_EXTERN void ares_free_hostent(struct hostent *host);
CARES_EXTERN void ares_free_data(void *dataptr);
CARES_EXTERN const char *ares_strerror(int code);
struct ares_addr_node {
struct ares_addr_node *next;
int family;
union {
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
};
CARES_EXTERN int ares_set_servers(ares_channel channel,
struct ares_addr_node *servers);
CARES_EXTERN int ares_get_servers(ares_channel channel,
struct ares_addr_node **servers);
#ifdef __cplusplus
}
#endif
#endif /* ARES__H */

66
deps/c-ares/ares__close_sockets.c vendored Normal file
View File

@@ -0,0 +1,66 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "ares.h"
#include "ares_private.h"
void ares__close_sockets(ares_channel channel, struct server_state *server)
{
struct send_request *sendreq;
/* Free all pending output buffers. */
while (server->qhead)
{
/* Advance server->qhead; pull out query as we go. */
sendreq = server->qhead;
server->qhead = sendreq->next;
if (sendreq->data_storage != NULL)
free(sendreq->data_storage);
free(sendreq);
}
server->qtail = NULL;
/* Reset any existing input buffer. */
if (server->tcp_buffer)
free(server->tcp_buffer);
server->tcp_buffer = NULL;
server->tcp_lenbuf_pos = 0;
/* Reset brokenness */
server->is_broken = 0;
/* Close the TCP and UDP sockets. */
if (server->tcp_socket != ARES_SOCKET_BAD)
{
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
sclose(server->tcp_socket);
server->tcp_socket = ARES_SOCKET_BAD;
server->tcp_connection_generation = ++channel->tcp_connection_generation;
}
if (server->udp_socket != ARES_SOCKET_BAD)
{
SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
sclose(server->udp_socket);
server->udp_socket = ARES_SOCKET_BAD;
}
}

263
deps/c-ares/ares__get_hostent.c vendored Normal file
View File

@@ -0,0 +1,263 @@
/* Copyright 1998, 2010 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#include "ares.h"
#include "inet_net_pton.h"
#include "ares_private.h"
int ares__get_hostent(FILE *fp, int family, struct hostent **host)
{
char *line = NULL, *p, *q, **alias;
char *txtaddr, *txthost, *txtalias;
int status;
size_t addrlen, linesize, naliases;
struct ares_addr addr;
struct hostent *hostent = NULL;
*host = NULL; /* Assume failure */
/* Validate family */
switch (family) {
case AF_INET:
case AF_INET6:
case AF_UNSPEC:
break;
default:
return ARES_EBADFAMILY;
}
while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
{
/* Trim line comment. */
p = line;
while (*p && (*p != '#'))
p++;
*p = '\0';
/* Trim trailing whitespace. */
q = p - 1;
while ((q >= line) && ISSPACE(*q))
q--;
*++q = '\0';
/* Skip leading whitespace. */
p = line;
while (*p && ISSPACE(*p))
p++;
if (!*p)
/* Ignore line if empty. */
continue;
/* Pointer to start of IPv4 or IPv6 address part. */
txtaddr = p;
/* Advance past address part. */
while (*p && !ISSPACE(*p))
p++;
if (!*p)
/* Ignore line if reached end of line. */
continue;
/* Null terminate address part. */
*p = '\0';
/* Advance to host name */
p++;
while (*p && ISSPACE(*p))
p++;
if (!*p)
/* Ignore line if reached end of line. */
continue;
/* Pointer to start of host name. */
txthost = p;
/* Advance past host name. */
while (*p && !ISSPACE(*p))
p++;
/* Pointer to start of first alias. */
txtalias = NULL;
if (*p)
{
q = p + 1;
while (*q && ISSPACE(*q))
q++;
if (*q)
txtalias = q;
}
/* Null terminate host name. */
*p = '\0';
/* find out number of aliases. */
naliases = 0;
if (txtalias)
{
p = txtalias;
while (*p)
{
while (*p && !ISSPACE(*p))
p++;
while (*p && ISSPACE(*p))
p++;
naliases++;
}
}
/* Convert address string to network address for the requested family. */
addrlen = 0;
addr.family = AF_UNSPEC;
addr.addrV4.s_addr = INADDR_NONE;
if ((family == AF_INET) || (family == AF_UNSPEC))
{
addr.addrV4.s_addr = inet_addr(txtaddr);
if (addr.addrV4.s_addr != INADDR_NONE)
{
/* Actual network address family and length. */
addr.family = AF_INET;
addrlen = sizeof(addr.addrV4);
}
}
if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen)))
{
if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0)
{
/* Actual network address family and length. */
addr.family = AF_INET6;
addrlen = sizeof(addr.addrV6);
}
}
if (!addrlen)
/* Ignore line if invalid address string for the requested family. */
continue;
/*
** Actual address family possible values are AF_INET and AF_INET6 only.
*/
/* Allocate memory for the hostent structure. */
hostent = malloc(sizeof(struct hostent));
if (!hostent)
break;
/* Initialize fields for out of memory condition. */
hostent->h_aliases = NULL;
hostent->h_addr_list = NULL;
/* Copy official host name. */
hostent->h_name = strdup(txthost);
if (!hostent->h_name)
break;
/* Copy network address. */
hostent->h_addr_list = malloc(2 * sizeof(char *));
if (!hostent->h_addr_list)
break;
hostent->h_addr_list[1] = NULL;
hostent->h_addr_list[0] = malloc(addrlen);
if (!hostent->h_addr_list[0])
break;
if (addr.family == AF_INET)
memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4));
else
memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6));
/* Copy aliases. */
hostent->h_aliases = malloc((naliases + 1) * sizeof(char *));
if (!hostent->h_aliases)
break;
alias = hostent->h_aliases;
while (naliases)
*(alias + naliases--) = NULL;
*alias = NULL;
while (txtalias)
{
p = txtalias;
while (*p && !ISSPACE(*p))
p++;
q = p;
while (*q && ISSPACE(*q))
q++;
*p = '\0';
if ((*alias = strdup(txtalias)) == NULL)
break;
alias++;
txtalias = *q ? q : NULL;
}
if (txtalias)
/* Alias memory allocation failure. */
break;
/* Copy actual network address family and length. */
hostent->h_addrtype = addr.family;
hostent->h_length = (int)addrlen;
/* Free line buffer. */
free(line);
/* Return hostent successfully */
*host = hostent;
return ARES_SUCCESS;
}
/* If allocated, free line buffer. */
if (line)
free(line);
if (status == ARES_SUCCESS)
{
/* Memory allocation failure; clean up. */
if (hostent)
{
if (hostent->h_name)
free((char *) hostent->h_name);
if (hostent->h_aliases)
{
for (alias = hostent->h_aliases; *alias; alias++)
free(*alias);
free(hostent->h_aliases);
}
if (hostent->h_addr_list)
{
if (hostent->h_addr_list[0])
free(hostent->h_addr_list[0]);
free(hostent->h_addr_list);
}
free(hostent);
}
return ARES_ENOMEM;
}
return status;
}

71
deps/c-ares/ares__read_line.c vendored Normal file
View File

@@ -0,0 +1,71 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_nowarn.h"
#include "ares_private.h"
/* This is an internal function. Its contract is to read a line from
* a file into a dynamically allocated buffer, zeroing the trailing
* newline if there is one. The calling routine may call
* ares__read_line multiple times with the same buf and bufsize
* pointers; *buf will be reallocated and *bufsize adjusted as
* appropriate. The initial value of *buf should be NULL. After the
* calling routine is done reading lines, it should free *buf.
*/
int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
{
char *newbuf;
size_t offset = 0;
size_t len;
if (*buf == NULL)
{
*buf = malloc(128);
if (!*buf)
return ARES_ENOMEM;
*bufsize = 128;
}
for (;;)
{
int bytestoread = aresx_uztosi(*bufsize - offset);
if (!fgets(*buf + offset, bytestoread, fp))
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
len = offset + strlen(*buf + offset);
if ((*buf)[len - 1] == '\n')
{
(*buf)[len - 1] = 0;
break;
}
offset = len;
if(len < *bufsize - 1)
continue;
/* Allocate more space. */
newbuf = realloc(*buf, *bufsize * 2);
if (!newbuf)
return ARES_ENOMEM;
*buf = newbuf;
*bufsize *= 2;
}
return ARES_SUCCESS;
}

111
deps/c-ares/ares__timeval.c vendored Normal file
View File

@@ -0,0 +1,111 @@
/* Copyright (C) 2008 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_private.h"
#if defined(WIN32) && !defined(MSDOS)
struct timeval ares__tvnow(void)
{
/*
** GetTickCount() is available on _all_ Windows versions from W95 up
** to nowadays. Returns milliseconds elapsed since last system boot,
** increases monotonically and wraps once 49.7 days have elapsed.
*/
struct timeval now;
DWORD milliseconds = GetTickCount();
now.tv_sec = milliseconds / 1000;
now.tv_usec = (milliseconds % 1000) * 1000;
return now;
}
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
struct timeval ares__tvnow(void)
{
/*
** clock_gettime() is granted to be increased monotonically when the
** monotonic clock is queried. Time starting point is unspecified, it
** could be the system start-up time, the Epoch, or something else,
** in any case the time starting point does not change once that the
** system has started up.
*/
struct timeval now;
struct timespec tsnow;
if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
now.tv_sec = tsnow.tv_sec;
now.tv_usec = tsnow.tv_nsec / 1000;
}
/*
** Even when the configure process has truly detected monotonic clock
** availability, it might happen that it is not actually available at
** run-time. When this occurs simply fallback to other time source.
*/
#ifdef HAVE_GETTIMEOFDAY
else
(void)gettimeofday(&now, NULL);
#else
else {
now.tv_sec = (long)time(NULL);
now.tv_usec = 0;
}
#endif
return now;
}
#elif defined(HAVE_GETTIMEOFDAY)
struct timeval ares__tvnow(void)
{
/*
** gettimeofday() is not granted to be increased monotonically, due to
** clock drifting and external source time synchronization it can jump
** forward or backward in time.
*/
struct timeval now;
(void)gettimeofday(&now, NULL);
return now;
}
#else
struct timeval ares__tvnow(void)
{
/*
** time() returns the value of time in seconds since the Epoch.
*/
struct timeval now;
now.tv_sec = (long)time(NULL);
now.tv_usec = 0;
return now;
}
#endif
#if 0 /* Not used */
/*
* Make sure that the first argument is the more recent time, as otherwise
* we'll get a weird negative time-diff back...
*
* Returns: the time difference in number of milliseconds.
*/
long ares__tvdiff(struct timeval newer, struct timeval older)
{
return (newer.tv_sec-older.tv_sec)*1000+
(newer.tv_usec-older.tv_usec)/1000;
}
#endif

63
deps/c-ares/ares_cancel.c vendored Normal file
View File

@@ -0,0 +1,63 @@
/* Copyright (C) 2004 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <assert.h>
#include <stdlib.h>
#include "ares.h"
#include "ares_private.h"
/*
* ares_cancel() cancels all ongoing requests/resolves that might be going on
* on the given channel. It does NOT kill the channel, use ares_destroy() for
* that.
*/
void ares_cancel(ares_channel channel)
{
struct query *query;
struct list_node* list_head;
struct list_node* list_node;
int i;
list_head = &(channel->all_queries);
for (list_node = list_head->next; list_node != list_head; )
{
query = list_node->data;
list_node = list_node->next; /* since we're deleting the query */
query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
ares__free_query(query);
}
#ifndef NDEBUG
/* Freeing the query should remove it from all the lists in which it sits,
* so all query lists should be empty now.
*/
assert(ares__is_list_empty(&(channel->all_queries)));
for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
{
assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
}
for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
{
assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
}
#endif
if (!(channel->flags & ARES_FLAG_STAYOPEN))
{
if (channel->servers)
{
for (i = 0; i < channel->nservers; i++)
ares__close_sockets(channel, &channel->servers[i]);
}
}
}

189
deps/c-ares/ares_data.c vendored Normal file
View File

@@ -0,0 +1,189 @@
/* Copyright (C) 2009-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stddef.h>
#include "ares.h"
#include "ares_data.h"
#include "ares_private.h"
/*
** ares_free_data() - c-ares external API function.
**
** This function must be used by the application to free data memory that
** has been internally allocated by some c-ares function and for which a
** pointer has already been returned to the calling application. The list
** of c-ares functions returning pointers that must be free'ed using this
** function is:
**
** ares_get_servers()
** ares_parse_srv_reply()
** ares_parse_txt_reply()
*/
void ares_free_data(void *dataptr)
{
struct ares_data *ptr;
if (!dataptr)
return;
#ifdef __INTEL_COMPILER
# pragma warning(push)
# pragma warning(disable:1684)
/* 1684: conversion from pointer to same-sized integral type */
#endif
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
if (ptr->mark != ARES_DATATYPE_MARK)
return;
switch (ptr->type)
{
case ARES_DATATYPE_MX_REPLY:
if (ptr->data.mx_reply.next)
ares_free_data(ptr->data.mx_reply.next);
if (ptr->data.mx_reply.host)
free(ptr->data.mx_reply.host);
break;
case ARES_DATATYPE_SRV_REPLY:
if (ptr->data.srv_reply.next)
ares_free_data(ptr->data.srv_reply.next);
if (ptr->data.srv_reply.host)
free(ptr->data.srv_reply.host);
break;
case ARES_DATATYPE_TXT_REPLY:
if (ptr->data.txt_reply.next)
ares_free_data(ptr->data.txt_reply.next);
if (ptr->data.txt_reply.txt)
free(ptr->data.txt_reply.txt);
break;
case ARES_DATATYPE_ADDR_NODE:
if (ptr->data.addr_node.next)
ares_free_data(ptr->data.addr_node.next);
break;
default:
return;
}
free(ptr);
}
/*
** ares_malloc_data() - c-ares internal helper function.
**
** This function allocates memory for a c-ares private ares_data struct
** for the specified ares_datatype, initializes c-ares private fields
** and zero initializes those which later might be used from the public
** API. It returns an interior pointer which can be passed by c-ares
** functions to the calling application, and that must be free'ed using
** c-ares external API function ares_free_data().
*/
void *ares_malloc_data(ares_datatype type)
{
struct ares_data *ptr;
ptr = malloc(sizeof(struct ares_data));
if (!ptr)
return NULL;
switch (type)
{
case ARES_DATATYPE_MX_REPLY:
ptr->data.mx_reply.next = NULL;
ptr->data.mx_reply.host = NULL;
ptr->data.mx_reply.priority = 0;
break;
case ARES_DATATYPE_SRV_REPLY:
ptr->data.srv_reply.next = NULL;
ptr->data.srv_reply.host = NULL;
ptr->data.srv_reply.priority = 0;
ptr->data.srv_reply.weight = 0;
ptr->data.srv_reply.port = 0;
break;
case ARES_DATATYPE_TXT_REPLY:
ptr->data.txt_reply.next = NULL;
ptr->data.txt_reply.txt = NULL;
ptr->data.txt_reply.length = 0;
break;
case ARES_DATATYPE_ADDR_NODE:
ptr->data.addr_node.next = NULL;
ptr->data.addr_node.family = 0;
memset(&ptr->data.addr_node.addrV6, 0,
sizeof(ptr->data.addr_node.addrV6));
default:
free(ptr);
return NULL;
}
ptr->mark = ARES_DATATYPE_MARK;
ptr->type = type;
return &ptr->data;
}
/*
** ares_get_datatype() - c-ares internal helper function.
**
** This function returns the ares_datatype of the data stored in a
** private ares_data struct when given the public API pointer.
*/
ares_datatype ares_get_datatype(void * dataptr)
{
struct ares_data *ptr;
#ifdef __INTEL_COMPILER
# pragma warning(push)
# pragma warning(disable:1684)
/* 1684: conversion from pointer to same-sized integral type */
#endif
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
if (ptr->mark == ARES_DATATYPE_MARK)
return ptr->type;
return ARES_DATATYPE_UNKNOWN;
}

65
deps/c-ares/ares_data.h vendored Normal file
View File

@@ -0,0 +1,65 @@
/* Copyright (C) 2009-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
typedef enum {
ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */
ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */
ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */
ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */
ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */
#if 0
ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */
ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */
ARES_DATATYPE_HOSTENT, /* struct hostent */
ARES_DATATYPE_OPTIONS, /* struct ares_options */
#endif
ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */
} ares_datatype;
#define ARES_DATATYPE_MARK 0xbead
/*
* ares_data struct definition is internal to c-ares and shall not
* be exposed by the public API in order to allow future changes
* and extensions to it without breaking ABI. This will be used
* internally by c-ares as the container of multiple types of data
* dynamically allocated for which a reference will be returned
* to the calling application.
*
* c-ares API functions returning a pointer to c-ares internally
* allocated data will actually be returning an interior pointer
* into this ares_data struct.
*
* All this is 'invisible' to the calling application, the only
* requirement is that this kind of data must be free'ed by the
* calling application using ares_free_data() with the pointer
* it has received from a previous c-ares function call.
*/
struct ares_data {
ares_datatype type; /* Actual data type identifier. */
unsigned int mark; /* Private ares_data signature. */
union {
struct ares_txt_reply txt_reply;
struct ares_srv_reply srv_reply;
struct ares_addr_node addr_node;
struct ares_mx_reply mx_reply;
} data;
};
void *ares_malloc_data(ares_datatype type);
ares_datatype ares_get_datatype(void * dataptr);

105
deps/c-ares/ares_destroy.c vendored Normal file
View File

@@ -0,0 +1,105 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2004-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <assert.h>
#include <stdlib.h>
#include "ares.h"
#include "ares_private.h"
void ares_destroy_options(struct ares_options *options)
{
int i;
if(options->servers)
free(options->servers);
for (i = 0; i < options->ndomains; i++)
free(options->domains[i]);
free(options->domains);
if(options->sortlist)
free(options->sortlist);
free(options->lookups);
}
void ares_destroy(ares_channel channel)
{
int i;
struct query *query;
struct list_node* list_head;
struct list_node* list_node;
if (!channel)
return;
list_head = &(channel->all_queries);
for (list_node = list_head->next; list_node != list_head; )
{
query = list_node->data;
list_node = list_node->next; /* since we're deleting the query */
query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
ares__free_query(query);
}
#ifndef NDEBUG
/* Freeing the query should remove it from all the lists in which it sits,
* so all query lists should be empty now.
*/
assert(ares__is_list_empty(&(channel->all_queries)));
for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
{
assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
}
for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
{
assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
}
#endif
ares__destroy_servers_state(channel);
if (channel->domains) {
for (i = 0; i < channel->ndomains; i++)
free(channel->domains[i]);
free(channel->domains);
}
if(channel->sortlist)
free(channel->sortlist);
if (channel->lookups)
free(channel->lookups);
free(channel);
}
void ares__destroy_servers_state(ares_channel channel)
{
struct server_state *server;
int i;
if (channel->servers)
{
for (i = 0; i < channel->nservers; i++)
{
server = &channel->servers[i];
ares__close_sockets(channel, server);
assert(ares__is_list_empty(&server->queries_to_server));
}
free(channel->servers);
channel->servers = NULL;
}
channel->nservers = -1;
}

90
deps/c-ares/ares_dns.h vendored Normal file
View File

@@ -0,0 +1,90 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifndef ARES__DNS_H
#define ARES__DNS_H
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
((p)[2] << 8) | (p)[3])
#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
((p)[1] = (unsigned char)((v) & 0xff)))
#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
((p)[3] = (unsigned char)((v) & 0xff)))
#if 0
/* we cannot use this approach on systems where we can't access 16/32 bit
data on un-aligned addresses */
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
#endif
/* Macros for parsing a DNS header */
#define DNS_HEADER_QID(h) DNS__16BIT(h)
#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
#define DNS_HEADER_RD(h) ((h)[2] & 0x1)
#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
/* Macros for constructing a DNS header */
#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
/* Macros for parsing the fixed part of a DNS question */
#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
/* Macros for constructing the fixed part of a DNS question */
#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
/* Macros for parsing the fixed part of a DNS resource record */
#define DNS_RR_TYPE(r) DNS__16BIT(r)
#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
#define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
/* Macros for constructing the fixed part of a DNS resource record */
#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v)
#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v)
#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v)
#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v)
#endif /* ARES__DNS_H */

193
deps/c-ares/ares_expand_name.c vendored Normal file
View File

@@ -0,0 +1,193 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include "ares.h"
#include "ares_private.h" /* for the memdebug */
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
int alen);
/* Expand an RFC1035-encoded domain name given by encoded. The
* containing message is given by abuf and alen. The result given by
* *s, which is set to a NUL-terminated allocated buffer. *enclen is
* set to the length of the encoded name (not the length of the
* expanded name; the goal is to tell the caller how many bytes to
* move forward to get past the encoded name).
*
* In the simple case, an encoded name is a series of labels, each
* composed of a one-byte length (limited to values between 0 and 63
* inclusive) followed by the label contents. The name is terminated
* by a zero-length label.
*
* In the more complicated case, a label may be terminated by an
* indirection pointer, specified by two bytes with the high bits of
* the first byte (corresponding to INDIR_MASK) set to 11. With the
* two high bits of the first byte stripped off, the indirection
* pointer gives an offset from the beginning of the containing
* message with more labels to decode. Indirection can happen an
* arbitrary number of times, so we have to detect loops.
*
* Since the expanded name uses '.' as a label separator, we use
* backslashes to escape periods or backslashes in the expanded name.
*/
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
int alen, char **s, long *enclen)
{
int len, indir = 0;
char *q;
const unsigned char *p;
union {
ssize_t sig;
size_t uns;
} nlen;
nlen.sig = name_length(encoded, abuf, alen);
if (nlen.sig < 0)
return ARES_EBADNAME;
*s = malloc(nlen.uns + 1);
if (!*s)
return ARES_ENOMEM;
q = *s;
if (nlen.uns == 0) {
/* RFC2181 says this should be ".": the root of the DNS tree.
* Since this function strips trailing dots though, it becomes ""
*/
q[0] = '\0';
*enclen = 1; /* the caller should move one byte to get past this */
return ARES_SUCCESS;
}
/* No error-checking necessary; it was all done by name_length(). */
p = encoded;
while (*p)
{
if ((*p & INDIR_MASK) == INDIR_MASK)
{
if (!indir)
{
*enclen = p + 2 - encoded;
indir = 1;
}
p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
}
else
{
len = *p;
p++;
while (len--)
{
if (*p == '.' || *p == '\\')
*q++ = '\\';
*q++ = *p;
p++;
}
*q++ = '.';
}
}
if (!indir)
*enclen = p + 1 - encoded;
/* Nuke the trailing period if we wrote one. */
if (q > *s)
*(q - 1) = 0;
else
*q = 0; /* zero terminate */
return ARES_SUCCESS;
}
/* Return the length of the expansion of an encoded domain name, or
* -1 if the encoding is invalid.
*/
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
int alen)
{
int n = 0, offset, indir = 0;
/* Allow the caller to pass us abuf + alen and have us check for it. */
if (encoded == abuf + alen)
return -1;
while (*encoded)
{
if ((*encoded & INDIR_MASK) == INDIR_MASK)
{
/* Check the offset and go there. */
if (encoded + 1 >= abuf + alen)
return -1;
offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1);
if (offset >= alen)
return -1;
encoded = abuf + offset;
/* If we've seen more indirects than the message length,
* then there's a loop.
*/
if (++indir > alen)
return -1;
}
else
{
offset = *encoded;
if (encoded + offset + 1 >= abuf + alen)
return -1;
encoded++;
while (offset--)
{
n += (*encoded == '.' || *encoded == '\\') ? 2 : 1;
encoded++;
}
n++;
}
}
/* If there were any labels at all, then the number of dots is one
* less than the number of labels, so subtract one.
*/
return (n) ? n - 1 : n;
}
/* Like ares_expand_name but returns EBADRESP in case of invalid input. */
int ares__expand_name_for_response(const unsigned char *encoded,
const unsigned char *abuf, int alen,
char **s, long *enclen)
{
int status = ares_expand_name(encoded, abuf, alen, s, enclen);
if (status == ARES_EBADNAME)
status = ARES_EBADRESP;
return status;
}

75
deps/c-ares/ares_expand_string.c vendored Normal file
View File

@@ -0,0 +1,75 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#include <string.h>
#include <stdlib.h>
#include "ares.h"
#include "ares_private.h" /* for the memdebug */
/* Simply decodes a length-encoded character string. The first byte of the
* input is the length of the string to be returned and the bytes thereafter
* are the characters of the string. The returned result will be NULL
* terminated.
*/
int ares_expand_string(const unsigned char *encoded,
const unsigned char *abuf,
int alen,
unsigned char **s,
long *enclen)
{
unsigned char *q;
union {
ssize_t sig;
size_t uns;
} elen;
if (encoded == abuf+alen)
return ARES_EBADSTR;
elen.uns = *encoded;
if (encoded+elen.sig+1 > abuf+alen)
return ARES_EBADSTR;
encoded++;
*s = malloc(elen.uns+1);
if (*s == NULL)
return ARES_ENOMEM;
q = *s;
strncpy((char *)q, (char *)encoded, elen.uns);
q[elen.uns] = '\0';
*s = q;
*enclen = (long)(elen.sig+1);
return ARES_SUCCESS;
}

62
deps/c-ares/ares_fds.c vendored Normal file
View File

@@ -0,0 +1,62 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include "ares.h"
#include "ares_private.h"
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
{
struct server_state *server;
ares_socket_t nfds;
int i;
/* Are there any active queries? */
int active_queries = !ares__is_list_empty(&(channel->all_queries));
nfds = 0;
for (i = 0; i < channel->nservers; i++)
{
server = &channel->servers[i];
/* We only need to register interest in UDP sockets if we have
* outstanding queries.
*/
if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
{
FD_SET(server->udp_socket, read_fds);
if (server->udp_socket >= nfds)
nfds = server->udp_socket + 1;
}
/* We always register for TCP events, because we want to know
* when the other side closes the connection, so we don't waste
* time trying to use a broken connection.
*/
if (server->tcp_socket != ARES_SOCKET_BAD)
{
FD_SET(server->tcp_socket, read_fds);
if (server->qhead)
FD_SET(server->tcp_socket, write_fds);
if (server->tcp_socket >= nfds)
nfds = server->tcp_socket + 1;
}
}
return (int)nfds;
}

39
deps/c-ares/ares_free_hostent.c vendored Normal file
View File

@@ -0,0 +1,39 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stdlib.h>
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#include "ares.h"
#include "ares_private.h" /* for memdebug */
void ares_free_hostent(struct hostent *host)
{
char **p;
free((char *)(host->h_name));
for (p = host->h_aliases; *p; p++)
free(*p);
free(host->h_aliases);
free(host->h_addr_list[0]); /* no matter if there is one or many entries,
there is only one malloc for all of them */
free(host->h_addr_list);
free(host);
}

25
deps/c-ares/ares_free_string.c vendored Normal file
View File

@@ -0,0 +1,25 @@
/* Copyright 2000 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stdlib.h>
#include "ares.h"
#include "ares_private.h"
void ares_free_string(void *str)
{
free(str);
}

292
deps/c-ares/ares_gethostbyaddr.c vendored Normal file
View File

@@ -0,0 +1,292 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "inet_net_pton.h"
#include "ares_private.h"
#ifdef WATT32
#undef WIN32
#endif
struct addr_query {
/* Arguments passed to ares_gethostbyaddr() */
ares_channel channel;
struct ares_addr addr;
ares_host_callback callback;
void *arg;
const char *remaining_lookups;
int timeouts;
};
static void next_lookup(struct addr_query *aquery);
static void addr_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen);
static void end_aquery(struct addr_query *aquery, int status,
struct hostent *host);
static int file_lookup(struct ares_addr *addr, struct hostent **host);
static void ptr_rr_name(char *name, const struct ares_addr *addr);
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
int family, ares_host_callback callback, void *arg)
{
struct addr_query *aquery;
if (family != AF_INET && family != AF_INET6)
{
callback(arg, ARES_ENOTIMP, 0, NULL);
return;
}
if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) ||
(family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6)))
{
callback(arg, ARES_ENOTIMP, 0, NULL);
return;
}
aquery = malloc(sizeof(struct addr_query));
if (!aquery)
{
callback(arg, ARES_ENOMEM, 0, NULL);
return;
}
aquery->channel = channel;
if (family == AF_INET)
memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4));
else
memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6));
aquery->addr.family = family;
aquery->callback = callback;
aquery->arg = arg;
aquery->remaining_lookups = channel->lookups;
aquery->timeouts = 0;
next_lookup(aquery);
}
static void next_lookup(struct addr_query *aquery)
{
const char *p;
char name[128];
int status;
struct hostent *host;
for (p = aquery->remaining_lookups; *p; p++)
{
switch (*p)
{
case 'b':
ptr_rr_name(name, &aquery->addr);
aquery->remaining_lookups = p + 1;
ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
aquery);
return;
case 'f':
status = file_lookup(&aquery->addr, &host);
/* this status check below previously checked for !ARES_ENOTFOUND,
but we should not assume that this single error code is the one
that can occur, as that is in fact no longer the case */
if (status == ARES_SUCCESS)
{
end_aquery(aquery, status, host);
return;
}
break;
}
}
end_aquery(aquery, ARES_ENOTFOUND, NULL);
}
static void addr_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
struct addr_query *aquery = (struct addr_query *) arg;
struct hostent *host;
size_t addrlen;
aquery->timeouts += timeouts;
if (status == ARES_SUCCESS)
{
if (aquery->addr.family == AF_INET)
{
addrlen = sizeof(aquery->addr.addrV4);
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
(int)addrlen, AF_INET, &host);
}
else
{
addrlen = sizeof(aquery->addr.addrV6);
status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
(int)addrlen, AF_INET6, &host);
}
end_aquery(aquery, status, host);
}
else if (status == ARES_EDESTRUCTION)
end_aquery(aquery, status, NULL);
else
next_lookup(aquery);
}
static void end_aquery(struct addr_query *aquery, int status,
struct hostent *host)
{
aquery->callback(aquery->arg, status, aquery->timeouts, host);
if (host)
ares_free_hostent(host);
free(aquery);
}
static int file_lookup(struct ares_addr *addr, struct hostent **host)
{
FILE *fp;
int status;
int error;
#ifdef WIN32
char PATH_HOSTS[MAX_PATH];
if (IS_NT()) {
char tmp[MAX_PATH];
HKEY hkeyHosts;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
&hkeyHosts) == ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);
const char *PATH_HOSTS = _w32_GetHostsFile();
if (!PATH_HOSTS)
return ARES_ENOTFOUND;
#endif
fp = fopen(PATH_HOSTS, "r");
if (!fp)
{
error = ERRNO;
switch(error)
{
case ENOENT:
case ESRCH:
return ARES_ENOTFOUND;
default:
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
error, strerror(error)));
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
PATH_HOSTS));
*host = NULL;
return ARES_EFILE;
}
}
while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS)
{
if (addr->family != (*host)->h_addrtype)
{
ares_free_hostent(*host);
continue;
}
if (addr->family == AF_INET)
{
if (memcmp((*host)->h_addr, &addr->addrV4,
sizeof(addr->addrV4)) == 0)
break;
}
else if (addr->family == AF_INET6)
{
if (memcmp((*host)->h_addr, &addr->addrV6,
sizeof(addr->addrV6)) == 0)
break;
}
ares_free_hostent(*host);
}
fclose(fp);
if (status == ARES_EOF)
status = ARES_ENOTFOUND;
if (status != ARES_SUCCESS)
*host = NULL;
return status;
}
static void ptr_rr_name(char *name, const struct ares_addr *addr)
{
if (addr->family == AF_INET)
{
unsigned long laddr = ntohl(addr->addrV4.s_addr);
int a1 = (int)((laddr >> 24) & 0xff);
int a2 = (int)((laddr >> 16) & 0xff);
int a3 = (int)((laddr >> 8) & 0xff);
int a4 = (int)(laddr & 0xff);
sprintf(name, "%d.%d.%d.%d.in-addr.arpa", a4, a3, a2, a1);
}
else
{
unsigned char *bytes = (unsigned char *)&addr->addrV6;
/* There are too many arguments to do this in one line using
* minimally C89-compliant compilers */
sprintf(name,
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4);
sprintf(name+strlen(name),
"%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
}
}

515
deps/c-ares/ares_gethostbyname.c vendored Normal file
View File

@@ -0,0 +1,515 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifdef HAVE_STRINGS_H
#include <strings.h>
#endif
#include "ares.h"
#include "inet_net_pton.h"
#include "bitncmp.h"
#include "ares_private.h"
#ifdef WATT32
#undef WIN32
#endif
struct host_query {
/* Arguments passed to ares_gethostbyname() */
ares_channel channel;
char *name;
ares_host_callback callback;
void *arg;
int sent_family; /* this family is what was is being used */
int want_family; /* this family is what is asked for in the API */
const char *remaining_lookups;
int timeouts;
};
static void next_lookup(struct host_query *hquery, int status_code);
static void host_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen);
static void end_hquery(struct host_query *hquery, int status,
struct hostent *host);
static int fake_hostent(const char *name, int family,
ares_host_callback callback, void *arg);
static int file_lookup(const char *name, int family, struct hostent **host);
static void sort_addresses(struct hostent *host,
const struct apattern *sortlist, int nsort);
static void sort6_addresses(struct hostent *host,
const struct apattern *sortlist, int nsort);
static int get_address_index(const struct in_addr *addr,
const struct apattern *sortlist, int nsort);
static int get6_address_index(const struct ares_in6_addr *addr,
const struct apattern *sortlist, int nsort);
void ares_gethostbyname(ares_channel channel, const char *name, int family,
ares_host_callback callback, void *arg)
{
struct host_query *hquery;
/* Right now we only know how to look up Internet addresses - and unspec
means try both basically. */
switch (family) {
case AF_INET:
case AF_INET6:
case AF_UNSPEC:
break;
default:
callback(arg, ARES_ENOTIMP, 0, NULL);
return;
}
if (fake_hostent(name, family, callback, arg))
return;
/* Allocate and fill in the host query structure. */
hquery = malloc(sizeof(struct host_query));
if (!hquery)
{
callback(arg, ARES_ENOMEM, 0, NULL);
return;
}
hquery->channel = channel;
hquery->name = strdup(name);
hquery->want_family = family;
hquery->sent_family = -1; /* nothing is sent yet */
if (!hquery->name) {
free(hquery);
callback(arg, ARES_ENOMEM, 0, NULL);
return;
}
hquery->callback = callback;
hquery->arg = arg;
hquery->remaining_lookups = channel->lookups;
hquery->timeouts = 0;
/* Start performing lookups according to channel->lookups. */
next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */);
}
static void next_lookup(struct host_query *hquery, int status_code)
{
const char *p;
struct hostent *host;
int status = status_code;
for (p = hquery->remaining_lookups; *p; p++)
{
switch (*p)
{
case 'b':
/* DNS lookup */
hquery->remaining_lookups = p + 1;
if ((hquery->want_family == AF_INET6) ||
(hquery->want_family == AF_UNSPEC)) {
/* if inet6 or unspec, start out with AAAA */
hquery->sent_family = AF_INET6;
ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
host_callback, hquery);
}
else {
hquery->sent_family = AF_INET;
ares_search(hquery->channel, hquery->name, C_IN, T_A,
host_callback, hquery);
}
return;
case 'f':
/* Host file lookup */
status = file_lookup(hquery->name, hquery->want_family, &host);
/* this status check below previously checked for !ARES_ENOTFOUND,
but we should not assume that this single error code is the one
that can occur, as that is in fact no longer the case */
if (status == ARES_SUCCESS)
{
end_hquery(hquery, status, host);
return;
}
status = status_code; /* Use original status code */
break;
}
}
end_hquery(hquery, status, NULL);
}
static void host_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
struct host_query *hquery = (struct host_query *) arg;
ares_channel channel = hquery->channel;
struct hostent *host = NULL;
hquery->timeouts += timeouts;
if (status == ARES_SUCCESS)
{
if (hquery->sent_family == AF_INET)
{
status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL);
if (host && channel->nsort)
sort_addresses(host, channel->sortlist, channel->nsort);
}
else if (hquery->sent_family == AF_INET6)
{
status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
if (status == ARES_ENODATA || status == ARES_EBADRESP) {
/* The query returned something but either there were no AAAA
records (e.g. just CNAME) or the response was malformed. Try
looking up A instead. We should possibly limit this
attempt-next logic to AF_UNSPEC lookups only. */
hquery->sent_family = AF_INET;
ares_search(hquery->channel, hquery->name, C_IN, T_A,
host_callback, hquery);
return;
}
if (host && channel->nsort)
sort6_addresses(host, channel->sortlist, channel->nsort);
}
end_hquery(hquery, status, host);
}
else if ((status == ARES_ENODATA || status == ARES_EBADRESP ||
status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6)
{
/* The AAAA query yielded no useful result. Now look up an A instead.
We should possibly limit this attempt-next logic to AF_UNSPEC lookups
only. */
hquery->sent_family = AF_INET;
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
hquery);
}
else if (status == ARES_EDESTRUCTION)
end_hquery(hquery, status, NULL);
else
next_lookup(hquery, status);
}
static void end_hquery(struct host_query *hquery, int status,
struct hostent *host)
{
hquery->callback(hquery->arg, status, hquery->timeouts, host);
if (host)
ares_free_hostent(host);
free(hquery->name);
free(hquery);
}
/* If the name looks like an IP address, fake up a host entry, end the
* query immediately, and return true. Otherwise return false.
*/
static int fake_hostent(const char *name, int family,
ares_host_callback callback, void *arg)
{
struct hostent hostent;
char *aliases[1] = { NULL };
char *addrs[2];
int result = 0;
struct in_addr in;
struct ares_in6_addr in6;
if (family == AF_INET || family == AF_INET6)
{
/* It only looks like an IP address if it's all numbers and dots. */
int numdots = 0, valid = 1;
const char *p;
for (p = name; *p; p++)
{
if (!ISDIGIT(*p) && *p != '.') {
valid = 0;
break;
} else if (*p == '.') {
numdots++;
}
}
/* if we don't have 3 dots, it is illegal
* (although inet_addr doesn't think so).
*/
if (numdots != 3 || !valid)
result = 0;
else
result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1);
if (result)
family = AF_INET;
}
if (family == AF_INET6)
result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
if (!result)
return 0;
if (family == AF_INET)
{
hostent.h_length = (int)sizeof(struct in_addr);
addrs[0] = (char *)&in;
}
else if (family == AF_INET6)
{
hostent.h_length = (int)sizeof(struct ares_in6_addr);
addrs[0] = (char *)&in6;
}
/* Duplicate the name, to avoid a constness violation. */
hostent.h_name = strdup(name);
if (!hostent.h_name)
{
callback(arg, ARES_ENOMEM, 0, NULL);
return 1;
}
/* Fill in the rest of the host structure and terminate the query. */
addrs[1] = NULL;
hostent.h_aliases = aliases;
hostent.h_addrtype = family;
hostent.h_addr_list = addrs;
callback(arg, ARES_SUCCESS, 0, &hostent);
free((char *)(hostent.h_name));
return 1;
}
/* This is an API method */
int ares_gethostbyname_file(ares_channel channel, const char *name,
int family, struct hostent **host)
{
int result;
/* We only take the channel to ensure that ares_init() been called. */
if(channel == NULL)
{
/* Anything will do, really. This seems fine, and is consistent with
other error cases. */
*host = NULL;
return ARES_ENOTFOUND;
}
/* Just chain to the internal implementation we use here; it's exactly
* what we want.
*/
result = file_lookup(name, family, host);
if(result != ARES_SUCCESS)
{
/* We guarantee a NULL hostent on failure. */
*host = NULL;
}
return result;
}
static int file_lookup(const char *name, int family, struct hostent **host)
{
FILE *fp;
char **alias;
int status;
int error;
#ifdef WIN32
char PATH_HOSTS[MAX_PATH];
if (IS_NT()) {
char tmp[MAX_PATH];
HKEY hkeyHosts;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
&hkeyHosts) == ERROR_SUCCESS)
{
DWORD dwLength = MAX_PATH;
RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
&dwLength);
ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
}
else
GetWindowsDirectory(PATH_HOSTS, MAX_PATH);
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
extern const char *_w32_GetHostsFile (void);
const char *PATH_HOSTS = _w32_GetHostsFile();
if (!PATH_HOSTS)
return ARES_ENOTFOUND;
#endif
fp = fopen(PATH_HOSTS, "r");
if (!fp)
{
error = ERRNO;
switch(error)
{
case ENOENT:
case ESRCH:
return ARES_ENOTFOUND;
default:
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
error, strerror(error)));
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
PATH_HOSTS));
*host = NULL;
return ARES_EFILE;
}
}
while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
{
if (strcasecmp((*host)->h_name, name) == 0)
break;
for (alias = (*host)->h_aliases; *alias; alias++)
{
if (strcasecmp(*alias, name) == 0)
break;
}
if (*alias)
break;
ares_free_hostent(*host);
}
fclose(fp);
if (status == ARES_EOF)
status = ARES_ENOTFOUND;
if (status != ARES_SUCCESS)
*host = NULL;
return status;
}
static void sort_addresses(struct hostent *host,
const struct apattern *sortlist, int nsort)
{
struct in_addr a1, a2;
int i1, i2, ind1, ind2;
/* This is a simple insertion sort, not optimized at all. i1 walks
* through the address list, with the loop invariant that everything
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
* back through the list (via i2) until it is in sorted order.
*/
for (i1 = 0; host->h_addr_list[i1]; i1++)
{
memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
ind1 = get_address_index(&a1, sortlist, nsort);
for (i2 = i1 - 1; i2 >= 0; i2--)
{
memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
ind2 = get_address_index(&a2, sortlist, nsort);
if (ind2 <= ind1)
break;
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
}
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
}
}
/* Find the first entry in sortlist which matches addr. Return nsort
* if none of them match.
*/
static int get_address_index(const struct in_addr *addr,
const struct apattern *sortlist,
int nsort)
{
int i;
for (i = 0; i < nsort; i++)
{
if (sortlist[i].family != AF_INET)
continue;
if (sortlist[i].type == PATTERN_MASK)
{
if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
== sortlist[i].addrV4.s_addr)
break;
}
else
{
if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
sortlist[i].mask.bits))
break;
}
}
return i;
}
static void sort6_addresses(struct hostent *host,
const struct apattern *sortlist, int nsort)
{
struct ares_in6_addr a1, a2;
int i1, i2, ind1, ind2;
/* This is a simple insertion sort, not optimized at all. i1 walks
* through the address list, with the loop invariant that everything
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
* back through the list (via i2) until it is in sorted order.
*/
for (i1 = 0; host->h_addr_list[i1]; i1++)
{
memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
ind1 = get6_address_index(&a1, sortlist, nsort);
for (i2 = i1 - 1; i2 >= 0; i2--)
{
memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
ind2 = get6_address_index(&a2, sortlist, nsort);
if (ind2 <= ind1)
break;
memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
}
memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
}
}
/* Find the first entry in sortlist which matches addr. Return nsort
* if none of them match.
*/
static int get6_address_index(const struct ares_in6_addr *addr,
const struct apattern *sortlist,
int nsort)
{
int i;
for (i = 0; i < nsort; i++)
{
if (sortlist[i].family != AF_INET6)
continue;
if (!ares_bitncmp(addr,
&sortlist[i].addrV6,
sortlist[i].mask.bits))
break;
}
return i;
}

422
deps/c-ares/ares_getnameinfo.c vendored Normal file
View File

@@ -0,0 +1,422 @@
/* Copyright 2005 by Dominick Meglio
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_GETSERVBYPORT_R
# if !defined(GETSERVBYPORT_R_ARGS) || \
(GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
# error "you MUST specifiy a valid number of arguments for getservbyport_r"
# endif
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_ipv6.h"
#include "inet_ntop.h"
#include "ares_private.h"
struct nameinfo_query {
ares_nameinfo_callback callback;
void *arg;
union {
struct sockaddr_in addr4;
struct sockaddr_in6 addr6;
} addr;
int family;
int flags;
int timeouts;
};
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
#define IPBUFSIZ \
(sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
#else
#define IPBUFSIZ \
(sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
#endif
static void nameinfo_callback(void *arg, int status, int timeouts,
struct hostent *host);
static char *lookup_service(unsigned short port, int flags,
char *buf, size_t buflen);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
char *buf, size_t buflen);
#endif
static char *ares_striendstr(const char *s1, const char *s2);
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
ares_socklen_t salen,
int flags, ares_nameinfo_callback callback, void *arg)
{
struct sockaddr_in *addr = NULL;
struct sockaddr_in6 *addr6 = NULL;
struct nameinfo_query *niquery;
unsigned int port = 0;
/* Verify the buffer size */
if (salen == sizeof(struct sockaddr_in))
{
addr = (struct sockaddr_in *)sa;
port = addr->sin_port;
}
else if (salen == sizeof(struct sockaddr_in6))
{
addr6 = (struct sockaddr_in6 *)sa;
port = addr6->sin6_port;
}
else
{
callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
return;
}
/* If neither, assume they want a host */
if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
flags |= ARES_NI_LOOKUPHOST;
/* All they want is a service, no need for DNS */
if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
{
char buf[33], *service;
service = lookup_service((unsigned short)(port & 0xffff),
flags, buf, sizeof(buf));
callback(arg, ARES_SUCCESS, 0, NULL, service);
return;
}
/* They want a host lookup */
if ((flags & ARES_NI_LOOKUPHOST))
{
/* A numeric host can be handled without DNS */
if ((flags & ARES_NI_NUMERICHOST))
{
char ipbuf[IPBUFSIZ];
char srvbuf[33];
char *service = NULL;
ipbuf[0] = 0;
/* Specifying not to lookup a host, but then saying a host
* is required has to be illegal.
*/
if (flags & ARES_NI_NAMEREQD)
{
callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
return;
}
if (salen == sizeof(struct sockaddr_in6))
{
ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
/* If the system supports scope IDs, use it */
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
#endif
}
else
{
ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
}
/* They also want a service */
if (flags & ARES_NI_LOOKUPSERVICE)
service = lookup_service((unsigned short)(port & 0xffff),
flags, srvbuf, sizeof(srvbuf));
callback(arg, ARES_SUCCESS, 0, ipbuf, service);
return;
}
/* This is where a DNS lookup becomes necessary */
else
{
niquery = malloc(sizeof(struct nameinfo_query));
if (!niquery)
{
callback(arg, ARES_ENOMEM, 0, NULL, NULL);
return;
}
niquery->callback = callback;
niquery->arg = arg;
niquery->flags = flags;
niquery->timeouts = 0;
if (sa->sa_family == AF_INET)
{
niquery->family = AF_INET;
memcpy(&niquery->addr.addr4, addr, sizeof(addr));
ares_gethostbyaddr(channel, &addr->sin_addr,
sizeof(struct in_addr), AF_INET,
nameinfo_callback, niquery);
}
else
{
niquery->family = AF_INET6;
memcpy(&niquery->addr.addr6, addr6, sizeof(addr6));
ares_gethostbyaddr(channel, &addr6->sin6_addr,
sizeof(struct ares_in6_addr), AF_INET6,
nameinfo_callback, niquery);
}
}
}
}
static void nameinfo_callback(void *arg, int status, int timeouts,
struct hostent *host)
{
struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
char srvbuf[33];
char *service = NULL;
niquery->timeouts += timeouts;
if (status == ARES_SUCCESS)
{
/* They want a service too */
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
{
if (niquery->family == AF_INET)
service = lookup_service(niquery->addr.addr4.sin_port,
niquery->flags, srvbuf, sizeof(srvbuf));
else
service = lookup_service(niquery->addr.addr6.sin6_port,
niquery->flags, srvbuf, sizeof(srvbuf));
}
/* NOFQDN means we have to strip off the domain name portion. We do
this by determining our own domain name, then searching the string
for this domain name and removing it.
*/
#ifdef HAVE_GETHOSTNAME
if (niquery->flags & ARES_NI_NOFQDN)
{
char buf[255];
char *domain;
gethostname(buf, 255);
if ((domain = strchr(buf, '.')))
{
char *end = ares_striendstr(host->h_name, domain);
if (end)
*end = 0;
}
}
#endif
niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts,
(char *)(host->h_name),
service);
return;
}
/* We couldn't find the host, but it's OK, we can use the IP */
else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
{
char ipbuf[IPBUFSIZ];
if (niquery->family == AF_INET)
ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf,
IPBUFSIZ);
else
{
ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf,
IPBUFSIZ);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
sizeof(ipbuf));
#endif
}
/* They want a service too */
if (niquery->flags & ARES_NI_LOOKUPSERVICE)
{
if (niquery->family == AF_INET)
service = lookup_service(niquery->addr.addr4.sin_port,
niquery->flags, srvbuf, sizeof(srvbuf));
else
service = lookup_service(niquery->addr.addr6.sin6_port,
niquery->flags, srvbuf, sizeof(srvbuf));
}
niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf,
service);
return;
}
niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL);
free(niquery);
}
static char *lookup_service(unsigned short port, int flags,
char *buf, size_t buflen)
{
const char *proto;
struct servent *sep;
#ifdef HAVE_GETSERVBYPORT_R
struct servent se;
#endif
char tmpbuf[4096];
if (port)
{
if (flags & ARES_NI_NUMERICSERV)
sep = NULL;
else
{
if (flags & ARES_NI_UDP)
proto = "udp";
else if (flags & ARES_NI_SCTP)
proto = "sctp";
else if (flags & ARES_NI_DCCP)
proto = "dccp";
else
proto = "tcp";
#ifdef HAVE_GETSERVBYPORT_R
sep = &se;
memset(tmpbuf, 0, sizeof(tmpbuf));
#if GETSERVBYPORT_R_ARGS == 6
if (getservbyport_r(port, proto, &se, (void *)tmpbuf,
sizeof(tmpbuf), &sep) != 0)
sep = NULL;
#elif GETSERVBYPORT_R_ARGS == 5
sep = getservbyport_r(port, proto, &se, (void *)tmpbuf,
sizeof(tmpbuf));
#elif GETSERVBYPORT_R_ARGS == 4
if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
sep = NULL;
#else
/* Lets just hope the OS uses TLS! */
sep = getservbyport(port, proto);
#endif
#else
/* Lets just hope the OS uses TLS! */
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
sep = getservbyport(port, (char*)proto);
#else
sep = getservbyport(port, proto);
#endif
#endif
}
if (sep && sep->s_name)
/* get service name */
strcpy(tmpbuf, sep->s_name);
else
/* get port as a string */
sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
if (strlen(tmpbuf) < buflen)
/* return it if buffer big enough */
strcpy(buf, tmpbuf);
else
/* avoid reusing previous one */
buf[0] = '\0';
return buf;
}
buf[0] = '\0';
return NULL;
}
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
char *buf, size_t buflen)
{
#ifdef HAVE_IF_INDEXTONAME
int is_ll, is_mcll;
#endif
char fmt_u[] = "%u";
char fmt_lu[] = "%lu";
char tmpbuf[IF_NAMESIZE + 2];
size_t bufl;
char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?
fmt_lu:fmt_u;
tmpbuf[0] = '%';
#ifdef HAVE_IF_INDEXTONAME
is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
if ((flags & ARES_NI_NUMERICSCOPE) ||
(!is_ll && !is_mcll))
{
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
}
else
{
if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
}
#else
sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
(void) flags;
#endif
tmpbuf[IF_NAMESIZE + 1] = '\0';
bufl = strlen(buf);
if(bufl + strlen(tmpbuf) < buflen)
/* only append the scopeid string if it fits in the target buffer */
strcpy(&buf[bufl], tmpbuf);
}
#endif
/* Determines if s1 ends with the string in s2 (case-insensitive) */
static char *ares_striendstr(const char *s1, const char *s2)
{
const char *c1, *c2, *c1_begin;
int lo1, lo2;
size_t s1_len = strlen(s1), s2_len = strlen(s2);
/* If the substr is longer than the full str, it can't match */
if (s2_len > s1_len)
return NULL;
/* Jump to the end of s1 minus the length of s2 */
c1_begin = s1+s1_len-s2_len;
c1 = (const char *)c1_begin;
c2 = s2;
while (c2 < s2+s2_len)
{
lo1 = tolower(*c1);
lo2 = tolower(*c2);
if (lo1 != lo2)
return NULL;
else
{
c1++;
c2++;
}
}
if (c2 == c1 && c2 == NULL)
return (char *)c1_begin;
return NULL;
}

122
deps/c-ares/ares_getopt.c vendored Normal file
View File

@@ -0,0 +1,122 @@
/*
* Original file name getopt.c Initial import into the c-ares source tree
* on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with
* the modified BSD license, BSD license without the advertising clause.
*
*/
/*
* getopt.c --
*
* Standard UNIX getopt function. Code is from BSD.
*
* Copyright (c) 1987-2001 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* A. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* B. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* C. Neither the names of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* #if !defined(lint)
* static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
* #endif
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ares_getopt.h"
int opterr = 1, /* if error message should be printed */
optind = 1; /* index into parent argv vector */
int optopt = 0; /* character checked for validity */
static int optreset; /* reset getopt */
char *optarg; /* argument associated with option */
#define BADCH (int)'?'
#define BADARG (int)':'
#define EMSG (char *)""
/*
* ares_getopt --
* Parse argc/argv argument vector.
*/
int
ares_getopt(int nargc, char * const nargv[], const char *ostr)
{
static char *place = EMSG; /* option letter processing */
char *oli; /* option letter list index */
if (optreset || !*place) { /* update scanning pointer */
optreset = 0;
if (optind >= nargc || *(place = nargv[optind]) != '-') {
place = EMSG;
return (EOF);
}
if (place[1] && *++place == '-') { /* found "--" */
++optind;
place = EMSG;
return (EOF);
}
} /* option letter okay? */
if ((optopt = (int)*place++) == (int)':' ||
(oli = strchr(ostr, optopt)) == NULL) {
/*
* if the user didn't specify '-' as an option,
* assume it means EOF.
*/
if (optopt == (int)'-')
return (EOF);
if (!*place)
++optind;
if (opterr && *ostr != ':')
(void)fprintf(stderr,
"%s: illegal option -- %c\n", __FILE__, optopt);
return (BADCH);
}
if (*++oli != ':') { /* don't need argument */
optarg = NULL;
if (!*place)
++optind;
}
else { /* need an argument */
if (*place) /* no white space */
optarg = place;
else if (nargc <= ++optind) { /* no arg */
place = EMSG;
if (*ostr == ':')
return (BADARG);
if (opterr)
(void)fprintf(stderr,
"%s: option requires an argument -- %c\n",
__FILE__, optopt);
return (BADCH);
}
else /* white space */
optarg = nargv[optind];
place = EMSG;
++optind;
}
return (optopt); /* dump back option letter */
}

53
deps/c-ares/ares_getopt.h vendored Normal file
View File

@@ -0,0 +1,53 @@
#ifndef ARES_GETOPT_H
#define ARES_GETOPT_H
/*
* Copyright (c) 1987-2001 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* A. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* B. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* C. Neither the names of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
#undef optarg
#undef optind
#undef opterr
#undef optopt
#undef optreset
#define optarg ares_optarg
#define optind ares_optind
#define opterr ares_opterr
#define optopt ares_optopt
#define optreset ares_optreset
extern char *optarg;
extern int optind;
extern int opterr;
extern int optopt;
#endif /* ARES_GETOPT_H */

72
deps/c-ares/ares_getsock.c vendored Normal file
View File

@@ -0,0 +1,72 @@
/* Copyright (C) 2005 - 2010, Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include "ares.h"
#include "ares_private.h"
int ares_getsock(ares_channel channel,
ares_socket_t *socks,
int numsocks) /* size of the 'socks' array */
{
struct server_state *server;
int i;
int sockindex=0;
int bitmap = 0;
unsigned int setbits = 0xffffffff;
/* Are there any active queries? */
int active_queries = !ares__is_list_empty(&(channel->all_queries));
for (i = 0;
(i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
i++)
{
server = &channel->servers[i];
/* We only need to register interest in UDP sockets if we have
* outstanding queries.
*/
if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
{
if(sockindex >= numsocks)
break;
socks[sockindex] = server->udp_socket;
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
sockindex++;
}
/* We always register for TCP events, because we want to know
* when the other side closes the connection, so we don't waste
* time trying to use a broken connection.
*/
if (server->tcp_socket != ARES_SOCKET_BAD)
{
if(sockindex >= numsocks)
break;
socks[sockindex] = server->tcp_socket;
bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
if (server->qhead && active_queries)
/* then the tcp socket is also writable! */
bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
sockindex++;
}
}
return bitmap;
}

1636
deps/c-ares/ares_init.c vendored Normal file

File diff suppressed because it is too large Load Diff

74
deps/c-ares/ares_ipv6.h vendored Normal file
View File

@@ -0,0 +1,74 @@
/* Copyright (C) 2005 by Dominick Meglio
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifndef ARES_IPV6_H
#define ARES_IPV6_H
#ifndef HAVE_PF_INET6
#define PF_INET6 AF_INET6
#endif
#ifndef HAVE_STRUCT_SOCKADDR_IN6
struct sockaddr_in6
{
unsigned short sin6_family;
unsigned short sin6_port;
unsigned long sin6_flowinfo;
struct ares_in6_addr sin6_addr;
unsigned int sin6_scope_id;
};
#endif
#ifndef HAVE_STRUCT_ADDRINFO
struct addrinfo
{
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
char *ai_canonname;
struct sockaddr *ai_addr;
struct addrinfo *ai_next;
};
#endif
#ifndef NS_IN6ADDRSZ
#if SIZEOF_STRUCT_IN6_ADDR == 0
/* We cannot have it set to zero, so we pick a fixed value here */
#define NS_IN6ADDRSZ 16
#else
#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR
#endif
#endif
#ifndef NS_INADDRSZ
#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR
#endif
#ifndef NS_INT16SZ
#define NS_INT16SZ 2
#endif
#ifndef IF_NAMESIZE
#ifdef IFNAMSIZ
#define IF_NAMESIZE IFNAMSIZ
#else
#define IF_NAMESIZE 256
#endif
#endif
#endif /* ARES_IPV6_H */

132
deps/c-ares/ares_library_init.c vendored Normal file
View File

@@ -0,0 +1,132 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2004-2009 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_library_init.h"
#include "ares_private.h"
/* library-private global and unique instance vars */
#ifdef USE_WINSOCK
fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL;
fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL;
#endif
/* library-private global vars with source visibility restricted to this file */
static unsigned int ares_initialized;
static int ares_init_flags;
#ifdef USE_WINSOCK
static HMODULE hnd_iphlpapi;
static HMODULE hnd_advapi32;
#endif
static int ares_win32_init(void)
{
#ifdef USE_WINSOCK
hnd_iphlpapi = 0;
hnd_iphlpapi = LoadLibrary("iphlpapi.dll");
if (!hnd_iphlpapi)
return ARES_ELOADIPHLPAPI;
ares_fpGetNetworkParams = (fpGetNetworkParams_t)
GetProcAddress(hnd_iphlpapi, "GetNetworkParams");
if (!ares_fpGetNetworkParams)
{
FreeLibrary(hnd_iphlpapi);
return ARES_EADDRGETNETWORKPARAMS;
}
/*
* When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036,
* also known as RtlGenRandom, which is the case for Windows versions prior
* to WinXP then c-ares uses portable rand() function. Then don't error here.
*/
hnd_advapi32 = 0;
hnd_advapi32 = LoadLibrary("advapi32.dll");
if (hnd_advapi32)
{
ares_fpSystemFunction036 = (fpSystemFunction036_t)
GetProcAddress(hnd_advapi32, "SystemFunction036");
}
#endif
return ARES_SUCCESS;
}
static void ares_win32_cleanup(void)
{
#ifdef USE_WINSOCK
if (hnd_advapi32)
FreeLibrary(hnd_advapi32);
if (hnd_iphlpapi)
FreeLibrary(hnd_iphlpapi);
#endif
}
int ares_library_init(int flags)
{
int res;
if (ares_initialized)
return ARES_SUCCESS;
ares_initialized++;
if (flags & ARES_LIB_INIT_WIN32)
{
res = ares_win32_init();
if (res != ARES_SUCCESS)
return res;
}
ares_init_flags = flags;
return ARES_SUCCESS;
}
void ares_library_cleanup(void)
{
if (!ares_initialized)
return;
ares_initialized--;
if (ares_init_flags & ARES_LIB_INIT_WIN32)
ares_win32_cleanup();
ares_init_flags = ARES_LIB_INIT_NONE;
}
int ares_library_initialized(void)
{
#ifdef USE_WINSOCK
if (!ares_initialized)
return ARES_ENOTINITIALIZED;
#endif
return ARES_SUCCESS;
}

39
deps/c-ares/ares_library_init.h vendored Normal file
View File

@@ -0,0 +1,39 @@
#ifndef HEADER_CARES_LIBRARY_INIT_H
#define HEADER_CARES_LIBRARY_INIT_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2004-2009 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef USE_WINSOCK
#include <iphlpapi.h>
typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
/* Forward-declaration of variables defined in ares_library_init.c */
/* that are global and unique instances for whole c-ares library. */
extern fpGetNetworkParams_t ares_fpGetNetworkParams;
extern fpSystemFunction036_t ares_fpSystemFunction036;
#endif /* USE_WINSOCK */
#endif /* HEADER_CARES_LIBRARY_INIT_H */

86
deps/c-ares/ares_llist.c vendored Normal file
View File

@@ -0,0 +1,86 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_private.h"
/* Routines for managing doubly-linked circular linked lists with a
* dummy head.
*/
/* Initialize a new head node */
void ares__init_list_head(struct list_node* head) {
head->prev = head;
head->next = head;
head->data = NULL;
}
/* Initialize a list node */
void ares__init_list_node(struct list_node* node, void* d) {
node->prev = NULL;
node->next = NULL;
node->data = d;
}
/* Returns true iff the given list is empty */
int ares__is_list_empty(struct list_node* head) {
return ((head->next == head) && (head->prev == head));
}
/* Inserts new_node before old_node */
void ares__insert_in_list(struct list_node* new_node,
struct list_node* old_node) {
new_node->next = old_node;
new_node->prev = old_node->prev;
old_node->prev->next = new_node;
old_node->prev = new_node;
}
/* Removes the node from the list it's in, if any */
void ares__remove_from_list(struct list_node* node) {
if (node->next != NULL) {
node->prev->next = node->next;
node->next->prev = node->prev;
node->prev = NULL;
node->next = NULL;
}
}
/* Swap the contents of two lists */
void ares__swap_lists(struct list_node* head_a,
struct list_node* head_b) {
int is_a_empty = ares__is_list_empty(head_a);
int is_b_empty = ares__is_list_empty(head_b);
struct list_node old_a = *head_a;
struct list_node old_b = *head_b;
if (is_a_empty) {
ares__init_list_head(head_b);
} else {
*head_b = old_a;
old_a.next->prev = head_b;
old_a.prev->next = head_b;
}
if (is_b_empty) {
ares__init_list_head(head_a);
} else {
*head_a = old_b;
old_b.next->prev = head_a;
old_b.prev->next = head_a;
}
}

42
deps/c-ares/ares_llist.h vendored Normal file
View File

@@ -0,0 +1,42 @@
#ifndef __ARES_LLIST_H
#define __ARES_LLIST_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* Node definition for circular, doubly-linked list */
struct list_node {
struct list_node *prev;
struct list_node *next;
void* data;
};
void ares__init_list_head(struct list_node* head);
void ares__init_list_node(struct list_node* node, void* d);
int ares__is_list_empty(struct list_node* head);
void ares__insert_in_list(struct list_node* new_node,
struct list_node* old_node);
void ares__remove_from_list(struct list_node* node);
void ares__swap_lists(struct list_node* head_a,
struct list_node* head_b);
#endif /* __ARES_LLIST_H */

195
deps/c-ares/ares_mkquery.c vendored Normal file
View File

@@ -0,0 +1,195 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
/* Header format, from RFC 1035:
* 1 1 1 1 1 1
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | ID |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | QDCOUNT |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | ANCOUNT |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | NSCOUNT |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | ARCOUNT |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
*
* AA, TC, RA, and RCODE are only set in responses. Brief description
* of the remaining fields:
* ID Identifier to match responses with queries
* QR Query (0) or response (1)
* Opcode For our purposes, always QUERY
* RD Recursion desired
* Z Reserved (zero)
* QDCOUNT Number of queries
* ANCOUNT Number of answers
* NSCOUNT Number of name server records
* ARCOUNT Number of additional records
*
* Question format, from RFC 1035:
* 1 1 1 1 1 1
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | |
* / QNAME /
* / /
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | QTYPE |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
* | QCLASS |
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
*
* The query name is encoded as a series of labels, each represented
* as a one-byte length (maximum 63) followed by the text of the
* label. The list is terminated by a label of length zero (which can
* be thought of as the root domain).
*/
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
int rd, unsigned char **buf, int *buflen)
{
int len;
unsigned char *q;
const char *p;
/* Set our results early, in case we bail out early with an error. */
*buflen = 0;
*buf = NULL;
/* Compute the length of the encoded name so we can check buflen.
* Start counting at 1 for the zero-length label at the end. */
len = 1;
for (p = name; *p; p++)
{
if (*p == '\\' && *(p + 1) != 0)
p++;
len++;
}
/* If there are n periods in the name, there are n + 1 labels, and
* thus n + 1 length fields, unless the name is empty or ends with a
* period. So add 1 unless name is empty or ends with a period.
*/
if (*name && *(p - 1) != '.')
len++;
/* Immediately reject names that are longer than the maximum of 255
* bytes that's specified in RFC 1035 ("To simplify implementations,
* the total length of a domain name (i.e., label octets and label
* length octets) is restricted to 255 octets or less."). We aren't
* doing this just to be a stickler about RFCs. For names that are
* too long, 'dnscache' closes its TCP connection to us immediately
* (when using TCP) and ignores the request when using UDP, and
* BIND's named returns ServFail (TCP or UDP). Sending a request
* that we know will cause 'dnscache' to close the TCP connection is
* painful, since that makes any other outstanding requests on that
* connection fail. And sending a UDP request that we know
* 'dnscache' will ignore is bad because resources will be tied up
* until we time-out the request.
*/
if (len > MAXCDNAME)
return ARES_EBADNAME;
*buflen = len + HFIXEDSZ + QFIXEDSZ;
*buf = malloc(*buflen);
if (!*buf)
return ARES_ENOMEM;
/* Set up the header. */
q = *buf;
memset(q, 0, HFIXEDSZ);
DNS_HEADER_SET_QID(q, id);
DNS_HEADER_SET_OPCODE(q, QUERY);
if (rd) {
DNS_HEADER_SET_RD(q, 1);
}
else {
DNS_HEADER_SET_RD(q, 0);
}
DNS_HEADER_SET_QDCOUNT(q, 1);
/* A name of "." is a screw case for the loop below, so adjust it. */
if (strcmp(name, ".") == 0)
name++;
/* Start writing out the name after the header. */
q += HFIXEDSZ;
while (*name)
{
if (*name == '.')
return ARES_EBADNAME;
/* Count the number of bytes in this label. */
len = 0;
for (p = name; *p && *p != '.'; p++)
{
if (*p == '\\' && *(p + 1) != 0)
p++;
len++;
}
if (len > MAXLABEL)
return ARES_EBADNAME;
/* Encode the length and copy the data. */
*q++ = (unsigned char)len;
for (p = name; *p && *p != '.'; p++)
{
if (*p == '\\' && *(p + 1) != 0)
p++;
*q++ = *p;
}
/* Go to the next label and repeat, unless we hit the end. */
if (!*p)
break;
name = p + 1;
}
/* Add the zero-length label at the end. */
*q++ = 0;
/* Finish off the question with the type and class. */
DNS_QUESTION_SET_TYPE(q, type);
DNS_QUESTION_SET_CLASS(q, dnsclass);
return ARES_SUCCESS;
}

52
deps/c-ares/ares_nowarn.c vendored Normal file
View File

@@ -0,0 +1,52 @@
/* Copyright (C) 2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares_nowarn.h"
#if (SIZEOF_INT == 2)
# define CARES_MASK_SINT 0x7FFF
# define CARES_MASK_UINT 0xFFFF
#elif (SIZEOF_INT == 4)
# define CARES_MASK_SINT 0x7FFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFF
#elif (SIZEOF_INT == 8)
# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF
#elif (SIZEOF_INT == 16)
# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
#endif
/*
** size_t to signed int
*/
int aresx_uztosi(size_t uznum)
{
#ifdef __INTEL_COMPILER
# pragma warning(push)
# pragma warning(disable:810) /* conversion may lose significant bits */
#endif
return (int)(uznum & (size_t) CARES_MASK_SINT);
#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
}

22
deps/c-ares/ares_nowarn.h vendored Normal file
View File

@@ -0,0 +1,22 @@
#ifndef HEADER_CARES_NOWARN_H
#define HEADER_CARES_NOWARN_H
/* Copyright (C) 2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
int aresx_uztosi(size_t uznum);
#endif /* HEADER_CARES_NOWARN_H */

127
deps/c-ares/ares_options.c vendored Normal file
View File

@@ -0,0 +1,127 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2008-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_data.h"
#include "ares_private.h"
int ares_get_servers(ares_channel channel,
struct ares_addr_node **servers)
{
struct ares_addr_node *srvr_head = NULL;
struct ares_addr_node *srvr_last = NULL;
struct ares_addr_node *srvr_curr;
int status = ARES_SUCCESS;
int i;
if (!channel)
return ARES_ENODATA;
for (i = 0; i < channel->nservers; i++)
{
/* Allocate storage for this server node appending it to the list */
srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE);
if (!srvr_curr)
{
status = ARES_ENOMEM;
break;
}
if (srvr_last)
{
srvr_last->next = srvr_curr;
}
else
{
srvr_head = srvr_curr;
}
srvr_last = srvr_curr;
/* Fill this server node data */
srvr_curr->family = channel->servers[i].addr.family;
if (srvr_curr->family == AF_INET)
memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
sizeof(srvr_curr->addrV4));
else
memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
sizeof(srvr_curr->addrV6));
}
if (status != ARES_SUCCESS)
{
if (srvr_head)
{
ares_free_data(srvr_head);
srvr_head = NULL;
}
}
*servers = srvr_head;
return status;
}
int ares_set_servers(ares_channel channel,
struct ares_addr_node *servers)
{
struct ares_addr_node *srvr;
int num_srvrs = 0;
int i;
if (ares_library_initialized() != ARES_SUCCESS)
return ARES_ENOTINITIALIZED;
if (!channel)
return ARES_ENODATA;
ares__destroy_servers_state(channel);
for (srvr = servers; srvr; srvr = srvr->next)
{
num_srvrs++;
}
if (num_srvrs > 0)
{
/* Allocate storage for servers state */
channel->servers = malloc(num_srvrs * sizeof(struct server_state));
if (!channel->servers)
{
return ARES_ENOMEM;
}
channel->nservers = num_srvrs;
/* Fill servers state address data */
for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next)
{
channel->servers[i].addr.family = srvr->family;
if (srvr->family == AF_INET)
memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
sizeof(srvr->addrV4));
else
memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
sizeof(srvr->addrV6));
}
/* Initialize servers state remaining data */
ares__init_servers_state(channel);
}
return ARES_SUCCESS;
}

256
deps/c-ares/ares_parse_a_reply.c vendored Normal file
View File

@@ -0,0 +1,256 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
int ares_parse_a_reply(const unsigned char *abuf, int alen,
struct hostent **host,
struct ares_addrttl *addrttls, int *naddrttls)
{
unsigned int qdcount, ancount;
int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs;
int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */
int naliases;
long len;
const unsigned char *aptr;
char *hostname, *rr_name, *rr_data, **aliases;
struct in_addr *addrs;
struct hostent *hostent;
const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0;
/* Set *host to NULL for all failure cases. */
if (host)
*host = NULL;
/* Same with *naddrttls. */
if (naddrttls)
*naddrttls = 0;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT(abuf);
ancount = DNS_HEADER_ANCOUNT(abuf);
if (qdcount != 1)
return ARES_EBADRESP;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free(hostname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
if (host)
{
/* Allocate addresses and aliases; ancount gives an upper bound for
both. */
addrs = malloc(ancount * sizeof(struct in_addr));
if (!addrs)
{
free(hostname);
return ARES_ENOMEM;
}
aliases = malloc((ancount + 1) * sizeof(char *));
if (!aliases)
{
free(hostname);
free(addrs);
return ARES_ENOMEM;
}
}
else
{
addrs = NULL;
aliases = NULL;
}
naddrs = 0;
naliases = 0;
/* Examine each answer resource record (RR) in turn. */
for (i = 0; i < (int)ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
break;
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE(aptr);
rr_class = DNS_RR_CLASS(aptr);
rr_len = DNS_RR_LEN(aptr);
rr_ttl = DNS_RR_TTL(aptr);
aptr += RRFIXEDSZ;
if (rr_class == C_IN && rr_type == T_A
&& rr_len == sizeof(struct in_addr)
&& strcasecmp(rr_name, hostname) == 0)
{
if (addrs)
{
if (aptr + sizeof(struct in_addr) > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr));
}
if (naddrs < max_addr_ttls)
{
struct ares_addrttl * const at = &addrttls[naddrs];
if (aptr + sizeof(struct in_addr) > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
memcpy(&at->ipaddr, aptr, sizeof(struct in_addr));
at->ttl = rr_ttl;
}
naddrs++;
status = ARES_SUCCESS;
}
if (rr_class == C_IN && rr_type == T_CNAME)
{
/* Record the RR name as an alias. */
if (aliases)
aliases[naliases] = rr_name;
else
free(rr_name);
naliases++;
/* Decode the RR data and replace the hostname with it. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
break;
free(hostname);
hostname = rr_data;
/* Take the min of the TTLs we see in the CNAME chain. */
if (cname_ttl > rr_ttl)
cname_ttl = rr_ttl;
}
else
free(rr_name);
aptr += rr_len;
if (aptr > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
}
if (status == ARES_SUCCESS && naddrs == 0)
status = ARES_ENODATA;
if (status == ARES_SUCCESS)
{
/* We got our answer. */
if (naddrttls)
{
const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls;
for (i = 0; i < n; i++)
{
/* Ensure that each A TTL is no larger than the CNAME TTL. */
if (addrttls[i].ttl > cname_ttl)
addrttls[i].ttl = cname_ttl;
}
*naddrttls = n;
}
if (aliases)
aliases[naliases] = NULL;
if (host)
{
/* Allocate memory to build the host entry. */
hostent = malloc(sizeof(struct hostent));
if (hostent)
{
hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
if (hostent->h_addr_list)
{
/* Fill in the hostent and return successfully. */
hostent->h_name = hostname;
hostent->h_aliases = aliases;
hostent->h_addrtype = AF_INET;
hostent->h_length = sizeof(struct in_addr);
for (i = 0; i < naddrs; i++)
hostent->h_addr_list[i] = (char *) &addrs[i];
hostent->h_addr_list[naddrs] = NULL;
*host = hostent;
return ARES_SUCCESS;
}
free(hostent);
}
status = ARES_ENOMEM;
}
}
if (aliases)
{
for (i = 0; i < naliases; i++)
free(aliases[i]);
free(aliases);
}
free(addrs);
free(hostname);
return status;
}

256
deps/c-ares/ares_parse_aaaa_reply.c vendored Normal file
View File

@@ -0,0 +1,256 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright 2005 Dominick Meglio
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#include "ares.h"
#include "ares_dns.h"
#include "inet_net_pton.h"
#include "ares_private.h"
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
struct hostent **host, struct ares_addr6ttl *addrttls,
int *naddrttls)
{
unsigned int qdcount, ancount;
int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs;
int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */
int naliases;
long len;
const unsigned char *aptr;
char *hostname, *rr_name, *rr_data, **aliases;
struct ares_in6_addr *addrs;
struct hostent *hostent;
const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0;
/* Set *host to NULL for all failure cases. */
if (host)
*host = NULL;
/* Same with *naddrttls. */
if (naddrttls)
*naddrttls = 0;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT(abuf);
ancount = DNS_HEADER_ANCOUNT(abuf);
if (qdcount != 1)
return ARES_EBADRESP;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free(hostname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Allocate addresses and aliases; ancount gives an upper bound for both. */
if (host)
{
addrs = malloc(ancount * sizeof(struct ares_in6_addr));
if (!addrs)
{
free(hostname);
return ARES_ENOMEM;
}
aliases = malloc((ancount + 1) * sizeof(char *));
if (!aliases)
{
free(hostname);
free(addrs);
return ARES_ENOMEM;
}
}
else
{
addrs = NULL;
aliases = NULL;
}
naddrs = 0;
naliases = 0;
/* Examine each answer resource record (RR) in turn. */
for (i = 0; i < (int)ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
break;
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE(aptr);
rr_class = DNS_RR_CLASS(aptr);
rr_len = DNS_RR_LEN(aptr);
rr_ttl = DNS_RR_TTL(aptr);
aptr += RRFIXEDSZ;
if (rr_class == C_IN && rr_type == T_AAAA
&& rr_len == sizeof(struct ares_in6_addr)
&& strcasecmp(rr_name, hostname) == 0)
{
if (addrs)
{
if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
memcpy(&addrs[naddrs], aptr, sizeof(struct ares_in6_addr));
}
if (naddrs < max_addr_ttls)
{
struct ares_addr6ttl * const at = &addrttls[naddrs];
if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
memcpy(&at->ip6addr, aptr, sizeof(struct ares_in6_addr));
at->ttl = rr_ttl;
}
naddrs++;
status = ARES_SUCCESS;
}
if (rr_class == C_IN && rr_type == T_CNAME)
{
/* Record the RR name as an alias. */
if (aliases)
aliases[naliases] = rr_name;
else
free(rr_name);
naliases++;
/* Decode the RR data and replace the hostname with it. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
break;
free(hostname);
hostname = rr_data;
/* Take the min of the TTLs we see in the CNAME chain. */
if (cname_ttl > rr_ttl)
cname_ttl = rr_ttl;
}
else
free(rr_name);
aptr += rr_len;
if (aptr > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
}
if (status == ARES_SUCCESS && naddrs == 0)
status = ARES_ENODATA;
if (status == ARES_SUCCESS)
{
/* We got our answer. */
if (naddrttls)
{
const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls;
for (i = 0; i < n; i++)
{
/* Ensure that each A TTL is no larger than the CNAME TTL. */
if (addrttls[i].ttl > cname_ttl)
addrttls[i].ttl = cname_ttl;
}
*naddrttls = n;
}
if (aliases)
aliases[naliases] = NULL;
if (host)
{
/* Allocate memory to build the host entry. */
hostent = malloc(sizeof(struct hostent));
if (hostent)
{
hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *));
if (hostent->h_addr_list)
{
/* Fill in the hostent and return successfully. */
hostent->h_name = hostname;
hostent->h_aliases = aliases;
hostent->h_addrtype = AF_INET6;
hostent->h_length = sizeof(struct ares_in6_addr);
for (i = 0; i < naddrs; i++)
hostent->h_addr_list[i] = (char *) &addrs[i];
hostent->h_addr_list[naddrs] = NULL;
*host = hostent;
return ARES_SUCCESS;
}
free(hostent);
}
status = ARES_ENOMEM;
}
}
if (aliases)
{
for (i = 0; i < naliases; i++)
free(aliases[i]);
free(aliases);
}
free(addrs);
free(hostname);
return status;
}

170
deps/c-ares/ares_parse_mx_reply.c vendored Normal file
View File

@@ -0,0 +1,170 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2010 Jeremy Lal <kapouer@melix.org>
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
int
ares_parse_mx_reply (const unsigned char *abuf, int alen,
struct ares_mx_reply **mx_out)
{
unsigned int qdcount, ancount, i;
const unsigned char *aptr, *vptr;
int status, rr_type, rr_class, rr_len;
long len;
char *hostname = NULL, *rr_name = NULL;
struct ares_mx_reply *mx_head = NULL;
struct ares_mx_reply *mx_last = NULL;
struct ares_mx_reply *mx_curr;
/* Set *mx_out to NULL for all failure cases. */
*mx_out = NULL;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT (abuf);
ancount = DNS_HEADER_ANCOUNT (abuf);
if (qdcount != 1)
return ARES_EBADRESP;
if (ancount == 0)
return ARES_ENODATA;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free (hostname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Examine each answer resource record (RR) in turn. */
for (i = 0; i < ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
{
break;
}
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE (aptr);
rr_class = DNS_RR_CLASS (aptr);
rr_len = DNS_RR_LEN (aptr);
aptr += RRFIXEDSZ;
/* Check if we are really looking at a MX record */
if (rr_class == C_IN && rr_type == T_MX)
{
/* parse the MX record itself */
if (rr_len < 2)
{
status = ARES_EBADRESP;
break;
}
/* Allocate storage for this MX answer appending it to the list */
mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY);
if (!mx_curr)
{
status = ARES_ENOMEM;
break;
}
if (mx_last)
{
mx_last->next = mx_curr;
}
else
{
mx_head = mx_curr;
}
mx_last = mx_curr;
vptr = aptr;
mx_curr->priority = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len);
if (status != ARES_SUCCESS)
break;
}
/* Don't lose memory in the next iteration */
free (rr_name);
rr_name = NULL;
/* Move on to the next record */
aptr += rr_len;
}
if (hostname)
free (hostname);
if (rr_name)
free (rr_name);
/* clean up on error */
if (status != ARES_SUCCESS)
{
if (mx_head)
ares_free_data (mx_head);
return status;
}
/* everything looks fine, return the data */
*mx_out = mx_head;
return ARES_SUCCESS;
}

182
deps/c-ares/ares_parse_ns_reply.c vendored Normal file
View File

@@ -0,0 +1,182 @@
/* $Id */
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* ares_parse_ns_reply created by Vlad Dinulescu <vlad.dinulescu@avira.com>
* on behalf of AVIRA Gmbh - http://www.avira.com
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
int ares_parse_ns_reply( const unsigned char* abuf, int alen,
struct hostent** host )
{
unsigned int qdcount, ancount;
int status, i, rr_type, rr_class, rr_len;
int nameservers_num;
long len;
const unsigned char *aptr;
char* hostname, *rr_name, *rr_data, **nameservers;
struct hostent *hostent;
/* Set *host to NULL for all failure cases. */
*host = NULL;
/* Give up if abuf doesn't have room for a header. */
if ( alen < HFIXEDSZ )
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT( abuf );
ancount = DNS_HEADER_ANCOUNT( abuf );
if ( qdcount != 1 )
return ARES_EBADRESP;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len);
if ( status != ARES_SUCCESS )
return status;
if ( aptr + len + QFIXEDSZ > abuf + alen )
{
free( hostname );
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Allocate nameservers array; ancount gives an upper bound */
nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) );
if ( !nameservers )
{
free( hostname );
return ARES_ENOMEM;
}
nameservers_num = 0;
/* Examine each answer resource record (RR) in turn. */
for ( i = 0; i < ( int ) ancount; i++ )
{
/* Decode the RR up to the data field. */
status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len );
if ( status != ARES_SUCCESS )
break;
aptr += len;
if ( aptr + RRFIXEDSZ > abuf + alen )
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE( aptr );
rr_class = DNS_RR_CLASS( aptr );
rr_len = DNS_RR_LEN( aptr );
aptr += RRFIXEDSZ;
if ( rr_class == C_IN && rr_type == T_NS )
{
/* Decode the RR data and add it to the nameservers list */
status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data,
&len);
if ( status != ARES_SUCCESS )
{
break;
}
nameservers[nameservers_num] = malloc(strlen(rr_data)+1);
if (nameservers[nameservers_num]==NULL)
{
free(rr_name);
free(rr_data);
status=ARES_ENOMEM;
break;
}
strcpy(nameservers[nameservers_num],rr_data);
free(rr_data);
nameservers_num++;
}
free( rr_name );
aptr += rr_len;
if ( aptr > abuf + alen )
{
status = ARES_EBADRESP;
break;
}
}
if ( status == ARES_SUCCESS && nameservers_num == 0 )
{
status = ARES_ENODATA;
}
if ( status == ARES_SUCCESS )
{
/* We got our answer. Allocate memory to build the host entry. */
nameservers[nameservers_num] = NULL;
hostent = malloc( sizeof( struct hostent ) );
if ( hostent )
{
hostent->h_addr_list = malloc( 1 * sizeof( char * ) );
if ( hostent->h_addr_list )
{
/* Fill in the hostent and return successfully. */
hostent->h_name = hostname;
hostent->h_aliases = nameservers;
hostent->h_addrtype = AF_INET;
hostent->h_length = sizeof( struct in_addr );
hostent->h_addr_list[0] = NULL;
*host = hostent;
return ARES_SUCCESS;
}
free( hostent );
}
status = ARES_ENOMEM;
}
for ( i = 0; i < nameservers_num; i++ )
free( nameservers[i] );
free( nameservers );
free( hostname );
return status;
}

208
deps/c-ares/ares_parse_ptr_reply.c vendored Normal file
View File

@@ -0,0 +1,208 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
int addrlen, int family, struct hostent **host)
{
unsigned int qdcount, ancount;
int status, i, rr_type, rr_class, rr_len;
long len;
const unsigned char *aptr;
char *ptrname, *hostname, *rr_name, *rr_data;
struct hostent *hostent;
int aliascnt = 0;
int alias_alloc = 8;
char ** aliases;
/* Set *host to NULL for all failure cases. */
*host = NULL;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT(abuf);
ancount = DNS_HEADER_ANCOUNT(abuf);
if (qdcount != 1)
return ARES_EBADRESP;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free(ptrname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Examine each answer resource record (RR) in turn. */
hostname = NULL;
aliases = malloc(alias_alloc * sizeof(char *));
if (!aliases)
{
free(ptrname);
return ARES_ENOMEM;
}
for (i = 0; i < (int)ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
break;
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE(aptr);
rr_class = DNS_RR_CLASS(aptr);
rr_len = DNS_RR_LEN(aptr);
aptr += RRFIXEDSZ;
if (rr_class == C_IN && rr_type == T_PTR
&& strcasecmp(rr_name, ptrname) == 0)
{
/* Decode the RR data and set hostname to it. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
break;
if (hostname)
free(hostname);
hostname = rr_data;
aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char *));
if (!aliases[aliascnt])
{
status = ARES_ENOMEM;
break;
}
strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1);
aliascnt++;
if (aliascnt >= alias_alloc) {
char **ptr;
alias_alloc *= 2;
ptr = realloc(aliases, alias_alloc * sizeof(char *));
if(!ptr) {
status = ARES_ENOMEM;
break;
}
aliases = ptr;
}
}
if (rr_class == C_IN && rr_type == T_CNAME)
{
/* Decode the RR data and replace ptrname with it. */
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
break;
free(ptrname);
ptrname = rr_data;
}
free(rr_name);
aptr += rr_len;
if (aptr > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
}
if (status == ARES_SUCCESS && !hostname)
status = ARES_ENODATA;
if (status == ARES_SUCCESS)
{
/* We got our answer. Allocate memory to build the host entry. */
hostent = malloc(sizeof(struct hostent));
if (hostent)
{
hostent->h_addr_list = malloc(2 * sizeof(char *));
if (hostent->h_addr_list)
{
hostent->h_addr_list[0] = malloc(addrlen);
if (hostent->h_addr_list[0])
{
hostent->h_aliases = malloc((aliascnt+1) * sizeof (char *));
if (hostent->h_aliases)
{
/* Fill in the hostent and return successfully. */
hostent->h_name = hostname;
for (i=0 ; i<aliascnt ; i++)
hostent->h_aliases[i] = aliases[i];
hostent->h_aliases[aliascnt] = NULL;
hostent->h_addrtype = family;
hostent->h_length = addrlen;
memcpy(hostent->h_addr_list[0], addr, addrlen);
hostent->h_addr_list[1] = NULL;
*host = hostent;
free(aliases);
free(ptrname);
return ARES_SUCCESS;
}
free(hostent->h_addr_list[0]);
}
free(hostent->h_addr_list);
}
free(hostent);
}
status = ARES_ENOMEM;
}
for (i=0 ; i<aliascnt ; i++)
if (aliases[i])
free(aliases[i]);
free(aliases);
if (hostname)
free(hostname);
free(ptrname);
return status;
}

179
deps/c-ares/ares_parse_srv_reply.c vendored Normal file
View File

@@ -0,0 +1,179 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
/* AIX portability check */
#ifndef T_SRV
# define T_SRV 33 /* server selection */
#endif
int
ares_parse_srv_reply (const unsigned char *abuf, int alen,
struct ares_srv_reply **srv_out)
{
unsigned int qdcount, ancount, i;
const unsigned char *aptr, *vptr;
int status, rr_type, rr_class, rr_len;
long len;
char *hostname = NULL, *rr_name = NULL;
struct ares_srv_reply *srv_head = NULL;
struct ares_srv_reply *srv_last = NULL;
struct ares_srv_reply *srv_curr;
/* Set *srv_out to NULL for all failure cases. */
*srv_out = NULL;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT (abuf);
ancount = DNS_HEADER_ANCOUNT (abuf);
if (qdcount != 1)
return ARES_EBADRESP;
if (ancount == 0)
return ARES_ENODATA;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free (hostname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Examine each answer resource record (RR) in turn. */
for (i = 0; i < ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
{
break;
}
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE (aptr);
rr_class = DNS_RR_CLASS (aptr);
rr_len = DNS_RR_LEN (aptr);
aptr += RRFIXEDSZ;
/* Check if we are really looking at a SRV record */
if (rr_class == C_IN && rr_type == T_SRV)
{
/* parse the SRV record itself */
if (rr_len < 6)
{
status = ARES_EBADRESP;
break;
}
/* Allocate storage for this SRV answer appending it to the list */
srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY);
if (!srv_curr)
{
status = ARES_ENOMEM;
break;
}
if (srv_last)
{
srv_last->next = srv_curr;
}
else
{
srv_head = srv_curr;
}
srv_last = srv_curr;
vptr = aptr;
srv_curr->priority = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
srv_curr->weight = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
srv_curr->port = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len);
if (status != ARES_SUCCESS)
break;
}
/* Don't lose memory in the next iteration */
free (rr_name);
rr_name = NULL;
/* Move on to the next record */
aptr += rr_len;
}
if (hostname)
free (hostname);
if (rr_name)
free (rr_name);
/* clean up on error */
if (status != ARES_SUCCESS)
{
if (srv_head)
ares_free_data (srv_head);
return status;
}
/* everything looks fine, return the data */
*srv_out = srv_head;
return ARES_SUCCESS;
}

201
deps/c-ares/ares_parse_txt_reply.c vendored Normal file
View File

@@ -0,0 +1,201 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <stdlib.h>
#include <string.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
int
ares_parse_txt_reply (const unsigned char *abuf, int alen,
struct ares_txt_reply **txt_out)
{
size_t substr_len, str_len;
unsigned int qdcount, ancount, i;
const unsigned char *aptr;
const unsigned char *strptr;
int status, rr_type, rr_class, rr_len;
long len;
char *hostname = NULL, *rr_name = NULL;
struct ares_txt_reply *txt_head = NULL;
struct ares_txt_reply *txt_last = NULL;
struct ares_txt_reply *txt_curr;
/* Set *txt_out to NULL for all failure cases. */
*txt_out = NULL;
/* Give up if abuf doesn't have room for a header. */
if (alen < HFIXEDSZ)
return ARES_EBADRESP;
/* Fetch the question and answer count from the header. */
qdcount = DNS_HEADER_QDCOUNT (abuf);
ancount = DNS_HEADER_ANCOUNT (abuf);
if (qdcount != 1)
return ARES_EBADRESP;
if (ancount == 0)
return ARES_ENODATA;
/* Expand the name from the question, and skip past the question. */
aptr = abuf + HFIXEDSZ;
status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
if (status != ARES_SUCCESS)
return status;
if (aptr + len + QFIXEDSZ > abuf + alen)
{
free (hostname);
return ARES_EBADRESP;
}
aptr += len + QFIXEDSZ;
/* Examine each answer resource record (RR) in turn. */
for (i = 0; i < ancount; i++)
{
/* Decode the RR up to the data field. */
status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
if (status != ARES_SUCCESS)
{
break;
}
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
status = ARES_EBADRESP;
break;
}
rr_type = DNS_RR_TYPE (aptr);
rr_class = DNS_RR_CLASS (aptr);
rr_len = DNS_RR_LEN (aptr);
aptr += RRFIXEDSZ;
/* Check if we are really looking at a TXT record */
if (rr_class == C_IN && rr_type == T_TXT)
{
/* Allocate storage for this TXT answer appending it to the list */
txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY);
if (!txt_curr)
{
status = ARES_ENOMEM;
break;
}
if (txt_last)
{
txt_last->next = txt_curr;
}
else
{
txt_head = txt_curr;
}
txt_last = txt_curr;
/*
* There may be multiple substrings in a single TXT record. Each
* substring may be up to 255 characters in length, with a
* "length byte" indicating the size of the substring payload.
* RDATA contains both the length-bytes and payloads of all
* substrings contained therein.
*/
/* Compute total length to allow a single memory allocation */
strptr = aptr;
while (strptr < (aptr + rr_len))
{
substr_len = (unsigned char)*strptr;
txt_curr->length += substr_len;
strptr += substr_len + 1;
}
/* Including null byte */
txt_curr->txt = malloc (txt_curr->length + 1);
if (txt_curr->txt == NULL)
{
status = ARES_ENOMEM;
break;
}
/* Step through the list of substrings, concatenating them */
str_len = 0;
strptr = aptr;
while (strptr < (aptr + rr_len))
{
substr_len = (unsigned char)*strptr;
strptr++;
memcpy ((char *) txt_curr->txt + str_len, strptr, substr_len);
str_len += substr_len;
strptr += substr_len;
}
/* Make sure we NULL-terminate */
*((char *) txt_curr->txt + txt_curr->length) = '\0';
}
/* Don't lose memory in the next iteration */
free (rr_name);
rr_name = NULL;
/* Move on to the next record */
aptr += rr_len;
}
if (hostname)
free (hostname);
if (rr_name)
free (rr_name);
/* clean up on error */
if (status != ARES_SUCCESS)
{
if (txt_head)
ares_free_data (txt_head);
return status;
}
/* everything looks fine, return the data */
*txt_out = txt_head;
return ARES_SUCCESS;
}

344
deps/c-ares/ares_private.h vendored Normal file
View File

@@ -0,0 +1,344 @@
#ifndef __ARES_PRIVATE_H
#define __ARES_PRIVATE_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2004-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#define WIN32
#endif
#include <stdio.h>
#include <sys/types.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef WATT32
#include <tcp.h>
#include <sys/ioctl.h>
#define writev(s,v,c) writev_s(s,v,c)
#define HAVE_WRITEV 1
#endif
#ifdef NETWARE
#include <time.h>
#endif
#define DEFAULT_TIMEOUT 5000 /* milliseconds */
#define DEFAULT_TRIES 4
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif
#if defined(WIN32) && !defined(WATT32)
#define IS_NT() ((int)GetVersion() > 0)
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
#define NAMESERVER "NameServer"
#define DHCPNAMESERVER "DhcpNameServer"
#define DATABASEPATH "DatabasePath"
#define WIN_PATH_HOSTS "\\hosts"
#elif defined(WATT32)
#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
#elif defined(NETWARE)
#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
#define PATH_HOSTS "sys:/etc/hosts"
#elif defined(__riscos__)
#define PATH_HOSTS "InetDBase:Hosts"
#else
#define PATH_RESOLV_CONF "/etc/resolv.conf"
#ifdef ETC_INET
#define PATH_HOSTS "/etc/inet/hosts"
#else
#define PATH_HOSTS "/etc/hosts"
#endif
#endif
#define ARES_ID_KEY_LEN 31
#include "ares_ipv6.h"
#include "ares_llist.h"
#ifndef HAVE_STRDUP
# include "ares_strdup.h"
# define strdup(ptr) ares_strdup(ptr)
#endif
#ifndef HAVE_STRCASECMP
# include "ares_strcasecmp.h"
# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
#endif
#ifndef HAVE_STRNCASECMP
# include "ares_strcasecmp.h"
# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
#endif
#ifndef HAVE_WRITEV
# include "ares_writev.h"
# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
#endif
struct ares_addr {
int family;
union {
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
};
#define addrV4 addr.addr4
#define addrV6 addr.addr6
struct query;
struct send_request {
/* Remaining data to send */
const unsigned char *data;
size_t len;
/* The query for which we're sending this data */
struct query* owner_query;
/* The buffer we're using, if we have our own copy of the packet */
unsigned char *data_storage;
/* Next request in queue */
struct send_request *next;
};
struct server_state {
struct ares_addr addr;
ares_socket_t udp_socket;
ares_socket_t tcp_socket;
/* Mini-buffer for reading the length word */
unsigned char tcp_lenbuf[2];
int tcp_lenbuf_pos;
int tcp_length;
/* Buffer for reading actual TCP data */
unsigned char *tcp_buffer;
int tcp_buffer_pos;
/* TCP output queue */
struct send_request *qhead;
struct send_request *qtail;
/* Which incarnation of this connection is this? We don't want to
* retransmit requests into the very same socket, but if the server
* closes on us and we re-open the connection, then we do want to
* re-send. */
int tcp_connection_generation;
/* Circular, doubly-linked list of outstanding queries to this server */
struct list_node queries_to_server;
/* Link back to owning channel */
ares_channel channel;
/* Is this server broken? We mark connections as broken when a
* request that is queued for sending times out.
*/
int is_broken;
};
/* State to represent a DNS query */
struct query {
/* Query ID from qbuf, for faster lookup, and current timeout */
unsigned short qid;
struct timeval timeout;
/*
* Links for the doubly-linked lists in which we insert a query.
* These circular, doubly-linked lists that are hash-bucketed based
* the attributes we care about, help making most important
* operations O(1).
*/
struct list_node queries_by_qid; /* hopefully in same cache line as qid */
struct list_node queries_by_timeout;
struct list_node queries_to_server;
struct list_node all_queries;
/* Query buf with length at beginning, for TCP transmission */
unsigned char *tcpbuf;
int tcplen;
/* Arguments passed to ares_send() (qbuf points into tcpbuf) */
const unsigned char *qbuf;
int qlen;
ares_callback callback;
void *arg;
/* Query status */
int try; /* Number of times we tried this query already. */
int server; /* Server this query has last been sent to. */
struct query_server_info *server_info; /* per-server state */
int using_tcp;
int error_status;
int timeouts; /* number of timeouts we saw for this request */
};
/* Per-server state for a query */
struct query_server_info {
int skip_server; /* should we skip server, due to errors, etc? */
int tcp_connection_generation; /* into which TCP connection did we send? */
};
/* An IP address pattern; matches an IP address X if X & mask == addr */
#define PATTERN_MASK 0x1
#define PATTERN_CIDR 0x2
struct apattern {
union
{
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
union
{
struct in_addr addr4;
struct ares_in6_addr addr6;
unsigned short bits;
} mask;
int family;
unsigned short type;
};
typedef struct rc4_key
{
unsigned char state[256];
unsigned char x;
unsigned char y;
} rc4_key;
struct ares_channeldata {
/* Configuration data */
int flags;
int timeout; /* in milliseconds */
int tries;
int ndots;
int rotate; /* if true, all servers specified are used */
int udp_port;
int tcp_port;
int socket_send_buffer_size;
int socket_receive_buffer_size;
char **domains;
int ndomains;
struct apattern *sortlist;
int nsort;
char *lookups;
int optmask; /* the option bitfield passed in at init time */
/* Server addresses and communications state */
struct server_state *servers;
int nservers;
/* ID to use for next query */
unsigned short next_id;
/* key to use when generating new ids */
rc4_key id_key;
/* Generation number to use for the next TCP socket open/close */
int tcp_connection_generation;
/* The time at which we last called process_timeouts(). Uses integer seconds
just to draw the line somewhere. */
time_t last_timeout_processed;
/* Last server we sent a query to. */
int last_server;
/* Circular, doubly-linked list of queries, bucketed various ways.... */
/* All active queries in a single list: */
struct list_node all_queries;
/* Queries bucketed by qid, for quickly dispatching DNS responses: */
#define ARES_QID_TABLE_SIZE 2048
struct list_node queries_by_qid[ARES_QID_TABLE_SIZE];
/* Queries bucketed by timeout, for quickly handling timeouts: */
#define ARES_TIMEOUT_TABLE_SIZE 1024
struct list_node queries_by_timeout[ARES_TIMEOUT_TABLE_SIZE];
ares_sock_state_cb sock_state_cb;
void *sock_state_cb_data;
ares_sock_create_callback sock_create_cb;
void *sock_create_cb_data;
};
/* return true if now is exactly check time or later */
int ares__timedout(struct timeval *now,
struct timeval *check);
/* add the specific number of milliseconds to the time in the first argument */
int ares__timeadd(struct timeval *now,
int millisecs);
/* return time offset between now and (future) check, in milliseconds */
long ares__timeoffset(struct timeval *now,
struct timeval *check);
/* returns ARES_SUCCESS if library has been initialized */
int ares_library_initialized(void);
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
void ares__send_query(ares_channel channel, struct query *query,
struct timeval *now);
void ares__close_sockets(ares_channel channel, struct server_state *server);
int ares__get_hostent(FILE *fp, int family, struct hostent **host);
int ares__read_line(FILE *fp, char **buf, size_t *bufsize);
void ares__free_query(struct query *query);
unsigned short ares__generate_new_id(rc4_key* key);
struct timeval ares__tvnow(void);
int ares__expand_name_for_response(const unsigned char *encoded,
const unsigned char *abuf, int alen,
char **s, long *enclen);
void ares__init_servers_state(ares_channel channel);
void ares__destroy_servers_state(ares_channel channel);
#if 0 /* Not used */
long ares__tvdiff(struct timeval t1, struct timeval t2);
#endif
#define ARES_SWAP_BYTE(a,b) \
{ unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; }
#define SOCK_STATE_CALLBACK(c, s, r, w) \
do { \
if ((c)->sock_state_cb) \
(c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \
} while (0)
#ifdef CURLDEBUG
/* This is low-level hard-hacking memory leak tracking and similar. Using the
libcurl lowlevel code from within library is ugly and only works when
c-ares is built and linked with a similarly curldebug-enabled libcurl,
but we do this anyway for convenience. */
#include "../lib/memdebug.h"
#endif
#endif /* __ARES_PRIVATE_H */

1261
deps/c-ares/ares_process.c vendored Normal file

File diff suppressed because it is too large Load Diff

183
deps/c-ares/ares_query.c vendored Normal file
View File

@@ -0,0 +1,183 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
struct qquery {
ares_callback callback;
void *arg;
};
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen);
void ares__rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
{
unsigned char x;
unsigned char y;
unsigned char* state;
unsigned char xorIndex;
short counter;
x = key->x;
y = key->y;
state = &key->state[0];
for(counter = 0; counter < buffer_len; counter ++)
{
x = (unsigned char)((x + 1) % 256);
y = (unsigned char)((state[x] + y) % 256);
ARES_SWAP_BYTE(&state[x], &state[y]);
xorIndex = (unsigned char)((state[x] + state[y]) % 256);
buffer_ptr[counter] = (unsigned char)(buffer_ptr[counter]^state[xorIndex]);
}
key->x = x;
key->y = y;
}
static struct query* find_query_by_id(ares_channel channel, unsigned short id)
{
unsigned short qid;
struct list_node* list_head;
struct list_node* list_node;
DNS_HEADER_SET_QID(((unsigned char*)&qid), id);
/* Find the query corresponding to this packet. */
list_head = &(channel->queries_by_qid[qid % ARES_QID_TABLE_SIZE]);
for (list_node = list_head->next; list_node != list_head;
list_node = list_node->next)
{
struct query *q = list_node->data;
if (q->qid == qid)
return q;
}
return NULL;
}
/* a unique query id is generated using an rc4 key. Since the id may already
be used by a running query (as infrequent as it may be), a lookup is
performed per id generation. In practice this search should happen only
once per newly generated id
*/
static unsigned short generate_unique_id(ares_channel channel)
{
unsigned short id;
do {
id = ares__generate_new_id(&channel->id_key);
} while (find_query_by_id(channel, id));
return (unsigned short)id;
}
void ares_query(ares_channel channel, const char *name, int dnsclass,
int type, ares_callback callback, void *arg)
{
struct qquery *qquery;
unsigned char *qbuf;
int qlen, rd, status;
/* Compose the query. */
rd = !(channel->flags & ARES_FLAG_NORECURSE);
status = ares_mkquery(name, dnsclass, type, channel->next_id, rd, &qbuf,
&qlen);
if (status != ARES_SUCCESS)
{
if (qbuf != NULL) free(qbuf);
callback(arg, status, 0, NULL, 0);
return;
}
channel->next_id = generate_unique_id(channel);
/* Allocate and fill in the query structure. */
qquery = malloc(sizeof(struct qquery));
if (!qquery)
{
ares_free_string(qbuf);
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
qquery->callback = callback;
qquery->arg = arg;
/* Send it off. qcallback will be called when we get an answer. */
ares_send(channel, qbuf, qlen, qcallback, qquery);
ares_free_string(qbuf);
}
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen)
{
struct qquery *qquery = (struct qquery *) arg;
unsigned int ancount;
int rcode;
if (status != ARES_SUCCESS)
qquery->callback(qquery->arg, status, timeouts, abuf, alen);
else
{
/* Pull the response code and answer count from the packet. */
rcode = DNS_HEADER_RCODE(abuf);
ancount = DNS_HEADER_ANCOUNT(abuf);
/* Convert errors. */
switch (rcode)
{
case NOERROR:
status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
break;
case FORMERR:
status = ARES_EFORMERR;
break;
case SERVFAIL:
status = ARES_ESERVFAIL;
break;
case NXDOMAIN:
status = ARES_ENOTFOUND;
break;
case NOTIMP:
status = ARES_ENOTIMP;
break;
case REFUSED:
status = ARES_EREFUSED;
break;
}
qquery->callback(qquery->arg, status, timeouts, abuf, alen);
}
free(qquery);
}

144
deps/c-ares/ares_rules.h vendored Normal file
View File

@@ -0,0 +1,144 @@
#ifndef __CARES_RULES_H
#define __CARES_RULES_H
/* Copyright (C) 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* COMPILE TIME SANITY CHECKS */
/* ================================================================ */
/*
* NOTE 1:
* -------
*
* All checks done in this file are intentionally placed in a public
* header file which is pulled by ares.h when an application is
* being built using an already built c-ares library. Additionally
* this file is also included and used when building the library.
*
* If compilation fails on this file it is certainly sure that the
* problem is elsewhere. It could be a problem in the ares_build.h
* header file, or simply that you are using different compilation
* settings than those used to build the library.
*
* Nothing in this file is intended to be modified or adjusted by the
* c-ares library user nor by the c-ares library builder.
*
* Do not deactivate any check, these are done to make sure that the
* library is properly built and used.
*
* You can find further help on the c-ares development mailing list:
* http://cool.haxx.se/mailman/listinfo/c-ares/
*
* NOTE 2
* ------
*
* Some of the following compile time checks are based on the fact
* that the dimension of a constant array can not be a negative one.
* In this way if the compile time verification fails, the compilation
* will fail issuing an error. The error description wording is compiler
* dependent but it will be quite similar to one of the following:
*
* "negative subscript or subscript is too large"
* "array must have at least one element"
* "-1 is an illegal array size"
* "size of array is negative"
*
* If you are building an application which tries to use an already
* built c-ares library and you are getting this kind of errors on
* this file, it is a clear indication that there is a mismatch between
* how the library was built and how you are trying to use it for your
* application. Your already compiled or binary library provider is the
* only one who can give you the details you need to properly use it.
*/
/*
* Verify that some macros are actually defined.
*/
#ifndef CARES_SIZEOF_LONG
# error "CARES_SIZEOF_LONG definition is missing!"
Error Compilation_aborted_CARES_SIZEOF_LONG_is_missing
#endif
#ifndef CARES_TYPEOF_ARES_SOCKLEN_T
# error "CARES_TYPEOF_ARES_SOCKLEN_T definition is missing!"
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_is_missing
#endif
#ifndef CARES_SIZEOF_ARES_SOCKLEN_T
# error "CARES_SIZEOF_ARES_SOCKLEN_T definition is missing!"
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_is_missing
#endif
/*
* Macros private to this header file.
*/
#define CareschkszEQ(t, s) sizeof(t) == s ? 1 : -1
#define CareschkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
/*
* Verify that the size previously defined and expected for long
* is the same as the one reported by sizeof() at compile time.
*/
typedef char
__cares_rule_01__
[CareschkszEQ(long, CARES_SIZEOF_LONG)];
/*
* Verify that the size previously defined and expected for
* ares_socklen_t is actually the the same as the one reported
* by sizeof() at compile time.
*/
typedef char
__cares_rule_02__
[CareschkszEQ(ares_socklen_t, CARES_SIZEOF_ARES_SOCKLEN_T)];
/*
* Verify at compile time that the size of ares_socklen_t as reported
* by sizeof() is greater or equal than the one reported for int for
* the current compilation.
*/
typedef char
__cares_rule_03__
[CareschkszGE(ares_socklen_t, int)];
/* ================================================================ */
/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
/* ================================================================ */
/*
* Get rid of macros private to this header file.
*/
#undef CareschkszEQ
#undef CareschkszGE
/*
* Get rid of macros not intended to exist beyond this point.
*/
#undef CARES_PULL_WS2TCPIP_H
#undef CARES_PULL_SYS_TYPES_H
#undef CARES_PULL_SYS_SOCKET_H
#undef CARES_TYPEOF_ARES_SOCKLEN_T
#endif /* __CARES_RULES_H */

322
deps/c-ares/ares_search.c vendored Normal file
View File

@@ -0,0 +1,322 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include "ares.h"
#include "ares_private.h"
struct search_query {
/* Arguments passed to ares_search */
ares_channel channel;
char *name; /* copied into an allocated buffer */
int dnsclass;
int type;
ares_callback callback;
void *arg;
int status_as_is; /* error status from trying as-is */
int next_domain; /* next search domain to try */
int trying_as_is; /* current query is for name as-is */
int timeouts; /* number of timeouts we saw for this request */
int ever_got_nodata; /* did we ever get ARES_ENODATA along the way? */
};
static void search_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen);
static void end_squery(struct search_query *squery, int status,
unsigned char *abuf, int alen);
static int cat_domain(const char *name, const char *domain, char **s);
static int single_domain(ares_channel channel, const char *name, char **s);
void ares_search(ares_channel channel, const char *name, int dnsclass,
int type, ares_callback callback, void *arg)
{
struct search_query *squery;
char *s;
const char *p;
int status, ndots;
/* If name only yields one domain to search, then we don't have
* to keep extra state, so just do an ares_query().
*/
status = single_domain(channel, name, &s);
if (status != ARES_SUCCESS)
{
callback(arg, status, 0, NULL, 0);
return;
}
if (s)
{
ares_query(channel, s, dnsclass, type, callback, arg);
free(s);
return;
}
/* Allocate a search_query structure to hold the state necessary for
* doing multiple lookups.
*/
squery = malloc(sizeof(struct search_query));
if (!squery)
{
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
squery->channel = channel;
squery->name = strdup(name);
if (!squery->name)
{
free(squery);
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
squery->dnsclass = dnsclass;
squery->type = type;
squery->status_as_is = -1;
squery->callback = callback;
squery->arg = arg;
squery->timeouts = 0;
squery->ever_got_nodata = 0;
/* Count the number of dots in name. */
ndots = 0;
for (p = name; *p; p++)
{
if (*p == '.')
ndots++;
}
/* If ndots is at least the channel ndots threshold (usually 1),
* then we try the name as-is first. Otherwise, we try the name
* as-is last.
*/
if (ndots >= channel->ndots)
{
/* Try the name as-is first. */
squery->next_domain = 0;
squery->trying_as_is = 1;
ares_query(channel, name, dnsclass, type, search_callback, squery);
}
else
{
/* Try the name as-is last; start with the first search domain. */
squery->next_domain = 1;
squery->trying_as_is = 0;
status = cat_domain(name, channel->domains[0], &s);
if (status == ARES_SUCCESS)
{
ares_query(channel, s, dnsclass, type, search_callback, squery);
free(s);
}
else
{
/* failed, free the malloc()ed memory */
free(squery->name);
free(squery);
callback(arg, status, 0, NULL, 0);
}
}
}
static void search_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
struct search_query *squery = (struct search_query *) arg;
ares_channel channel = squery->channel;
char *s;
squery->timeouts += timeouts;
/* Stop searching unless we got a non-fatal error. */
if (status != ARES_ENODATA && status != ARES_ESERVFAIL
&& status != ARES_ENOTFOUND)
end_squery(squery, status, abuf, alen);
else
{
/* Save the status if we were trying as-is. */
if (squery->trying_as_is)
squery->status_as_is = status;
/*
* If we ever get ARES_ENODATA along the way, record that; if the search
* should run to the very end and we got at least one ARES_ENODATA,
* then callers like ares_gethostbyname() may want to try a T_A search
* even if the last domain we queried for T_AAAA resource records
* returned ARES_ENOTFOUND.
*/
if (status == ARES_ENODATA)
squery->ever_got_nodata = 1;
if (squery->next_domain < channel->ndomains)
{
/* Try the next domain. */
status = cat_domain(squery->name,
channel->domains[squery->next_domain], &s);
if (status != ARES_SUCCESS)
end_squery(squery, status, NULL, 0);
else
{
squery->trying_as_is = 0;
squery->next_domain++;
ares_query(channel, s, squery->dnsclass, squery->type,
search_callback, squery);
free(s);
}
}
else if (squery->status_as_is == -1)
{
/* Try the name as-is at the end. */
squery->trying_as_is = 1;
ares_query(channel, squery->name, squery->dnsclass, squery->type,
search_callback, squery);
}
else {
if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) {
end_squery(squery, ARES_ENODATA, NULL, 0);
}
else
end_squery(squery, squery->status_as_is, NULL, 0);
}
}
}
static void end_squery(struct search_query *squery, int status,
unsigned char *abuf, int alen)
{
squery->callback(squery->arg, status, squery->timeouts, abuf, alen);
free(squery->name);
free(squery);
}
/* Concatenate two domains. */
static int cat_domain(const char *name, const char *domain, char **s)
{
size_t nlen = strlen(name);
size_t dlen = strlen(domain);
*s = malloc(nlen + 1 + dlen + 1);
if (!*s)
return ARES_ENOMEM;
memcpy(*s, name, nlen);
(*s)[nlen] = '.';
memcpy(*s + nlen + 1, domain, dlen);
(*s)[nlen + 1 + dlen] = 0;
return ARES_SUCCESS;
}
/* Determine if this name only yields one query. If it does, set *s to
* the string we should query, in an allocated buffer. If not, set *s
* to NULL.
*/
static int single_domain(ares_channel channel, const char *name, char **s)
{
size_t len = strlen(name);
const char *hostaliases;
FILE *fp;
char *line = NULL;
int status;
size_t linesize;
const char *p, *q;
int error;
/* If the name contains a trailing dot, then the single query is the name
* sans the trailing dot.
*/
if (name[len - 1] == '.')
{
*s = strdup(name);
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
}
if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.'))
{
/* The name might be a host alias. */
hostaliases = getenv("HOSTALIASES");
if (hostaliases)
{
fp = fopen(hostaliases, "r");
if (fp)
{
while ((status = ares__read_line(fp, &line, &linesize))
== ARES_SUCCESS)
{
if (strncasecmp(line, name, len) != 0 ||
!ISSPACE(line[len]))
continue;
p = line + len;
while (ISSPACE(*p))
p++;
if (*p)
{
q = p + 1;
while (*q && !ISSPACE(*q))
q++;
*s = malloc(q - p + 1);
if (*s)
{
memcpy(*s, p, q - p);
(*s)[q - p] = 0;
}
free(line);
fclose(fp);
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
}
}
free(line);
fclose(fp);
if (status != ARES_SUCCESS)
return status;
}
else
{
error = errno;
switch(error)
{
case ENOENT:
case ESRCH:
break;
default:
DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
error, strerror(error)));
DEBUGF(fprintf(stderr, "Error opening file: %s\n",
hostaliases));
*s = NULL;
return ARES_EFILE;
}
}
}
}
if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0)
{
/* No domain search to do; just try the name as-is. */
*s = strdup(name);
return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
}
*s = NULL;
return ARES_SUCCESS;
}

134
deps/c-ares/ares_send.c vendored Normal file
View File

@@ -0,0 +1,134 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_NAMESER_H
# include <arpa/nameser.h>
#else
# include "nameser.h"
#endif
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
# include <arpa/nameser_compat.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "ares.h"
#include "ares_dns.h"
#include "ares_private.h"
void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
ares_callback callback, void *arg)
{
struct query *query;
int i;
struct timeval now;
/* Verify that the query is at least long enough to hold the header. */
if (qlen < HFIXEDSZ || qlen >= (1 << 16))
{
callback(arg, ARES_EBADQUERY, 0, NULL, 0);
return;
}
/* Allocate space for query and allocated fields. */
query = malloc(sizeof(struct query));
if (!query)
{
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
query->tcpbuf = malloc(qlen + 2);
if (!query->tcpbuf)
{
free(query);
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
query->server_info = malloc(channel->nservers *
sizeof(query->server_info[0]));
if (!query->server_info)
{
free(query->tcpbuf);
free(query);
callback(arg, ARES_ENOMEM, 0, NULL, 0);
return;
}
/* Compute the query ID. Start with no timeout. */
query->qid = (unsigned short)DNS_HEADER_QID(qbuf);
query->timeout.tv_sec = 0;
query->timeout.tv_usec = 0;
/* Form the TCP query buffer by prepending qlen (as two
* network-order bytes) to qbuf.
*/
query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
memcpy(query->tcpbuf + 2, qbuf, qlen);
query->tcplen = qlen + 2;
/* Fill in query arguments. */
query->qbuf = query->tcpbuf + 2;
query->qlen = qlen;
query->callback = callback;
query->arg = arg;
/* Initialize query status. */
query->try = 0;
/* Choose the server to send the query to. If rotation is enabled, keep track
* of the next server we want to use. */
query->server = channel->last_server;
if (channel->rotate == 1)
channel->last_server = (channel->last_server + 1) % channel->nservers;
for (i = 0; i < channel->nservers; i++)
{
query->server_info[i].skip_server = 0;
query->server_info[i].tcp_connection_generation = 0;
}
query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > PACKETSZ;
query->error_status = ARES_ECONNREFUSED;
query->timeouts = 0;
/* Initialize our list nodes. */
ares__init_list_node(&(query->queries_by_qid), query);
ares__init_list_node(&(query->queries_by_timeout), query);
ares__init_list_node(&(query->queries_to_server), query);
ares__init_list_node(&(query->all_queries), query);
/* Chain the query into the list of all queries. */
ares__insert_in_list(&(query->all_queries), &(channel->all_queries));
/* Keep track of queries bucketed by qid, so we can process DNS
* responses quickly.
*/
ares__insert_in_list(
&(query->queries_by_qid),
&(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
/* Perform the first query action. */
now = ares__tvnow();
ares__send_query(channel, query, &now);
}

66
deps/c-ares/ares_strcasecmp.c vendored Normal file
View File

@@ -0,0 +1,66 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares_strcasecmp.h"
#ifndef HAVE_STRCASECMP
int ares_strcasecmp(const char *a, const char *b)
{
#if defined(HAVE_STRCMPI)
return strcmpi(a, b);
#elif defined(HAVE_STRICMP)
return stricmp(a, b);
#else
size_t i;
for (i = 0; i < (size_t)-1; i++) {
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
if (c1 != c2)
return c1-c2;
if (!c1)
break;
}
return 0;
#endif
}
#endif
#ifndef HAVE_STRNCASECMP
int ares_strncasecmp(const char *a, const char *b, size_t n)
{
#if defined(HAVE_STRNCMPI)
return strncmpi(a, b, n);
#elif defined(HAVE_STRNICMP)
return strnicmp(a, b, n);
#else
size_t i;
for (i = 0; i < n; i++) {
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
if (c1 != c2)
return c1-c2;
if (!c1)
break;
}
return 0;
#endif
}
#endif

30
deps/c-ares/ares_strcasecmp.h vendored Normal file
View File

@@ -0,0 +1,30 @@
#ifndef HEADER_CARES_STRCASECMP_H
#define HEADER_CARES_STRCASECMP_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifndef HAVE_STRCASECMP
extern int ares_strcasecmp(const char *a, const char *b);
#endif
#ifndef HAVE_STRNCASECMP
extern int ares_strncasecmp(const char *a, const char *b, size_t n);
#endif
#endif /* HEADER_CARES_STRCASECMP_H */

42
deps/c-ares/ares_strdup.c vendored Normal file
View File

@@ -0,0 +1,42 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares_strdup.h"
#ifndef HAVE_STRDUP
char *ares_strdup(const char *s1)
{
size_t sz;
char * s2;
if(s1) {
sz = strlen(s1);
if(sz < (size_t)-1) {
sz++;
if(sz < ((size_t)-1) / sizeof(char)) {
s2 = malloc(sz * sizeof(char));
if(s2) {
memcpy(s2, s1, sz * sizeof(char));
return s2;
}
}
}
}
return (char *)NULL;
}
#endif

26
deps/c-ares/ares_strdup.h vendored Normal file
View File

@@ -0,0 +1,26 @@
#ifndef HEADER_CARES_STRDUP_H
#define HEADER_CARES_STRDUP_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifndef HAVE_STRDUP
extern char *ares_strdup(const char *s1);
#endif
#endif /* HEADER_CARES_STRDUP_H */

56
deps/c-ares/ares_strerror.c vendored Normal file
View File

@@ -0,0 +1,56 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include <assert.h>
#include "ares.h"
const char *ares_strerror(int code)
{
/* Return a string literal from a table. */
const char *errtext[] = {
"Successful completion",
"DNS server returned answer with no data",
"DNS server claims query was misformatted",
"DNS server returned general failure",
"Domain name not found",
"DNS server does not implement requested operation",
"DNS server refused query",
"Misformatted DNS query",
"Misformatted domain name",
"Unsupported address family",
"Misformatted DNS reply",
"Could not contact DNS servers",
"Timeout while contacting DNS servers",
"End of file",
"Error reading file",
"Out of memory",
"Channel is being destroyed",
"Misformatted string",
"Illegal flags specified",
"Given hostname is not numeric",
"Illegal hints flags specified",
"c-ares library initialization not yet performed",
"Error loading iphlpapi.dll",
"Could not find GetNetworkParams function",
"DNS query cancelled"
};
if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)))
return errtext[code];
else
return "unknown";
}

80
deps/c-ares/ares_timeout.c vendored Normal file
View File

@@ -0,0 +1,80 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <time.h>
#include "ares.h"
#include "ares_private.h"
/* WARNING: Beware that this is linear in the number of outstanding
* requests! You are probably far better off just calling ares_process()
* once per second, rather than calling ares_timeout() to figure out
* when to next call ares_process().
*/
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
struct timeval *tvbuf)
{
struct query *query;
struct list_node* list_head;
struct list_node* list_node;
struct timeval now;
struct timeval nextstop;
long offset, min_offset;
/* No queries, no timeout (and no fetch of the current time). */
if (ares__is_list_empty(&(channel->all_queries)))
return maxtv;
/* Find the minimum timeout for the current set of queries. */
now = ares__tvnow();
min_offset = -1;
list_head = &(channel->all_queries);
for (list_node = list_head->next; list_node != list_head;
list_node = list_node->next)
{
query = list_node->data;
if (query->timeout.tv_sec == 0)
continue;
offset = ares__timeoffset(&now, &query->timeout);
if (offset < 0)
offset = 0;
if (min_offset == -1 || offset < min_offset)
min_offset = offset;
}
if(min_offset != -1) {
nextstop.tv_sec = min_offset/1000;
nextstop.tv_usec = (min_offset%1000)*1000;
}
/* If we found a minimum timeout and it's sooner than the one specified in
* maxtv (if any), return it. Otherwise go with maxtv.
*/
if (min_offset != -1 && (!maxtv || ares__timedout(maxtv, &nextstop)))
{
*tvbuf = nextstop;
return tvbuf;
}
else
return maxtv;
}

11
deps/c-ares/ares_version.c vendored Normal file
View File

@@ -0,0 +1,11 @@
#include "ares_setup.h"
#include "ares.h"
const char *ares_version(int *version)
{
if(version)
*version = ARES_VERSION;
return ARES_VERSION_STR;
}

21
deps/c-ares/ares_version.h vendored Normal file
View File

@@ -0,0 +1,21 @@
#ifndef ARES__VERSION_H
#define ARES__VERSION_H
#define ARES_VERSION_MAJOR 1
#define ARES_VERSION_MINOR 7
#define ARES_VERSION_PATCH 3
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
(ARES_VERSION_MINOR<<8)|\
(ARES_VERSION_PATCH))
#define ARES_VERSION_STR "1.7.3"
#if (ARES_VERSION >= 0x010700)
# define CARES_HAVE_ARES_LIBRARY_INIT 1
# define CARES_HAVE_ARES_LIBRARY_CLEANUP 1
#else
# undef CARES_HAVE_ARES_LIBRARY_INIT
# undef CARES_HAVE_ARES_LIBRARY_CLEANUP
#endif
#endif

79
deps/c-ares/ares_writev.c vendored Normal file
View File

@@ -0,0 +1,79 @@
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#include "ares.h"
#include "ares_private.h"
#ifndef HAVE_WRITEV
ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt)
{
char *buffer, *bp;
int i;
size_t bytes = 0;
ssize_t result;
/* Validate iovcnt */
if (iovcnt <= 0)
{
SET_ERRNO(EINVAL);
return (-1);
}
/* Validate and find the sum of the iov_len values in the iov array */
for (i = 0; i < iovcnt; i++)
{
if (iov[i].iov_len > INT_MAX - bytes)
{
SET_ERRNO(EINVAL);
return (-1);
}
bytes += iov[i].iov_len;
}
if (bytes == 0)
return (0);
/* Allocate a temporary buffer to hold the data */
buffer = malloc(bytes);
if (!buffer)
{
SET_ERRNO(ENOMEM);
return (-1);
}
/* Copy the data into buffer */
for (bp = buffer, i = 0; i < iovcnt; ++i)
{
memcpy (bp, iov[i].iov_base, iov[i].iov_len);
bp += iov[i].iov_len;
}
/* Send buffer contents */
result = swrite(s, buffer, bytes);
free(buffer);
return (result);
}
#endif

36
deps/c-ares/ares_writev.h vendored Normal file
View File

@@ -0,0 +1,36 @@
#ifndef HEADER_CARES_WRITEV_H
#define HEADER_CARES_WRITEV_H
/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#include "ares_setup.h"
#include "ares.h"
#ifndef HAVE_WRITEV
/* Structure for scatter/gather I/O. */
struct iovec
{
void *iov_base; /* Pointer to data. */
size_t iov_len; /* Length of data. */
};
extern ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt);
#endif
#endif /* HEADER_CARES_WRITEV_H */

59
deps/c-ares/bitncmp.c vendored Normal file
View File

@@ -0,0 +1,59 @@
/*
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1996,1999 by Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef HAVE_BITNCMP
#include "ares_setup.h"
#include "bitncmp.h"
/*
* int
* bitncmp(l, r, n)
* compare bit masks l and r, for n bits.
* return:
* -1, 1, or 0 in the libc tradition.
* note:
* network byte order assumed. this means 192.5.5.240/28 has
* 0x11110000 in its fourth octet.
* author:
* Paul Vixie (ISC), June 1996
*/
int
ares_bitncmp(const void *l, const void *r, int n) {
unsigned int lb, rb;
int x, b;
b = n / 8;
x = memcmp(l, r, b);
if (x || (n % 8) == 0)
return (x);
lb = ((const unsigned char *)l)[b];
rb = ((const unsigned char *)r)[b];
for (b = n % 8; b > 0; b--) {
if ((lb & 0x80) != (rb & 0x80)) {
if (lb & 0x80)
return (1);
return (-1);
}
lb <<= 1;
rb <<= 1;
}
return (0);
}
#endif

26
deps/c-ares/bitncmp.h vendored Normal file
View File

@@ -0,0 +1,26 @@
#ifndef __ARES_BITNCMP_H
#define __ARES_BITNCMP_H
/* Copyright (C) 2005 by Dominick Meglio
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
* fee is hereby granted, provided that the above copyright
* notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in
* advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
* M.I.T. makes no representations about the suitability of
* this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
#ifndef HAVE_BITNCMP
int ares_bitncmp(const void *l, const void *r, int n);
#else
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
#endif
#endif /* __ARES_BITNCMP_H */

353
deps/c-ares/config-win32.h vendored Normal file
View File

@@ -0,0 +1,353 @@
#ifndef __ARES_CONFIG_WIN32_H
#define __ARES_CONFIG_WIN32_H
/* Copyright (C) 2004 - 2008 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* ares/config-win32.h - Hand crafted config file for Windows */
/* ================================================================ */
/* ---------------------------------------------------------------- */
/* HEADER FILES */
/* ---------------------------------------------------------------- */
/* Define if you have the <getopt.h> header file. */
#if defined(__MINGW32__) || defined(__POCC__)
#define HAVE_GETOPT_H 1
#endif
/* Define if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define if you have the <process.h> header file. */
#ifndef __SALFORDC__
#define HAVE_PROCESS_H 1
#endif
/* Define if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define if you have the <sys/time.h> header file */
/* #define HAVE_SYS_TIME_H 1 */
/* Define if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define if you have the <unistd.h> header file. */
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
defined(__POCC__)
#define HAVE_UNISTD_H 1
#endif
/* Define if you have the <windows.h> header file. */
#define HAVE_WINDOWS_H 1
/* Define if you have the <winsock.h> header file. */
#define HAVE_WINSOCK_H 1
/* Define if you have the <winsock2.h> header file. */
#ifndef __SALFORDC__
#define HAVE_WINSOCK2_H 1
#endif
/* Define if you have the <ws2tcpip.h> header file. */
#ifndef __SALFORDC__
#define HAVE_WS2TCPIP_H 1
#endif
/* ---------------------------------------------------------------- */
/* OTHER HEADER INFO */
/* ---------------------------------------------------------------- */
/* Define if sig_atomic_t is an available typedef. */
#define HAVE_SIG_ATOMIC_T 1
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if you can safely include both <sys/time.h> and <time.h>. */
/* #define TIME_WITH_SYS_TIME 1 */
/* ---------------------------------------------------------------- */
/* FUNCTIONS */
/* ---------------------------------------------------------------- */
/* Define if you have the closesocket function. */
#define HAVE_CLOSESOCKET 1
/* Define if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1
/* Define if you have the ioctlsocket function. */
#define HAVE_IOCTLSOCKET 1
/* Define if you have a working ioctlsocket FIONBIO function. */
#define HAVE_IOCTLSOCKET_FIONBIO 1
/* Define if you have the strcasecmp function. */
/* #define HAVE_STRCASECMP 1 */
/* Define if you have the strdup function. */
#define HAVE_STRDUP 1
/* Define if you have the stricmp function. */
#define HAVE_STRICMP 1
/* Define if you have the strncasecmp function. */
/* #define HAVE_STRNCASECMP 1 */
/* Define if you have the strnicmp function. */
#define HAVE_STRNICMP 1
/* Define if you have the recv function. */
#define HAVE_RECV 1
/* Define to the type of arg 1 for recv. */
#define RECV_TYPE_ARG1 SOCKET
/* Define to the type of arg 2 for recv. */
#define RECV_TYPE_ARG2 char *
/* Define to the type of arg 3 for recv. */
#define RECV_TYPE_ARG3 int
/* Define to the type of arg 4 for recv. */
#define RECV_TYPE_ARG4 int
/* Define to the function return type for recv. */
#define RECV_TYPE_RETV int
/* Define if you have the recvfrom function. */
#define HAVE_RECVFROM 1
/* Define to the type of arg 1 for recvfrom. */
#define RECVFROM_TYPE_ARG1 SOCKET
/* Define to the type pointed by arg 2 for recvfrom. */
#define RECVFROM_TYPE_ARG2 char
/* Define to the type of arg 3 for recvfrom. */
#define RECVFROM_TYPE_ARG3 int
/* Define to the type of arg 4 for recvfrom. */
#define RECVFROM_TYPE_ARG4 int
/* Define to the type pointed by arg 5 for recvfrom. */
#define RECVFROM_TYPE_ARG5 struct sockaddr
/* Define to the type pointed by arg 6 for recvfrom. */
#define RECVFROM_TYPE_ARG6 int
/* Define to the function return type for recvfrom. */
#define RECVFROM_TYPE_RETV int
/* Define if you have the send function. */
#define HAVE_SEND 1
/* Define to the type of arg 1 for send. */
#define SEND_TYPE_ARG1 SOCKET
/* Define to the type qualifier of arg 2 for send. */
#define SEND_QUAL_ARG2 const
/* Define to the type of arg 2 for send. */
#define SEND_TYPE_ARG2 char *
/* Define to the type of arg 3 for send. */
#define SEND_TYPE_ARG3 int
/* Define to the type of arg 4 for send. */
#define SEND_TYPE_ARG4 int
/* Define to the function return type for send. */
#define SEND_TYPE_RETV int
/* Specifics for the Watt-32 tcp/ip stack */
#ifdef WATT32
#define SOCKET int
#define NS_INADDRSZ 4
#define HAVE_ARPA_NAMESER_H 1
#define HAVE_ARPA_INET_H 1
#define HAVE_NETDB_H 1
#define HAVE_NETINET_IN_H 1
#define HAVE_SYS_SOCKET_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_AF_INET6 1
#define HAVE_PF_INET6 1
#define HAVE_STRUCT_IN6_ADDR 1
#define HAVE_STRUCT_SOCKADDR_IN6 1
#undef HAVE_WINSOCK_H
#undef HAVE_WINSOCK2_H
#undef HAVE_WS2TCPIP_H
#endif
/* ---------------------------------------------------------------- */
/* TYPEDEF REPLACEMENTS */
/* ---------------------------------------------------------------- */
/* Define this if in_addr_t is not an available 'typedefed' type */
#define in_addr_t unsigned long
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE void
/* Define ssize_t if it is not an available 'typedefed' type */
#ifndef _SSIZE_T_DEFINED
# if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
defined(__POCC__) || \
defined(__MINGW32__)
# elif defined(_WIN64)
# define _SSIZE_T_DEFINED
# define ssize_t __int64
# else
# define _SSIZE_T_DEFINED
# define ssize_t int
# endif
#endif
/* ---------------------------------------------------------------- */
/* TYPE SIZES */
/* ---------------------------------------------------------------- */
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
/* The size of `short', as computed by sizeof. */
#define SIZEOF_SHORT 2
/* ---------------------------------------------------------------- */
/* STRUCT RELATED */
/* ---------------------------------------------------------------- */
/* Define this if you have struct addrinfo */
#define HAVE_STRUCT_ADDRINFO 1
/* Define this if you have struct sockaddr_storage */
#ifndef __SALFORDC__
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
#endif
/* Define this if you have struct timeval */
#define HAVE_STRUCT_TIMEVAL 1
/* ---------------------------------------------------------------- */
/* COMPILER SPECIFIC */
/* ---------------------------------------------------------------- */
/* Define to avoid VS2005 complaining about portable C functions */
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
#define _CRT_SECURE_NO_DEPRECATE 1
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
/* Officially, Microsoft's Windows SDK versions 6.X do not support Windows
2000 as a supported build target. VS2008 default installations provide an
embedded Windows SDK v6.0A along with the claim that Windows 2000 is a
valid build target for VS2008. Popular belief is that binaries built using
Windows SDK versions 6.X and Windows 2000 as a build target are functional */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
# define VS2008_MINIMUM_TARGET 0x0500
#endif
/* When no build target is specified VS2008 default build target is Windows
Vista, which leaves out even Winsows XP. If no build target has been given
for VS2008 we will target the minimum Officially supported build target,
which happens to be Windows XP. */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
# define VS2008_DEFAULT_TARGET 0x0501
#endif
/* VS2008 default target settings and minimum build target check */
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
# ifndef _WIN32_WINNT
# define _WIN32_WINNT VS2008_DEFAULT_TARGET
# endif
# ifndef WINVER
# define WINVER VS2008_DEFAULT_TARGET
# endif
# if (_WIN32_WINNT < VS2008_MINIMUM_TARGET) || (WINVER < VS2008_MINIMUM_TARGET)
# error VS2008 does not support Windows build targets prior to Windows 2000
# endif
#endif
/* When no build target is specified Pelles C 5.00 and later default build
target is Windows Vista. We override default target to be Windows 2000. */
#if defined(__POCC__) && (__POCC__ >= 500)
# ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0500
# endif
# ifndef WINVER
# define WINVER 0x0500
# endif
#endif
/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is
quite convoluted, compiler dependent and even build target dependent. */
#if defined(HAVE_WS2TCPIP_H)
# if defined(__POCC__)
# define HAVE_FREEADDRINFO 1
# define HAVE_GETADDRINFO 1
# define HAVE_GETNAMEINFO 1
# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
# define HAVE_FREEADDRINFO 1
# define HAVE_GETADDRINFO 1
# define HAVE_GETNAMEINFO 1
# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
# define HAVE_FREEADDRINFO 1
# define HAVE_GETADDRINFO 1
# define HAVE_GETNAMEINFO 1
# endif
#endif
#if defined(__POCC__)
# ifndef _MSC_VER
# error Microsoft extensions /Ze compiler option is required
# endif
# ifndef __POCC__OLDNAMES
# error Compatibility names /Go compiler option is required
# endif
#endif
/* ---------------------------------------------------------------- */
/* IPV6 COMPATIBILITY */
/* ---------------------------------------------------------------- */
/* Define this if you have address family AF_INET6 */
#ifdef HAVE_WINSOCK2_H
#define HAVE_AF_INET6 1
#endif
/* Define this if you have protocol family PF_INET6 */
#ifdef HAVE_WINSOCK2_H
#define HAVE_PF_INET6 1
#endif
/* Define this if you have struct in6_addr */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_STRUCT_IN6_ADDR 1
#endif
/* Define this if you have struct sockaddr_in6 */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_STRUCT_SOCKADDR_IN6 1
#endif
/* Define this if you have sockaddr_in6 with scopeid */
#ifdef HAVE_WS2TCPIP_H
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#endif
#endif /* __ARES_CONFIG_WIN32_H */

112
deps/c-ares/cygwin-x86/ares_build.h vendored Normal file
View File

@@ -0,0 +1,112 @@
/* ares_build.h. Generated from ares_build.h.in by configure. */
#ifndef __CARES_BUILD_H
#define __CARES_BUILD_H
/* $Id$ */
/* Copyright (C) 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
/* ================================================================ */
/*
* NOTE 1:
* -------
*
* Nothing in this file is intended to be modified or adjusted by the
* c-ares library user nor by the c-ares library builder.
*
* If you think that something actually needs to be changed, adjusted
* or fixed in this file, then, report it on the c-ares development
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
*
* This header file shall only export symbols which are 'cares' or 'CARES'
* prefixed, otherwise public name space would be polluted.
*
* NOTE 2:
* -------
*
* Right now you might be staring at file ares_build.h.in or ares_build.h,
* this is due to the following reason:
*
* On systems capable of running the configure script, the configure process
* will overwrite the distributed ares_build.h file with one that is suitable
* and specific to the library being configured and built, which is generated
* from the ares_build.h.in template file.
*
*/
/* ================================================================ */
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
/* ================================================================ */
#ifdef CARES_SIZEOF_LONG
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined
#endif
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined
#endif
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined
#endif
/* ================================================================ */
/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
/* ================================================================ */
/* Configure process defines this to 1 when it finds out that system */
/* header file ws2tcpip.h must be included by the external interface. */
/* #undef CARES_PULL_WS2TCPIP_H */
#ifdef CARES_PULL_WS2TCPIP_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# include <winsock2.h>
# include <ws2tcpip.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/types.h must be included by the external interface. */
#define CARES_PULL_SYS_TYPES_H 1
#ifdef CARES_PULL_SYS_TYPES_H
# include <sys/types.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/socket.h must be included by the external interface. */
#define CARES_PULL_SYS_SOCKET_H 1
#ifdef CARES_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* The size of `long', as computed by sizeof. */
#define CARES_SIZEOF_LONG 4
/* Integral data type used for ares_socklen_t. */
#define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
/* The size of `ares_socklen_t', as computed by sizeof. */
#define CARES_SIZEOF_ARES_SOCKLEN_T 4
/* Data type definition of ares_socklen_t. */
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
#endif /* __CARES_BUILD_H */

513
deps/c-ares/cygwin-x86/ares_config.h vendored Normal file
View File

@@ -0,0 +1,513 @@
/* ares_config.h. Generated from ares_config.h.in by configure. */
/* ares_config.h.in. Generated from configure.ac by autoheader. */
/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */
/* define this if ares is built for a big endian system */
/* #undef ARES_BIG_ENDIAN */
/* when building as static part of libcurl */
/* #undef BUILDING_LIBCURL */
/* when building c-ares library */
/* #undef CARES_BUILDING_LIBRARY */
/* when not building a shared library */
/* #undef CARES_STATICLIB */
/* Define to 1 to enable hiding of library internal symbols. */
#define CARES_SYMBOL_HIDING 1
/* Definition to make a library symbol externally visible. */
#define CARES_SYMBOL_SCOPE_EXTERN __attribute__ ((visibility ("default")))
/* if a /etc/inet dir is being used */
/* #undef ETC_INET */
/* Define to the type qualifier of arg 1 for getnameinfo. */
#define GETNAMEINFO_QUAL_ARG1 const
/* Define to the type of arg 1 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
/* Define to the type of arg 2 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG2 socklen_t
/* Define to the type of args 4 and 6 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG46 int
/* Define to the type of arg 7 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG7 int
/* Specifies the number of arguments to getservbyport_r */
/* #undef GETSERVBYPORT_R_ARGS */
/* Specifies the size of the buffer to pass to getservbyport_r */
/* #undef GETSERVBYPORT_R_BUFSIZE */
/* Define to 1 if you have AF_INET6. */
#define HAVE_AF_INET6 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <arpa/nameser_compat.h> header file. */
#define HAVE_ARPA_NAMESER_COMPAT_H 1
/* Define to 1 if you have the <arpa/nameser.h> header file. */
#define HAVE_ARPA_NAMESER_H 1
/* Define to 1 if you have the <assert.h> header file. */
#define HAVE_ASSERT_H 1
/* Define to 1 if you have the `bitncmp' function. */
/* #undef HAVE_BITNCMP */
/* Define to 1 if bool is an available type. */
#define HAVE_BOOL_T 1
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
/* #undef HAVE_CLOCK_GETTIME_MONOTONIC */
/* Define to 1 if you have the closesocket function. */
/* #undef HAVE_CLOSESOCKET */
/* Define to 1 if you have the CloseSocket camel case function. */
/* #undef HAVE_CLOSESOCKET_CAMEL */
/* Define to 1 if you have the connect function. */
#define HAVE_CONNECT 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the fcntl function. */
#define HAVE_FCNTL 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
#define HAVE_FCNTL_O_NONBLOCK 1
/* Define to 1 if you have the freeaddrinfo function. */
#define HAVE_FREEADDRINFO 1
/* Define to 1 if you have a working getaddrinfo function. */
#define HAVE_GETADDRINFO 1
/* Define to 1 if the getaddrinfo function is threadsafe. */
/* #undef HAVE_GETADDRINFO_THREADSAFE */
/* Define to 1 if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1
/* Define to 1 if you have the gethostbyname function. */
#define HAVE_GETHOSTBYNAME 1
/* Define to 1 if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1
/* Define to 1 if you have the getnameinfo function. */
#define HAVE_GETNAMEINFO 1
/* Define to 1 if you have the getservbyport_r function. */
/* #undef HAVE_GETSERVBYPORT_R */
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `if_indextoname' function. */
#define HAVE_IF_INDEXTONAME 1
/* Define to 1 if you have the `inet_net_pton' function. */
/* #undef HAVE_INET_NET_PTON */
/* Define to 1 if inet_net_pton supports IPv6. */
/* #undef HAVE_INET_NET_PTON_IPV6 */
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
#define HAVE_INET_NTOP 1
/* Define to 1 if you have a IPv6 capable working inet_pton function. */
#define HAVE_INET_PTON 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the ioctl function. */
#define HAVE_IOCTL 1
/* Define to 1 if you have the ioctlsocket function. */
/* #undef HAVE_IOCTLSOCKET */
/* Define to 1 if you have the IoctlSocket camel case function. */
/* #undef HAVE_IOCTLSOCKET_CAMEL */
/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
*/
/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
/* #undef HAVE_IOCTLSOCKET_FIONBIO */
/* Define to 1 if you have a working ioctl FIONBIO function. */
#define HAVE_IOCTL_FIONBIO 1
/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
#define HAVE_IOCTL_SIOCGIFADDR 1
/* Define to 1 if you have the `resolve' library (-lresolve). */
/* #undef HAVE_LIBRESOLVE */
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* if your compiler supports LL */
#define HAVE_LL 1
/* Define to 1 if the compiler supports the 'long long' data type. */
#define HAVE_LONGLONG 1
/* Define to 1 if you have the malloc.h header file. */
#define HAVE_MALLOC_H 1
/* Define to 1 if you have the memory.h header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
#define HAVE_MSG_NOSIGNAL 1
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
/* Define to 1 if you have PF_INET6. */
#define HAVE_PF_INET6 1
/* Define to 1 if you have the recv function. */
#define HAVE_RECV 1
/* Define to 1 if you have the recvfrom function. */
#define HAVE_RECVFROM 1
/* Define to 1 if you have the send function. */
#define HAVE_SEND 1
/* Define to 1 if you have the setsockopt function. */
#define HAVE_SETSOCKOPT 1
/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define to 1 if sig_atomic_t is an available typedef. */
#define HAVE_SIG_ATOMIC_T 1
/* Define to 1 if sig_atomic_t is already defined as volatile. */
/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
/* Define to 1 if you have the socket function. */
#define HAVE_SOCKET 1
/* Define to 1 if you have the <socket.h> header file. */
/* #undef HAVE_SOCKET_H */
/* Define to 1 if you have the <stdbool.h> header file. */
#define HAVE_STDBOOL_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the strcasecmp function. */
#define HAVE_STRCASECMP 1
/* Define to 1 if you have the strcmpi function. */
/* #undef HAVE_STRCMPI */
/* Define to 1 if you have the strdup function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the stricmp function. */
/* #undef HAVE_STRICMP */
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the strncasecmp function. */
#define HAVE_STRNCASECMP 1
/* Define to 1 if you have the strncmpi function. */
/* #undef HAVE_STRNCMPI */
/* Define to 1 if you have the strnicmp function. */
/* #undef HAVE_STRNICMP */
/* Define to 1 if you have the <stropts.h> header file. */
/* #undef HAVE_STROPTS_H */
/* Define to 1 if you have struct addrinfo. */
#define HAVE_STRUCT_ADDRINFO 1
/* Define to 1 if you have struct in6_addr. */
#define HAVE_STRUCT_IN6_ADDR 1
/* Define to 1 if you have struct sockaddr_in6. */
#define HAVE_STRUCT_SOCKADDR_IN6 1
/* if struct sockaddr_storage is defined */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
/* Define to 1 if you have the timeval struct. */
#define HAVE_STRUCT_TIMEVAL 1
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/uio.h> header file. */
#define HAVE_SYS_UIO_H 1
/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the windows.h header file. */
/* #undef HAVE_WINDOWS_H */
/* Define to 1 if you have the winsock2.h header file. */
/* #undef HAVE_WINSOCK2_H */
/* Define to 1 if you have the winsock.h header file. */
/* #undef HAVE_WINSOCK_H */
/* Define to 1 if you have the writev function. */
#define HAVE_WRITEV 1
/* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Define to 1 if you are building a native Windows target. */
/* #undef NATIVE_WINDOWS */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */
/* Define to 1 if you need the memory.h header file even with stdlib.h */
/* #undef NEED_MEMORY_H */
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
/* #undef NEED_THREAD_SAFE */
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */
/* cpu-machine-OS */
#define OS "i686-pc-cygwin"
/* Name of package */
#define PACKAGE "c-ares"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "c-ares mailing list => http://cool.haxx.se/mailman/listinfo/c-ares"
/* Define to the full name of this package. */
#define PACKAGE_NAME "c-ares"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "c-ares 1.7.1"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "c-ares"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.7.1"
/* a suitable file/device to read random data from */
#define RANDOM_FILE "/dev/urandom"
/* Define to the type of arg 1 for recvfrom. */
#define RECVFROM_TYPE_ARG1 int
/* Define to the type pointed by arg 2 for recvfrom. */
#define RECVFROM_TYPE_ARG2 void
/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
#define RECVFROM_TYPE_ARG2_IS_VOID 1
/* Define to the type of arg 3 for recvfrom. */
#define RECVFROM_TYPE_ARG3 size_t
/* Define to the type of arg 4 for recvfrom. */
#define RECVFROM_TYPE_ARG4 int
/* Define to the type pointed by arg 5 for recvfrom. */
#define RECVFROM_TYPE_ARG5 struct sockaddr
/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
/* #undef RECVFROM_TYPE_ARG5_IS_VOID */
/* Define to the type pointed by arg 6 for recvfrom. */
#define RECVFROM_TYPE_ARG6 socklen_t
/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
/* #undef RECVFROM_TYPE_ARG6_IS_VOID */
/* Define to the function return type for recvfrom. */
#define RECVFROM_TYPE_RETV int
/* Define to the type of arg 1 for recv. */
#define RECV_TYPE_ARG1 int
/* Define to the type of arg 2 for recv. */
#define RECV_TYPE_ARG2 void *
/* Define to the type of arg 3 for recv. */
#define RECV_TYPE_ARG3 size_t
/* Define to the type of arg 4 for recv. */
#define RECV_TYPE_ARG4 int
/* Define to the function return type for recv. */
#define RECV_TYPE_RETV int
/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void
/* Define to the type qualifier of arg 2 for send. */
#define SEND_QUAL_ARG2 const
/* Define to the type of arg 1 for send. */
#define SEND_TYPE_ARG1 int
/* Define to the type of arg 2 for send. */
#define SEND_TYPE_ARG2 void *
/* Define to the type of arg 3 for send. */
#define SEND_TYPE_ARG3 size_t
/* Define to the type of arg 4 for send. */
#define SEND_TYPE_ARG4 int
/* Define to the function return type for send. */
#define SEND_TYPE_RETV int
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 4
/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4
/* The size of `struct in6_addr', as computed by sizeof. */
#define SIZEOF_STRUCT_IN6_ADDR 16
/* The size of `struct in_addr', as computed by sizeof. */
#define SIZEOF_STRUCT_IN_ADDR 4
/* The size of `time_t', as computed by sizeof. */
#define SIZEOF_TIME_T 4
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define to disable non-blocking sockets. */
/* #undef USE_BLOCKING_SOCKETS */
/* Version number of package */
#define VERSION "1.7.1"
/* Define to avoid automatic inclusion of winsock.h */
/* #undef WIN32_LEAN_AND_MEAN */
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* # undef WORDS_BIGENDIAN */
# endif
#endif
/* Define to 1 if OS is AIX. */
#ifndef _ALL_SOURCE
/* # undef _ALL_SOURCE */
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
/* Type to use in place of in_addr_t when system does not provide it. */
/* #undef in_addr_t */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */
/* the signed version of size_t */
/* #undef ssize_t */

198
deps/c-ares/cygwin-x86/ares_setup.h vendored Normal file
View File

@@ -0,0 +1,198 @@
#ifndef HEADER_CARES_SETUP_H
#define HEADER_CARES_SETUP_H
/* $Id$ */
/* Copyright (C) 2004 - 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#define WIN32
#endif
/*
* Include configuration script results or hand-crafted
* configuration file for platforms which lack config tool.
*/
#ifdef HAVE_CONFIG_H
#include "ares_config.h"
#else
#ifdef WIN32
#include "config-win32.h"
#endif
#endif /* HAVE_CONFIG_H */
/* ================================================================ */
/* Definition of preprocessor macros/symbols which modify compiler */
/* behaviour or generated code characteristics must be done here, */
/* as appropriate, before any system header file is included. It is */
/* also possible to have them defined in the config file included */
/* before this point. As a result of all this we frown inclusion of */
/* system header files in our config files, avoid this at any cost. */
/* ================================================================ */
/*
* AIX 4.3 and newer needs _THREAD_SAFE defined to build
* proper reentrant code. Others may also need it.
*/
#ifdef NEED_THREAD_SAFE
# ifndef _THREAD_SAFE
# define _THREAD_SAFE
# endif
#endif
/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.
*/
#ifdef NEED_REENTRANT
# ifndef _REENTRANT
# define _REENTRANT
# endif
#endif
/* ================================================================ */
/* If you need to include a system header file for your platform, */
/* please, do it beyond the point further indicated in this file. */
/* ================================================================ */
/*
* c-ares external interface definitions are also used internally,
* and might also include required system header files to define them.
*/
#include <ares_build.h>
/*
* Compile time sanity checks must also be done when building the library.
*/
#include <ares_rules.h>
/* ================================================================= */
/* No system header file shall be included in this file before this */
/* point. The only allowed ones are those included from ares_build.h */
/* ================================================================= */
/*
* Include header files for windows builds before redefining anything.
* Use this preproessor block only to include or exclude windows.h,
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
* to any other further and independent block. Under Cygwin things work
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
* never be included when __CYGWIN__ is defined. configure script takes
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
*/
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
/*
* Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
* define USE_WINSOCK to 1 if we have and use WINSOCK API, else
* undefine USE_WINSOCK.
*/
#undef USE_WINSOCK
#ifdef HAVE_WINSOCK2_H
# define USE_WINSOCK 2
#else
# ifdef HAVE_WINSOCK_H
# define USE_WINSOCK 1
# endif
#endif
/*
* Work-arounds for systems without configure support
*/
#ifndef HAVE_CONFIG_H
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
#define HAVE_SYS_TIME_H
#endif
#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
#define HAVE_UNISTD_H 1
#endif
#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
#define HAVE_SYS_UIO_H
#endif
#endif /* HAVE_CONFIG_H */
#ifdef __POCC__
# include <sys/types.h>
# include <unistd.h>
# define ESRCH 3
#endif
/*
* Recent autoconf versions define these symbols in ares_config.h. We don't
* want them (since they collide with the libcurl ones when we build
* --enable-debug) so we undef them again here.
*/
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef VERSION
#undef PACKAGE
/* IPv6 compatibility */
#if !defined(HAVE_AF_INET6)
#if defined(HAVE_PF_INET6)
#define AF_INET6 PF_INET6
#else
#define AF_INET6 AF_MAX+1
#endif
#endif
/*
* Include macros and defines that should only be processed once.
*/
#ifndef __SETUP_ONCE_H
#include "setup_once.h"
#endif
#endif /* HEADER_CARES_SETUP_H */

112
deps/c-ares/darwin-x86/ares_build.h vendored Normal file
View File

@@ -0,0 +1,112 @@
/* ares_build.h. Generated from ares_build.h.in by configure. */
#ifndef __CARES_BUILD_H
#define __CARES_BUILD_H
/* $Id$ */
/* Copyright (C) 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
/* ================================================================ */
/*
* NOTE 1:
* -------
*
* Nothing in this file is intended to be modified or adjusted by the
* c-ares library user nor by the c-ares library builder.
*
* If you think that something actually needs to be changed, adjusted
* or fixed in this file, then, report it on the c-ares development
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
*
* This header file shall only export symbols which are 'cares' or 'CARES'
* prefixed, otherwise public name space would be polluted.
*
* NOTE 2:
* -------
*
* Right now you might be staring at file ares_build.h.in or ares_build.h,
* this is due to the following reason:
*
* On systems capable of running the configure script, the configure process
* will overwrite the distributed ares_build.h file with one that is suitable
* and specific to the library being configured and built, which is generated
* from the ares_build.h.in template file.
*
*/
/* ================================================================ */
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
/* ================================================================ */
#ifdef CARES_SIZEOF_LONG
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined
#endif
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined
#endif
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined
#endif
/* ================================================================ */
/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
/* ================================================================ */
/* Configure process defines this to 1 when it finds out that system */
/* header file ws2tcpip.h must be included by the external interface. */
/* #undef CARES_PULL_WS2TCPIP_H */
#ifdef CARES_PULL_WS2TCPIP_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# include <winsock2.h>
# include <ws2tcpip.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/types.h must be included by the external interface. */
#define CARES_PULL_SYS_TYPES_H 1
#ifdef CARES_PULL_SYS_TYPES_H
# include <sys/types.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/socket.h must be included by the external interface. */
#define CARES_PULL_SYS_SOCKET_H 1
#ifdef CARES_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* The size of `long', as computed by sizeof. */
#define CARES_SIZEOF_LONG 4
/* Integral data type used for ares_socklen_t. */
#define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
/* The size of `ares_socklen_t', as computed by sizeof. */
#define CARES_SIZEOF_ARES_SOCKLEN_T 4
/* Data type definition of ares_socklen_t. */
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
#endif /* __CARES_BUILD_H */

513
deps/c-ares/darwin-x86/ares_config.h vendored Normal file
View File

@@ -0,0 +1,513 @@
/* ares_config.h. Generated from ares_config.h.in by configure. */
/* ares_config.h.in. Generated from configure.ac by autoheader. */
/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */
/* define this if ares is built for a big endian system */
/* #undef ARES_BIG_ENDIAN */
/* when building as static part of libcurl */
/* #undef BUILDING_LIBCURL */
/* when building c-ares library */
/* #undef CARES_BUILDING_LIBRARY */
/* when not building a shared library */
/* #undef CARES_STATICLIB */
/* Define to 1 to enable hiding of library internal symbols. */
#define CARES_SYMBOL_HIDING 1
/* Definition to make a library symbol externally visible. */
#define CARES_SYMBOL_SCOPE_EXTERN __attribute__ ((visibility ("default")))
/* if a /etc/inet dir is being used */
/* #undef ETC_INET */
/* Define to the type qualifier of arg 1 for getnameinfo. */
#define GETNAMEINFO_QUAL_ARG1 const
/* Define to the type of arg 1 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
/* Define to the type of arg 2 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG2 socklen_t
/* Define to the type of args 4 and 6 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG46 socklen_t
/* Define to the type of arg 7 for getnameinfo. */
#define GETNAMEINFO_TYPE_ARG7 int
/* Specifies the number of arguments to getservbyport_r */
/* #undef GETSERVBYPORT_R_ARGS */
/* Specifies the size of the buffer to pass to getservbyport_r */
/* #undef GETSERVBYPORT_R_BUFSIZE */
/* Define to 1 if you have AF_INET6. */
#define HAVE_AF_INET6 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
#define HAVE_ARPA_INET_H 1
/* Define to 1 if you have the <arpa/nameser_compat.h> header file. */
#define HAVE_ARPA_NAMESER_COMPAT_H 1
/* Define to 1 if you have the <arpa/nameser.h> header file. */
#define HAVE_ARPA_NAMESER_H 1
/* Define to 1 if you have the <assert.h> header file. */
#define HAVE_ASSERT_H 1
/* Define to 1 if you have the `bitncmp' function. */
/* #undef HAVE_BITNCMP */
/* Define to 1 if bool is an available type. */
#define HAVE_BOOL_T 1
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
/* #undef HAVE_CLOCK_GETTIME_MONOTONIC */
/* Define to 1 if you have the closesocket function. */
/* #undef HAVE_CLOSESOCKET */
/* Define to 1 if you have the CloseSocket camel case function. */
/* #undef HAVE_CLOSESOCKET_CAMEL */
/* Define to 1 if you have the connect function. */
#define HAVE_CONNECT 1
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the fcntl function. */
#define HAVE_FCNTL 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
#define HAVE_FCNTL_O_NONBLOCK 1
/* Define to 1 if you have the freeaddrinfo function. */
#define HAVE_FREEADDRINFO 1
/* Define to 1 if you have a working getaddrinfo function. */
#define HAVE_GETADDRINFO 1
/* Define to 1 if the getaddrinfo function is threadsafe. */
#define HAVE_GETADDRINFO_THREADSAFE 1
/* Define to 1 if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1
/* Define to 1 if you have the gethostbyname function. */
#define HAVE_GETHOSTBYNAME 1
/* Define to 1 if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1
/* Define to 1 if you have the getnameinfo function. */
#define HAVE_GETNAMEINFO 1
/* Define to 1 if you have the getservbyport_r function. */
/* #undef HAVE_GETSERVBYPORT_R */
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `if_indextoname' function. */
#define HAVE_IF_INDEXTONAME 1
/* Define to 1 if you have the `inet_net_pton' function. */
#define HAVE_INET_NET_PTON 1
/* Define to 1 if inet_net_pton supports IPv6. */
#define HAVE_INET_NET_PTON_IPV6 1
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
#define HAVE_INET_NTOP 1
/* Define to 1 if you have a IPv6 capable working inet_pton function. */
#define HAVE_INET_PTON 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the ioctl function. */
#define HAVE_IOCTL 1
/* Define to 1 if you have the ioctlsocket function. */
/* #undef HAVE_IOCTLSOCKET */
/* Define to 1 if you have the IoctlSocket camel case function. */
/* #undef HAVE_IOCTLSOCKET_CAMEL */
/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
*/
/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
/* #undef HAVE_IOCTLSOCKET_FIONBIO */
/* Define to 1 if you have a working ioctl FIONBIO function. */
#define HAVE_IOCTL_FIONBIO 1
/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
#define HAVE_IOCTL_SIOCGIFADDR 1
/* Define to 1 if you have the `resolve' library (-lresolve). */
/* #undef HAVE_LIBRESOLVE */
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* if your compiler supports LL */
#define HAVE_LL 1
/* Define to 1 if the compiler supports the 'long long' data type. */
#define HAVE_LONGLONG 1
/* Define to 1 if you have the malloc.h header file. */
/* #undef HAVE_MALLOC_H */
/* Define to 1 if you have the memory.h header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
/* #undef HAVE_MSG_NOSIGNAL */
/* Define to 1 if you have the <netdb.h> header file. */
#define HAVE_NETDB_H 1
/* Define to 1 if you have the <netinet/in.h> header file. */
#define HAVE_NETINET_IN_H 1
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#define HAVE_NETINET_TCP_H 1
/* Define to 1 if you have the <net/if.h> header file. */
#define HAVE_NET_IF_H 1
/* Define to 1 if you have PF_INET6. */
#define HAVE_PF_INET6 1
/* Define to 1 if you have the recv function. */
#define HAVE_RECV 1
/* Define to 1 if you have the recvfrom function. */
#define HAVE_RECVFROM 1
/* Define to 1 if you have the send function. */
#define HAVE_SEND 1
/* Define to 1 if you have the setsockopt function. */
#define HAVE_SETSOCKOPT 1
/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
/* Define to 1 if sig_atomic_t is an available typedef. */
#define HAVE_SIG_ATOMIC_T 1
/* Define to 1 if sig_atomic_t is already defined as volatile. */
/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
/* Define to 1 if you have the socket function. */
#define HAVE_SOCKET 1
/* Define to 1 if you have the <socket.h> header file. */
/* #undef HAVE_SOCKET_H */
/* Define to 1 if you have the <stdbool.h> header file. */
#define HAVE_STDBOOL_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the strcasecmp function. */
#define HAVE_STRCASECMP 1
/* Define to 1 if you have the strcmpi function. */
/* #undef HAVE_STRCMPI */
/* Define to 1 if you have the strdup function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the stricmp function. */
/* #undef HAVE_STRICMP */
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the strncasecmp function. */
#define HAVE_STRNCASECMP 1
/* Define to 1 if you have the strncmpi function. */
/* #undef HAVE_STRNCMPI */
/* Define to 1 if you have the strnicmp function. */
/* #undef HAVE_STRNICMP */
/* Define to 1 if you have the <stropts.h> header file. */
/* #undef HAVE_STROPTS_H */
/* Define to 1 if you have struct addrinfo. */
#define HAVE_STRUCT_ADDRINFO 1
/* Define to 1 if you have struct in6_addr. */
#define HAVE_STRUCT_IN6_ADDR 1
/* Define to 1 if you have struct sockaddr_in6. */
#define HAVE_STRUCT_SOCKADDR_IN6 1
/* if struct sockaddr_storage is defined */
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
/* Define to 1 if you have the timeval struct. */
#define HAVE_STRUCT_TIMEVAL 1
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
#define HAVE_SYS_SELECT_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
#define HAVE_SYS_SOCKET_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/uio.h> header file. */
#define HAVE_SYS_UIO_H 1
/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the windows.h header file. */
/* #undef HAVE_WINDOWS_H */
/* Define to 1 if you have the winsock2.h header file. */
/* #undef HAVE_WINSOCK2_H */
/* Define to 1 if you have the winsock.h header file. */
/* #undef HAVE_WINSOCK_H */
/* Define to 1 if you have the writev function. */
#define HAVE_WRITEV 1
/* Define to 1 if you have the ws2tcpip.h header file. */
/* #undef HAVE_WS2TCPIP_H */
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Define to 1 if you are building a native Windows target. */
/* #undef NATIVE_WINDOWS */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */
/* Define to 1 if you need the memory.h header file even with stdlib.h */
/* #undef NEED_MEMORY_H */
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
/* #undef NEED_THREAD_SAFE */
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
/* #undef NO_MINUS_C_MINUS_O */
/* cpu-machine-OS */
#define OS "i386-apple-darwin9.8.0"
/* Name of package */
#define PACKAGE "c-ares"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "c-ares mailing list => http://cool.haxx.se/mailman/listinfo/c-ares"
/* Define to the full name of this package. */
#define PACKAGE_NAME "c-ares"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "c-ares 1.7.1"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "c-ares"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.7.1"
/* a suitable file/device to read random data from */
#define RANDOM_FILE "/dev/urandom"
/* Define to the type of arg 1 for recvfrom. */
#define RECVFROM_TYPE_ARG1 int
/* Define to the type pointed by arg 2 for recvfrom. */
#define RECVFROM_TYPE_ARG2 void
/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
#define RECVFROM_TYPE_ARG2_IS_VOID 1
/* Define to the type of arg 3 for recvfrom. */
#define RECVFROM_TYPE_ARG3 size_t
/* Define to the type of arg 4 for recvfrom. */
#define RECVFROM_TYPE_ARG4 int
/* Define to the type pointed by arg 5 for recvfrom. */
#define RECVFROM_TYPE_ARG5 struct sockaddr
/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
/* #undef RECVFROM_TYPE_ARG5_IS_VOID */
/* Define to the type pointed by arg 6 for recvfrom. */
#define RECVFROM_TYPE_ARG6 socklen_t
/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
/* #undef RECVFROM_TYPE_ARG6_IS_VOID */
/* Define to the function return type for recvfrom. */
#define RECVFROM_TYPE_RETV ssize_t
/* Define to the type of arg 1 for recv. */
#define RECV_TYPE_ARG1 int
/* Define to the type of arg 2 for recv. */
#define RECV_TYPE_ARG2 void *
/* Define to the type of arg 3 for recv. */
#define RECV_TYPE_ARG3 size_t
/* Define to the type of arg 4 for recv. */
#define RECV_TYPE_ARG4 int
/* Define to the function return type for recv. */
#define RECV_TYPE_RETV ssize_t
/* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void
/* Define to the type qualifier of arg 2 for send. */
#define SEND_QUAL_ARG2 const
/* Define to the type of arg 1 for send. */
#define SEND_TYPE_ARG1 int
/* Define to the type of arg 2 for send. */
#define SEND_TYPE_ARG2 void *
/* Define to the type of arg 3 for send. */
#define SEND_TYPE_ARG3 size_t
/* Define to the type of arg 4 for send. */
#define SEND_TYPE_ARG4 int
/* Define to the function return type for send. */
#define SEND_TYPE_RETV ssize_t
/* The size of `int', as computed by sizeof. */
#define SIZEOF_INT 4
/* The size of `long', as computed by sizeof. */
#define SIZEOF_LONG 4
/* The size of `size_t', as computed by sizeof. */
#define SIZEOF_SIZE_T 4
/* The size of `struct in6_addr', as computed by sizeof. */
#define SIZEOF_STRUCT_IN6_ADDR 16
/* The size of `struct in_addr', as computed by sizeof. */
#define SIZEOF_STRUCT_IN_ADDR 4
/* The size of `time_t', as computed by sizeof. */
#define SIZEOF_TIME_T 4
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#define TIME_WITH_SYS_TIME 1
/* Define to disable non-blocking sockets. */
/* #undef USE_BLOCKING_SOCKETS */
/* Version number of package */
#define VERSION "1.7.1"
/* Define to avoid automatic inclusion of winsock.h */
/* #undef WIN32_LEAN_AND_MEAN */
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* # undef WORDS_BIGENDIAN */
# endif
#endif
/* Define to 1 if OS is AIX. */
#ifndef _ALL_SOURCE
/* # undef _ALL_SOURCE */
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
/* Type to use in place of in_addr_t when system does not provide it. */
/* #undef in_addr_t */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */
/* the signed version of size_t */
/* #undef ssize_t */

198
deps/c-ares/darwin-x86/ares_setup.h vendored Normal file
View File

@@ -0,0 +1,198 @@
#ifndef HEADER_CARES_SETUP_H
#define HEADER_CARES_SETUP_H
/* $Id$ */
/* Copyright (C) 2004 - 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
#define WIN32
#endif
/*
* Include configuration script results or hand-crafted
* configuration file for platforms which lack config tool.
*/
#ifdef HAVE_CONFIG_H
#include "ares_config.h"
#else
#ifdef WIN32
#include "config-win32.h"
#endif
#endif /* HAVE_CONFIG_H */
/* ================================================================ */
/* Definition of preprocessor macros/symbols which modify compiler */
/* behaviour or generated code characteristics must be done here, */
/* as appropriate, before any system header file is included. It is */
/* also possible to have them defined in the config file included */
/* before this point. As a result of all this we frown inclusion of */
/* system header files in our config files, avoid this at any cost. */
/* ================================================================ */
/*
* AIX 4.3 and newer needs _THREAD_SAFE defined to build
* proper reentrant code. Others may also need it.
*/
#ifdef NEED_THREAD_SAFE
# ifndef _THREAD_SAFE
# define _THREAD_SAFE
# endif
#endif
/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.
*/
#ifdef NEED_REENTRANT
# ifndef _REENTRANT
# define _REENTRANT
# endif
#endif
/* ================================================================ */
/* If you need to include a system header file for your platform, */
/* please, do it beyond the point further indicated in this file. */
/* ================================================================ */
/*
* c-ares external interface definitions are also used internally,
* and might also include required system header files to define them.
*/
#include <ares_build.h>
/*
* Compile time sanity checks must also be done when building the library.
*/
#include <ares_rules.h>
/* ================================================================= */
/* No system header file shall be included in this file before this */
/* point. The only allowed ones are those included from ares_build.h */
/* ================================================================= */
/*
* Include header files for windows builds before redefining anything.
* Use this preproessor block only to include or exclude windows.h,
* winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
* to any other further and independent block. Under Cygwin things work
* just as under linux (e.g. <sys/socket.h>) and the winsock headers should
* never be included when __CYGWIN__ is defined. configure script takes
* care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
* neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
*/
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
/*
* Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
* define USE_WINSOCK to 1 if we have and use WINSOCK API, else
* undefine USE_WINSOCK.
*/
#undef USE_WINSOCK
#ifdef HAVE_WINSOCK2_H
# define USE_WINSOCK 2
#else
# ifdef HAVE_WINSOCK_H
# define USE_WINSOCK 1
# endif
#endif
/*
* Work-arounds for systems without configure support
*/
#ifndef HAVE_CONFIG_H
#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
#define HAVE_SYS_TIME_H
#endif
#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
#define HAVE_UNISTD_H 1
#endif
#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
#define HAVE_SYS_UIO_H
#endif
#endif /* HAVE_CONFIG_H */
#ifdef __POCC__
# include <sys/types.h>
# include <unistd.h>
# define ESRCH 3
#endif
/*
* Recent autoconf versions define these symbols in ares_config.h. We don't
* want them (since they collide with the libcurl ones when we build
* --enable-debug) so we undef them again here.
*/
#undef PACKAGE_STRING
#undef PACKAGE_TARNAME
#undef PACKAGE_VERSION
#undef PACKAGE_BUGREPORT
#undef PACKAGE_NAME
#undef VERSION
#undef PACKAGE
/* IPv6 compatibility */
#if !defined(HAVE_AF_INET6)
#if defined(HAVE_PF_INET6)
#define AF_INET6 PF_INET6
#else
#define AF_INET6 AF_MAX+1
#endif
#endif
/*
* Include macros and defines that should only be processed once.
*/
#ifndef __SETUP_ONCE_H
#include "setup_once.h"
#endif
#endif /* HEADER_CARES_SETUP_H */

112
deps/c-ares/darwin-x86_64/ares_build.h vendored Normal file
View File

@@ -0,0 +1,112 @@
/* ares_build.h. Generated from ares_build.h.in by configure. */
#ifndef __CARES_BUILD_H
#define __CARES_BUILD_H
/* $Id$ */
/* Copyright (C) 2009 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of M.I.T. not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. M.I.T. makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/* ================================================================ */
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
/* ================================================================ */
/*
* NOTE 1:
* -------
*
* Nothing in this file is intended to be modified or adjusted by the
* c-ares library user nor by the c-ares library builder.
*
* If you think that something actually needs to be changed, adjusted
* or fixed in this file, then, report it on the c-ares development
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
*
* This header file shall only export symbols which are 'cares' or 'CARES'
* prefixed, otherwise public name space would be polluted.
*
* NOTE 2:
* -------
*
* Right now you might be staring at file ares_build.h.in or ares_build.h,
* this is due to the following reason:
*
* On systems capable of running the configure script, the configure process
* will overwrite the distributed ares_build.h file with one that is suitable
* and specific to the library being configured and built, which is generated
* from the ares_build.h.in template file.
*
*/
/* ================================================================ */
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
/* ================================================================ */
#ifdef CARES_SIZEOF_LONG
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined
#endif
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined
#endif
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h"
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined
#endif
/* ================================================================ */
/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
/* ================================================================ */
/* Configure process defines this to 1 when it finds out that system */
/* header file ws2tcpip.h must be included by the external interface. */
/* #undef CARES_PULL_WS2TCPIP_H */
#ifdef CARES_PULL_WS2TCPIP_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# include <winsock2.h>
# include <ws2tcpip.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/types.h must be included by the external interface. */
#define CARES_PULL_SYS_TYPES_H 1
#ifdef CARES_PULL_SYS_TYPES_H
# include <sys/types.h>
#endif
/* Configure process defines this to 1 when it finds out that system */
/* header file sys/socket.h must be included by the external interface. */
#define CARES_PULL_SYS_SOCKET_H 1
#ifdef CARES_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* The size of `long', as computed by sizeof. */
#define CARES_SIZEOF_LONG 8
/* Integral data type used for ares_socklen_t. */
#define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t
/* The size of `ares_socklen_t', as computed by sizeof. */
#define CARES_SIZEOF_ARES_SOCKLEN_T 4
/* Data type definition of ares_socklen_t. */
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
#endif /* __CARES_BUILD_H */

Some files were not shown because too many files have changed in this diff Show More