Passing HTTP upgrade request context to the user callback allows the
user to decide whether to accept or reject the websocket connection
based on the HTTP headers in the request. The primary reason for this is
to enable authentication of the websocket connection (e.g. via cookies
or Authorization header).
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
RFC6455 section 5.1 specifies that "A server MUST NOT mask any frames
that it sends to the client". Implement this for websocket write calls
via ZVFS, by storing in the websocket_context whether a socket is acting
in the client or server role, and using this to determine if sent data
should be masked.
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
The DHCPv4 options always assigns the DNS address if the router
provides one through the DHCP callback. There are times a developer
may not always want to assign the server from the router, but only
manually assign them. Adding a Kconfig option for assigning the DNS
address and defaulting to true to not interfere with previously
expected functionality.
Signed-off-by: Kris Wolff <kwolff@wavelynx.com>
Latest supplicant uses 1K buffer size for sending control message via
socketpair, so reducing the NET_SOCKETPAIR_BUFFER_SIZE to save memory
footprint. There are 4 socketpairs for supplicant only case, and 6
socketpairs for hostapd case, update the heap size correspondingly.
Signed-off-by: Maochen Wang <maochen.wang@nxp.com>
For waking up the poll() use eventfd() instead of socketpair()
so we save some buffer space and one file descriptor.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Previously added type casting was still causing coverity to complain.
This time casting multiplication before bitshift operation.
Signed-off-by: Adam Wojasinski <awojasinski@baylibre.com>
Retreiving IP address from the networking interface assigned to
a PTP port could result in NULL dereference or undefined behaviour
when passing NULL to `memcpy()` function. Added check on addresses
returned from functions retreiving IP address from an interface.
Signed-off-by: Adam Wojasinski <awojasinski@baylibre.com>
Use the net_icmp_send_echo_request_no_wait() when sending
ICMP Echo-Req so that we can avoid the warning message from
system workqueue handler.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Extend the list of methods supported by dynamic resources with
PUT/PATCH/DELETE. The methods does not require any extra handling
from the server perspective, so the existing method handlers could be
reused.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Don't check 'HEAP_MEM_POOL_SIZE != 0', as HEAP_MEM_POOL_SIZE might be 0,
but HEAP_MEM_POOL_ADD_SIZE_xxx is defined, which means the actual heap
size is not zero. So check KERNEL_MEM_POOL instead.
Signed-off-by: Maochen Wang <maochen.wang@nxp.com>
This removes the deprecated CONFIG_NET_PKT_BUF_DATA_POOL_SIZE.
User should either use CONFIG_NET_PKT_BUF_RX_DATA_POOL_SIZE or
CONFIG_NET_PKT_BUF_TX_DATA_POOL_SIZE depending of net packet type.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Compilation errors in ptp library when using C++ compiler.
First error is due to 'class' keyword being reserved in C++
and 'class' is used as a variable name in ptp library.
Second error is due to a flexible array member in a struct
is not placed at the end.
Signed-off-by: Tomas Choat <trc@ixys.no>
The asserts always fail because the condition is inverted.
This patch fixes the condition to verify the socket
is lower than PTP_SOCKET_CNT.
Signed-off-by: Tomas Choat <trc@ixys.no>
When the offset is larger than 1 second, the time
adjustment should still be allowed to be bidirectional.
Casting the offset to an unsigned value after the
subtraction will allow the adjustment to be bidirectional.
Signed-off-by: Tomas Choat <trc@ixys.no>
When sending follow up messages, the pre send function
does not insert the correct time stamp in the message.
Issue is fixed by calling the pre send timestamp function.
Signed-off-by: Tomas Choat <trc@ixys.no>
In case TLS connect timed out during the handshake, errno was set to
EAGAIN which is unexpected and confusing. Fix this and set the errno
to ETIMEDOUT instead.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Concurrent HTTP POST requests on different HTTP2 concurrent streams
require that the client's header_capture_context is re-used to capture
headers on a second stream before all of the body data has been received
(and sent to the application) on the first stream.
As a result, any captured headers must be sent to the application
callback before any headers can be received on a different stream. In
practice this means that for HTTP2 the application callback is called
for the first time on receiving a headers frame, before any data frames
are received. All subsequent application callbacks will not include the
request header data.
While this mechanism is not necessary for HTTP1, it is also updated to
only send headers in the first application callback for consistency.
Fixes#82273
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
To correctly handle concurrent HTTP POST requests via different http2
streams on the same client context, it is necessary to store the
resource detail at an HTTP2 stream level rather than at an HTTP client
level, otherwise only one resource detail can be stored.
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
The deprecated CONFIG_NET_SOCKETS_POSIX_NAMES option is removed.
If one wishes to use POSIX API socket calls, then CONFIG_POSIX_API
option needs to be enabled.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
lwm2m_engine_set() and lwm2m_engine_get() locks
the registry_lock mutex, but this is not unlocked
when setting or getting a time resource where the buffer
lengths are invalid resulting in an early return without
unlocking the mutex. This results in a deadlock when
attempting to lock the registry in another thread.
Signed-off-by: Steven Poon <steven-github@outlook.com>
The dns_unpack_answer() did not check the length of the message
properly which can cause out of bounds read.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
If the packet parsing fails in dns_unpack_response_query(), then
do not continue further but bail out early.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
As the error print strings are very similar, construct the final
output at runtime to save some flash space.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Follow net coding style and remove extra new lines between
variable set and checking its value.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
We must do null check before trying to access the fields.
Fixes#81980
Coverify-CID: 434549
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Verify the result of the fs_read() operation when handling filesystem
resources, and abort processing the resource in case of errors.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Reset the server timestamps after bootstrap to handle a case
where a new server instance has replaced the bootstrap server
instance.
Signed-off-by: Stig Bjørlykke <stig.bjorlykke@nordicsemi.no>
In case lwm2m_get_engine_obj_field() fails to find a corresponding
object field when iterating resource instances, simply skip that
resource instance when printing object instance contents.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Support write OMA TLV resource instance in LwM2M 1.1.
Accept OMA TLV as default content format.
Signed-off-by: Stig Bjørlykke <stig.bjorlykke@nordicsemi.no>
The network interface name that is copied to if_req struct might
be missing terminating null for IPv4.
This is fixing the IPv4 issue which was missed in previous fix attempt.
Fixes#74795
Coverity-CID: 368797
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Instead of requiring one big buffer for formatting the output,
have a walk function that can be used to generate output by
one metric at a time.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Add collector parameter to metric creation macros so that it
is possible to bind the metric to collector already at built
time.
Also add optional user_data to metric macro calls so that user
can add optional data there. This will be used by network statistics
Prometheus support in subsequent commits.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Embed "struct prometheus_metric" to individual metric like
counter, gauge, histogram and summary. This way we avoid having
a separate base pointer in specific metrict struct. We also do
not need to search the specific metric from base metric as
we can simply use CONTAINER_OF() macro to get the base metric.
This embedding means that the counter, gauge, histogram and summary
metric define macros are changed as user does not need to create a
separate "struct prometheus_metric".
Convert the tests and sample to use the new macros.
Remove also the static from metric creation macros so that user
can decide whether it needs collector to be static or not.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
This is similar function as add, but will add the difference of
previous value and the new one. This can be used if we want to
periodically update the value with a new one but don't want to
keep track of the old one.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>