Commit Graph
100 Commits
Author SHA1 Message Date
Niels Sascha Reedijk 4b74781a00 Catalogs: remove exr translations after purging from Pootle
Change-Id: I5ff888d69cdb460dcd16f38c0bc98440bc0d8e94
2024-07-15 06:46:48 +01:00
Niels Sascha Reedijk f8d7e36f00 UI text: minor fixes to strings (courtesy of jt15s)
Change-Id: Iebeb64eeea2fd98cf0f7a86be759939d86b600b3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7083
Reviewed-by: humdinger humdinger <[email protected]>
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Niels Sascha Reedijk <[email protected]>
2023-10-30 06:31:27 +00:00
Niels Sascha Reedijk e1c4049fed cross-compiler image: update to newer bookworm-slim Debian base image
Change-Id: I1770093c91ed00e4bbae58f44ad7f86874ec0512
Reviewed-on: https://review.haiku-os.org/c/haiku/+/7082
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-10-30 06:31:27 +00:00
Niels Sascha Reedijk c14bd9b2e7 Unittests: fix DateFormatTest
When building with GCC 13, this test no longer builds correctly and errors out
because the overloaded `operator<<` for `BPrivate::BDate` and `BPrivate::BTime`
can not be found.

The underlying cause is that the libstdc++ depended on some template SFINAE
behavior, and that did not work because the `operator<<` should only be looked
up in the `BPrivate` namespace.

It is unclear whether the code for libstdc++ changed, or whether this never was
supposed to work. GCC bug #51577 seems to imply that GCC before version 12
errornously allowed the lookup of names in the global namespace. It could be
that we always relied on this behavior:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51577

Change-Id: Ia2f2306a2e97d5f19dc8c4df90a8491f22ef0bcd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6874
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-08-27 16:11:15 +00:00
Niels Sascha Reedijk d2edfdd11d docs: document the steps to update GCC buildtools
Change-Id: Iaa41194e0f76594efd504b65f3565b22743dce34
2023-08-12 07:59:29 +01:00
Niels Sascha Reedijk 13e2db9609 build-packages: update to the latest packages
The main motivator is the update to GCC 13. As part of this, some of the other
dependencies have been updated as well.

Newly introduced:
 - gawk on x68_64 (new dependency of texinfo)
 - libjx (new dependency of haikuwebkit)
 - openexr30 (new indirect dependency of haikuwebkit)
 - brotli (new indirect dependency of haikuwebkit)

On x86_gcc2, some packages have switched to the modern GCC version:
 - diffutils
 - findutils
 - libpsl
 - tcpdump

Change-Id: Ic617b5b4af9eb34c0d28259a3c0ddbcc33f98a5d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6772
Reviewed-by: Adrien Destugues <[email protected]>
2023-08-05 11:52:00 +00:00
Niels Sascha Reedijk e10dd8e99a Dev docs: update instructions on generating build-packages repo
This is now updated for the modern k8s infrastructure.

Change-Id: Ib468eb0bdf4b0746c3f5d8692d9353d0cd9e923a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6768
Reviewed-by: Adrien Destugues <[email protected]>
2023-08-02 07:09:03 +00:00
Niels Sascha Reedijk fef51dedd8 mail_daemon: warn about unused return value
GCC 13 warns that using the `begin()` method on a container is marked as
`[[nodiscard]]`. This makes sure that this warning is not treated as an error.

The code actually looks like it does not do much if anything of use. As a
follow-up ticket #18478 is raised.

Change-Id: Ie149f7e02cacda2bcd0be59617583605d5905747
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6655
Reviewed-by: Niels Sascha Reedijk <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-07-23 16:48:21 +00:00
Niels Sascha Reedijk 0a8972bbea Cortex: initialize the log message
GCC 13 warns that the item could be initialized. From looking at the code, it
could very well be that the log message contained garbage. At least clear the
data before sending it out.

Change-Id: Id02bf314d0c02f852748bdac9cef010ebf073994
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6654
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2023-06-30 00:30:58 +00:00
Niels Sascha Reedijk bb2b9b02aa btrfs: use global namespace
The module includes the C-style header file, thus all members are added in the
global namespace.

Change-Id: I5e82c8520b0495e3c437c43cfeea9cc454d39482
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6653
Reviewed-by: waddlesplash <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 555b9ff733 agp_gart: initialize member before using it.
GCC 13 warns that this member could be unitialized. Now it is initialized
explicitly before it is used anywhere else.

Change-Id: Ia8d5e95cc247921c6ee240a106a80d73c54caee4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6652
Reviewed-by: waddlesplash <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 03c3e2083e freebsd_compat: fix GCC warning
The C++ standard in rule 3.3.7[basic.scope.class] determines how the compiler
should handle cases where a member shares the name of a type. It is up to the
compiler whether this requires a diagnostic warning. GCC 13 emits a warning
(changes-meaning). This fixes the issuing of this warning.

Change-Id: I9c58c0dd6298055959154f78d47ad9088e8225dc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6651
Reviewed-by: waddlesplash <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 5cd344f75a app_server: fix order of initialization
GCC 13 warns that the a pointer is taken from a member that according to the
rules is not yet initialized. Fix the declaration and order of initialization
to prevent us depending on undefined behavior.

Change-Id: Iab4644c33a3a286e083450da0b3575acfe284f29
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6650
Reviewed-by: waddlesplash <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk a962cc5543 Pulse: adjust buffer to maximum
Just in case, adjust the buffer to format an int32 to a string as the maximum
length that it could be.

Change-Id: I00aede3f684211f9c860455063244422be1d0ee9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6649
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk b9a6a85bc3 libbsd: rewrite fts.c to avoid error
With GCC13 the current code and its use of the `realloc` function triggers a
potential use after free warning. The code is most likely correct, but there
may be a bug in GCC13's use after free checking, or this is one of the cases
where it is not possible to accurately detect if there is really a chance that
it is used after free.

This rewrites the code in such a way that the warning is no longer triggered.

No functional change intended.

Change-Id: I85e145de2128d4b12a9b3016de33d9facaf0d758
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6648
Reviewed-by: waddlesplash <[email protected]>
Reviewed-by: Axel Dörfler <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 5140a1bb94 Package Kit/Launch Server: avoid/ignore use of requires keyword
In C++20 `requires` is a reserved keyword. GCC13 warns against its use. This
change removes the use of the keyword in our own code, and ignores it in the
external 'libsolv' code.

Change-Id: I3319d20c0a3fdad89630683cdff5ea3b17f04e99
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6647
Reviewed-by: waddlesplash <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 7345ce9a9e usb_midi: use the private kernel headers when building the module
Change-Id: I40c1c38cdcc3b7930b8dba1cacbb43d97714cfb5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6646
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 3fb092979e kernel: provide kernel-level equivalents for math.h and stdlib.h
GCC 13 is more strict about what C++ features are available in a freestanding
(= build without standard library) build. The `stdlib.h` and `math.h` headers
are redefined as part of libstdc++. If the object is built as freestanding, it
should be assumed that none of the standard library functions are available.

The solution in Haiku has been to add part of the standard library into the
kernel shared object. The method of exposing them has been to allow the
use of `stdlib.h` and `math.h` in the kernel and in kernel add-ons.

This change allows that approach to continue. What it does, is that it defines
specific headers which will be picked up when a module is built using private
kernel headers. When building for the kernel (or for the boot module), it will
bypass GCC 13's libstdc++ default behaviour of not including the POSIX/platform
header with all the function definitions.

An alternative to be considered for the longer term is to specifically define
the parts of the C/C++ standard library that is available in the kernel in
these headers, or create custom headers when building kernel modules (which is
how Linux approaches it).

Change-Id: Icab4614f642219fa77732b02401570708ee9a963
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6645
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk df66e964dd src/bin: De-duplicate query.cpp, urlwrapper.cpp and remove clockconfig.cpp
The query bin command is already added earlier in the file, and does not
actually require to be linked against localestub. Removing the duplicate, as
it caused all the include directives to gcc to be duplicated, which caused
trouble in gcc2 when using #include_next directives.

Similarly, urlwrapper.cpp is a duplicate entry and does not actually require
libbnetapi.so.

The clockconfig tool has moved to the launch daemon in c16361c4.

Change-Id: I266ada433448a96bee8de325133a548f0985da59
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6661
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk fdc8b001a9 print addons: remove invalid use of auto_ptr
GCC 13 warns that the use of auto_ptr on an array can lead to undefined
behavior, because auto_ptr will use `delete` instead of `delete[]`.

Replaced the use with `std::vector` instead. Since the `data()` member was only
introduced in C++11, the solution uses the [] operator instead to get the
address of the beginning of the array.

Change-Id: Ib457580eedb03338a454fb96b27602c3830c1634
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6644
Reviewed-by: Adrien Destugues <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 1f2e9ca260 kernel: ignore overflow warnings in teams.cpp and threads.cpp
GCC's overflow checker gives a warning about the potential that the atomic
functions called in teams.cpp and threads.cpp will write to a null-pointer.
In this case, it is safe to assume that the values will never be null,
therefore these warnings can be safely ignored.

Relates to/fixes #17734

Change-Id: I777ff96f2812ed7d3ba57a46cad89ef6994cb08f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6643
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-28 07:11:17 +00:00
Niels Sascha Reedijk 68578fe6a8 device_manager: remove unused #include <set>
GCC 13 is more strict about what C++ features are available in a freestanding
(= build without standard library) build. The container types are not
available.

In this case the device manager does not use the std::set container.

Change-Id: Iaa2d71b40c9247fac8ccf2a0033c9fc288550dc7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6642
Reviewed-by: waddlesplash <[email protected]>
2023-06-25 09:10:49 +00:00
Niels Sascha Reedijk 4958c5d7b6 HaikuBook: fix some errors and warnings during documentation generation
Change-Id: Ib6b876ff83aeba0d2346990ab2e9869cbf519284
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6641
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2023-06-24 22:00:27 +00:00
Niels Sascha Reedijk 52c4471a30 Docker: update cross-compiler Dockerfile and build script
Updated so that it can build Haiku R1 Beta 4. The intention is to use this to
create repeatable builds for Rust builds. The script has been tweaked to use
the latest stable debian as base image, to include the (now-required)
libzstd-devel package, and the g++-multilib package to support building 32 bit
in a 64 bit host. It also moves to python 3.x.

Additionally, the image now supports specifying custom git tags/branches for
the buildtools and Haiku itself, so that specific hrevs or branches can be
built

Change-Id: Ia43089ff7271256fdb6603bd4400ee3b9228ea1b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5965
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
2022-12-30 07:55:18 +00:00
Niels Sascha Reedijk b70a0efa9e NetServices: Notify any async listeners when a request completes early.
The API allows a user to end parsing responses earlier if the response has a
client (4xx) or server (5xx) error code. The end user should still be notified
of this result, so that they can act.

Change-Id: I11f2ab296658f767b5b34e10badb54de27aab494
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5910
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
2022-12-14 16:53:40 +00:00
Niels Sascha Reedijk 429cbf2220 NetServices: include libnetservices2.a in the HaikuDevel package
Change-Id: I88e888df5ac7673ab343e25b7216546cb7ca6055
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5799
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2022-11-03 05:28:09 +00:00
Niels Sascha Reedijk 1111dda699 NetServices: Add libnetservices2.a from dev/netservices into master
The overall design does not deviate much from my proof of concept [2] and that still makes a good read to
understanding the overall architecture. If you want to get a sense of how it is built up, the API comes with
full doxygen documentation for the public API [3], and I have also done a PoC change for HaikuDepot which is
useful as an illustration on what the impact for the user of the new library is. [4] There is also a test suite
that may give some insight into the day to day ergonomics of the API [5].

The current state is that I am fairly confident that many HTTP requests will actually work, but I do expect
rough edges with a protocol with this many diverse implementations. There is also a list of features yet to be
implemented on Trac [6]. Additionally, I still want/need to do performance testing.

The goal of merging the kit right now is to start making it available for more uses, and through that also give
a chance to shape its future. There are also some design decisions that need review, most notably I expect some
discussion around the uses of C++ 17 idioms (like std::optional and std::string_view) and around the use of
exceptions for error handling.

The impact of merging right now should be near zero: the netservices2 kit lives in its own header space, and
builds into its own static library (libnetservices2.a). It is not yet used in any of the apps in our
repository.

The branch does remove the deprecated services kit from the libnetapi.so library, though it leaves
libnetservices.a intact. After our previous announcement to remove it after beta 3, this should be expected.

[2] https://github.com/nielx/haiku-netservices-rfc/tree/exceptions
[3] https://git.haiku-os.org/haiku/tree/docs/user/netservices?h=dev/netservices
[4] https://review.haiku-os.org/c/haiku/+/5692
[5] https://git.haiku-os.org/haiku/tree/src/tests/kits/net/netservices2?h=dev/netservices
[6] https://dev.haiku-os.org/wiki/Development/NetServices2

Change-Id: I5d0b7e2619699f39a2506588417b57391f0f5cc2
2022-11-02 01:37:17 +00:00
Niels Sascha Reedijk 2710b4f5d4 Merge remote-tracking branch 'origin/master' into dev/netservices
Change-Id: I48c8cf4f03e281a5caeb9f27bf052285961529ff
2022-10-29 22:58:24 +01:00
Niels Sascha Reedijk 71e29bbeea NetServices: format code using haiku-format
This commit formats all the netservices2 code with the `haiku-format` tool from
https://github.com/owenca/haiku-format (commit aa7408e), with the following
customizations:
 * SpaceBeforeRangeBasedForLoopColon is set to false
 * Braces before a catch block are not wrapped
 * Most headers, except for ExclusiveBorrow.h, have been manually reformatted
   to adhere to Haiku's header format (issue #19 in the repository)

Change-Id: I693c4515cf26402e48f35d1213ab6d5fcf14bd1e
2022-10-29 22:53:57 +01:00
Niels Sascha Reedijk 93069fc4bc NetServices: Disable BasicAuthTest for HTTPS
Change-Id: I0b61af00b96ebe7fbcd04da50e32cb9e9be7f890
2022-10-29 14:29:34 +01:00
Niels Sascha Reedijk 477e74d187 NetServices: fix parsing raw HTTP bodies without a known size
When parsing a raw HTTP body without a known size, whether or not a request is complete depends on the
end of the connection. Make sure that the parser updates to complete when all the bytes in the buffer have
been read and the connection closed.

Change-Id: I6f055b43ffe4a44da65da85c19b71304d804c800
2022-10-29 12:23:15 +01:00
Niels Sascha Reedijk 3c9045fbbf NetServices: Refactor to make HttpParser stateful
This change refactors various parts of the HTTP parsing. The HttpParser now
tracks what part of the message needs to be received next, and throws an error
if the object is used in the wrong way (when the caller requests to parse the
wrong part of he message).

The metadata about the transmission is now also saved in te parser. There is
partial work in there to start exposing the 'bytes written', which in
compressed streams is expected to differ from the bytes read. This is not
used yet.

This also simplifies the state tracking done by BHttpSession::Request.

Change-Id: I8532c6a5c8776456ea8bbccd6df7a44bac92b60d
2022-10-23 18:43:41 +01:00
Niels Sascha Reedijk a0b75afc0f NetServices: add missing include 2022-09-24 09:49:51 +01:00
Niels Sascha Reedijk 4125af2aeb Login: Fix typo in help message
Reported by zuMi, while contributing to the Italian translations. Thanks!

Change-Id: I15e8fc17390188c6d0051384d047ebe06d19a2bc
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5677
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
2022-09-19 16:54:23 +00:00
Niels Sascha Reedijk da8162be21 Merge branch 'master' into dev/netservices
Change-Id: Ic4c065b9a76fcabd6450dd1ab5882510f922a128
2022-09-18 16:16:37 +01:00
Niels Sascha Reedijk c68590fd4d Tests: fix unittest build and include BMemoryRingIO shared tests
When change 2966 was merged as hrev56269, it was decided to first introduce
this in libshared instead of libbe.so. The test was moved accordingly, but
not all the code in the unittests was properly updated. This change completes
it.

Note that the test currently crashes, so it needs more investigation whether
that is a test issue or a BMemoryRingIO issue. Fixing this is beyond the
scope of this change.

Change-Id: I0f61d1dd013da904b3e4545db11fefa9da2da0a2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5676
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
2022-09-18 14:11:06 +00:00
Niels Sascha Reedijk 97f11716bf Merge remote-tracking branch 'origin/master' into dev/netservices
Change-Id: I588c4a840523995f820161d63741c137bc5c719c
2022-09-04 07:30:59 +01:00
Niels Sascha Reedijk 27196c4068 NetServices: use BBorrow<BDataIO> for custom body targets
Change-Id: Ib2d4b0ca3689338d906f943295278c086c6f2c83
2022-09-04 07:27:08 +01:00
Niels Sascha Reedijk 1e22817dfb NetServices: add the BExclusiveBorrow<T> smart pointer
This smart pointer is designed to help with putting some explicitness and
safety around the case where someone will use their own object that implements
the BDataIO interface to store the body of a network request. By default,
BDataIO objects do not require or enforce thread safety. Since accessing these
unsynchronized objects between two threads is undefined behavior, it should be
explicitly discouraged.

The BExclusiveBorrow/BBorrow smart pointer helper helps solve that by enforcing
the limitations on using an unsynchronized object in two threads. When used
correctly, there is a runtime check on incorrect use by the developer. This
should help write better code.

The design is based on shared_ptr, including having an admin block akin the
control block, that manages the internal object. This type-erased admin block
has the advantage that it allows the owner to have a different type than the
borrower. It also handles cases where the lifetime of the borrower is longer
than the owner: the borrower can continue to use the object until they want to
return it, after which it will be cleaned up. This will make it possible to do
some fire and forget pattern in the network services kit, where someone may
just wants to create a file and borrow it to the network request, and care
about further processing the file in the future.

Change-Id: Ie9b7e7472c868b60f663b4db4fa449d421e447eb
2022-09-04 06:54:37 +01:00
Niels Sascha Reedijk 6c4a9fd69b NetServices: add query part of the URL to the request
Change-Id: Ie169041925544f082a8be728d77cbc69edf2caa2
2022-08-15 22:08:03 +01:00
Niels Sascha Reedijk 8a16ecbce9 NetServices: Add debugging constants and messages
These allow for additional messages about the progress/status of the request.
For now, the messages are sent unconditionally, though it may be reasonable to
in the future switch to sending them only when enabled.

Change-Id: Ic45a0055037af02c689494fa5ce0acd03592ad7e
2022-08-14 14:53:48 +01:00
Niels Sascha Reedijk aa8ca18a34 NetServices: Implement a logger for requests.
This logger can print to console or log to file.

Change-Id: I7eef847d42b360af1cb7cec0c897131b975a1f2f
2022-08-14 09:46:16 +01:00
Niels Sascha Reedijk 7b1d966cf2 NetServices: Rework parsing of content-length and move to HttpParser
This fixes a bug in the HttpAuthTest, and in general, moves responsibility of determining
the shape and size of the content to the right place.

Still to do is to fix the case where there really is a variable length content. This will
now probably error out as a connection closed error.

Change-Id: I13c20028e834cc9af8c7bc1d7d7613bf60838e64
2022-08-08 07:58:45 +01:00
Niels Sascha Reedijk 9cb56a4881 NetServices: Add custom error message to BNetworkRequestError
Change-Id: I03970762531a689e25cd78a1091aecf755ee87ce
2022-08-07 08:47:19 +01:00
Niels Sascha Reedijk 6d1bb0e7ad NetServices: Remove BHttpRequest::SerializeTo(BDataIO*)
The private version that serializes to a HttpBuffer is now used.

Change-Id: I034933a641e98b3a8f918470a024ba32ea7c8663
2022-08-07 07:17:38 +01:00
Niels Sascha Reedijk c7f925c3ee NetServices: add the HttpSerializer helper to help serialize requests
Change-Id: Ide1e2d387884ce4cf2d406057960cd0732d61f38
2022-08-07 06:47:15 +01:00
Niels Sascha Reedijk e68284565a NetServices: move HttpBuffer and HttpParser into their own header/source
Change-Id: I5bc0d9df6f94c2cf1c39baa6206bf6f1db284705
2022-08-01 08:11:56 +01:00
Niels Sascha Reedijk 9b33a931f1 NetServices: Implement controls on the number of concurrent requests.
This change allows the user to control how many concurrent request can be done
per session. This is going to be helpful to running the tests as well; they were
all fired up in parallel, which sometimes leads to our test server refusing a
connection.

Change-Id: I4f1f40b28b8e0199ea5589b36cd8d00ecd849a63
2022-07-27 09:02:09 +01:00
Niels Sascha Reedijk 251828d308 NetServices: Rewrite the control thread loop to prepare for filtering of requests to do
Change-Id: I72d5f1ddd499f8fb227af5ee78111a60eb50b1f5
2022-07-24 22:07:22 +01:00
Niels Sascha Reedijk 60355daec9 NetServices: Implement asynchronous status update messages.
The integration PostTest has a basic test that the expected messages are sent and
have the expected data fields. The gist is documented in book.dox.

To do are the messages around SSL. However, that functionality is also not
implemented yet, so there is nothing to send.

Change-Id: Ib8f36ed32f9854d643d8256338b71af7067059f0
2022-07-24 08:56:02 +01:00
Niels Sascha Reedijk b74e852fd9 NetServices: Remove Accept as standard and protected header.
In the old service kit, the Accept header was automatically set. However, it is
not a required header. This removes the default value and the protection against
setting it manually.

Required to make HaikuDepot work.

Change-Id: Ic589bfc5829db25915b67f2a13b6c2436c053e25
2022-07-20 06:28:17 +01:00
Niels Sascha Reedijk 2b4cd81ff3 NetServices: add support for receiving incoming chunked messages
Change-Id: I1bfe22a7959c7a5fc7dc644e4e3941965edafb65
2022-07-19 06:29:36 +01:00
Niels Sascha Reedijk 826afd9616 NetServices: Refactor the parsing code into a HttpParser helper class
Change-Id: Ib03aacc36d46318c8870554f794ff66db4cce063
2022-07-17 15:54:54 +01:00
Niels Sascha Reedijk a1e7583626 NetServices: add HttpBuffer to encapsulate buffered reading
Change-Id: I7ec3189c3cf459fccae4ffac44702fd6b8c12ac9
2022-07-03 12:17:10 +01:00
Niels Sascha Reedijk 6cf088266f NetServices: When the response Content-Length is 0, do not expect a body.
Change-Id: Ia715b44289dc3c64c2b834f954421413cbc3593c
2022-06-26 16:04:58 +01:00
Niels Sascha Reedijk 92357c131e NetServices: Add support for an input body in a request and handle this with redirects.
Change-Id: Id2399d49aa673469c8c04ebd13884cdbcb24112d
2022-06-23 21:13:35 +01:00
Niels Sascha Reedijk 6cbbd9bf4e NetServices: Implement BHttpSession::Cancel()
Change-Id: Iff0a7726e57f3e6bd4e9d0ebac08a370d25a62d7
2022-06-03 13:38:28 +01:00
Niels Sascha Reedijk 2f3b9b18ac NetServices: Add/rework the MaxRedirections, Timeout and StopOnError options
Change-Id: I4e59b51c16c6777941dc92ce02505386257dad03
2022-06-03 09:40:42 +01:00
Niels Sascha Reedijk f9d9d20245 NetServices: Add support for Basic authentication
Change-Id: I304104f7096fd935212e1bfa3e988e7945cb5cec
2022-05-29 15:13:54 +01:00
Niels Sascha Reedijk f751534257 NetServices: add optional fields to BHttpRequest
Change-Id: I6228419a55c81203ce2c26827d17ff6a402d86c5
2022-05-15 16:43:07 +01:00
Niels Sascha Reedijk 46b7da1f4f Merge branch 'master' into dev/netservices
Change-Id: I1eb6c2ea2fd0d794ad6378eab8bbb80ce46dfbb8
2022-05-08 09:00:42 +01:00
Niels Sascha Reedijk 929355add7 libroot: return error on partial match in strptime()
The previously implemented behavior of strptime() allowed for partial matches
of strings. For example, if the format string was "%a, %d %b %Y %H:%M:%S", it
would successfully parse "Sun, 07 Dec 2003" as input. This is inconsistent with
the standardization in POSIX.1-2001 (and later).

This change makes strptime() return an error if there is no more data in the
buffer and not the entire format string is parsed.

Change-Id: If066c49fb7fc094f8ccd56703cd01903a0e40cb3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5298
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
2022-05-08 07:58:05 +00:00
Niels Sascha Reedijk cf54474e38 NetServices: Implement BHttpTime, parse_http_time() and format_http_time().
These utilities convert timestamp strings that are formatted according to
the HTTP RFC into BDateTime objects, and vice versa.

Change-Id: Ia2498944fb63d09233839f19d08f15d82a0a9685
2022-05-08 06:59:51 +01:00
Niels Sascha Reedijk 13bfff7be3 NetServices: Implement BHttpStatusCode, BHttpStatusClass and Redirects
The user of the API can set whether redirects should be followed, and if so,
how many. This is part of the BHttpRequest API. The BHttpSession then follows
those instructions, and executes the maximum number of redirects the user
would like to follow.

As part of this commit, the BHttpStatusClass and BHttpStatusCodes helper enums
have been added, to give a friendlier access to HTTP status codes and status
classes.

Change-Id: Ic8c9e3fda158e2cce549c8f1d360951f7ac83311
2022-04-23 18:30:38 +01:00
Niels Sascha Reedijk 59c359e5a9 NetServices: implement support for HEAD requests and 204 responses.
These particular responses will not have a body. This is now handled by the
BHttpSession object. There is also a minor fix in here that prevents a crash
when multiple requests are handled by the DataThread at the same time, and not
all of the requests have events.

Change-Id: I7f47d8b3cd8491c8193275be4b3fc1080780fa20
2022-04-18 14:34:46 +01:00
Niels Sascha Reedijk d482381d2c NetServices: partial implementation of the receive function
This initial implementation contains a lot of extra debuggin output that will
be removed in future changes. It is now possible to run a simple GET request
to the test server with gzip encoding.

Change-Id: I2c402e5cf80b94b366563888222a891a1b094b7a
2022-04-18 14:34:46 +01:00
Niels Sascha Reedijk 8ccf8fb44d NetServices: Rewrite BHttpFields to use raw strings as underlying data storage
This change also drops the principle that fields with the same keys would be
grouped together. This was initially inspired by Boost::Beast, but it means a
lot of extra copying of data when adding/organizing the list, as well as
inefficient querying on each add. Now that the design choice is to fully go
for the raw string as underlying data storage, that choice is not necessary.
In the future it may be able to emulate the grouping or retrieving of lists
of values in the API, rather than as a fundamental principle of the data
storage.

Change-Id: I2667cfa38eb3b7b75393ee71fb038231a40b4193
2022-04-10 09:05:24 +01:00
Niels Sascha Reedijk 70837c180c NetServices: implement writing in the data thread.
Change-Id: Ideb63f9f96bf62ea7d9ce63df22805473273855d
2022-04-05 21:39:54 +01:00
Niels Sascha Reedijk 1d2070c739 NetServices: add testserver.py and proxy.py test infrastructure
This adds the existing testing facilities to the netservices2kit.

Change-Id: Idd884a800abda967bc4b65a416a5f6d927f37450
2022-04-04 18:45:39 +01:00
Niels Sascha Reedijk 02ea57d7f9 NetServices: Introduce BHttpRequestStream and abstract interface.
This supports asynchronous transfers of Http Requests to a network
interface.

Change-Id: I845fb2e08160d219f85b7a08d2d8872ac7359b47
2022-04-03 12:17:05 +01:00
Niels Sascha Reedijk d9a4c6070c NetServices: Serialize the header of a BHttpRequest to a string
Change-Id: Ib1e22536a0b39dc6e9461e7993ea6784f1ea0e2f
2022-03-30 07:38:57 +01:00
Niels Sascha Reedijk 3b172a3dc6 NetServices: implement hostname resolution and connection for BHttpRequest
BHttpSession::Execute() moves the request into the session, and returns a future BHttpResponse
object. Currently implemented are resolving the hostname, and opening the connection.

There is some scaffolding for the actual data transfer.

Change-Id: I5a8a7a7f8680036b91cdba4beee140bbed6bfd5a
2022-03-24 06:13:38 +00:00
Niels Sascha Reedijk 3b2aa6c31b NetServices: Add the BNetworkRequestError type
This is a generic error type that can be used by multiple protocols to describe errors that can
occur while processing a request. The error type supports adding an additional error code in cases
where there is an underlying system error.

The type will be used to describe errors that occur while processing requests by BHttpSession, and
it is generally going to be thrown by the receiving BHttpResult.

Change-Id: I76c0bbaedd38df8cfb79159c4beae2fbf1350aab
2022-03-07 07:59:03 +00:00
Niels Sascha Reedijk 1baacbfebf NetServices: Initial implementation of BHttpResult
Incomplete class, but will provide the basis to start working on the internals of the BHttpSession.

Change-Id: I3ca14b7bd823fc1b4a5a32f5784592d214c4e9a7
2022-03-05 14:56:57 +00:00
Niels Sascha Reedijk 6ce6e96470 NetServices: Introduce BHttpRequest class
Objects of this class describe a HTTP request. It contains several convenience
functions that will allow a user to describe the properties of the request.
More options to be added later.

Change-Id: If6a00d26808c5ed4b121cb36dc75a2a1cc449f95
2022-02-25 08:41:14 +00:00
Niels Sascha Reedijk ec865cb87e NetServices: Add BHttpMethod that represents a HTTP method
This class provides defaults and performs basic validation for HTTP Methods as
defined by the standard. They will be used in conjunction with a future
BHttpRequest class.

Change-Id: If69a7ec186d9d1165e8efe5ab5df50d5a089208d
2022-02-20 15:34:55 +00:00
Niels Sascha Reedijk cb67e34887 NetServices: move token validation to header for reuse elsewhere
Change-Id: I2dbed5cfbd387eaf6ed7cf38c73a7db865a87771
2022-02-20 13:10:20 +00:00
Niels Sascha Reedijk a8003a7030 NetServices: Introduce BHttpFields to query and manipulate fields in HTTP messages
HTTP messages (requests and responses) have a header section that can contain
HTTP headers. These headers consist of name, value pairs. This class can be
used to query the headers on a response, and build a list of headers for a
request.

The internal implementation is designed around two different methods of storing
the underlying data. For HTTP requests, the name, value pairs are stored as
owned BString objects. For responses, the assumption is that there is a byte
buffer that contains the data and that has the same lifetime as the BHttpFields
object. The name, value pairs will then be stored as std::string_view to the
underlying buffer.

Still to do is:
 - The method to convert a BHttpFields list into a string buffer to transmit.
 - The method to parse a string buffer and turn it into a BHttpFields object.

Change-Id: I4819db100aa1671aa7403675216a4c85fd221da7
2022-02-20 13:10:19 +00:00
Niels Sascha Reedijk 268f99dd7d Merge branch 'master' into dev/netservices 2021-12-22 20:46:13 +00:00
Niels Sascha Reedijk 34522da9e3 netservices: add BHttpHeader class and BHttpHeaderMap skeleton
Change-Id: I36a7c757a6909604d749355ecb1a9d42d05d7306
2021-12-17 17:40:15 +00:00
Niels Sascha Reedijk 892cbe10b6 Tests: add skeleton for new services kits tests
Change-Id: I759c6b91d3bf856dbbe8b8b6112d53e601798abf
2021-12-17 17:40:15 +00:00
Niels Sascha Reedijk 3d2aee7545 CppUnit: use <sstream> instead of the deprecated <strstream>
<strstream> has been deprecated since C++98. Both GCC 2.95.3 and GCC 8.3 have
the successor <sstream> available, so use that one instead.

Change-Id: Ifefe686974864c2fd1d4a9d083294b1edb436fbd
2021-12-17 17:40:15 +00:00
Niels Sascha Reedijk 1715bb67ea netservices: Flesh out BHttpSession::Impl data and control structures
Change-Id: I4230570ea8339b12d855f7de7fa72e4664013e2d
2021-12-17 17:40:15 +00:00
Niels Sascha Reedijk ec7d71e612 NetServices: Add skeleton BHttpSession class and its documentation
Change-Id: Ia8a35588422908f6fe9b839ce239fb478baf298b
2021-12-17 17:40:15 +00:00
Niels Sascha Reedijk f54a5a68d7 HaikuBook: Prepare for newer Network Services Kit docs
Change-Id: Ib2cc458f9121cb78250a643affc0933512e65bc8
2021-12-17 16:25:44 +00:00
Niels Sascha Reedijk bcd6a663c2 BString: make move constructor and assignment noexcept
Change-Id: I87f5ecad22f46b59386a091a1bb502536f460315
2021-12-17 16:25:44 +00:00
Niels Sascha Reedijk 158b8fdab2 libroot: return EOPNOTSUPP from posix_fallocate
The pre-allocate functionality was added to Haiku in hrev54704. It needs
support at the file system level though, and it is yet to be implemented by
BFS. Some applications (and glibc!) implement a fallback mechanism using
ftruncate(), including the LLVM tools, but they go to this fallback
mechanism when it is clear that the operation is not supported. In particular
they look for EOPNOTSUPP.

The current implementation returns B_UNSUPPORTED from the vfs layer when a
file system does not implement the feature. This error code this not map to
a POSIX error. This change converts it to EOPNOTSUPP.

Change-Id: Ief382b0f4d462dfedf84c731f68f69731de4498c
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4492
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: Jérôme Duval <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-09-21 10:22:10 +00:00
Niels Sascha Reedijk 70b63f18b3 netservices: remove all old conditional code
Change-Id: Idf3773c081ce103647c5dbea6e82c22bfc5606c9
2021-09-11 13:08:11 +01:00
Niels Sascha Reedijk a00a1da384 libbnetapi.so: remove deprecated network services classes
This was communicated to devs and end users to happen after R1 beta 3

Change-Id: I65177c0061a58519b04d944ad6a73677ad77206a
2021-09-11 13:08:10 +01:00
Niels Sascha Reedijk 530f89aa6d BString: rewrite cleanup methods
This removes the use of the destructor in the move assignment operator, as it
may rely on undefined behaviour from the compiler. Additionally, some duplicate
logic to dereference and free a shared string has been unified under
_ReleasePrivateData().

Change-Id: Ie9f51d598c734f83cd0fba49b651315c6e9c8aac
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4440
Reviewed-by: waddlesplash <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-09-10 05:34:06 +00:00
Niels Sascha Reedijk 0b86520c4d BString: add support for move semantics with C++11 and up.
This implements the "rule of 5" for this type. While the copy operation for
BString was already using shallow copies of the underlying data, this change
further optimizes moving the data from one object to another.

While it is not the intention to implement move semantics to all types in the
legacy Haiku/Be kits, data types like BString are good candidates, because move
operations are often useful when working with data within an application.

In this implementation, the internal data of the string object will be set to
NULL, thus leaving an empty string.

Change-Id: I16bf9424f9b17f622b0b57659b80628e18760288
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4428
Reviewed-by: Jérôme Duval <[email protected]>
2021-09-08 07:07:36 +00:00
Niels Sascha Reedijk abba71575e Synchronize translations from the r1beta3 branch
Change-Id: If513fdb4ce3acfdb6f97c7a9bb3de1592b509469
2021-07-21 12:55:45 +01:00
Niels Sascha Reedijk c18f9eb4ea User documentation: synchronize userguide from the userguide translator
Change-Id: I9b30ae27658a40b85c67a4c30aaea2b4bf9507f9
2021-07-21 12:54:38 +01:00
Niels Sascha Reedijk 510780798f User documentation: synchronize welcome docs from the userguide translator
Change-Id: I2a2b01d87c35f22f688d51740812a28acf51e11d
2021-07-21 12:54:19 +01:00
Niels Sascha Reedijk d3071b6dd3 Update translator credits for r1beta3
Change-Id: I49e0c1148aa1fb8445888e362e605015dc2efde8
2021-07-21 12:54:09 +01:00
Niels Sascha Reedijk bf6a2a2bf1 Cortex: fix the catalog location of the main application
Previously, hrev55011 introduced localization for Cortex, which then
prompted to close #7530. It has then been reopened, when it turns out
that the translations for the container application (RouteApp) did not
work, whereas the individual add-ons/modules were translated.

The cause is that by default BCatalog looks up the translations based on
the subtype part of the signature. This is x-vnd.Cortex.Route (without
the application/ supertype). This change will place the translations in
the right place of the file system.

The add-ons were never affected, since they BCatalog is explicitly told
to find the translations for the entire signature, like:

static BCatalog sCatalog("application/x-vnd.Cortex.InfoView");

Even so, it was chosen to omit the `application` supertype from the
signature for the shared code as well.

This should fix #7530 for good.

Change-Id: Iff18fabef7aba68602e49db1e98cfed2f486f545
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4091
Reviewed-by: Niels Sascha Reedijk <[email protected]>
Tested-by: Commit checker robot <[email protected]>
2021-06-17 10:59:18 +00:00
Niels Sascha Reedijk 8c232f164a AboutSystem: remove duplicate 'Copyright'
Reported by translator loic. Thanks!

Change-Id: I2491a02388321338d8ffe3031fa4670877a77a66
2021-06-10 08:28:55 +01:00
Niels Sascha Reedijk dc31a541e0 HaikuBook: Add missing members to BWindow
BWindow: :MoveToScreen() and related enum flags
BWindow: :ResizeToPreferred()
BWindow: :Close()
Change-Id: I589f7c10753de232a09bdd3ed12b5dc42d5f12ba
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3885
Reviewed-by: Adrien Destugues <[email protected]>
2021-04-24 10:44:10 +00:00
Niels Sascha Reedijk 5b113c01c2 kernel: remove stray dprintf about acquire_advisory_lock
Change-Id: I306e2816e59a621a4c478babad5f3aa2cc69fc8d
2021-04-19 07:12:22 +01:00
Niels Sascha Reedijk 82cd6aad15 HaikuBook: add missing object from AffineTransform.h
Change-Id: I3a3098db4a35b8fe12e763dd3a7e1e5fa9cafc69
2021-04-19 07:11:34 +01:00