73 Commits

Author SHA1 Message Date
Matus Fabian
499a9dd875 http: fix http_free_header_table
Type: fix

Change-Id: I014aebc84d0c219cc0c99120e9cd51fcc520a41c
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-12-10 17:54:54 +00:00
Matus Fabian
82b3cc1826 http: connection upgrade mechanism
Handle "Connection" and "Upgrade" headers in http transport layer which
are used to create a tunnel for some other protocol on the same
connection.

Type: improvement

Change-Id: Icf5479f36fbcc7259b157eaad957211be5ea2aae
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-12-10 05:10:41 +00:00
Matus Fabian
3d0b4ab20c http: http_decap_udp_payload_datagram fix
Properly handle incomplete capsule.

Type: fix

Change-Id: Ied7fca861f02e401451beaff09e612bcf471d8e0
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-12-08 22:56:40 +00:00
Matus Fabian
258b82975b http: track requests as independent objects
Type: improvement
Change-Id: I6c1808a82f61c71f34eab12ae5f99cca5fee8854
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-11-19 19:29:50 +00:00
Matus Fabian
2ec8a9abc2 http: HTTP Datagrams and the Capsule Protocol
Type: improvement

Change-Id: I45de69172eec54578ceebe87f655701830af1a3d
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-11-19 19:29:15 +00:00
Matus Fabian
1c9d1de9bc http: state machine improvement
Split in two, one for rx and second for tx, which is more suitable for
http tunnels. Updated state names too, some of them were bit confusing.

Type: improvement

Change-Id: I2310deaa49196819f9d8147a5d9af188465dbd65
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-11-14 18:59:45 +00:00
Matus Fabian
afce287645 http: CONNECT method for tunnelling
Type: improvement

Change-Id: I6af16ddcc6734bb831227ce65cb39e87294fc4cd
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-11-01 22:25:45 +00:00
Dave Wallace
7e70b1f0c4 http: fix invalid listener handle timeout config
- Fixes this assert() in make test-debug testcase:

  make test-debug TEST=test_http_static.TestHttpStaticVapi.test_http_static_vapi
  ...
  vpp[441]: /vpp/src/vppinfra/tw_timer_template.c:301 (tw_timer_start_2t_1w_2048sl) assertion `interval' fails

Type: fix

Change-Id: Ic6040957f48ab578affa5b1cf7dfdf4be27c4c56
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2024-11-01 22:13:36 +00:00
Matus Fabian
0af11f537f http: udp proxy uri template parsing
Parse a URI template that has variables "target_host" and "target_port",
where varaibles are at the end of the path:
"/{target_host}/{target_port}/".

Type: improvement
Change-Id: I440b7f4951bffa1fd9971740b9890b221193943b
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-30 23:20:54 +00:00
Matus Fabian
769a3b7256 http: "absolute-form" target URL parsing
Type: improvement

Change-Id: If39680a148d39add40433547369b2ddad3c2e226
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-29 17:26:04 +01:00
Matus Fabian
dcc6cd4333 http: timeout docs
Type: docs

Change-Id: I3dd9a726b862e72458a8f83c62354411d2c89d07
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-28 16:18:51 +00:00
Matus Fabian
841672258a http: pass timeout using extended config
App can now pass http connection timeout using extended configuration,
ext cfg type TRANSPORT_ENDPT_EXT_CFG_HTTP, value (in seconds) set in ext
cfg member opaque.
It is optional, default value is 60 seconds.

Type: improvement

Change-Id: Ibeff4bbd3153421be350ff564ec3c8e52e5b9639
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-25 23:33:15 +00:00
Matus Fabian
10c016c055 session: support of multiple extended configs
This allow configuration for each transport protocol when combined,
e.g. HTTPS=HTTP+TLS.
Extended config of session endpoint config is now chunk of memory,
which allow seamless integration with VCL, and internal
representation is hidden behind APIs, which is better for
future improvements. By default chunk is allocated to 512B if the
app doesn't do so before.

Type: improvement
Change-Id: I323f19ec255eba31c58c06b8b83af45aab7f5bb1
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-25 15:50:51 +00:00
Matus Fabian
15106becc5 http: Content-Length value parsing improvement
Type: improvement

Change-Id: Ida8ca43b5fed41fc0b13a2dde97e7e35c55283c9
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-14 19:26:45 +00:00
Matus Fabian
5c8ddd54c1 http: timer pool assert crash fix
Two iterations over expiret timers:
1) ivalidate timer handle and mark the connection as having a pending
   timer
2) send RPCs to workers

Type: fix

Change-Id: Iadc031c4e6d6f7bbd851d0421e6e0ea2d2b5e70f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-14 17:03:12 +00:00
Matus Fabian
b6ac2d7a7a http: track half-open sessions
It might happen that app detach during connecting period and worker
is not valid anymore when http_ts_connected_callback is called.

Type: improvement

Change-Id: I95f094e8bc0352728a61e3fe74ab0745859e2457
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-10-14 16:55:09 +00:00
Florin Coras
4856f33fa8 http_static: fix first and add segment size
Allow segments bigger than 4GB

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I510f7cff75883fdbd6c0c22efff9a14e26c755f4
2024-10-07 23:24:59 +00:00
Matus Fabian
38e94c3461 http: http_state_wait_server_reply fix
We enqueue 2 segments to app, first is masg (http_msg_t) and second
as much as possible of the raw data, so it must be:
max_enq - sizeof (msg)

Type: fix

Change-Id: Ib7ece7e0ad1aac99d687d49149f1bccea599b10f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-09-30 13:54:37 +02:00
Aritra Basu
6f45f5465f http: update body_len from u32 to u64
Type: improvement

Change-Id: I381541fb180d6d6ba42e4d231d22a73c5d33ef65
Signed-off-by: Aritra Basu <aritrbas@cisco.com>
2024-09-13 21:22:10 +00:00
Adrian Villin
540842835f http: fixed missing static keyword
Type: improvement

Change-Id: Id7a16388a72fc5de5848f3fec7a6dbeb6188f913
Signed-off-by: Adrian Villin <avillin@cisco.com>
2024-09-09 17:24:32 +00:00
Matus Fabian
9bb0762357 http: large POST handling
Type: improvement
Change-Id: I28b8e8ccbff6f97e669b0048011b187decbfc892
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-09-08 22:41:27 +00:00
Matus Fabian
dac6888244 http: http_send_data cleanup
removed unused parameter offset

Type: improvement
Change-Id: I30cde713731555fb2eb305c303369c1ead4d3783
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-28 15:41:03 +00:00
Matus Fabian
56cefc89e2 http: http_state_wait_app_reply improvement
set http status according to whether app also sent the body

Type: improvement
Change-Id: Ia41603cc21b410ca6929ec3d3e7c4c6808305769
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-28 06:08:04 +00:00
Matus Fabian
69123a3f67 http: status line parsing fix
Request line must only start with method name and server should
ignore at least one empty line (CRLF) received prior to the
request-line.

Type: fix
Change-Id: Ifebd992dc4c13df1a3fabfcdef9e7ee644150a21
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-23 17:59:46 +00:00
Adrian Villin
3601b322a0 http: make Media Types RFC9110 compliant
- https://www.rfc-editor.org/rfc/rfc9110.html#name-media-type
  https://www.iana.org/assignments/media-types/media-types.xhtml

Type: improvement

Change-Id: I2624dc39a985ff3999aed6e1c833220b7049828d
Signed-off-by: Adrian Villin <avillin@cisco.com>
2024-08-19 14:47:25 +02:00
Matus Fabian
5546755d1a http: http_read_message improvement
Use svm_fifo_peek in http_read_message and advance rx fifo head by
amount of bytes send to app, since not always you won't or can't
send all bytes.

Type: improvement
Change-Id: I84348c9df5c77ba386c9738a754295bb9ea0f7ef
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-16 13:36:34 +02:00
Matus Fabian
d58177c50b http: authority-form target parsing/serializing
Type: improvement
Change-Id: Ifb90818a3526d3d4030a66b1ef7eebedfe97978f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-09 20:08:59 +00:00
Matus Fabian
d46e674abc http: client POST method
Type: improvement

Change-Id: Iaa70abcee02866f9a6426a6e8e4709eeba0e8114
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-08-06 16:01:02 +00:00
Matus Fabian
ba9ea13e26 http: client code improvement
Client app can sends request target, custom header and body to
HTTP layer. In response it receives all bytes as received from
transport, aditionally we provide offset and length of headers
and body.
In addtion client app is now able to receive response with all
status codes and Host header field is set in request at protocol
layer.

Type: improvement

Change-Id: I8c8e2c8f99cdf500126b7c2c722aebc254aa0d9f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-07-29 14:21:12 +02:00
Matus Fabian
d086a3650e http: state machine fix
When client sends second request without waiting for response of the
first request http_ts_rx_callback should drop request (pipelining is
not supported) instead of invoking return to state machine which can
lead to erroneous state, e.g. reading random data from server app
fifo.

Added simple http static server url handler for testing to simulate
long running request processing, for now hardcoded delay 5 seconds.

Type: fix

Change-Id: Ied9f7e2e4ee64c982f045c0f7f99a2dc5d7a2108
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-07-23 20:37:16 +00:00
Matus Fabian
8ca6ce6fe1 http: return more than data from server app
Server app could return headers in front of body/data buffer.
Offers apis for building and serialization of headers section.
HTTP layer now only add Date, Server and Content-Lengths headers,
rest is up to app. Well known header names are predefined.

Type: improvement

Change-Id: If778bdfc9acf6b0d11a48f0a745a3a56c96c2436
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-07-23 15:22:34 +00:00
Florin Coras
75e8e1e948 session: improve enable and disable handling
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I3c79d16f6a19767d990e8a4683c296219b559ccd
2024-07-08 16:27:06 +00:00
Steven Luong
d2d41bc34e session: memory leaks on various transports when session disable and enable
When toggling session disable and enable, memory leaks found on various
transports.

Don't create the timer wheels on enable when they are already creaded.
Don't create the spin locks when they are already created.
Add session enable disable test in session unit test.

Type: fix

Change-Id: I08988a96bbf2d67a67c743b50b63f5b1e27402a3
Signed-off-by: Steven Luong <sluong@cisco.com>
2024-06-28 15:19:08 -07:00
Matus Fabian
05fbc3569c http: fix app name formatting in template
app name is vector without null termination

Type: fix

Change-Id: Iaa50770c84f23a71165d76a63c29b76e90006ac6
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-06-19 15:30:31 +00:00
Matus Fabian
82ad9660be http: return more than url to server app
Provide all bytes as received from transport as data in the http
message to server. Additionally provide offset and length of target
path, target query, headers and body. Offers apis for parsing of
headers, percent decoding, target path/query syntax verification.

Type: improvement

Change-Id: Idbe6f13afa378650cc5212ea7d3f9319183ebbbe
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-06-13 06:35:26 +00:00
Matus Fabian
5409d33002 http_static: sanitize path before file read
Romove dot segments from requested target path before start reading
file in file handler to prevent path traversal.

Type: fix

Change-Id: I3bdd3e9d7fffd33c9c8c608169c1dc73423b7078
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-28 20:42:30 +00:00
Matus Fabian
fec709125b http: fix unsupported client app method
HTTP client app code currently support only GET method but method
set in message from client app was silently ignored.

Type: fix

Change-Id: I99dc6323d9783ee5a20623e7923cfdbf31474a4f
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-14 22:39:38 +00:00
Matus Fabian
3d00893c37 http: notify client when connection failed
Type: fix

Change-Id: I87054e9667fe990d9a2dc3950bc3ce348460018a
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-14 22:38:23 +00:00
Matus Fabian
b7a9ed75fb http: fix server sending all status codes
Type: fix

Change-Id: I4bc748e3091c2fbe0142d1b74d21a543a62c4ce0
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-14 22:36:31 +00:00
Matus Fabian
2516b1ac73 http: fix user agent in request
App name is used in HTTP request User-Agent header.

Type: fix

Change-Id: Ib761e8a8e793e04e8d77141cc8c0f8514ed0e547
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-13 15:06:26 +00:00
Matus Fabian
8761095e80 http: fix client parse error handling
Do not return HTTP errors to server on parse errors in client.

Type: fix

Change-Id: Id3e99d69626855848faa87af73002d559d948516
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-09 15:57:42 +00:00
Matus Fabian
dba5c41942 http: fix client send another request
HTTP client should be able to send another request after large data
receiving.

Type: fix

Change-Id: I8352ea760a4b3de4b79159531c7e4c1fa4e03203
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-07 17:06:51 +00:00
Matus Fabian
b8c762cc22 http: notify client on request error
Notify client app that we errored out while trying to generate request.

Type: fix

Change-Id: I3e20fe22d8a927ae8e9bf8391297e10c974dc941
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-07 17:01:01 +00:00
Matus Fabian
616201abe2 http: fix http server in response
App name is used in HTTP response Server header.

Type: fix

Change-Id: Ie3b2d985dd7d554a0352f7e602891f878bebd031
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-03 08:17:16 +02:00
Filip Tehlar
d894438f04 http: fix client receiving large data
HTTP client was relying on synchronous rx notifications to the client
app when moving lage data from underlying transport proto.
Recent change in session layer made such notifications asynchronous
making http client not working. This patch fixes the issue.

Type: fix

Change-Id: I4b24c6185a594a0fe8d5d87c149c53d3b40d7110
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Signed-off-by: Matus Fabian <matfabia@cisco.com>
2024-05-01 05:07:26 +00:00
Filip Tehlar
bf40da413f http: fix memory leak
Type: fix

Change-Id: I36905132a42d23e719bf0e82eeafa48f60f4887a
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2024-01-12 11:25:16 +01:00
Filip Tehlar
b1ea30e563 http: unify client/server state machines
Type: improvement

Change-Id: I57a816fbed8b681dec201edc8d5950a34a555a2b
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2024-01-02 12:07:04 +00:00
Filip Tehlar
7521d6745a http: fix coverity warning
Type: fix

Change-Id: I659a67293763a6035cfa64a4057ebf716fe93ab4
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
2023-12-04 17:28:33 +00:00
Florin Coras
2ceb818f8e session: fix allocation of proxy fifos
Fifos need to be synchronously allocated once a transport like tcp
accepts a session. Since events are now delivered asynchronously,
proxy apps must explicitly register a cb function that manages
fifo allocation prior to being notified of connect event.

Type: fix
Fixes: 0242d30

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I7df973b7014e53e0766ea2bdc61e9871160bc18b
2023-09-04 00:08:40 +00:00
Florin Coras
09c0e8fac2 session: fix coverity warnings
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I910c8ce1713c6d346cc5ea4eb58a89c1c30a10a1
2023-08-11 21:33:58 +00:00