63410 Commits

Author SHA1 Message Date
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
Adrien Destugues
5fcc7f71b5 ethernet: do not log everytime there is a media change.
This code was written with wired ethernet in mind, where changes are
rare. However, on wifi the "media" changes all the time (switching
between different connection speeds). So, only log linkup and linkdown.
The other events are not that important.

Change-Id: Iaafb74ceb05a59dedf94184eee23a4e81fa5e983
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4827
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
hrev55742
2021-12-21 18:51:25 +00:00
Adrien Destugues
a8b90daa8a Fix more problems with DHCP timers
- Number of retries could overflow. If we retry something more than 255
  times and it fails, just stop, instead of flooding the network with
  bogus requests
- The timeout could also overflow. It was stored in microseconds in a
  time_t, which allows a bit more than an hour. This is fine for the
  initial timeout (which starts at a few seconds and will go up to 64
  seconds), but after that we switch to a slower rate driven by the
  "state time". In particular, this can be the lease time, which DHCP
  servers may set to several days, or at least easily more than an hour.
- The computaiton of the timeout in the "slow lease" case attempted to
  do "not less than a minute", but missed a conversion from microseconds
  to seconds so it ended up doing "not less than 60 microseconds"

The combination of all these things means we can end up with a negative
timeout, and we will send a burst of requests without ever stopping,
flooding the network.

Change-Id: I0eb811c90f4a4dd8c9d92bff728bc2bbb52fbd56
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4826
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-12-21 18:51:25 +00:00
Jérôme Duval
50a4c18678 kernel/xsi_semaphore: set otime when semop() succeeds
used by PR_OpenSemaphore in NSPR to check the creator inited.

Change-Id: I626c6ab0d50896c94224718ca4fa0788f74ae27a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4824
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
hrev55741
2021-12-18 21:14:39 +00:00
Alexander von Gluck IV
65ed50c713 graphics/edid: Add support for digital display info; solves #17462
* We pack the first 8 bits into a union for the raw
  edid since alignment matters.
* Handing the raw_edid is a bit ugly, so in the edid struct
  we drop the input_type from the union since packing doesn't
  matter as much.

Change-Id: I32dbfe9484f9eb83cf491a44d30a32ca36d65b7b
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4775
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
hrev55740
2021-12-18 15:21:30 +00:00
Lt-Henry
6a9aea9dfd input: implemented B_GET_DEVICE_NAME ioctl on both usb and i2c input devices
Change-Id: Ie1eb0a958b4d60e6fa673cf8fe72bdfe924baf51
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4798
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
hrev55739
2021-12-18 14:51:19 +00:00
Alex Hitech
370623a923 Russian keymap: the Rouble currency sign was mistakenly on the Capslock key, and vice versa.
Change-Id: I3d907da00cfc0d5092ef04bfa50f413ba261e5e6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4822
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
hrev55738
2021-12-18 09:39:47 +00:00
Augustin Cavalier
e0842c10af kernel/condition_variable: Pause between iterations.
Should hopefully resolve the remaining problem in #17455.

Change-Id: I6e00286508c069705e07c9a0b59af2cf5e15e427
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4819
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
hrev55737
2021-12-18 07:52:47 +00:00
Jérôme Duval
101dc0ba83 strace: fix revents output for poll syscall
each poll_fd struct should be checked, valid when not -1 and revents not zero.

Change-Id: Ia624ad1369ad1a6066c9970a47cfac63fa773702
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4821
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
hrev55736
2021-12-17 20:40:55 +00:00
Jérôme Duval
3285dcae22 tcp: reset receive.low_water_mark when nothing to read anymore
the socket interface module checks the receive.low_water_mark to automatically
notify a read event. available_data will be zero, thus enabling the notification.

fixes the test poll_nm in NSPR.

Change-Id: I5354faec439df96671506550cdb144a45f6082b1
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4820
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-12-17 20:40:55 +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
David Karoly
18e885db51 boot/efi: implement convert_kernel_args for 32-bit
Change-Id: I528d6f8ca576b38c50dc314972636e7156d24705
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4784
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
hrev55735
2021-12-17 08:58:57 +00:00
David Karoly
af90bfd3bb boot/efi: introduce arch_convert_kernel_args
Change-Id: Iabb321564d6733c6cf481ec2548fa287e308ae89
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4796
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2021-12-17 08:58:57 +00:00
Augustin Cavalier
e94ea7bc22 UDP: Fix double-reference of DomainSupport.
PulkoMandy in cb3199681eb2ed53850595d374e4989dbd62a3fa changed
the _GetDomainSupport functions to always Ref() the the object.
However, that means in the case of the second _GetDomainSupport
function, which is implemented in terms of the first, we should
not call Ref() as this will create a double-reference.

Fixes a memory leak.

Change-Id: Ib82b2dadc0c8cc8d8f95efcffeb2430ac602a0a9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4791
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
hrev55734
2021-12-16 08:55:55 +00:00
David Karoly
c1e0007eea virtio-mmio: add initialization for legacy mode (version 1)
Change-Id: I4dcfca8cfabafad592b638b28215225b1cca35d2
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4657
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
hrev55733
2021-12-15 15:55:50 +00:00
David Karoly
f0adfe2a54 boot/efi: fix dummy reloc for x86
Change-Id: Ia61d593c8d131bd6780688ea932b5b92bd629764
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4748
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55732
2021-12-14 19:56:21 +00:00
David Karoly
1a7afaa45b boot/efi: fix for garbled first item returned by mmu_next_region()
Change-Id: Ic9d02800bccbb5508eeb0b2c1ee1ed1326d0829f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4783
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: X512 <danger_mail@list.ru>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55731
2021-12-14 19:48:38 +00:00
David Karoly
20efe26dfa boot/efi/arm: fix printout of kernel entry address on startup
Change-Id: If3d592983e1c22210c6b4d3a6ceaf2a7641e7e7a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4785
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55730
2021-12-14 19:46:50 +00:00
David Karoly
1f6e2499db ldscripts/x86: add ldscript for EFI loader
Linker script is adapted from elf_ia32_efi.lds in GNU-EFI.
see:
https://sourceforge.net/p/gnu-efi/code/ci/master/tree/gnuefi/elf_ia32_efi.lds

The only significant change is the additions of ctors.

Change-Id: I1091f610129f806f124d714fd9a42cf932fa1c2d
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4746
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55729
2021-12-14 19:44:23 +00:00
David Karoly
d223f9d9c2 boot/efi/serial: fix legacy mode for x86
Change-Id: I44fd33289da94e9520c6c202ac96c4ca8e511638
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4754
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55728
2021-12-14 13:19:14 +00:00
David Karoly
a857758352 boot/efi/x86: fix address for arch args
Change-Id: If9a3bb32cb8d290f97cee2e8e821dcbf8b8852a8
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4789
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
hrev55727
2021-12-14 11:15:37 +00:00
Jérôme Duval
d057f0aedd lgtm.yml: disable Wformat-diag when building gcc
LGTM seems to provide GCC 9.2, for which the flag -Wformat-diag is falsely
detected as supported.

Change-Id: I95a5946d9c6cd2af73e85070973f855fba3fcc39
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4786
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
hrev55726
2021-12-14 06:06:41 +00:00
David Karoly
3896dbcb1d kernel/arch/arm: fix missing return statement in rtc
Change-Id: Ib5a2e06884b6973ed102b30b1339a7b800c95418
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4781
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
hrev55725
2021-12-13 14:47:10 +00:00
Murai Takashi
771516d7f0 lgtm.yml: add g++ to prerequisite software
LGTM build failed since -Wformat-diag check is failed.
So we add g++ to check its version in LGTM.
May help to fix #17460.

Change-Id: I9400dbbab7800c522bf7ed797adae48299581a4e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4780
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
hrev55724
2021-12-13 13:59:38 +00:00
Alexander von Gluck IV
000310809f debugger: fix warning format-overflow= '%s' directive arg is null
Change-Id: Iba00fbcc3f8fde088bed62b93c4e3acae4e0b902
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4777
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
hrev55723
2021-12-13 10:23:24 +00:00
Alexander von Gluck IV
4c8e85b316 3rdparty/docker/bootstrap: Fix bootstrap container
* Update for newer git (init -b support)
* Fix configure args for new cross-tools-source

Change-Id: I757a1a48affb8cd98ddd8a0890393bdb6bc2a81f
hrev55722
2021-12-12 14:24:21 -06:00
X512
8ca0f03d0c riscv64/smp: Implement multi-processor support
* Working under qemu smp 1,2+
* Working on SiFive Unmatched
* x86_64 efi not broken by smp_boot_other_cpus change

Change-Id: I32ebc17913e46ed082be9ade8f56448bbf12f16e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4705
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
hrev55721
2021-12-12 15:35:24 +00:00
Augustin Cavalier
0cdb323800 app_server & Application Kit: Fix bitmap cursor handling.
Using a memcpy here is supremely dangerous, because we are writing to
an app_server buffer that we chose the length for, but using a size
that came from the client. And, indeed, because the buffer can contain
padding if the BBitmap was allocated with a non-standard BytesPerRow,
we will overflow the buffer and corrupt memory, causing app_server to crash.

So, instead, reorganize parameters a bit, and pass BytesPerRow along
with the other data needed to instantiate the bitmap, and then use
ImportBits.

Fixes an app_server crash I triggered with the experimental libX11
compatibility layer.
hrev55720
2021-12-11 21:44:59 -05:00