Commit Graph

1062 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
David Karoly
dea541c4f4 docs/arm: update info for Raspberry Pi 2 & 3
Add some more details on peripherals.

Change-Id: I65e6ce5ff32cd8b40b95a707460a870f0f4d688e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5239
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-23 18:18:13 +00:00
David Karoly
e5165df648 docs/arm: remove TODO item for soft-float
soft-float/hard-float mismatch issues are tackled by introducing
libgcc-boot, libgcc_eh-boot, libsupc++-boot libraries in the
gcc_bootstrap package

Change-Id: I4d3eff12c4c78804cd1dd32d6c1c5c8a9b5ad51a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5238
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-23 18:17:19 +00: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
PulkoMandy
d0c94afe0c docs/develop: fix incorrect title level 2022-04-23 13:59:49 +02:00
David Karoly
ba0c49863a docs/arm: add info on Raspberry Pi 4
Change-Id: Ic8cc47394c9e49f05e30b5ba54ff70557b1e2c47
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5237
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-23 09:18:03 +00:00
David Karoly
097f72e92c docs/arm: update info for Raspberry Pi 2
Change-Id: I968752c3eae56bee099f3cec5db7856dbe007592
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5232
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-22 10:50:59 +00:00
David Karoly
be7333a8d7 docs/arm: add info on Raspberry Pi 3
Change-Id: Iee7bd2f99dfc11930a97683c2cf30c51110d6726
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5229
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-22 10:00:39 +00:00
David Karoly
2ba1112f62 docs/arm: remove TODO item for KDL hangman
It seems to be already implemented.

Welcome to Kernel Debugging Land...
Thread 14 "main2" running on CPU 0
frame            caller     <image>:function + offset
 0 801bc898 (+2145662824) 801b9734   <kernel_arm>  (nearest) + 0x00
kdebug> kdlhangman
word> ____
hangman> e
word> ___e
hangman> t
  ____
  |   |
  |   O
  |
  |
  |
word>

Change-Id: I40aa484a69a76482ddd8508d493b6c52c11558fb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5228
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-04-22 09:46:30 +00:00
PulkoMandy
b5ab38ecf0 Add some docs about our compilers and patches done to them.
Change-Id: I60e0960499aec789ae6240eec949249adb2e35ad
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5224
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
2022-04-21 17:53:48 +00: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
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
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
Adrien Destugues
7b7cc2944b Allwinner A10 docs: fix broken link
Change-Id: I40d3bebd2f70def0a4074f2bec74c574f44d46cd
Reviewed-on: https://review.haiku-os.org/c/haiku/+/5101
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
2022-03-14 21:35:41 +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
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
David Karoly
8d743ebd60 docs/arm: remove TODO item for bootloader memory map handling
Change-Id: Iabcada696eb87500dbcdb03cf742607e0e525707
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4892
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>
2022-01-27 20:25:22 +00:00
David Karoly
f06c2e7f5c docs/arm: remove TODO item for early page tables
Page directory and early page tables are allocated using
platform_allocate_region() and they don't need to be identity mapped
since commits 9103470bd and a7c69a4b1.

Change-Id: Ia7fcf1dd2fa34262e013f651139ad252a1ac9113
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4886
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-01-27 02:01:41 +00:00
David Karoly
dc3e1761e6 docs/arm: remove TODO item for serial port mapping
UART is mapped to kernel virtual address range since commit f5f10a9ec
so it does not overlap with user address range any more.

Change-Id: If8e18904fcddcbef1ccdc91e526d0e581f61e085
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4856
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-01-12 12:21:11 +00:00
Kacper Kasper
7323d0a21d Minor documentation fixes
* Remove duplicated Interface Kit description.
* Fixed links, a typo, inconsistent page names.

Change-Id: I38e5943f31bf30870d33f02a97b4ef899222ec36
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4854
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
2022-01-11 12:22:17 +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
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
Humdinger
1621d71af8 Fix typo in API docs (BBitmap)
Found by Scottmc.

Change-Id: Idd10040d798533a0aa731132f7282e7ce1423ed6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4687
Reviewed-by: humdinger <humdingerb@gmail.com>
2021-11-04 16:15:34 +00:00
Andrew Lindesay
0d4fa3e526 HaikuDepot: Show Publish Date
Add a column to the table to show the publish
date.  Also add text on the featured packages
view to show the publish date.  Supports
sorting.

Fixes #13006

Change-Id: I19d9bc5bf7f44b5673c2ade5d00de8fdadbe1b06
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4649
Reviewed-by: humdinger <humdingerb@gmail.com>
Reviewed-by: Andrew Lindesay <apl@lindesay.co.nz>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
2021-10-27 05:27:53 +00:00
PulkoMandy
d1ecc0955f sparc docs: write down some more useful things
These are better here than in my bash history...

Change-Id: Iab8940f4efed950e26a8bad29cb8954464270e8f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4645
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
2021-10-22 20:23:01 +00:00