diff options
53 files changed, 236 insertions, 108 deletions
@@ -1,5 +1,5 @@ | |||
1 | LuaSocket 2.0.2 license | 1 | LuaSocket 2.1 license |
2 | Copyright © 2004-2007 Diego Nehab | 2 | Copyright © 2004-2012 Diego Nehab |
3 | 3 | ||
4 | Permission is hereby granted, free of charge, to any person obtaining a | 4 | Permission is hereby granted, free of charge, to any person obtaining a |
5 | copy of this software and associated documentation files (the "Software"), | 5 | copy of this software and associated documentation files (the "Software"), |
@@ -1,4 +1,4 @@ | |||
1 | This is the LuaSocket 2.1.1. It has been tested on --[[WinXP--]], Mac OS X, | 1 | This is the LuaSocket 2.1. It has been tested on --[[WinXP--]], Mac OS X, |
2 | and --[[Linux--]]. Please use the Lua mailing list to report any bugs | 2 | and --[[Linux--]]. Please use the Lua mailing list to report any bugs |
3 | (or "features") you encounter. | 3 | (or "features") you encounter. |
4 | 4 | ||
@@ -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 | ||
27 | Done: | 17 | Done: |
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> |
98 | Field names are case insensitive (as specified by the standard) and all | 98 | Field names are case insensitive (as specified by the standard) and all |
99 | functions work with lowercase field names. | 99 | functions work with lowercase field names (but see |
100 | <a href=socket.html#headers.canonic><tt>socket.headers.canonic</tt></a>). | ||
100 | Field values are left unmodified. | 101 | Field 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> |
90 | LuaSocket version 2.1.1-rc1 is now available for download! | 90 | LuaSocket version 2.1-rc1 is now available for download! |
91 | It is compatible with Lua 5.1 and 5.2, and has | 91 | It is compatible with Lua 5.1 and 5.2, and has |
92 | been tested on Windows XP, Linux, and Mac OS X. Chances | 92 | been tested on Windows XP, Linux, and Mac OS X. Chances |
93 | are it works well on most UNIX distributions and Windows flavors. | 93 | are 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> |
128 | Main changes for LuaSocket 2.1.1-rc1 are IPv6 support | 128 | Main changes for LuaSocket 2.1-rc1 are IPv6 support |
129 | and Lua 5.2 compatibility. | 129 | and Lua 5.2 compatibility. |
130 | </p> | 130 | </p> |
131 | 131 | ||
@@ -135,6 +135,7 @@ and Lua 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 5.1's package | 42 | <p> LuaSocket 2.1-rc still uses Lua 5.1's package |
43 | system. Users that have already made the switch to | 43 | system. Users that have already made the switch to |
44 | Lua 5.2 should leave the default | 44 | Lua 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 | |||
95 | Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio | 95 | Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio |
96 | > socket = require("socket") | 96 | > socket = require("socket") |
97 | > print(socket._VERSION) | 97 | > print(socket._VERSION) |
98 | --> LuaSocket 2.1.1-rc1 | 98 | --> 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> |
93 | Field names are case insensitive (as specified by the standard) and all | 93 | Field names are case insensitive (as specified by the standard) and all |
94 | functions work with lowercase field names. | 94 | functions work with lowercase field names (but see |
95 | <a href=socket.html#headers.canonic><tt>socket.headers.canonic</tt></a>). | ||
95 | Field values are left unmodified. | 96 | Field 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() | |||
112 | print(socket.gettime() - t .. " seconds elapsed") | 112 | print(socket.gettime() - t .. " seconds elapsed") |
113 | </pre> | 113 | </pre> |
114 | 114 | ||
115 | <!-- socket.headers ++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> | ||
116 | |||
117 | <p class=name id="headers.canonic"> | ||
118 | socket.headers.<b>canonic</b></p> | ||
119 | |||
120 | <p> The <tt>socket.headers.canonic</tt> table | ||
121 | is used by the HTTP and SMTP modules to translate from | ||
122 | lowercase field names back into their canonic | ||
123 | capitalization. When a lowercase field name exists as a key | ||
124 | in this table, the associated value is substituted in | ||
125 | whenever the field name is sent out. | ||
126 | </p> | ||
127 | |||
128 | <p> | ||
129 | You can obtain the <tt>headers</tt> namespace if case run-time | ||
130 | modifications are required by running: | ||
131 | </p> | ||
132 | |||
133 | <pre class=example> | ||
134 | -- loads the headers module | ||
135 | local 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 | ----------------------------------------------------------------------------- |
7 | local ltn12 = require("ltn12") | 6 | local ltn12 = require("ltn12") |
8 | local mime = require("mime") | 7 | local 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 | ----------------------------------------------------------------------------- |
8 | local url = require("socket.url") | 7 | local url = require("socket.url") |
9 | local dispatch = require("dispatch") | 8 | local 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 | ----------------------------------------------------------------------------- |
7 | local base = _G | 6 | local base = _G |
8 | local table = require("table") | 7 | local 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 | ----------------------------------------------------------------------------- |
7 | local mime = require("mime") | 6 | local mime = require("mime") |
8 | local ltn12 = require("ltn12") | 7 | local 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | local http = require("socket.http") | 7 | local http = require("socket.http") |
@@ -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 |
@@ -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 | ----------------------------------------------------------------------------- |
7 | local ltn12 = require("ltn12") | 6 | local ltn12 = require("ltn12") |
8 | local mime = require("mime") | 7 | local 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 | #-------------------------------------------------------------------------- |
4 | DIST = luasocket-2.1.1-rc1 | 4 | DIST = luasocket-2.1-rc1 |
5 | 5 | ||
6 | TEST = \ | 6 | TEST = \ |
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 | ----------------------------------------------------------------------------- |
7 | local socket = require"socket" | 6 | local socket = require"socket" |
8 | host = host or "127.0.0.1" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | host = host or "localhost" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | host = host or "127.0.0.1" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | host = host or "*" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | host = host or "localhost" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | local socket = require("socket") | 6 | local socket = require("socket") |
8 | host = host or "*" | 7 | host = 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 | ----------------------------------------------------------------------------- |
7 | module("socket.headers") | 6 | module("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 | ----------------------------------------------------------------------------- |
@@ -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 | \*-------------------------------------------------------------------------*/ |
273 | const char *inet_trycreate(p_socket ps, int domain, int type) { | 271 | const 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 | /*-------------------------------------------------------------------------*\ |
@@ -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 | # |
99 | SO=$(SO_$(PLAT)) | 99 | SO=$(SO_$(PLAT)) |
100 | O=$(O_$(PLAT)) | 100 | O=$(O_$(PLAT)) |
101 | SOCKET_V=2.1.1 | 101 | SOCKET_V=2.1 |
102 | MIME_V=1.0.3 | 102 | MIME_V=1.0.3 |
103 | SOCKET_SO=socket.$(SO).$(SOCKET_V) | 103 | SOCKET_SO=socket.$(SO).$(SOCKET_V) |
104 | MIME_SO=mime.$(SO).$(MIME_V) | 104 | MIME_SO=mime.$(SO).$(MIME_V) |
@@ -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 | ----------------------------------------------------------------------------- |
@@ -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); | |||
23 | static int global_connect6(lua_State *L); | 21 | static int global_connect6(lua_State *L); |
24 | static int meth_connect(lua_State *L); | 22 | static int meth_connect(lua_State *L); |
25 | static int meth_listen(lua_State *L); | 23 | static int meth_listen(lua_State *L); |
24 | static int meth_getfamily(lua_State *L); | ||
26 | static int meth_bind(lua_State *L); | 25 | static int meth_bind(lua_State *L); |
27 | static int meth_send(lua_State *L); | 26 | static int meth_send(lua_State *L); |
28 | static int meth_getstats(lua_State *L); | 27 | static 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 | \*-------------------------------------------------------------------------*/ | ||
275 | static 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 | \*-------------------------------------------------------------------------*/ |
275 | static int meth_listen(lua_State *L) | 290 | static 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 | \*-------------------------------------------------------------------------*/ |
349 | static int tcp_create(lua_State *L, int domain) { | 364 | static 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); |
@@ -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 | ||
31 | typedef t_tcp *p_tcp; | 31 | typedef 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> |
@@ -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 | ----------------------------------------------------------------------------- |
@@ -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); | |||
32 | static int meth_sendto(lua_State *L); | 30 | static int meth_sendto(lua_State *L); |
33 | static int meth_receive(lua_State *L); | 31 | static int meth_receive(lua_State *L); |
34 | static int meth_receivefrom(lua_State *L); | 32 | static int meth_receivefrom(lua_State *L); |
33 | static int meth_getfamily(lua_State *L); | ||
35 | static int meth_getsockname(lua_State *L); | 34 | static int meth_getsockname(lua_State *L); |
36 | static int meth_getpeername(lua_State *L); | 35 | static int meth_getpeername(lua_State *L); |
37 | static int meth_setsockname(lua_State *L); | 36 | static 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 | \*-------------------------------------------------------------------------*/ | ||
232 | static 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 | \*-------------------------------------------------------------------------*/ |
232 | static int meth_getfd(lua_State *L) { | 247 | static 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 | \*-------------------------------------------------------------------------*/ |
359 | static int udp_create(lua_State *L, int domain) { | 374 | static 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); |
@@ -23,7 +23,7 @@ | |||
23 | typedef struct t_udp_ { | 23 | typedef 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; |
28 | typedef t_udp *p_udp; | 28 | typedef t_udp *p_udp; |
29 | 29 | ||
@@ -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 |
13 | end | 13 | end |
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 |
22 | end | 22 | end |
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 |
33 | end | 33 | end |
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 |
59 | end | 59 | end |
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 |
68 | end | 68 | end |
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 |
90 | end | 90 | end |
@@ -304,6 +304,92 @@ check_parse_url{ | |||
304 | path = "path", | 304 | path = "path", |
305 | } | 305 | } |
306 | 306 | ||
307 | -- IPv6 tests | ||
308 | |||
309 | check_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 | |||
318 | check_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 | |||
326 | check_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 | |||
333 | check_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 | |||
341 | check_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 | |||
349 | check_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 | |||
358 | check_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 | |||
365 | check_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 | |||
378 | check_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 | |||
307 | print("testing URL building") | 393 | print("testing URL building") |
308 | check_build_url { | 394 | check_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 | ||
407 | check_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 | |||
418 | check_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 | |||
321 | check_build_url { | 431 | check_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") | |||
520 | check_invert("/b/c/d;param?query#fragment") | 630 | check_invert("/b/c/d;param?query#fragment") |
521 | check_invert("/b/c/d?query") | 631 | check_invert("/b/c/d?query") |
522 | check_invert("/b/c/d;param?query") | 632 | check_invert("/b/c/d;param?query") |
633 | check_invert("http://he:man@[::192.168.1.1]/a/b/c/i.html;type=moo?this=that#mark") | ||
523 | 634 | ||
524 | print("the library passed all tests") | 635 | print("the library passed all tests") |