Kai Blin
63504e9e80
janitorial: Use poll() instead of select().
2008-03-24 13:41:57 +01:00
Andrew Talbot
7b380e0aeb
wininet: Assign to structs instead of using memcpy.
2008-03-24 11:33:16 +01:00
Rob Shearman
99f651bd37
wininet: The lpszLocalFileName parameter to CommitUrlCacheEntryA is optional, so check before converting it from Unicode to ANSI.
2008-03-17 15:20:10 +01:00
Jacek Caban
e8be5eaba7
wininet: Don't use query and hash part of URL to generate cache file name.
2008-03-17 11:42:39 +01:00
Marcus Meissner
ed966469a4
wininet: Split out NULL ptr and function ptr check.
2008-03-15 11:29:16 +01:00
Rob Shearman
db5745c001
wininet: If we receive an error from InitializeSecurityContext in HTTP_DoAuthorization then set pAuthInfo->finished so that we don't carry on using the security context.
2008-03-15 10:58:38 +01:00
Rob Shearman
e74514b138
wininet: Assume that if we're connected to an HTTP/1.1 server then connections can be kept alive by default.
...
So don't close the connection in this case in HTTP_FinishedReading.
2008-03-15 10:58:38 +01:00
Joris Huizer
4fca67e651
wininet: Fixed typos in two out-of-memory checks.
2008-03-13 20:44:18 +01:00
Rob Shearman
bcfb47e85b
wininet: Fix local variable shadowing in URLCacheContainer_OpenIndex.
2008-03-12 19:21:38 +01:00
Rob Shearman
716ecc42f9
wininet: Support the lpszFileExtension "reserved" parameter being passed into CommitUrlCacheEntryA.
...
Store it in the URL cache entry and allow it to be retrieved by
RetrieveUrlCacheEntryFile and other functions.
2008-03-12 17:58:37 +01:00
Rob Shearman
fee165ae47
wininet: The URL in CommitUrlCacheEntryInternal shouldn't be restricted to MAX_PATH chars in length.
...
Dynamically allocate it and consolidate cleanup at the end of the function.
2008-03-12 17:58:31 +01:00
Rob Shearman
cdd135c2f3
wininet: Fix URLCache_LocalFileNameToPathA to return a full path, rather than just the container path.
...
This was caused by path_len including the nul-terminator and so the rest
of the string was being added after the nul-terminator, which is
incorrect. This is fixed by making path_len not include the nul-terminator.
Also fix a few other issues with the function, like not passing a
correct length into the second call to WideCharToMultiByte, nRequired
being calculated incorrectly and the string not always being nul-terminated.
Add a test for this function by testing the lpszLocalFileName field
obtained from RetrieveUrlCacheEntryFileA.
2008-03-12 17:58:20 +01:00
Rob Shearman
c46279ced7
wininet: Make some pointers const in URL cache functions.
2008-03-12 17:58:10 +01:00
Rob Shearman
f1af593988
wininet: Use LIST_FOR_EACH_ENTRY in URLCacheContainers_FindContainerW instead of LIST_FOR_EACH and LIST_ENTRY.
2008-03-12 17:58:03 +01:00
Rob Shearman
4041c2015b
wininet: Add tests for Find{First,Next}UrlCacheEntryA functions.
2008-03-12 17:57:56 +01:00
Rob Shearman
160bc04343
wininet: Move URL cache hash entry validation to a separate function.
2008-03-12 17:57:30 +01:00
Rob Shearman
7fde7aef78
wininet: Implement FindFirstUrlCacheEntry{A, W}, FindNextUrlCacheEntryA and FindCloseUrlCache.
2008-03-12 17:57:25 +01:00
Rob Shearman
99e7f7ab6e
wininet: Add tests for some URL cache functions.
2008-03-12 17:55:41 +01:00
Rob Shearman
ebaa4d987d
wininet: Only clear authentication header if the connection has authentication information.
2008-03-12 17:55:21 +01:00
Rob Shearman
b8ad4dee86
wininet: Fix proxy authentication by using the data in lpwhr->pProxyAuthInfo in HTTP_InsertAuthorization instead of lpwhr->pAuthInfo when inserting the Proxy-Authentication header.
2008-03-12 17:55:12 +01:00
Jacek Caban
7e63f95326
wininet: Move InternetQueryOption(INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT) to vtbl.
2008-03-12 12:00:00 +01:00
Jacek Caban
ce6a2289c6
wininet: Move InternetQueryOption(INTERNET_OPTION_DATAFILE_NAME).
2008-03-12 11:59:54 +01:00
Jacek Caban
0e010d83a1
wininet: Move InternetQueryOption(INTERNET_OPTION_URL) to vtbl.
2008-03-12 11:59:47 +01:00
Jacek Caban
e2933c20d6
wininet: Move INTERNET_OPTION_HANDLE_TYPE to vtbl.
2008-03-12 11:59:41 +01:00
Rob Shearman
0be05ab6aa
wininet: Retrieve the maximum token length from the SSP and use a buffer of that length in calls to InitializeSecurityContextW.
...
Otherwise, InitializeSecurityContextW could run out of space with our
small, fixed buffer and fail.
2008-03-10 19:12:54 +01:00
Rob Shearman
7631bdf0c1
wininet: Allow HTTP_DoAuthorization to accept a NULL username/domain in the non-Basic case.
...
When using SSPI, pass in a NULL identity in this case so that the SSP
can try to use cached credentials.
2008-03-10 19:12:54 +01:00
Rob Shearman
8c6ac00820
wininet: Don't call DeleteSecurityContext and FreeCredentialsHandle on invalid handles.
2008-03-10 19:12:54 +01:00
Rob Shearman
bdc81d9963
wininet: Make the reference count of WININETHANDLEHEADER thread-safe by using InterlockedIncrement/InterlockedDecrement.
2008-03-10 19:12:54 +01:00
Rob Shearman
48000893f9
makefiles: Simplify the use of the IMPORTLIB variable in the DLL makefiles.
...
Only specify the root to keep platform-specifics out of the individual
DLL makefiles.
2008-03-04 20:55:01 +01:00
Rob Shearman
0aec3fcf86
wininet: Fix compile with MinGW.
2008-03-04 12:01:40 +01:00
Jacek Caban
d597fd12fc
wininet: Moved InternetReadFileExA to vtbl.
2008-03-03 20:45:31 +01:00
Francois Gouget
89bdd639df
wininet/tests: FtpCommandA() is not available on Win9x. So load it dynamically and skip some tests.
2008-03-03 12:04:10 +01:00
Jacek Caban
ca39a55e88
wininet: Don't use INTERNET_ReadFile in HTTP_DrainContent.
2008-03-03 12:00:32 +01:00
Jacek Caban
352b4212a1
wininet: Move FTP structs and functions declarations from internet.h.
2008-03-03 12:00:27 +01:00
Jacek Caban
3b4ca69e18
wininet: Move InternetReadFile to vtbl.
2008-03-03 12:00:20 +01:00
Jacek Caban
9a5c046129
wininet: Move INTERNET_STATUS_REQUEST_COMPLETE call from INTERNET_ReadFile.
2008-03-03 12:00:06 +01:00
Jacek Caban
d3682dd33f
wininet: Fixed some tests.
2008-03-03 12:00:00 +01:00
Jacek Caban
3314184597
wininet: Move InternetQueryDataAvailable to vtbl.
2008-02-29 20:07:13 +01:00
Jacek Caban
66259555ff
wininet: Move WININETFTPFINDNEXTW declaration to ftp.c.
2008-02-28 10:44:50 +01:00
Jacek Caban
8c45eecca7
wininet: Moved InternetFindNextFileW implementation to vtbl.
2008-02-28 10:44:42 +01:00
Jacek Caban
0e33eee9a2
wininet: Use vtbl for InternetSetOption(INTERNET_OPTION_[SEND|RECEIVE]_TIMEOUT) implementation.
2008-02-27 14:52:25 +01:00
Jacek Caban
1ffcfbce85
wininet: Use vtbl in InternetWriteFile implementation.
2008-02-27 14:52:24 +01:00
Jacek Caban
7dc9bf677b
wininet: Moved close_connection to vtbl.
2008-02-27 14:52:24 +01:00
Jacek Caban
5a535d6b23
wininet: Moved handle destructor to vtbl.
2008-02-27 14:52:24 +01:00
Jacek Caban
928c9f0984
wininet: Fixed version returned by INTERNET_OPTION_VERSION.
2008-02-27 14:52:24 +01:00
Maarten Lankhorst
5132fb4469
wininet: Fix retrieving raw headers.
2008-02-27 14:52:24 +01:00
Maarten Lankhorst
60401737c6
wininet: Add stub for INTERNET_OPTION_PER_CONNECTION.
2008-02-26 11:19:24 +01:00
Francois Gouget
1fa0e443e3
wininet/tests: Don't include the trailing '\0' in dwHeadersLength otherwise HttpSendRequestEx() sends it too which some servers object to.
2008-02-19 13:39:25 +01:00
Francois Gouget
abfa73b5c1
wininet: Document HttpAddRequestHeadersW()'s handling of the trailing '\0'. Fix tracing of the corresponding header strings as they may not be '\0' terminated.
2008-02-19 13:39:24 +01:00
Rob Shearman
719cd82f35
wininet: Fix potential buffer overrun in HttpQueryInfoA.
...
If HTTP_QUERY_CUSTOM is specified then the buffer contains a
null-terminated string on input and data of length len on output. The
code wasn't taking into account that the input len could be less than
the length of the string and thus could result in the allocated buffer
being overrun with the call to WideCharToMultiByte.
2008-02-19 13:39:24 +01:00
Hans Leidekker
9717113fcb
wininet: Rename a function to better match what it does.
2008-02-18 13:33:52 +01:00
Hans Leidekker
2617fb6dea
wininet: Handle the "100 Continue" response by ignoring it.
2008-02-18 13:33:33 +01:00
Hans Leidekker
d0033dbaed
wininet: Honour the version override in HttpOpenRequest.
2008-02-18 13:33:10 +01:00
Rob Shearman
2e99817a40
wininet: Fix the return value check of SHGetSpecialFolderPathW in URLCacheContainers_CreateDefaults.
...
It returns a BOOL, not an HRESULT.
2008-02-16 13:54:28 +01:00
Rob Shearman
f8f9dbbbe7
wininet: Fix an off-by-one error in the boundary checks in HTTP_DecodeBase64.
2008-02-16 13:54:17 +01:00
Jacek Caban
f979134270
wininet: Code clean up.
2008-02-15 10:00:12 +01:00
Jacek Caban
e49e792849
wininet: Added cache test.
2008-02-15 10:00:10 +01:00
Jacek Caban
6ce88e0aab
wininet: Added correct InternetQueryOption(INTERNET_OPTION_DATAFILE_NAME) implementation.
2008-02-15 10:00:06 +01:00
Jacek Caban
d7a49e8147
wininet: Added beginning support for HTTP cache files.
2008-02-15 10:00:03 +01:00
Andrew Talbot
45481db078
wininet: Remove unneeded casts.
2008-02-05 12:19:37 +01:00
Hans Leidekker
b0912d1151
wininet: Add zero value content length header to POST requests only.
2008-02-04 14:18:51 +01:00
Hans Leidekker
c132dd9360
wininet: Send HTTP/1.1 requests by default.
2008-02-04 14:18:20 +01:00
Hans Leidekker
b069ef4268
wininet: Make sure not to overwrite any caller supplied authorization header.
2008-02-04 14:18:20 +01:00
Rob Shearman
59ab0cf362
wininet: HTTP_Connect should fail if a NULL or empty hostname is passed in.
...
Add tests for these circumstances.
2008-02-04 13:04:34 +01:00
Rob Shearman
5edcf3ab6c
wininet: Pass the server name into InitializeSecurityContextW.
2008-01-25 12:30:08 +01:00
Marcus Meissner
45fbfbcef4
wininet: Check if buffer has overflowed potentially.
2008-01-24 11:41:22 +01:00
Andrey Esin
325649c3f8
wininet: One addition to Russian translation.
2008-01-23 11:31:42 +01:00
Francois Gouget
44b52b128c
Assorted spelling fixes.
2008-01-16 12:48:29 +01:00
Gerald Pfeifer
3f1a20b8b1
wininet: Fix type of a loop variable in HTTP_BuildHeaderRequestStr().
2008-01-14 15:31:37 +01:00
Austin English
0e4adae973
Spelling fixes.
2008-01-07 13:41:01 +01:00
Hans Leidekker
4d84eb26d0
wininet: Fix handling of host and referrer headers in HttpOpenRequest.
2008-01-07 12:02:12 +01:00
Marcus Meissner
fe475d9e88
wininet: Check return value of InternetCrackUrl when checking referrer host.
2008-01-03 13:30:26 +01:00
Michael Stefaniuc
d152d5ceeb
wininet: Fix typo in comparison with NULL. Found by Smatch.
2007-12-31 16:45:49 +01:00
Johannes Stezenbach
a3ae419594
wininet: Fix error return code in FindFirstUrlCacheEntryW() stub.
2007-12-23 14:17:12 +01:00
Johannes Stezenbach
7e18416e80
wininet: Implement support for INTERNET_OPTION_VERSION in InternetQueryOptionW.
2007-12-23 14:17:12 +01:00
Hans Leidekker
b529b3bb32
wininet: Make FtpGetCurrentDirectoryA pass all todo_wine tests.
2007-12-10 12:27:08 +01:00
Francois Gouget
6cdbb96b27
wininet/tests: Remove trailing spaces in ok() calls.
2007-12-07 14:53:25 +01:00
Roy Shea
91d07f6995
wininet: Added check of dwStructSize required by Windows in calls to InternetCrackUrlA.
2007-12-05 12:05:37 +01:00
Roy Shea
7903d7f3f4
wininet: Removed inline from copy_compsA and zero_compsA to allow Windows testing.
2007-12-05 12:05:10 +01:00
Zac Brown
6ad1ef7a28
wininet: Add test for FtpGetCurrentDirectoryA in wininet/tests/ftp.c.
2007-12-03 14:50:52 +01:00
Zac Brown
b9b900f4b8
wininet: Fix FtpGetCurrentDirectoryW to handle bad input.
2007-12-03 14:50:47 +01:00
Rob Shearman
01826e0c98
wininet: Don't clear the auth data for Basic authentication in HTTP_InsertAuthorizationForHeader.
...
It isn't tracked per connection, unlike NTLM authentication, and so the
server will return a 401 error and try to get us to authenticate again.
However, this doesn't work as the authentication information is assumed
by the code to be valid for the whole connection.
2007-11-27 16:42:26 +01:00
Michael Stefaniuc
6d8c2d744b
wininet/tests: Do not compare the return value of socket() with 0. Use INVALID_SOCKET instead.
2007-11-27 12:29:42 +01:00
Hans Leidekker
a0c3816dbf
wininet: Initialize path buffer in InternetSetCookie.
2007-11-19 13:52:26 +01:00
Hans Leidekker
5ccfec6428
wininet: Fix a number of problems with InternetGetCookie.
...
This version incorporates Lei Zhang's changes to the test, with his consent.
2007-11-15 11:07:46 +01:00
Hans Leidekker
b6ee3c1d6b
wininet: Fix a number of problems with InternetSetCookie.
2007-11-15 11:07:35 +01:00
Hans Leidekker
864db96626
wininet: Fix two handle leaks in the test.
2007-11-12 11:40:59 +01:00
Lei Zhang
83a4dbaa68
wininet: Skip strcmp() in a test if the returned value/len is wrong.
2007-11-09 12:56:11 +01:00
Juan Lang
f15bbdcd5a
wininet: Initialize length of values that aren't being requested.
2007-11-09 12:25:01 +01:00
Juan Lang
9adf83e90d
wininet: Don't use HEAP_ZERO_MEMORY on memory that's fully initialized.
2007-11-08 12:18:31 +01:00
Juan Lang
a1ab4a7eff
wininet: Fix another typo.
2007-11-08 12:18:30 +01:00
Juan Lang
b210e3a751
wininet: Fix typo.
2007-11-08 12:18:30 +01:00
Lei Zhang
f727e56d6d
wininet: Initialize ftp sockets.
2007-11-08 12:18:30 +01:00
EA Durbin
bc745fa4c4
wininet: Return true for case INTERNET_OPTION_SECURITY_FLAGS.
2007-11-07 12:02:30 +01:00
Nigel Liang
6f44627b04
wininet: Release object in HttpSendRequestExW before return on error.
2007-11-05 15:05:16 +01:00
Hans Leidekker
9e934ee178
wininet: Implement and test FtpCommand{A, W}.
2007-11-01 12:37:27 +01:00
Hans Leidekker
5270b429fa
wininet: Correct several ftp server response to error code mappings.
2007-11-01 12:37:18 +01:00
Hans Leidekker
1a8327468c
wininet: Don't release the parent object in FTP_Connect, the caller will do that.
2007-10-30 14:19:20 +01:00
Hans Leidekker
a844a38fad
wininet: Use a single connection for all ftp tests.
2007-10-30 11:30:15 +01:00
Hans Leidekker
64359c2432
wininet: Always send a content length header, even if there is no content.
2007-10-29 13:06:50 +01:00
Hans Leidekker
e8eaee4f6a
wininet: Always close the data connection before receiving a server response.
2007-10-29 12:03:15 +01:00
Hans Leidekker
e55531d694
wininet: Always return an error when a transfer is in progress.
2007-10-29 12:03:06 +01:00
Hwang YunSong(황윤성)
94ac6cdfd8
wininet: Updated Korean resource.
2007-10-25 13:57:54 +02:00
Francois Gouget
c4b1195c0c
Assorted spelling fixes.
2007-10-23 18:20:27 +02:00
Juan Lang
d857c04c95
wininet: Don't assume lpBuffersIn is not NULL.
2007-10-23 12:23:52 +02:00
Juan Lang
1b42c00789
wininet: Pass hash entry directly to URLCache_DeleteEntryFromHash.
2007-10-23 12:23:41 +02:00
Juan Lang
d448a2ad9b
wininet: Implement RetrieveUrlCacheEntryFileW.
2007-10-23 12:23:36 +02:00
Juan Lang
922dc7b627
wininet: Implement UnlockUrlCacheEntryFileW.
2007-10-23 12:23:32 +02:00
Juan Lang
9949926441
wininet: Pass hash entry directly to URLCache_HashEntrySetUse rather than searching for it again.
2007-10-23 12:23:25 +02:00
Juan Lang
601b6835ed
wininet: Introduce a URLCache_FindHashW, and use it rather than URLCache_FindEntryInHashW.
2007-10-23 12:23:19 +02:00
Juan Lang
af61cbdd03
wininet: Use URLCache_FindHash rather than URLCache_FindEntryInHash.
2007-10-23 12:23:10 +02:00
Hans Leidekker
533aa4dcd5
wininet: Use passive mode for the ftp tests.
2007-10-22 13:52:00 +02:00
Hans Leidekker
cc54dfe1e2
wininet: Fix some failing ftp tests on Windows and Wine.
2007-10-22 13:51:56 +02:00
Hans Leidekker
dd5347ee6a
wininet: Properly clean up ftp sessions.
2007-10-22 13:51:52 +02:00
Hans Leidekker
c33a51eaf2
wininet: Separate ftp session destruction from closing connections.
2007-10-22 13:51:47 +02:00
Juan Lang
c527c7611a
wininet: Implement DeleteUrlCacheEntryW.
2007-10-22 12:36:08 +02:00
Juan Lang
d155915861
wininet: Implement IsUrlCacheEntryExpiredW.
2007-10-22 12:36:08 +02:00
Juan Lang
6fdec3d501
wininet: Add a URLCache_FindEntryInHashW helper, and use it to simplify finding an entry in a hash with a wide-character URL string.
2007-10-22 12:36:08 +02:00
Juan Lang
1594b429f8
wininet: Implement IsUrlCacheEntryExpiredA.
2007-10-22 12:36:08 +02:00
Juan Lang
a6c252c122
wininet: Update comments to match function parameters.
2007-10-22 12:36:08 +02:00
Nigel Liang
7d2ac2039b
wininet: Release object in HttpEndRequestW after use.
2007-10-18 13:21:28 +02:00
Detlef Riekenberg
a53df53f2b
wininet/tests: Test NULL pointer for InternetCanonicalizeUrlA.
2007-10-16 13:55:13 +02:00
Detlef Riekenberg
9b43174f3f
wininet: Fix flags and SetLastError for InternetCanonicalizeUrlA/W.
2007-10-16 13:55:02 +02:00
Daniel Nylander
f53e196ed5
wininet: Add Swedish translation.
2007-10-16 12:41:13 +02:00
Andrew Talbot
2b8a6a3a06
wininet: Fix a memory leak.
2007-10-12 11:48:31 +02:00
Detlef Riekenberg
f98b4507ba
wininet/tests: Initial tests for InternetCanonicalizeUrlA.
2007-10-11 16:24:28 +02:00
Misha Koshelev
705b01c054
wininet: When sending INTERNET_STATUS_HANDLE_CLOSING make sure the freed handle is not yet available.
2007-09-25 13:51:34 +02:00
Misha Koshelev
01de104a75
wininet/tests: Add test to show that InternetCloseHandle closes open child handles too.
2007-09-21 11:53:09 +02:00
Misha Koshelev
728e5fa559
wininet: Track child handles, free all child handles on WININET_FreeHandle as native.
2007-09-21 11:53:04 +02:00
Juan Lang
ba45902daf
wininet: Create a TCP connection if FLAG_ICC_FORCE_CONNECTION is specified.
2007-09-18 10:42:35 +02:00
Alexandre Julliard
23c58d3a21
wininet/ftp: There's no need to query the file size before retrieving a file.
2007-09-17 12:56:48 +02:00
Alexandre Julliard
b20694e732
wininet/tests: Anonymous FTP can succeed without a password.
2007-09-14 16:59:06 +02:00
Americo Jose Melo
c5ba90131e
Update the Portuguese translation.
2007-09-13 13:28:26 +02:00
Francois Gouget
d4337f2b5e
wininet: Fix many wininet prototypes: the context is a DWORD_PTR now.
2007-08-30 17:02:49 +02:00
Misha Koshelev
2f3805a3bd
wininet: Send INTERNET_STATUS_HANDLE_CLOSING when object is being destroyed as native does.
2007-08-23 13:13:35 +02:00
Misha Koshelev
0f117e568f
wininet: Separate connection closing from object destruction.
2007-08-23 13:13:24 +02:00
Misha Koshelev
4b2f9af998
wininet: Rename WININET_object_destructor to a more general WININET_object_function.
2007-08-23 13:13:14 +02:00
Misha Koshelev
1ee9ea91a5
wininet: Fix reference count on internet handle for asynchronous InternetReadFileEx call.
2007-08-22 12:18:59 +02:00
Misha Koshelev
5320d3e3ea
wininet: Don't send INTERNET_STATUS_HANDLE_CLOSING when closing handle opened with InternetOpen for HTTP connection.
2007-08-22 12:18:59 +02:00
Paul Vriens
36e416b614
wininet/tests: Fix test failures for wininet.dll that comes with IE7.
2007-08-17 11:47:46 +02:00
Mikołaj Zalewski
5cdfee8153
wininet: A small test for HttpQueryInfoA.
2007-08-16 11:52:12 +02:00
Mikołaj Zalewski
3fa49f0f02
wininet: Make HttpQueryInfo[AW] work for lpBuffer == NULL and len > 0.
2007-08-16 11:52:06 +02:00
Mikołaj Zalewski
ab7d17727c
wininet: Support HTTP_QUERY_RAW_HEADER_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS.
2007-08-16 11:51:52 +02:00
Misha Koshelev
9aac2fcf55
wininet/tests: Test that for an open HTTP connection InternetQueryDataAvailable succeeds or returns ERROR_IO_PENDING.
2007-08-13 12:36:25 +02:00
Misha Koshelev
6ea2441ff9
wininet: InternetQueryDataAvailable does not return ERROR_NO_MORE_FILES when no more HTTP data is available.
2007-08-13 12:36:19 +02:00
Misha Koshelev
662f44a619
wininet: Don't peek data in InternetQueryDataAvailable if there is no more to be expected.
2007-08-13 12:36:09 +02:00
Hans Leidekker
bb9413d77a
wininet: Process caller supplied headers after inserting connection and authorization headers, not before.
2007-08-10 12:58:17 +02:00
Hans Leidekker
4332f418a5
wininet: Implement INTERNET_OPTION_CALLBACK in InternetSetOption{A, W}.
2007-08-10 12:58:17 +02:00
Hans Leidekker
c1c6f4ad6b
wininet: Also set last error on NULL first parameter in InternetCreateUrl{A, W}.
2007-08-10 12:58:17 +02:00
Hans Leidekker
d10891eab9
wininet: Don't crash on NULL first or last parameter in InternetCrackUrlW.
2007-08-10 12:58:17 +02:00