aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE4
-rw-r--r--README2
-rw-r--r--TODO25
-rw-r--r--doc/http.html6
-rw-r--r--doc/index.html5
-rw-r--r--doc/installation.html4
-rw-r--r--doc/reference.html1
-rw-r--r--doc/smtp.html5
-rw-r--r--doc/socket.html23
-rw-r--r--etc/b64.lua1
-rw-r--r--etc/check-links.lua1
-rw-r--r--etc/dict.lua1
-rw-r--r--etc/dispatch.lua1
-rw-r--r--etc/eol.lua1
-rw-r--r--etc/get.lua1
-rw-r--r--etc/lp.lua1
-rw-r--r--etc/qp.lua1
-rw-r--r--etc/tftp.lua1
-rw-r--r--makefile.dist2
-rw-r--r--samples/daytimeclnt.lua1
-rw-r--r--samples/echoclnt.lua1
-rw-r--r--samples/echosrvr.lua1
-rw-r--r--samples/listener.lua1
-rw-r--r--samples/talker.lua1
-rw-r--r--samples/tinyirc.lua1
-rw-r--r--src/auxiliar.c2
-rw-r--r--src/buffer.c2
-rw-r--r--src/except.c2
-rw-r--r--src/ftp.lua1
-rw-r--r--src/headers.lua1
-rw-r--r--src/http.lua1
-rw-r--r--src/inet.c6
-rw-r--r--src/io.c2
-rw-r--r--src/ltn12.lua1
-rw-r--r--src/luasocket.h2
-rw-r--r--src/makefile2
-rw-r--r--src/mime.c2
-rw-r--r--src/mime.lua1
-rw-r--r--src/options.c2
-rw-r--r--src/select.c2
-rw-r--r--src/smtp.lua1
-rw-r--r--src/socket.lua1
-rw-r--r--src/tcp.c31
-rw-r--r--src/tcp.h2
-rw-r--r--src/timeout.c2
-rw-r--r--src/tp.lua1
-rw-r--r--src/udp.c31
-rw-r--r--src/udp.h2
-rw-r--r--src/unix.c2
-rw-r--r--src/url.lua15
-rw-r--r--src/usocket.c2
-rw-r--r--src/wsocket.c2
-rw-r--r--test/urltest.lua131
53 files changed, 236 insertions, 108 deletions
diff --git a/LICENSE b/LICENSE
index 8c3cfe5..5bd3478 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
1LuaSocket 2.0.2 license 1LuaSocket 2.1 license
2Copyright © 2004-2007 Diego Nehab 2Copyright © 2004-2012 Diego Nehab
3 3
4Permission is hereby granted, free of charge, to any person obtaining a 4Permission is hereby granted, free of charge, to any person obtaining a
5copy of this software and associated documentation files (the "Software"), 5copy of this software and associated documentation files (the "Software"),
diff --git a/README b/README
index 6941026..e9dc323 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
1This is the LuaSocket 2.1.1. It has been tested on --[[WinXP--]], Mac OS X, 1This is the LuaSocket 2.1. It has been tested on --[[WinXP--]], Mac OS X,
2and --[[Linux--]]. Please use the Lua mailing list to report any bugs 2and --[[Linux--]]. Please use the Lua mailing list to report any bugs
3(or "features") you encounter. 3(or "features") you encounter.
4 4
diff --git a/TODO b/TODO
index fbd5865..a6d5372 100644
--- a/TODO
+++ b/TODO
@@ -1,39 +1,40 @@
1- merge luaL_typeerror into auxiliar to avoid using luaL prefix?
2- getsockname should also support IPv6, no? 1- getsockname should also support IPv6, no?
3- remove RCSID from files?
4- shouldn't we instead make the code compatible to Lua 5.2 2- shouldn't we instead make the code compatible to Lua 5.2
5 without any compat stuff, and use a compatibility layer to 3 without any compat stuff, and use a compatibility layer to
6 make it work on 5.1? 4 make it work on 5.1?
7- why 2.1.1 rather than 2.1?
8- add what's new to manual 5- add what's new to manual
9- should there be an equivalent to tohostname for IPv6? 6- should there be an equivalent to tohostname for IPv6?
10- should we add service name resolution as well to 7- should we add service name resolution as well to getaddrinfo?
11 getaddrinfo?
12- document bind and connect behavior based on address? 8- document bind and connect behavior based on address?
13 9
14- add functionality to query if object is ipv4 or 6?
15- update copyright date everywhere?
16- what to do about author?
17- add http POST sample to manual 10- add http POST sample to manual
18 people keep asking stupid questions 11 people keep asking stupid questions
19- documentation of dirty/getfd/setfd is problematic because of portability 12- documentation of dirty/getfd/setfd is problematic because of portability
20 same for unix and serial. 13 same for unix and serial.
21 what to do about this? add a stronger disclaimer? 14 what to do about this? add a stronger disclaimer?
22- remove references to Lua 5.0 from documentation, add 5.2?
23- update lua and luasocket version in samples in documentation
24- document headers.lua?
25- fix makefile with decent defaults? 15- fix makefile with decent defaults?
26 16
27Done: 17Done:
28 18
19- document headers.lua?
20- update copyright date everywhere?
21- remove RCSID from files?
22- move version to 2.1 rather than 2.1.1?
23- fixed url package to support ipv6 hosts
24- changed domain to family
25- implement getfamily methods.
26
27- remove references to Lua 5.0 from documentation, add 5.2?
28- update lua and luasocket version in samples in documentation
29- document ipv5_v6only default option being set? 29- document ipv5_v6only default option being set?
30- document tcp6 and udp6 30- document tcp6 and udp6
31- document dns.getaddrinfo 31- document dns.getaddrinfo
32- document zero-sized send on udp vs. tcp? 32- documented zero-sized datagram change?
33 no. 33 no.
34- document unix socket and serial socket? add raw support? 34- document unix socket and serial socket? add raw support?
35 no. 35 no.
36- document getoption 36- document getoption
37- merge luaL_typeerror into auxiliar to avoid using luaL prefix?
37 38
38 39
39 40
diff --git a/doc/http.html b/doc/http.html
index 9f3f087..cd41c0d 100644
--- a/doc/http.html
+++ b/doc/http.html
@@ -95,8 +95,9 @@ headers = {<br>
95</blockquote> 95</blockquote>
96 96
97<p> 97<p>
98Field names are case insensitive (as specified by the standard) and all 98Field names are case insensitive (as specified by the standard) and all
99functions work with lowercase field names. 99functions work with lowercase field names (but see
100<a href=socket.html#headers.canonic><tt>socket.headers.canonic</tt></a>).
100Field values are left unmodified. 101Field values are left unmodified.
101</p> 102</p>
102 103
@@ -117,6 +118,7 @@ the HTTP module:
117<li> <tt>USERAGENT</tt>: default user agent reported to server. 118<li> <tt>USERAGENT</tt>: default user agent reported to server.
118</ul> 119</ul>
119 120
121
120<!-- http.request ++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> 122<!-- http.request ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
121 123
122<p class=name id="request"> 124<p class=name id="request">
diff --git a/doc/index.html b/doc/index.html
index 9da0f3c..833c9a8 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -87,7 +87,7 @@ Author: <A href="http://www.impa.br/~diego">Diego Nehab</a>
87<h2 id=download>Download</h2> 87<h2 id=download>Download</h2>
88 88
89<p> 89<p>
90LuaSocket version 2.1.1-rc1 is now available for download! 90LuaSocket version 2.1-rc1 is now available for download!
91It is compatible with Lua&nbsp;5.1 and 5.2, and has 91It is compatible with Lua&nbsp;5.1 and 5.2, and has
92been tested on Windows&nbsp;XP, Linux, and Mac OS X. Chances 92been tested on Windows&nbsp;XP, Linux, and Mac OS X. Chances
93are it works well on most UNIX distributions and Windows flavors. 93are it works well on most UNIX distributions and Windows flavors.
@@ -125,7 +125,7 @@ has helped bring this library back to life.
125<h2 id=new>What's New</h2> 125<h2 id=new>What's New</h2>
126 126
127<p> 127<p>
128Main changes for LuaSocket&nbsp;2.1.1-rc1 are IPv6 support 128Main changes for LuaSocket&nbsp;2.1-rc1 are IPv6 support
129and Lua&nbsp;5.2 compatibility. 129and Lua&nbsp;5.2 compatibility.
130</p> 130</p>
131 131
@@ -135,6 +135,7 @@ and Lua&nbsp;5.2 compatibility.
135<ul> 135<ul>
136<li> <tt>Socket.connect</tt> and <tt>socket.bind</tt> support IPv6 addresses; 136<li> <tt>Socket.connect</tt> and <tt>socket.bind</tt> support IPv6 addresses;
137<li> <tt>Getpeername</tt> and <tt>getsockname</tt> support IPv6 addresses; 137<li> <tt>Getpeername</tt> and <tt>getsockname</tt> support IPv6 addresses;
138<li> URL module updated to support IPv6 host names;
138<li> New <tt>socket.tcp6</tt> and <tt>socket.udp6</tt> functions; 139<li> New <tt>socket.tcp6</tt> and <tt>socket.udp6</tt> functions;
139<li> New <tt>socket.dns.getaddrinfo</tt> function; 140<li> New <tt>socket.dns.getaddrinfo</tt> function;
140</ul> 141</ul>
diff --git a/doc/installation.html b/doc/installation.html
index 00b2db0..37c309b 100644
--- a/doc/installation.html
+++ b/doc/installation.html
@@ -39,7 +39,7 @@ Installation">
39 39
40<h2>Installation</h2> 40<h2>Installation</h2>
41 41
42<p> LuaSocket 2.1.1-rc still uses Lua&nbsp;5.1's package 42<p> LuaSocket 2.1-rc still uses Lua&nbsp;5.1's package
43system. Users that have already made the switch to 43system. Users that have already made the switch to
44Lua&nbsp;5.2 should leave the default 44Lua&nbsp;5.2 should leave the default
45<tt>LUA_COMPAT_MODULE</tt> defined when compiling their Lua 45<tt>LUA_COMPAT_MODULE</tt> defined when compiling their Lua
@@ -95,7 +95,7 @@ it should be easy to use LuaSocket. Just fire the interpreter and use the
95Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio 95Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
96&gt; socket = require("socket") 96&gt; socket = require("socket")
97&gt; print(socket._VERSION) 97&gt; print(socket._VERSION)
98--&gt; LuaSocket 2.1.1-rc1 98--&gt; LuaSocket 2.1-rc1
99</pre> 99</pre>
100 100
101<p> Each module loads their dependencies automatically, so you only need to 101<p> Each module loads their dependencies automatically, so you only need to
diff --git a/doc/reference.html b/doc/reference.html
index d1043d4..f069d47 100644
--- a/doc/reference.html
+++ b/doc/reference.html
@@ -148,6 +148,7 @@ Support, Manual">
148<a href="socket.html#debug">_DEBUG</a>, 148<a href="socket.html#debug">_DEBUG</a>,
149<a href="dns.html#dns">dns</a>, 149<a href="dns.html#dns">dns</a>,
150<a href="socket.html#gettime">gettime</a>, 150<a href="socket.html#gettime">gettime</a>,
151<a href="socket.html#headers.canonic">headers.canonic</a>,
151<a href="socket.html#newtry">newtry</a>, 152<a href="socket.html#newtry">newtry</a>,
152<a href="socket.html#protect">protect</a>, 153<a href="socket.html#protect">protect</a>,
153<a href="socket.html#select">select</a>, 154<a href="socket.html#select">select</a>,
diff --git a/doc/smtp.html b/doc/smtp.html
index 2ef673a..bbbff80 100644
--- a/doc/smtp.html
+++ b/doc/smtp.html
@@ -90,8 +90,9 @@ headers = {<br>
90</blockquote> 90</blockquote>
91 91
92<p> 92<p>
93Field names are case insensitive (as specified by the standard) and all 93Field names are case insensitive (as specified by the standard) and all
94functions work with lowercase field names. 94functions work with lowercase field names (but see
95<a href=socket.html#headers.canonic><tt>socket.headers.canonic</tt></a>).
95Field values are left unmodified. 96Field values are left unmodified.
96</p> 97</p>
97 98
diff --git a/doc/socket.html b/doc/socket.html
index 2267b4a..dcf8b61 100644
--- a/doc/socket.html
+++ b/doc/socket.html
@@ -112,6 +112,29 @@ t = socket.gettime()
112print(socket.gettime() - t .. " seconds elapsed") 112print(socket.gettime() - t .. " seconds elapsed")
113</pre> 113</pre>
114 114
115<!-- socket.headers ++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
116
117<p class=name id="headers.canonic">
118socket.headers.<b>canonic</b></p>
119
120<p> The <tt>socket.headers.canonic</tt> table
121is used by the HTTP and SMTP modules to translate from
122lowercase field names back into their canonic
123capitalization. When a lowercase field name exists as a key
124in this table, the associated value is substituted in
125whenever the field name is sent out.
126</p>
127
128<p>
129You can obtain the <tt>headers</tt> namespace if case run-time
130modifications are required by running:
131</p>
132
133<pre class=example>
134-- loads the headers module
135local headers = require("headers")
136</pre>
137
115<!-- newtry +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> 138<!-- newtry +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
116 139
117<p class=name id=newtry> 140<p class=name id=newtry>
diff --git a/etc/b64.lua b/etc/b64.lua
index f75c423..11eeb2d 100644
--- a/etc/b64.lua
+++ b/etc/b64.lua
@@ -2,7 +2,6 @@
2-- Little program to convert to and from Base64 2-- Little program to convert to and from Base64
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: b64.lua,v 1.8 2004/06/16 04:28:21 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local ltn12 = require("ltn12") 6local ltn12 = require("ltn12")
8local mime = require("mime") 7local mime = require("mime")
diff --git a/etc/check-links.lua b/etc/check-links.lua
index a989f8c..d2e4266 100644
--- a/etc/check-links.lua
+++ b/etc/check-links.lua
@@ -3,7 +3,6 @@
3-- non-blocking I/O via the dispatcher module. 3-- non-blocking I/O via the dispatcher module.
4-- LuaSocket sample files 4-- LuaSocket sample files
5-- Author: Diego Nehab 5-- Author: Diego Nehab
6-- RCS ID: $$
7----------------------------------------------------------------------------- 6-----------------------------------------------------------------------------
8local url = require("socket.url") 7local url = require("socket.url")
9local dispatch = require("dispatch") 8local dispatch = require("dispatch")
diff --git a/etc/dict.lua b/etc/dict.lua
index e375d23..8c5b711 100644
--- a/etc/dict.lua
+++ b/etc/dict.lua
@@ -2,7 +2,6 @@
2-- Little program to download DICT word definitions 2-- Little program to download DICT word definitions
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: dict.lua,v 1.22 2005/11/22 08:33:29 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/etc/dispatch.lua b/etc/dispatch.lua
index 5236f3d..cc8cb23 100644
--- a/etc/dispatch.lua
+++ b/etc/dispatch.lua
@@ -2,7 +2,6 @@
2-- A hacked dispatcher module 2-- A hacked dispatcher module
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $$
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local base = _G 6local base = _G
8local table = require("table") 7local table = require("table")
diff --git a/etc/eol.lua b/etc/eol.lua
index b90be79..eeaf0ce 100644
--- a/etc/eol.lua
+++ b/etc/eol.lua
@@ -2,7 +2,6 @@
2-- Little program to adjust end of line markers. 2-- Little program to adjust end of line markers.
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: eol.lua,v 1.8 2005/11/22 08:33:29 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local mime = require("mime") 6local mime = require("mime")
8local ltn12 = require("ltn12") 7local ltn12 = require("ltn12")
diff --git a/etc/get.lua b/etc/get.lua
index 4c344e2..4196f00 100644
--- a/etc/get.lua
+++ b/etc/get.lua
@@ -2,7 +2,6 @@
2-- Little program to download files from URLs 2-- Little program to download files from URLs
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: get.lua,v 1.25 2007/03/12 04:08:40 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8local http = require("socket.http") 7local http = require("socket.http")
diff --git a/etc/lp.lua b/etc/lp.lua
index d57c928..25f0b95 100644
--- a/etc/lp.lua
+++ b/etc/lp.lua
@@ -3,7 +3,6 @@
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: David Burgess 4-- Author: David Burgess
5-- Modified by Diego Nehab, but David is in charge 5-- Modified by Diego Nehab, but David is in charge
6-- RCS ID: $Id: lp.lua,v 1.14 2005/11/21 07:04:44 diego Exp $
7----------------------------------------------------------------------------- 6-----------------------------------------------------------------------------
8--[[ 7--[[
9 if you have any questions: RFC 1179 8 if you have any questions: RFC 1179
diff --git a/etc/qp.lua b/etc/qp.lua
index a4c0cad..523238b 100644
--- a/etc/qp.lua
+++ b/etc/qp.lua
@@ -2,7 +2,6 @@
2-- Little program to convert to and from Quoted-Printable 2-- Little program to convert to and from Quoted-Printable
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: qp.lua,v 1.5 2004/06/17 21:46:22 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local ltn12 = require("ltn12") 6local ltn12 = require("ltn12")
8local mime = require("mime") 7local mime = require("mime")
diff --git a/etc/tftp.lua b/etc/tftp.lua
index 7f51c6f..ed99cd1 100644
--- a/etc/tftp.lua
+++ b/etc/tftp.lua
@@ -2,7 +2,6 @@
2-- TFTP support for the Lua language 2-- TFTP support for the Lua language
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: tftp.lua,v 1.16 2005/11/22 08:33:29 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/makefile.dist b/makefile.dist
index fbd6681..2c6137b 100644
--- a/makefile.dist
+++ b/makefile.dist
@@ -1,7 +1,7 @@
1#-------------------------------------------------------------------------- 1#--------------------------------------------------------------------------
2# Distribution makefile 2# Distribution makefile
3#-------------------------------------------------------------------------- 3#--------------------------------------------------------------------------
4DIST = luasocket-2.1.1-rc1 4DIST = luasocket-2.1-rc1
5 5
6TEST = \ 6TEST = \
7 test/README \ 7 test/README \
diff --git a/samples/daytimeclnt.lua b/samples/daytimeclnt.lua
index 90ab39e..f81e37c 100644
--- a/samples/daytimeclnt.lua
+++ b/samples/daytimeclnt.lua
@@ -2,7 +2,6 @@
2-- UDP sample: daytime protocol client 2-- UDP sample: daytime protocol client
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: daytimeclnt.lua,v 1.11 2004/06/21 06:07:57 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require"socket" 6local socket = require"socket"
8host = host or "127.0.0.1" 7host = host or "127.0.0.1"
diff --git a/samples/echoclnt.lua b/samples/echoclnt.lua
index 038be4c..bb22557 100644
--- a/samples/echoclnt.lua
+++ b/samples/echoclnt.lua
@@ -2,7 +2,6 @@
2-- UDP sample: echo protocol client 2-- UDP sample: echo protocol client
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: echoclnt.lua,v 1.10 2005/01/02 22:44:00 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8host = host or "localhost" 7host = host or "localhost"
diff --git a/samples/echosrvr.lua b/samples/echosrvr.lua
index 2697ca4..ea564e2 100644
--- a/samples/echosrvr.lua
+++ b/samples/echosrvr.lua
@@ -2,7 +2,6 @@
2-- UDP sample: echo protocol server 2-- UDP sample: echo protocol server
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: echosrvr.lua,v 1.12 2005/11/22 08:33:29 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8host = host or "127.0.0.1" 7host = host or "127.0.0.1"
diff --git a/samples/listener.lua b/samples/listener.lua
index 9260fbb..77db2d5 100644
--- a/samples/listener.lua
+++ b/samples/listener.lua
@@ -2,7 +2,6 @@
2-- TCP sample: Little program to dump lines received at a given port 2-- TCP sample: Little program to dump lines received at a given port
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: listener.lua,v 1.11 2005/01/02 22:44:00 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8host = host or "*" 7host = host or "*"
diff --git a/samples/talker.lua b/samples/talker.lua
index 607ff31..d5a36cb 100644
--- a/samples/talker.lua
+++ b/samples/talker.lua
@@ -2,7 +2,6 @@
2-- TCP sample: Little program to send text lines to a given host/port 2-- TCP sample: Little program to send text lines to a given host/port
3-- LuaSocket sample files 3-- LuaSocket sample files
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: talker.lua,v 1.9 2005/01/02 22:44:00 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8host = host or "localhost" 7host = host or "localhost"
diff --git a/samples/tinyirc.lua b/samples/tinyirc.lua
index f474302..e75851f 100644
--- a/samples/tinyirc.lua
+++ b/samples/tinyirc.lua
@@ -2,7 +2,6 @@
2-- Select sample: simple text line server 2-- Select sample: simple text line server
3-- LuaSocket sample files. 3-- LuaSocket sample files.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: tinyirc.lua,v 1.14 2005/11/22 08:33:29 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7local socket = require("socket") 6local socket = require("socket")
8host = host or "*" 7host = host or "*"
diff --git a/src/auxiliar.c b/src/auxiliar.c
index c4e5260..de625e9 100644
--- a/src/auxiliar.c
+++ b/src/auxiliar.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Auxiliar routines for class hierarchy manipulation 2* Auxiliar routines for class hierarchy manipulation
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: auxiliar.c,v 1.14 2005/10/07 04:40:59 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8#include <stdio.h> 6#include <stdio.h>
diff --git a/src/buffer.c b/src/buffer.c
index 452a579..d8facd2 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Input/Output interface for Lua programs 2* Input/Output interface for Lua programs
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: buffer.c,v 1.29 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include "lua.h" 5#include "lua.h"
8#include "lauxlib.h" 6#include "lauxlib.h"
diff --git a/src/except.c b/src/except.c
index 97c00a3..1d1ade0 100644
--- a/src/except.c
+++ b/src/except.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Simple exception support 2* Simple exception support
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: except.c,v 1.8 2005/09/29 06:11:41 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <stdio.h> 5#include <stdio.h>
8 6
diff --git a/src/ftp.lua b/src/ftp.lua
index 1d5ff77..5aa646b 100644
--- a/src/ftp.lua
+++ b/src/ftp.lua
@@ -2,7 +2,6 @@
2-- FTP support for the Lua language 2-- FTP support for the Lua language
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: ftp.lua,v 1.45 2007/07/11 19:25:47 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/headers.lua b/src/headers.lua
index f92ee7a..41794ba 100644
--- a/src/headers.lua
+++ b/src/headers.lua
@@ -2,7 +2,6 @@
2-- Canonic header field capitalization 2-- Canonic header field capitalization
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id$
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7module("socket.headers") 6module("socket.headers")
8 7
diff --git a/src/http.lua b/src/http.lua
index 029a367..4c7e7d8 100644
--- a/src/http.lua
+++ b/src/http.lua
@@ -2,7 +2,6 @@
2-- HTTP/1.1 client support for the Lua language. 2-- HTTP/1.1 client support for the Lua language.
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: http.lua,v 1.72 2009/05/27 09:31:35 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/inet.c b/src/inet.c
index 839fe5f..fd16506 100644
--- a/src/inet.c
+++ b/src/inet.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Internet domain functions 2* Internet domain functions
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: inet.c,v 1.28 2005/10/07 04:40:59 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <stdio.h> 5#include <stdio.h>
8#include <string.h> 6#include <string.h>
@@ -270,8 +268,8 @@ static void inet_pushresolved(lua_State *L, struct hostent *hp)
270/*-------------------------------------------------------------------------*\ 268/*-------------------------------------------------------------------------*\
271* Tries to create a new inet socket 269* Tries to create a new inet socket
272\*-------------------------------------------------------------------------*/ 270\*-------------------------------------------------------------------------*/
273const char *inet_trycreate(p_socket ps, int domain, int type) { 271const char *inet_trycreate(p_socket ps, int family, int type) {
274 return socket_strerror(socket_create(ps, domain, type, 0)); 272 return socket_strerror(socket_create(ps, family, type, 0));
275} 273}
276 274
277/*-------------------------------------------------------------------------*\ 275/*-------------------------------------------------------------------------*\
diff --git a/src/io.c b/src/io.c
index 06dc50e..35f46f7 100644
--- a/src/io.c
+++ b/src/io.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Input/Output abstraction 2* Input/Output abstraction
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: io.c,v 1.6 2005/09/29 06:11:41 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include "io.h" 5#include "io.h"
8 6
diff --git a/src/ltn12.lua b/src/ltn12.lua
index b42689a..b7f9a21 100644
--- a/src/ltn12.lua
+++ b/src/ltn12.lua
@@ -2,7 +2,6 @@
2-- LTN12 - Filters, sources, sinks and pumps. 2-- LTN12 - Filters, sources, sinks and pumps.
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: ltn12.lua,v 1.31 2006/04/03 04:45:42 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/luasocket.h b/src/luasocket.h
index 09e758d..f2ca3c1 100644
--- a/src/luasocket.h
+++ b/src/luasocket.h
@@ -11,7 +11,7 @@
11/*-------------------------------------------------------------------------*\ 11/*-------------------------------------------------------------------------*\
12* Current socket library version 12* Current socket library version
13\*-------------------------------------------------------------------------*/ 13\*-------------------------------------------------------------------------*/
14#define LUASOCKET_VERSION "LuaSocket 2.1.1-rc1" 14#define LUASOCKET_VERSION "LuaSocket 2.1-rc1"
15#define LUASOCKET_COPYRIGHT "Copyright (C) 1999-2012 Diego Nehab" 15#define LUASOCKET_COPYRIGHT "Copyright (C) 1999-2012 Diego Nehab"
16#define LUASOCKET_AUTHORS "Diego Nehab" 16#define LUASOCKET_AUTHORS "Diego Nehab"
17 17
diff --git a/src/makefile b/src/makefile
index 0665c14..6225ce4 100644
--- a/src/makefile
+++ b/src/makefile
@@ -98,7 +98,7 @@ SOCKET_win32=wsocket.obj
98# 98#
99SO=$(SO_$(PLAT)) 99SO=$(SO_$(PLAT))
100O=$(O_$(PLAT)) 100O=$(O_$(PLAT))
101SOCKET_V=2.1.1 101SOCKET_V=2.1
102MIME_V=1.0.3 102MIME_V=1.0.3
103SOCKET_SO=socket.$(SO).$(SOCKET_V) 103SOCKET_SO=socket.$(SO).$(SOCKET_V)
104MIME_SO=mime.$(SO).$(MIME_V) 104MIME_SO=mime.$(SO).$(MIME_V)
diff --git a/src/mime.c b/src/mime.c
index 023559f..a1aaae9 100644
--- a/src/mime.c
+++ b/src/mime.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* MIME support functions 2* MIME support functions
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: mime.c,v 1.29 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
diff --git a/src/mime.lua b/src/mime.lua
index 218b38a..4aaccc8 100644
--- a/src/mime.lua
+++ b/src/mime.lua
@@ -2,7 +2,6 @@
2-- MIME support for the Lua language. 2-- MIME support for the Lua language.
3-- Author: Diego Nehab 3-- Author: Diego Nehab
4-- Conforming to RFCs 2045-2049 4-- Conforming to RFCs 2045-2049
5-- RCS ID: $Id: mime.lua,v 1.29 2007/06/11 23:44:54 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/options.c b/src/options.c
index c122ead..6cae7ee 100644
--- a/src/options.c
+++ b/src/options.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Common option interface 2* Common option interface
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: options.c,v 1.7 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
diff --git a/src/select.c b/src/select.c
index 87b5dc2..b870545 100644
--- a/src/select.c
+++ b/src/select.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Select implementation 2* Select implementation
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: select.c,v 1.23 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
diff --git a/src/smtp.lua b/src/smtp.lua
index e258d62..26808f5 100644
--- a/src/smtp.lua
+++ b/src/smtp.lua
@@ -2,7 +2,6 @@
2-- SMTP client support for the Lua language. 2-- SMTP client support for the Lua language.
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: smtp.lua,v 1.47 2009/05/27 09:31:35 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/socket.lua b/src/socket.lua
index 734da3c..a9219b0 100644
--- a/src/socket.lua
+++ b/src/socket.lua
@@ -1,7 +1,6 @@
1----------------------------------------------------------------------------- 1-----------------------------------------------------------------------------
2-- LuaSocket helper module 2-- LuaSocket helper module
3-- Author: Diego Nehab 3-- Author: Diego Nehab
4-- RCS ID: $Id: socket.lua,v 1.22 2005/11/22 08:33:29 diego Exp $
5----------------------------------------------------------------------------- 4-----------------------------------------------------------------------------
6 5
7----------------------------------------------------------------------------- 6-----------------------------------------------------------------------------
diff --git a/src/tcp.c b/src/tcp.c
index 3146467..872b1c6 100644
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* TCP object 2* TCP object
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: tcp.c,v 1.42 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
@@ -23,6 +21,7 @@ static int global_create6(lua_State *L);
23static int global_connect6(lua_State *L); 21static int global_connect6(lua_State *L);
24static int meth_connect(lua_State *L); 22static int meth_connect(lua_State *L);
25static int meth_listen(lua_State *L); 23static int meth_listen(lua_State *L);
24static int meth_getfamily(lua_State *L);
26static int meth_bind(lua_State *L); 25static int meth_bind(lua_State *L);
27static int meth_send(lua_State *L); 26static int meth_send(lua_State *L);
28static int meth_getstats(lua_State *L); 27static int meth_getstats(lua_State *L);
@@ -49,6 +48,7 @@ static luaL_Reg tcp_methods[] = {
49 {"close", meth_close}, 48 {"close", meth_close},
50 {"connect", meth_connect}, 49 {"connect", meth_connect},
51 {"dirty", meth_dirty}, 50 {"dirty", meth_dirty},
51 {"getfamily", meth_getfamily},
52 {"getfd", meth_getfd}, 52 {"getfd", meth_getfd},
53 {"getoption", meth_getoption}, 53 {"getoption", meth_getoption},
54 {"getpeername", meth_getpeername}, 54 {"getpeername", meth_getpeername},
@@ -218,7 +218,7 @@ static int meth_bind(lua_State *L)
218 struct addrinfo bindhints; 218 struct addrinfo bindhints;
219 memset(&bindhints, 0, sizeof(bindhints)); 219 memset(&bindhints, 0, sizeof(bindhints));
220 bindhints.ai_socktype = SOCK_STREAM; 220 bindhints.ai_socktype = SOCK_STREAM;
221 bindhints.ai_family = tcp->domain; 221 bindhints.ai_family = tcp->family;
222 bindhints.ai_flags = AI_PASSIVE; 222 bindhints.ai_flags = AI_PASSIVE;
223 err = inet_trybind(&tcp->sock, address, port, &bindhints); 223 err = inet_trybind(&tcp->sock, address, port, &bindhints);
224 if (err) { 224 if (err) {
@@ -243,7 +243,7 @@ static int meth_connect(lua_State *L)
243 memset(&connecthints, 0, sizeof(connecthints)); 243 memset(&connecthints, 0, sizeof(connecthints));
244 connecthints.ai_socktype = SOCK_STREAM; 244 connecthints.ai_socktype = SOCK_STREAM;
245 /* make sure we try to connect only to the same family */ 245 /* make sure we try to connect only to the same family */
246 connecthints.ai_family = tcp->domain; 246 connecthints.ai_family = tcp->family;
247 timeout_markstart(&tcp->tm); 247 timeout_markstart(&tcp->tm);
248 err = inet_tryconnect(&tcp->sock, address, port, 248 err = inet_tryconnect(&tcp->sock, address, port,
249 &tcp->tm, &connecthints); 249 &tcp->tm, &connecthints);
@@ -270,6 +270,21 @@ static int meth_close(lua_State *L)
270} 270}
271 271
272/*-------------------------------------------------------------------------*\ 272/*-------------------------------------------------------------------------*\
273* Returns family as string
274\*-------------------------------------------------------------------------*/
275static int meth_getfamily(lua_State *L)
276{
277 p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
278 if (tcp->family == PF_INET6) {
279 lua_pushliteral(L, "inet6");
280 return 1;
281 } else {
282 lua_pushliteral(L, "inet4");
283 return 1;
284 }
285}
286
287/*-------------------------------------------------------------------------*\
273* Puts the sockt in listen mode 288* Puts the sockt in listen mode
274\*-------------------------------------------------------------------------*/ 289\*-------------------------------------------------------------------------*/
275static int meth_listen(lua_State *L) 290static int meth_listen(lua_State *L)
@@ -346,9 +361,9 @@ static int meth_settimeout(lua_State *L)
346/*-------------------------------------------------------------------------*\ 361/*-------------------------------------------------------------------------*\
347* Creates a master tcp object 362* Creates a master tcp object
348\*-------------------------------------------------------------------------*/ 363\*-------------------------------------------------------------------------*/
349static int tcp_create(lua_State *L, int domain) { 364static int tcp_create(lua_State *L, int family) {
350 t_socket sock; 365 t_socket sock;
351 const char *err = inet_trycreate(&sock, domain, SOCK_STREAM); 366 const char *err = inet_trycreate(&sock, family, SOCK_STREAM);
352 /* try to allocate a system socket */ 367 /* try to allocate a system socket */
353 if (!err) { 368 if (!err) {
354 /* allocate tcp object */ 369 /* allocate tcp object */
@@ -357,7 +372,7 @@ static int tcp_create(lua_State *L, int domain) {
357 auxiliar_setclass(L, "tcp{master}", -1); 372 auxiliar_setclass(L, "tcp{master}", -1);
358 /* initialize remaining structure fields */ 373 /* initialize remaining structure fields */
359 socket_setnonblocking(&sock); 374 socket_setnonblocking(&sock);
360 if (domain == PF_INET6) { 375 if (family == PF_INET6) {
361 int yes = 1; 376 int yes = 1;
362 setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, 377 setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
363 (void *)&yes, sizeof(yes)); 378 (void *)&yes, sizeof(yes));
@@ -367,7 +382,7 @@ static int tcp_create(lua_State *L, int domain) {
367 (p_error) socket_ioerror, &tcp->sock); 382 (p_error) socket_ioerror, &tcp->sock);
368 timeout_init(&tcp->tm, -1, -1); 383 timeout_init(&tcp->tm, -1, -1);
369 buffer_init(&tcp->buf, &tcp->io, &tcp->tm); 384 buffer_init(&tcp->buf, &tcp->io, &tcp->tm);
370 tcp->domain = domain; 385 tcp->family = family;
371 return 1; 386 return 1;
372 } else { 387 } else {
373 lua_pushnil(L); 388 lua_pushnil(L);
diff --git a/src/tcp.h b/src/tcp.h
index 4dc9c4a..eded620 100644
--- a/src/tcp.h
+++ b/src/tcp.h
@@ -25,7 +25,7 @@ typedef struct t_tcp_ {
25 t_io io; 25 t_io io;
26 t_buffer buf; 26 t_buffer buf;
27 t_timeout tm; 27 t_timeout tm;
28 int domain; 28 int family;
29} t_tcp; 29} t_tcp;
30 30
31typedef t_tcp *p_tcp; 31typedef t_tcp *p_tcp;
diff --git a/src/timeout.c b/src/timeout.c
index a3f1318..c7354b5 100644
--- a/src/timeout.c
+++ b/src/timeout.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Timeout management functions 2* Timeout management functions
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: timeout.c,v 1.31 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <stdio.h> 5#include <stdio.h>
8#include <limits.h> 6#include <limits.h>
diff --git a/src/tp.lua b/src/tp.lua
index adeb4b0..2ffe9a4 100644
--- a/src/tp.lua
+++ b/src/tp.lua
@@ -2,7 +2,6 @@
2-- Unified SMTP/FTP subsystem 2-- Unified SMTP/FTP subsystem
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: tp.lua,v 1.23 2009/05/27 09:31:35 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
diff --git a/src/udp.c b/src/udp.c
index 386051a..bfa934f 100644
--- a/src/udp.c
+++ b/src/udp.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* UDP object 2* UDP object
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: udp.c,v 1.30 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
@@ -32,6 +30,7 @@ static int meth_send(lua_State *L);
32static int meth_sendto(lua_State *L); 30static int meth_sendto(lua_State *L);
33static int meth_receive(lua_State *L); 31static int meth_receive(lua_State *L);
34static int meth_receivefrom(lua_State *L); 32static int meth_receivefrom(lua_State *L);
33static int meth_getfamily(lua_State *L);
35static int meth_getsockname(lua_State *L); 34static int meth_getsockname(lua_State *L);
36static int meth_getpeername(lua_State *L); 35static int meth_getpeername(lua_State *L);
37static int meth_setsockname(lua_State *L); 36static int meth_setsockname(lua_State *L);
@@ -50,6 +49,7 @@ static luaL_Reg udp_methods[] = {
50 {"__tostring", auxiliar_tostring}, 49 {"__tostring", auxiliar_tostring},
51 {"close", meth_close}, 50 {"close", meth_close},
52 {"dirty", meth_dirty}, 51 {"dirty", meth_dirty},
52 {"getfamily", meth_getfamily},
53 {"getfd", meth_getfd}, 53 {"getfd", meth_getfd},
54 {"getpeername", meth_getpeername}, 54 {"getpeername", meth_getpeername},
55 {"getsockname", meth_getsockname}, 55 {"getsockname", meth_getsockname},
@@ -227,6 +227,21 @@ static int meth_receivefrom(lua_State *L) {
227} 227}
228 228
229/*-------------------------------------------------------------------------*\ 229/*-------------------------------------------------------------------------*\
230* Returns family as string
231\*-------------------------------------------------------------------------*/
232static int meth_getfamily(lua_State *L)
233{
234 p_udp udp = (p_udp) auxiliar_checkgroup(L, "udp{any}", 1);
235 if (udp->family == PF_INET6) {
236 lua_pushliteral(L, "inet6");
237 return 1;
238 } else {
239 lua_pushliteral(L, "inet4");
240 return 1;
241 }
242}
243
244/*-------------------------------------------------------------------------*\
230* Select support methods 245* Select support methods
231\*-------------------------------------------------------------------------*/ 246\*-------------------------------------------------------------------------*/
232static int meth_getfd(lua_State *L) { 247static int meth_getfd(lua_State *L) {
@@ -302,7 +317,7 @@ static int meth_setpeername(lua_State *L) {
302 memset(&connecthints, 0, sizeof(connecthints)); 317 memset(&connecthints, 0, sizeof(connecthints));
303 connecthints.ai_socktype = SOCK_DGRAM; 318 connecthints.ai_socktype = SOCK_DGRAM;
304 /* make sure we try to connect only to the same family */ 319 /* make sure we try to connect only to the same family */
305 connecthints.ai_family = udp->domain; 320 connecthints.ai_family = udp->family;
306 err = inet_tryconnect(&udp->sock, address, port, 321 err = inet_tryconnect(&udp->sock, address, port,
307 tm, &connecthints); 322 tm, &connecthints);
308 if (err) { 323 if (err) {
@@ -338,7 +353,7 @@ static int meth_setsockname(lua_State *L) {
338 struct addrinfo bindhints; 353 struct addrinfo bindhints;
339 memset(&bindhints, 0, sizeof(bindhints)); 354 memset(&bindhints, 0, sizeof(bindhints));
340 bindhints.ai_socktype = SOCK_DGRAM; 355 bindhints.ai_socktype = SOCK_DGRAM;
341 bindhints.ai_family = udp->domain; 356 bindhints.ai_family = udp->family;
342 bindhints.ai_flags = AI_PASSIVE; 357 bindhints.ai_flags = AI_PASSIVE;
343 err = inet_trybind(&udp->sock, address, port, &bindhints); 358 err = inet_trybind(&udp->sock, address, port, &bindhints);
344 if (err) { 359 if (err) {
@@ -356,9 +371,9 @@ static int meth_setsockname(lua_State *L) {
356/*-------------------------------------------------------------------------*\ 371/*-------------------------------------------------------------------------*\
357* Creates a master udp object 372* Creates a master udp object
358\*-------------------------------------------------------------------------*/ 373\*-------------------------------------------------------------------------*/
359static int udp_create(lua_State *L, int domain) { 374static int udp_create(lua_State *L, int family) {
360 t_socket sock; 375 t_socket sock;
361 const char *err = inet_trycreate(&sock, domain, SOCK_DGRAM); 376 const char *err = inet_trycreate(&sock, family, SOCK_DGRAM);
362 /* try to allocate a system socket */ 377 /* try to allocate a system socket */
363 if (!err) { 378 if (!err) {
364 /* allocate udp object */ 379 /* allocate udp object */
@@ -366,14 +381,14 @@ static int udp_create(lua_State *L, int domain) {
366 auxiliar_setclass(L, "udp{unconnected}", -1); 381 auxiliar_setclass(L, "udp{unconnected}", -1);
367 /* initialize remaining structure fields */ 382 /* initialize remaining structure fields */
368 socket_setnonblocking(&sock); 383 socket_setnonblocking(&sock);
369 if (domain == PF_INET6) { 384 if (family == PF_INET6) {
370 int yes = 1; 385 int yes = 1;
371 setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, 386 setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY,
372 (void *)&yes, sizeof(yes)); 387 (void *)&yes, sizeof(yes));
373 } 388 }
374 udp->sock = sock; 389 udp->sock = sock;
375 timeout_init(&udp->tm, -1, -1); 390 timeout_init(&udp->tm, -1, -1);
376 udp->domain = domain; 391 udp->family = family;
377 return 1; 392 return 1;
378 } else { 393 } else {
379 lua_pushnil(L); 394 lua_pushnil(L);
diff --git a/src/udp.h b/src/udp.h
index c5b8688..2b831a5 100644
--- a/src/udp.h
+++ b/src/udp.h
@@ -23,7 +23,7 @@
23typedef struct t_udp_ { 23typedef struct t_udp_ {
24 t_socket sock; 24 t_socket sock;
25 t_timeout tm; 25 t_timeout tm;
26 int domain; 26 int family;
27} t_udp; 27} t_udp;
28typedef t_udp *p_udp; 28typedef t_udp *p_udp;
29 29
diff --git a/src/unix.c b/src/unix.c
index 935d4c3..f972738 100644
--- a/src/unix.c
+++ b/src/unix.c
@@ -1,8 +1,6 @@
1/*=========================================================================*\ 1/*=========================================================================*\
2* Unix domain socket 2* Unix domain socket
3* LuaSocket toolkit 3* LuaSocket toolkit
4*
5* RCS ID: $Id: unix.c,v 1.14 2009/05/27 09:31:35 diego Exp $
6\*=========================================================================*/ 4\*=========================================================================*/
7#include <string.h> 5#include <string.h>
8 6
diff --git a/src/url.lua b/src/url.lua
index 1e59771..1bfecad 100644
--- a/src/url.lua
+++ b/src/url.lua
@@ -2,7 +2,6 @@
2-- URI parsing, composition and relative URL resolution 2-- URI parsing, composition and relative URL resolution
3-- LuaSocket toolkit. 3-- LuaSocket toolkit.
4-- Author: Diego Nehab 4-- Author: Diego Nehab
5-- RCS ID: $Id: url.lua,v 1.38 2006/04/03 04:45:42 diego Exp $
6----------------------------------------------------------------------------- 5-----------------------------------------------------------------------------
7 6
8----------------------------------------------------------------------------- 7-----------------------------------------------------------------------------
@@ -16,7 +15,7 @@ module("socket.url")
16----------------------------------------------------------------------------- 15-----------------------------------------------------------------------------
17-- Module version 16-- Module version
18----------------------------------------------------------------------------- 17-----------------------------------------------------------------------------
19_VERSION = "URL 1.0.1" 18_VERSION = "URL 1.0.2"
20 19
21----------------------------------------------------------------------------- 20-----------------------------------------------------------------------------
22-- Encodes a string into its escaped hexadecimal representation 21-- Encodes a string into its escaped hexadecimal representation
@@ -142,7 +141,7 @@ function parse(url, default)
142 parsed.authority = n 141 parsed.authority = n
143 return "" 142 return ""
144 end) 143 end)
145 -- get query stringing 144 -- get query string
146 url = string.gsub(url, "%?(.*)", function(q) 145 url = string.gsub(url, "%?(.*)", function(q)
147 parsed.query = q 146 parsed.query = q
148 return "" 147 return ""
@@ -158,9 +157,12 @@ function parse(url, default)
158 if not authority then return parsed end 157 if not authority then return parsed end
159 authority = string.gsub(authority,"^([^@]*)@", 158 authority = string.gsub(authority,"^([^@]*)@",
160 function(u) parsed.userinfo = u; return "" end) 159 function(u) parsed.userinfo = u; return "" end)
161 authority = string.gsub(authority, ":([^:]*)$", 160 authority = string.gsub(authority, ":([^:%]]*)$",
162 function(p) parsed.port = p; return "" end) 161 function(p) parsed.port = p; return "" end)
163 if authority ~= "" then parsed.host = authority end 162 if authority ~= "" then
163 -- IPv6?
164 parsed.host = string.match(authority, "^%[(.+)%]$") or authority
165 end
164 local userinfo = parsed.userinfo 166 local userinfo = parsed.userinfo
165 if not userinfo then return parsed end 167 if not userinfo then return parsed end
166 userinfo = string.gsub(userinfo, ":([^:]*)$", 168 userinfo = string.gsub(userinfo, ":([^:]*)$",
@@ -185,6 +187,9 @@ function build(parsed)
185 local authority = parsed.authority 187 local authority = parsed.authority
186 if parsed.host then 188 if parsed.host then
187 authority = parsed.host 189 authority = parsed.host
190 if string.find(authority, ":") then -- IPv6?
191 authority = "[" .. authority .. "]"
192 end
188 if parsed.port then authority = authority .. ":" .. parsed.port end 193 if parsed.port then authority = authority .. ":" .. parsed.port end
189 local userinfo = parsed.userinfo 194 local userinfo = parsed.userinfo
190 if parsed.user then 195 if parsed.user then
diff --git a/src/usocket.c b/src/usocket.c
index bf2d19c..80d4d70 100644
--- a/src/usocket.c
+++ b/src/usocket.c
@@ -5,8 +5,6 @@
5* The code is now interrupt-safe. 5* The code is now interrupt-safe.
6* The penalty of calling select to avoid busy-wait is only paid when 6* The penalty of calling select to avoid busy-wait is only paid when
7* the I/O call fail in the first place. 7* the I/O call fail in the first place.
8*
9* RCS ID: $Id: usocket.c,v 1.38 2007/10/13 23:55:20 diego Exp $
10\*=========================================================================*/ 8\*=========================================================================*/
11#include <string.h> 9#include <string.h>
12#include <signal.h> 10#include <signal.h>
diff --git a/src/wsocket.c b/src/wsocket.c
index c82882a..12e6352 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -4,8 +4,6 @@
4* 4*
5* The penalty of calling select to avoid busy-wait is only paid when 5* The penalty of calling select to avoid busy-wait is only paid when
6* the I/O call fail in the first place. 6* the I/O call fail in the first place.
7*
8* RCS ID: $Id: wsocket.c,v 1.36 2007/06/11 23:44:54 diego Exp $
9\*=========================================================================*/ 7\*=========================================================================*/
10#include <string.h> 8#include <string.h>
11 9
diff --git a/test/urltest.lua b/test/urltest.lua
index d46cb03..71e4428 100644
--- a/test/urltest.lua
+++ b/test/urltest.lua
@@ -8,7 +8,7 @@ local check_build_url = function(parsed)
8 print("built is different from expected") 8 print("built is different from expected")
9 print(built) 9 print(built)
10 print(expected) 10 print(expected)
11 exit() 11 os.exit()
12 end 12 end
13end 13end
14 14
@@ -17,7 +17,7 @@ local check_protect = function(parsed, path, unsafe)
17 if built ~= path then 17 if built ~= path then
18 print(built, path) 18 print(built, path)
19 print("path composition failed.") 19 print("path composition failed.")
20 exit() 20 os.exit()
21 end 21 end
22end 22end
23 23
@@ -28,7 +28,7 @@ local check_invert = function(url)
28 if rebuilt ~= url then 28 if rebuilt ~= url then
29 print(url, rebuilt) 29 print(url, rebuilt)
30 print("original and rebuilt are different") 30 print("original and rebuilt are different")
31 exit() 31 os.exit()
32 end 32 end
33end 33end
34 34
@@ -37,24 +37,24 @@ local check_parse_path = function(path, expect)
37 for i = 1, math.max(table.getn(parsed), table.getn(expect)) do 37 for i = 1, math.max(table.getn(parsed), table.getn(expect)) do
38 if parsed[i] ~= expect[i] then 38 if parsed[i] ~= expect[i] then
39 print(path) 39 print(path)
40 exit() 40 os.exit()
41 end 41 end
42 end 42 end
43 if expect.is_directory ~= parsed.is_directory then 43 if expect.is_directory ~= parsed.is_directory then
44 print(path) 44 print(path)
45 print("is_directory mismatch") 45 print("is_directory mismatch")
46 exit() 46 os.exit()
47 end 47 end
48 if expect.is_absolute ~= parsed.is_absolute then 48 if expect.is_absolute ~= parsed.is_absolute then
49 print(path) 49 print(path)
50 print("is_absolute mismatch") 50 print("is_absolute mismatch")
51 exit() 51 os.exit()
52 end 52 end
53 local built = socket.url.build_path(expect) 53 local built = socket.url.build_path(expect)
54 if built ~= path then 54 if built ~= path then
55 print(built, path) 55 print(built, path)
56 print("path composition failed.") 56 print("path composition failed.")
57 exit() 57 os.exit()
58 end 58 end
59end 59end
60 60
@@ -63,7 +63,7 @@ local check_absolute_url = function(base, relative, absolute)
63 if res ~= absolute then 63 if res ~= absolute then
64 io.write("absolute: In test for '", relative, "' expected '", 64 io.write("absolute: In test for '", relative, "' expected '",
65 absolute, "' but got '", res, "'\n") 65 absolute, "' but got '", res, "'\n")
66 exit() 66 os.exit()
67 end 67 end
68end 68end
69 69
@@ -76,7 +76,7 @@ local check_parse_url = function(gaba)
76 io.write("parse: In test for '", url, "' expected ", i, " = '", 76 io.write("parse: In test for '", url, "' expected ", i, " = '",
77 v, "' but got '", tostring(parsed[i]), "'\n") 77 v, "' but got '", tostring(parsed[i]), "'\n")
78 for i,v in pairs(parsed) do print(i,v) end 78 for i,v in pairs(parsed) do print(i,v) end
79 exit() 79 os.exit()
80 end 80 end
81 end 81 end
82 for i, v in pairs(parsed) do 82 for i, v in pairs(parsed) do
@@ -84,7 +84,7 @@ local check_parse_url = function(gaba)
84 io.write("parse: In test for '", url, "' expected ", i, " = '", 84 io.write("parse: In test for '", url, "' expected ", i, " = '",
85 tostring(gaba[i]), "' but got '", v, "'\n") 85 tostring(gaba[i]), "' but got '", v, "'\n")
86 for i,v in pairs(parsed) do print(i,v) end 86 for i,v in pairs(parsed) do print(i,v) end
87 exit() 87 os.exit()
88 end 88 end
89 end 89 end
90end 90end
@@ -304,6 +304,92 @@ check_parse_url{
304 path = "path", 304 path = "path",
305} 305}
306 306
307-- IPv6 tests
308
309check_parse_url{
310 url = "http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html",
311 scheme = "http",
312 host = "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210",
313 authority = "[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80",
314 port = "80",
315 path = "/index.html"
316}
317
318check_parse_url{
319 url = "http://[1080:0:0:0:8:800:200C:417A]/index.html",
320 scheme = "http",
321 host = "1080:0:0:0:8:800:200C:417A",
322 authority = "[1080:0:0:0:8:800:200C:417A]",
323 path = "/index.html"
324}
325
326check_parse_url{
327 url = "http://[3ffe:2a00:100:7031::1]",
328 scheme = "http",
329 host = "3ffe:2a00:100:7031::1",
330 authority = "[3ffe:2a00:100:7031::1]",
331}
332
333check_parse_url{
334 url = "http://[1080::8:800:200C:417A]/foo",
335 scheme = "http",
336 host = "1080::8:800:200C:417A",
337 authority = "[1080::8:800:200C:417A]",
338 path = "/foo"
339}
340
341check_parse_url{
342 url = "http://[::192.9.5.5]/ipng",
343 scheme = "http",
344 host = "::192.9.5.5",
345 authority = "[::192.9.5.5]",
346 path = "/ipng"
347}
348
349check_parse_url{
350 url = "http://[::FFFF:129.144.52.38]:80/index.html",
351 scheme = "http",
352 host = "::FFFF:129.144.52.38",
353 port = "80",
354 authority = "[::FFFF:129.144.52.38]:80",
355 path = "/index.html"
356}
357
358check_parse_url{
359 url = "http://[2010:836B:4179::836B:4179]",
360 scheme = "http",
361 host = "2010:836B:4179::836B:4179",
362 authority = "[2010:836B:4179::836B:4179]",
363}
364
365check_parse_url{
366 url = "//userinfo@[::FFFF:129.144.52.38]:port/path;params?query#fragment",
367 authority = "userinfo@[::FFFF:129.144.52.38]:port",
368 host = "::FFFF:129.144.52.38",
369 port = "port",
370 userinfo = "userinfo",
371 user = "userinfo",
372 path = "/path",
373 params = "params",
374 query = "query",
375 fragment = "fragment"
376}
377
378check_parse_url{
379 url = "scheme://user:password@[::192.9.5.5]:port/path;params?query#fragment",
380 scheme = "scheme",
381 authority = "user:password@[::192.9.5.5]:port",
382 host = "::192.9.5.5",
383 port = "port",
384 userinfo = "user:password",
385 user = "user",
386 password = "password",
387 path = "/path",
388 params = "params",
389 query = "query",
390 fragment = "fragment"
391}
392
307print("testing URL building") 393print("testing URL building")
308check_build_url { 394check_build_url {
309 url = "scheme://user:password@host:port/path;params?query#fragment", 395 url = "scheme://user:password@host:port/path;params?query#fragment",
@@ -318,6 +404,30 @@ check_build_url {
318 fragment = "fragment" 404 fragment = "fragment"
319} 405}
320 406
407check_build_url{
408 url = "//userinfo@[::FFFF:129.144.52.38]:port/path;params?query#fragment",
409 host = "::FFFF:129.144.52.38",
410 port = "port",
411 user = "userinfo",
412 path = "/path",
413 params = "params",
414 query = "query",
415 fragment = "fragment"
416}
417
418check_build_url{
419 url = "scheme://user:password@[::192.9.5.5]:port/path;params?query#fragment",
420 scheme = "scheme",
421 host = "::192.9.5.5",
422 port = "port",
423 user = "user",
424 password = "password",
425 path = "/path",
426 params = "params",
427 query = "query",
428 fragment = "fragment"
429}
430
321check_build_url { 431check_build_url {
322 url = "scheme://user:password@host/path;params?query#fragment", 432 url = "scheme://user:password@host/path;params?query#fragment",
323 scheme = "scheme", 433 scheme = "scheme",
@@ -520,5 +630,6 @@ check_invert("/b/c/d;param#fragment")
520check_invert("/b/c/d;param?query#fragment") 630check_invert("/b/c/d;param?query#fragment")
521check_invert("/b/c/d?query") 631check_invert("/b/c/d?query")
522check_invert("/b/c/d;param?query") 632check_invert("/b/c/d;param?query")
633check_invert("http://he:man@[::192.168.1.1]/a/b/c/i.html;type=moo?this=that#mark")
523 634
524print("the library passed all tests") 635print("the library passed all tests")