* BUrlResult is back, with ContentType and Length methods.
* BHttpResult subclasses it and use HTTP header fields to implement
those
* Introduce BDataRequest for "data" URIs. These embed the data inside
the URI, either as plaintext or base64 encoded.
This will be removed when we use the libtiff package from haikuports (as
we do for libjpeg and libpng already), but for now the lib is built and
bundled in the package, so we might as well add a provides entry for it.
The main package already does so.
It's not possible to use these from the network kit otherwise, as it
would create a circular dependency (mail > bnetapi > mail).
Is there a better way to solve this problem?
B_WIDTH_FROM_WIDEST leads to only 2 or 3 tabs visible when one of the
tabs has a long title. This can be rather annoying as we have no way
of scrolling the tabs to see the ones that are pushed out of the window.
* These are shared with HTTP cookies set for localhost. We probably want
to split them apart later on, so cookies should store and check the
protocol, additionally to the path and domain.
* Fixes#10195.
* Do not start with a ridiculously small buffer for socket reads.
Sockets return data they have available, instead of trying to fill as
much of the buffer as possible. In some cases a single Ethernet frame
can hold a complete request.
* Remove some looping and try parsing all the request in sequence each
time we receive some bytes.
* Avoid reallocating a temporary buffer each time we read some data from
the socket. Instead, allocate it once, and grow it as needed. Since
servers usually send chunks of equal size, we should get away with one
reallocation on the first chunk.
We can send the data directly to the output socket instead of copying it
into a BString first, at the cost of very slightly less information in
debug output.
Somehow gcc doesn't detect the linker is GNU ld when run in Haikuporter.
We now force this in the recipe. This allows gcc to invoke the linker
with response files, avoiding "command line too long" errors, for
example when building WebKit.
The Open method can fail and leave the StreamBase object without an
IOContext, but the destructor tried to dereference it anyway.
This fixes APlayer crashing on many files instead of skipping them.
Use a default context instead. This allows apps without a context
management to still have cookies and HTTP digest authentication (without
persistence to disk).
First part of fix to #10239 (it also needs changes in WebKit).
* Mark the current connected device, or disable "Disconnect" menu when
there is no connection.
* Save and restore serial port settings
* Improve drawing code: make sure the border around the termview is
repainted, and do not leave a 1px space between lines unpainted.
Some gristing mixup caused the non-secondary version of the lib to be
added to the non-secondary directory, which is what the main
architecture HaikuDevel is already doing.
Trying to Read from a directory results in an error code, but we also
missed that because an unsigned variable was used to store the result.
Fixes#10210.
* Remove useless dummy protocol loop in UrlRequest
* Stop HTTP requests before deleting the socket and other things the
loop may still be using
* Deletion of items from the authentication map wasn't working
* Remove some debug traces
The authentication state is stored (in a hash map, using the domain+path
as a key) in the UrlContext class. It can then be reused for multiple
requests to the same place. We also lookup stored authentications for
parent directories and stop at the first we find.
Authentication state is not stored on disk (unlike cookies), and there
can only be one for each domain+path.
This change is needed for implementing cookie persistence in Web+ using
the network kit backend.
The current implementation requires the user to unarchive the cookie
jar, then hand it over to the BUrlContext which will copy it to its own
field. This makes the code simpler, but maybe doing a complete copy
(with all the cookies) is an heavy operation and could be avoided.
* Remove the fRawData field, as handling it is too complicated (it's
not easy to have proper copy semantics on a BDataIO) and it's not used
anyway, as the listener DataReceived call is enough to get the data and
handle it.
* All the remaining fields are HTTP-only, so rename the class to
HttpResult and attach it to HttpRequest instead of UrlRequest.
CID 1108353, 1108335: memory leak.
CID 610473: unused variable.
CID 1108446, 1108433, 1108432, 1108419, 1108400, 991710, 991713, 991712,
610098, 610097, 610096, 610095: uninitialized field
CID 1108421: unused field
Change the ownership of the result for Url/HttpRequests. The request now
owns its result and you either access it by reference while the request
is live, or copy it to keep it after the request destruction. To help
with that, get BUrlResult copy constructor and assignment operator to
work.
Performance issue: copying the BUrlResult also copies the underlying
BMallocIO data. This should be shared between the BUrlResult objects to
make the copy lighter. The case of BUrlSynchronousRequest is now
particularly inefficient, with at least 2 copies needed to get at the
result.
* Not having them here breaks the "ABI" for scripts and YAB-based apps.
* They will point to the system non-packaged directory, where you are
likely to have old non-packaged BeOS stuff living now.
* This is limited to the constants that were already defined on BeOS.
None of the new ones was re-added.
* Now takes ownership of headers, form data and input data
* Split Set* and Adopt* methods to help with proper use of this (Set
does a copy)
* Write documentation.
* The RFC provide a regular expression for URI parsing, so just use it.
* Allows parsing URIs with missing components (no scheme or authority)
* This allows to parse relative URLs as expected
* Can also handle things such as data: or mailto:
* Also more fixes to handling of incomplete URIs, some flags weren't
always set to the right values.
This gets Windows Live Mail (or is it called Outlook?) working, with
some other fixes on WebKit side.
* There actually is a way to count the matches, so use it instead of
attempting to guess
* In some cases (when using optional groups (xxx)?, for example), there
may be a non-matching group (with offsets set to -1) and matching groups
after it, so the binary search wasn't quite working
* Instead, we always return the number of capturing groups in the in
the given expression, which is the maximal number of matches. Some (or
all) of these may not have any content. We do return 0 matches on any
error, including when the regular expression didn't match anything.
* It would not work for cookies set to expire tomorrow or later, since
setting the time in a BDateTime does not overflow to the date.
* The BDateTime API could be improved to make this look nicer.
* @ is a separator (between user:password and host) only if there are
no slashes before it
* All slashes in user and password should be urlencoded (as well as any
@ and :)
* On the other hand, it's possible to have @ as part of an URL path or
query. An example is Google Maps.
Gets Google Maps working.
* With so long class names, there's no way I'm going to follow the 64
char limit on commit headlines.
* The class share the same API, so having them separate is not very
useful.
* This makes it possible to use the same listener in either synchronous
or asycnhronous mode (or both, for different requests)
* Add some error handling in NetworkCookie and don't add broken cookies
(or should I say crumbs?) to the cookie jar
* More control on the path and domain, as well as the expiration time
We now pass Opera cookie testsuite functionality tests, as well as some
of the negative tests (we even do better than curl). Not going further
right now as this works well enough for positive cases and most
security/privacy issues are fixed (cross domain and cross path cookie
setting or spying).
* Http spec says headers can be split when they are comma separated
* However, cookies are semicolon separated, so it is not acceptable to
split them.
* We will want to implement some way to limit the cookie header entry
size, as servers have a limit on what they can accept (usually around 4K
characters). The RFC also says we don't need to remember more than 20
cookies per domain.
* They used an unsigned int, which led to overflows when trying to set
them to a time before January 1st, 1970 (local time)
* Some things use January 1st, 1970, GMT (or UTC) as a reference point.
In my timezone this leads to such a negative date. An example is cookie
expiration dates which are set to this date to expire them immediately.
Spotted by Opera testsuite.
* This makes the method unuseable for dates after 2036 (signed 32-bit
time_t will overflow then. This gives us just 33 years to switch to a
64-bit time_t. In te meantime, please try using other methods to set the
date and time for BDateTime objects if you need to go this far.
* This takes a relative path as a parameter, and modifies the object to
point to the given location.
* '..' is not handled yet, and will be sent as-is to the server.
* Makes it possible to follow more types of 302 redirects
In particular, I can now run the tests from Opera's testsuite
(testsuite.opera.com), which shows I have more work to do on cookie
handling.
* The dot was mandatory in older RFCs, but the new RFC6265 disallow it.
* Both schemes are used around the web, so we allow them both.
It's possible to login to mail.google.com again.
* Some fields weren't initialized, leading to random crashes later on
* Remove the enum that was used for protocol options
* Use a single field to track the request state, instead of separate
booleans.
* The cookie jar iterator now use a BObjectList instead of a BList
* Add a convenience method to the cookie jar to add a cookie by BUrl
and raw cookie string.
* Remove some methods in BNetworkCookie that could lead to invalid
cookies (cross-domain or with no domain at all).
* Make the cookie parsing able to report errors
* Fix off-by-one error in domain cookies validation.
* Remove the BUrlRequest class, which was only delegating work to
BUrlProtocol and subclasses
* Rename BUrlProtocol to BUrlRequest, and BUrlRequestHttp to BHttpRequest
* Creating a request is now done through the BUrlProtocolRoster. For
now there is just a static MakeRequest method, this will be completed
when we get to actually allowing add-ons to provide different request
handlers.
This allows cleanup of the API for requests:
* Remove the universal SetOption method with constants, and have
dedicated setters for each protocol option.
* Setters can now have multiple parameters, for example you can give
BHTTPRequest a BDataIO and a known size
* In this case, the BHttpRequest will not use HTTP chunked transfers,
which were always used before and made most servers unhappy (tested and
failed with lighttpd, google accounts and github).
* The default is to use IPv6 addresses, but these don't quite work yet
in Haiku.
* Also, some debug messages improvements and fix a crash when the
payload has % inside it (parsing it as a printf string isn't such a
good idea)
* This was a script relying on a working /etc/profile, which may not be
there
* Instead, use GNU which, available as an haikuport recipe
* Since the command does not seem to be needed for Haiku to run (and
also because I don't know how to do it), GNU which isn't in the default
install.
* Typing "which" in a terminal still works, as that uses an alias
defined directly in /etc/profile.
* We didn't do anything with cookies received from the server, they are
now automatically added to the cookie jar.
* Also make sure the UrlContext (which holds the cookie jar) is
forwarded from UrlRequest to UrlProtocol when it gets set.
this gets cookies working in Service Kit-based WebKit.
* Our usb_hid driver handles joysticks already, no need for another one
* Also add the emuxki driver to the Jamfile tree even if it's in unknown state and unused.
We used the hash of the language code as a key for identifying catalogs.
However, hash do collide, and in particular, "en" and "fi" have the same hash.
Identify catalog resources by name instead.
* Dynamically update the serial port list in the connection menu when devices get added or removed
* Make the settings in the settings menu actually do something
* You can code review it
* You can help developping
Uses libvterm as the backend for parsing ANSI escape sequences. The lib was
changed slightly to build with GCC2. It could be used by Terminal as well as
it seems cleaner and more reliable than our current parser.