Commit Graph

365 Commits

Author SHA1 Message Date
Oliver Tappe
6b6ff33d60 Fix zlib-dependency in libnetapi.
* Fix copy-'n'paste bug that resulted in the zlib.h dependency being
  added to no source file at all.
2014-05-24 20:26:41 +02:00
Jessica Hamilton
194ce33d65 DynamicBuffer: remove unneeded size check. CID 604168. 2014-05-08 16:41:14 +12:00
Jessica Hamilton
41a9299bb5 BNetEndPoint: fix signedness issues. CID 604169. 2014-05-08 13:48:51 +12:00
Adrien Destugues
4991d3fb52 Fix build. 2014-04-12 09:32:43 +02:00
Adrien Destugues
cfc4b62367 Network Kit: Prepare for HTTP range requests
* The DataReceived hook gets a position argument, making it possible for
listeners to handle out-of-order data (from two range requests at
different positions, for example)
* Adjust HaikuDepot (only user of the API in our sources)
* Add a copy constructor to HTTPRequest that copies the relevant
parameters from an existing request. Makes it easy to repeat a request
with a different range. Could be useful for restarting downloads, or
paralellizing them.
* Add SetRangeStart, SetRangeEnd calls to HTTPRequest, no implementation
yet. I'm putting all the API changes in this commit as it needs to be
synced with a matching haikuwebkit release.
* All archs must update to HaikuWebkit 1.3.0. Previous versions are
broken by this.
2014-04-12 08:57:26 +02:00
Adrien Destugues
f325986993 FileRequest: identify unknown files.
* WebKit testsuite relies on the MIME types being correct, so when the
file doesn't have one, try to identify it.
* May be useful for other apps using FileRequest, anyway.
2014-04-10 08:51:00 +02:00
Adrien Destugues
a8d8e823ea HttpRequest: handle 302 and 307 redirects.
* Makes jamendo.com player work, as their soundfiles are behind a
temporary redirect for load balancing.
2014-04-10 08:50:59 +02:00
Adrien Destugues
943b310c90 Data URLs: fix size computation.
The decoded data is 3/4 the size of base64 encoded, not 4/3.
2014-03-31 09:59:12 +02:00
Oliver Tappe
2e61b6dd1d Adjust libnetwork.so to no longer depend on libbe.so.
* Libbe is not available when cross-building the *_bootstrap packages,
  so no libnetwork could not be used either, which made building 
  anything network-related impossible.
* The only code in libnetwork that requires libbe is the notification,
  so I moved that over to libbnetapi. Non-C++ applications can't use
  the notification calls anyway, as their interface is C++-only.
2014-03-02 21:55:25 +01:00
Adrien Destugues
87400ed1de Use local time when computing max-age expiration
BDateTime.SetTime_t expects its parameter to be in local time.
2014-03-01 09:16:33 +01:00
Julian Harnath
d10ecc2c41 Style fix: add parameter name
* As pointed out by Axel.
2014-02-22 13:51:55 +00:00
Julian Harnath
c99d7ea45c Fix double-free crash in BSecureSocket when cert. verification fails
* BSecureSocket::CertificateVerificationFailed() took a BCertificate
  instance by value as parameter.
  BCertificate deletes internal data in its destructor. Passing an
  object by value creates a copy, so the copy attempted to delete
  the internal data again during its destruction.
  This caused mail_daemon to crash here when it came across a failed
  certificate.

* Fix: pass BCertificate object as reference.
2014-02-22 02:09:55 +00:00
Adrien Destugues
67d06c8802 Httprequest: remove "chunked" from http accept-encoding.
This is useless, chunked support is mandatory in HTTP1.1, and it's not a
content-encoding, but a transfer-encoding, so accept-encoding wouldn't
help anyway.
2014-02-17 14:48:57 +01:00
Stephan Aßmus
3e2e0e63cd BHttpRequest: Improve cookie string building loop...
... to avoid some checks. Does it make the code more readable? Not
that it was hard to follow before.
2014-02-13 12:27:33 +01:00
Stephan Aßmus
1514eb3753 BHttpRequest: More elegant way to build cookieString 2014-02-13 10:21:37 +01:00
Stephan Aßmus
6aeaeade6b BHttpRequest: Small fixes
* Allow BString to find a semicolon more efficiently.
 * Replace a dynamic stack allocated array with BStackOrHeapArray
   in one more place.
2014-02-13 10:12:55 +01:00
Adrien Destugues
3e358c1fca HttpRequest: use BStackOrHeapArray
Sometimes we get enough bytes at once from the connection to trigger a
stack overflow. Allocate memory on the heap instead.
2014-02-13 09:36:40 +01:00
Adrien Destugues
6555120f3b ...and also fix a mismatched prototype
gcc2 doesn't seem to notice.
2014-02-11 13:26:32 +01:00
Adrien Destugues
c3d0dd7a5e HttpRequest: support gzip and deflate compression.
* Use the ZlibDecompressor to decompress the data
* Advertise support in accept-encoding

This should make web browsing feel even faster on wesites that support
these compresion schemes. It also fixes some websites (www.ru,
rainloop.net, ...) that serve gzipped resources even to browser not
supporting it.
2014-02-11 12:06:42 +01:00
Adrien Destugues
36b1f55a18 DynamicBuffer: implement BDataIO
This makes it possible to use it with the ZlibDecompressor.
2014-02-11 12:06:41 +01:00
Adrien Destugues
35480631f2 Fix various issues with cookie time.
* This is more tricky than it looks.
* We probably want easier conversions from struct tm to BDateTime, and
direct parsing/formating there.
2014-01-23 19:24:34 +01:00
Adrien Destugues
afdca74d9b Make signal handler static
We don't want this method to be exposed in the global namespace!
Also add a note about removing this signal-based solution when our
close() method can be interrupted in other ways.

thanks axel for watching!
2014-01-23 17:23:29 +01:00
Adrien Destugues
d417133ed2 Fix cookies with far expiration date.
Some websites set cookies expiring in the (not so) far future, after year 2038.
So, using time_t to store the cookie expiration date won't do. Use the
BDateTime class instead.

This makes goodsearch.com login work again (#10460).
2014-01-23 17:22:46 +01:00
Adrien Destugues
281727261d urlRequest: interrupt syscalls using a signal
Sometimes an HTTP request would get stuck in a call to connect(). While
our read() and write() implementations are interrupted if you close()
the socket, our connect() isn't. It would nonetheless abort the
connection process, and connect would stay blocked for quite a long
time.

When navigating away from a page, WebKit closes all pending connections,
and in our network backend this also means freeing the request object.
But, the destructor can't be called until the thread has stopped
running, to ensure proper cleanup.

Avoid the lockup in connect by sending a signal (SIGUSR1) to the thread
we want to unlock. This interrupts the syscall, and the thread exits
immediately.
2014-01-23 16:01:39 +01:00
Stephan Aßmus
d5c2ed6b14 FileRequest: Better error handling for size mismatches 2014-01-23 10:20:22 +01:00
Stephan Aßmus
084a160655 FileRequest: Fix transfer error detection not working. CID 1162764 2014-01-22 22:23:31 +01:00
Stephan Aßmus
840aeab5b9 NetEndpoint: Don't forget to close socket in error case. CID 1162792 2014-01-22 17:41:52 +01:00
Stephan Aßmus
dae0b385cf DataRequest: Don't leak buffer in error case. CID 1162796 2014-01-22 17:41:52 +01:00
Stephan Aßmus
59246cf737 HttpRequest: Apparently fContext can be NULL. CID 1162798 2014-01-22 17:41:51 +01:00
Adrien Destugues
7e433e7cad FileRequest: set the mime type early.
WebKit may use the MIME type during incremental loading, so we better
set it before we start feeding the data.
2014-01-19 12:09:52 +01:00
Adrien Destugues
32da3d9dae Cookies: avoid timezone confusion
Cookies date are always in GMT time. Using mktime wrongly converts them
as local time instead. This would lead to cookies expiring too early or
too late.
2014-01-19 12:09:51 +01:00
Adrien Destugues
ab390d3af3 Style fixes and allocation checks 2014-01-17 15:08:57 +01:00
Adrien Destugues
9e9ccf69c0 Yet anoter noSSL build fix. 2014-01-17 12:13:27 +01:00
Adrien Destugues
76b3c7f420 More noSSL build fixes. 2014-01-17 11:21:13 +01:00
Adrien Destugues
e395fc4f3b NetworkCookieJar: use-after-free, memcpy overwrite
* Add some tracing, std::nothrow and null checks
* The HashString class doesn't like SetTo being called with a substring
of the current key, so use a copy of it instead.

Fixes #6667.
2014-01-16 16:54:51 +01:00
Adrien Destugues
547c1486ff Add some missing std::nothrow
... and allocation failure checks.
2014-01-16 13:29:15 +01:00
Adrien Destugues
b70c72a692 Fix concurrency issues in BSecureSocket
* Use pthread_once to initialize the SSL context once, in a thread-safe
way.
* Do not delete the BIO immediately when closing a connexion, instead
delay this to the destructor. This makes sure the protocol loop is done
running when we do that.
* Instead of creating a new BIO when we reconnect an already used
connection, create the BIO upfront, and reuse it with the new file
descriptor.
* Fix a memory leak: the SSL struct from OpenSSL was never freed, only
the BIO was.

Fixes #10414.
2014-01-16 11:25:47 +01:00
Adrien Destugues
67af469ef0 Fix time_t/bigtime_t mixup.
Thanks stippi for noticing!
2014-01-16 09:41:01 +01:00
Adrien Destugues
3db3864644 Fix crash when trying to open a non-existing file. 2014-01-16 09:30:13 +01:00
Adrien Destugues
385a7d89b7 More style fixes. 2014-01-16 09:30:12 +01:00
Adrien Destugues
159d1fb69a Style fixes, build fix with OpenSSL disabled. 2014-01-15 23:32:10 +01:00
Adrien Destugues
00b65b2d7b FileRequest: multiple fixes
* Don't crash when opening a symlink, traverse it instead.
* Add a ".." entry to navigate to the parent folder
* Set the encoding to utf-8 in the MIME header, but this doesn't seem to
work.
2014-01-15 20:20:58 +01:00
Adrien Destugues
4e4396fa46 Fix build. 2014-01-15 17:52:39 +01:00
Adrien Destugues
5ebdc79955 SecureSocket: add some certificate support
* Instead of creating an OpenSSL context ofor each socket, use a global
one and initialize it lazily when the first SecureSocket is created
* Load the certificates from our certificate list so SSL certificates
sent by servers can be validated.
* Add a callback for signalling that certificate validation failed, the
default implementation proceeds with the connection anyway (to keep the
old behavior).
* Introduce BCertificate class, that provides some information about a
certificate. Currently it's only used by the callback mentionned above,
but it will be possible to get the leaf certificate for the connection
after it's established.

Review of the API and implementation is welcome, before I start making
use of this in HttpRequest and WebKit to allow the user to accept new
certificates.
2014-01-15 17:45:21 +01:00
Adrien Destugues
9ab54f9475 Filerequest: UrlDecode() the request.
Makes things work even if the filename has some URL-disallowed
characters (spaces, utf-8, or otherwise).
2014-01-13 09:18:42 +01:00
Adrien Destugues
b3cc244542 Simplify cookie string-ification code. 2014-01-13 09:05:19 +01:00
Adrien Destugues
3d864cd870 Remove B_PROT_* and related code
Use standard error codes instead.
This allows using error code returned by the underlying functions
directly, and makes it possible to use strerror for debugging. So, we
can also remove StatusString() from the various *Request classes.
2014-01-13 08:05:32 +01:00
Adrien Destugues
5e9a96156d FileRequest: style fixes
Pointed out by axeld, stippi and waddlesplash. Thanks for watching.
2014-01-13 08:05:30 +01:00
Adrien Destugues
090ba6d06b FileRequest: implement directory listings.
Use the EPFL (Easily Parsed File Listing) format. This is one of the
formats that WebKit allows for directory listings, and it's easily
parsed and generated.
2014-01-10 15:32:09 +01:00
Adrien Destugues
5bdd4157d3 SecureSocket: avoid crash on close
Deleting the BIO while it's still waiting on a read() in another thread
will lead to a crash when the socket is eventually closed. Close the
socket first, so the read() is unlocked, then safely delete the BIO.
2014-01-06 12:48:46 +01:00