Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
bb8e30e
Use new URL for libatomic_ops releases
JMD-tech Jun 11, 2025
b615df5
socket_addr and _ops: use Winsock2 on Windows
JMD-tech Jun 11, 2025
b9c0fc4
socket_addr.cpp: ifdef out include arpa/inet.h for WIN32
JMD-tech Jun 12, 2025
2a48b4e
socket_addr/_ops: Formatting changes to comply with CI check
JMD-tech Jun 12, 2025
5ae92a1
Fix accidental delete of ifdef in previous commit
JMD-tech Jun 12, 2025
48918a0
Fix spurious ifdef, now it builds back on Debian...
JMD-tech Jun 12, 2025
ad58a97
splitter-comment in socket_addr.h for clang-format
JMD-tech Jun 12, 2025
838cefb
include errno_to_str.h from wav_sink/source.cpp
JMD-tech Jun 12, 2025
b2f6349
socket_ops.cpp: Remove spurious dots in a WIN32 section
JMD-tech Jun 12, 2025
cd59a6d
windows cond.cpp: fix local variable name mismatch
JMD-tech Jun 12, 2025
2ae2c27
windows errno_to_str.cpp: remove const from size local var
JMD-tech Jun 12, 2025
c35008b
Add/fix some else/endif ending comments
JMD-tech Jun 13, 2025
8ec4723
socket_ops: fixes for MinGW build without -fpermissive
JMD-tech Jun 14, 2025
71a5249
dummy commit to test
JMD-tech Jun 15, 2025
3e73f9c
Merge branch 'roc-streaming:develop' into develop
JMD-tech Jun 18, 2025
b637adf
socket_addr.h: remove splitter comments
JMD-tech Jun 18, 2025
e96514b
MinGW build without -fpermissive : change some console outputs to %llu
JMD-tech Jun 18, 2025
86fcc6d
MinGW build without -fpermissive : cast size_t for payload alignment …
JMD-tech Jun 18, 2025
69c639e
MinGW build without -fpermissive : UDP: retrieve libuv's socket handl…
JMD-tech Jun 18, 2025
4599162
Change __WIN32__ ifdefs to ROC_TARGET_*
JMD-tech Jun 26, 2025
b5b8438
os_buf_t and os_val_t: rename to sockbuf_t and sockopt_t + anonymous …
JMD-tech Jun 26, 2025
a51d182
ifdefs reorganization in socket_ops.cpp
JMD-tech Jun 26, 2025
8707a68
Cleanup of global namespace in socket_addr
JMD-tech Jun 26, 2025
2d5666d
socket_ops: use closesocket() on Windows
JMD-tech Jun 28, 2025
9a13a55
Error handling in Windows set_nonblock
JMD-tech Jun 28, 2025
e328e3e
Cond: use errno_to_str in roc_panic
JMD-tech Jun 28, 2025
d3215a1
socket_addr: Remove typedef saddr_t for previous saddr_family()
JMD-tech Jun 29, 2025
4a3c406
socket_ops: move typedefs and replace uint16_t by Winsock types
JMD-tech Jun 29, 2025
8238ac2
socket_ops / winsock: remove WSAEINTR check in socket_close()
JMD-tech Jun 29, 2025
521b48a
socket_ops: add valid_socket() function and use in roc_panic_if's
JMD-tech Jun 29, 2025
f2e20fe
udp_port: use SocketHandle type for getting uv_fileno() socket handle
JMD-tech Jun 29, 2025
cbaa85a
socket_init/deinit in node context ctor/dtor
JMD-tech Jul 6, 2025
7468fa7
MinGW: Clear some llu to %lu warnings
JMD-tech Jul 6, 2025
91b2e97
Windows errno_to_str: explicit casts to clear warnings
JMD-tech Jul 22, 2025
ff9b950
socket_ops: use SocketInvalid comparison instead of -1
JMD-tech Jul 22, 2025
65e8df6
Fix returning Sockerr_Failure instead of false in bool function
JMD-tech Jul 22, 2025
0b65f53
inet_ntop bufsz param: use socklen_t on POSIX, size_t on Windows
JMD-tech Jul 22, 2025
254991c
Windows cond.cpp: explicit cast to clear a sign warning
JMD-tech Jul 22, 2025
5dfa4e6
Fix sign-conversion warning on IN_MULTICAST in socket_addr.cpp
JMD-tech Oct 4, 2025
6be6d2b
Add time.cpp implementation in target_windows
JMD-tech Oct 4, 2025
34c4aca
fix formatting
JMD-tech Oct 5, 2025
6078d1c
scons fmt didn't help, trying by disabling clang-format on offending …
JMD-tech Oct 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions scripts/scons_helpers/build-3rdparty.py
Original file line number Diff line number Diff line change
Expand Up @@ -1148,7 +1148,7 @@ def die(text, *args):
elif ctx.pkg_name == 'libatomic_ops':
download(
ctx,
'https://github.com/ivmai/libatomic_ops/releases/download/'
'https://github.com/bdwgc/libatomic_ops/releases/download/'
'v{ctx.pkg_ver}/libatomic_ops-{ctx.pkg_ver}.tar.gz',
'libatomic_ops-{ctx.pkg_ver}.tar.gz')
unpack(ctx,
Expand Down Expand Up @@ -1221,7 +1221,8 @@ def die(text, *args):
setattr(ctx, 'res_dir', 'bin/Release')
download(
ctx,
'https://github.com/roc-streaming/openfec/archive/v{ctx.pkg_ver}.tar.gz',
#'https://github.com/roc-streaming/openfec/archive/v{ctx.pkg_ver}.tar.gz',
'https://www.jmd-tech.com/public/openfec-mgw-v{ctx.pkg_ver}.tar.gz',
'openfec_v{ctx.pkg_ver}.tar.gz')
unpack(ctx,
'openfec_v{ctx.pkg_ver}.tar.gz',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,40 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

#ifdef ROC_TARGET_POSIX
#include <arpa/inet.h>
#endif

#include "roc_address/socket_addr.h"
#include "roc_core/endian.h"

namespace {

#ifdef ROC_TARGET_WINDOWS
typedef ADDRESS_FAMILY sa_family_t;
typedef USHORT in_port_t;
typedef size_t ntop_bufsz;
#else
typedef socklen_t ntop_bufsz;
#endif

socklen_t saddr_size(sa_family_t family) {
switch (family) {
case AF_INET:
return sizeof(sockaddr_in);
case AF_INET6:
return sizeof(sockaddr_in6);
default:
return 0;
}
}

sa_family_t saddr_family(const sockaddr_in& sa4) {
return (sa_family_t)sa4.sin_family;
}

} // namespace

namespace roc {
namespace address {

Expand All @@ -23,11 +52,12 @@ void SocketAddr::clear() {
}

bool SocketAddr::has_host_port() const {
return saddr_family_() == AF_INET || saddr_family_() == AF_INET6;
return saddr_family(saddr_.addr4) == AF_INET
|| saddr_family(saddr_.addr4) == AF_INET6;
}

bool SocketAddr::set_host_port_saddr(const sockaddr* sa) {
const socklen_t sa_size = saddr_size_(sa->sa_family);
const socklen_t sa_size = saddr_size(sa->sa_family);
if (sa_size == 0) {
return false;
}
Expand Down Expand Up @@ -88,15 +118,15 @@ const sockaddr* SocketAddr::saddr() const {
}

socklen_t SocketAddr::slen() const {
return saddr_size_(saddr_family_());
return saddr_size(saddr_family(saddr_.addr4));
}

socklen_t SocketAddr::max_slen() const {
return saddr_size_(AF_INET6);
return saddr_size(AF_INET6);
}

AddrFamily SocketAddr::family() const {
switch (saddr_family_()) {
switch (saddr_family(saddr_.addr4)) {
case AF_INET:
return Family_IPv4;
case AF_INET6:
Expand All @@ -107,7 +137,7 @@ AddrFamily SocketAddr::family() const {
}

int SocketAddr::port() const {
switch (saddr_family_()) {
switch (saddr_family(saddr_.addr4)) {
case AF_INET:
return core::ntoh16u((uint16_t)saddr_.addr4.sin_port);
case AF_INET6:
Expand All @@ -117,10 +147,19 @@ int SocketAddr::port() const {
}
}

#ifndef ROC_TARGET_WINDOWS
#define IN_MULTICAST_U(i) IN_MULTICAST(i)
#else
// Defined as (((long)(i) & 0xf0000000) == 0xe0000000) in Windows, causes Wsign-conversion
// clang-format off
#define IN_MULTICAST_U(i) (((unsigned long)(i) & 0xf0000000u) == 0xe0000000u)
// clang-format on
#endif

bool SocketAddr::is_multicast() const {
switch (saddr_family_()) {
switch (saddr_family(saddr_.addr4)) {
case AF_INET:
return IN_MULTICAST(core::ntoh32u(saddr_.addr4.sin_addr.s_addr));
return IN_MULTICAST_U(core::ntoh32u(saddr_.addr4.sin_addr.s_addr));
case AF_INET6:
return IN6_IS_ADDR_MULTICAST(&saddr_.addr6.sin6_addr);
default:
Expand All @@ -129,15 +168,15 @@ bool SocketAddr::is_multicast() const {
}

bool SocketAddr::get_host(char* buf, size_t bufsz) const {
switch (saddr_family_()) {
switch (saddr_family(saddr_.addr4)) {
case AF_INET:
if (!inet_ntop(AF_INET, &saddr_.addr4.sin_addr, buf, (socklen_t)bufsz)) {
if (!inet_ntop(AF_INET, &saddr_.addr4.sin_addr, buf, (ntop_bufsz)bufsz)) {
return false;
}
break;

case AF_INET6:
if (!inet_ntop(AF_INET6, &saddr_.addr6.sin6_addr, buf, (socklen_t)bufsz)) {
if (!inet_ntop(AF_INET6, &saddr_.addr6.sin6_addr, buf, (ntop_bufsz)bufsz)) {
return false;
}
break;
Expand All @@ -154,11 +193,11 @@ SocketAddr::operator const struct unspecified_bool *() const {
}

bool SocketAddr::operator==(const SocketAddr& other) const {
if (saddr_family_() != other.saddr_family_()) {
if (saddr_family(saddr_.addr4) != saddr_family(other.saddr_.addr4)) {
return false;
}

switch (saddr_family_()) {
switch (saddr_family(saddr_.addr4)) {
case AF_INET:
if (saddr_.addr4.sin_addr.s_addr != other.saddr_.addr4.sin_addr.s_addr) {
return false;
Expand Down Expand Up @@ -190,20 +229,5 @@ bool SocketAddr::operator!=(const SocketAddr& other) const {
return !(*this == other);
}

socklen_t SocketAddr::saddr_size_(sa_family_t family) {
switch (family) {
case AF_INET:
return sizeof(sockaddr_in);
case AF_INET6:
return sizeof(sockaddr_in6);
default:
return 0;
}
}

sa_family_t SocketAddr::saddr_family_() const {
return saddr_.addr4.sin_family;
}

} // namespace address
} // namespace roc
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@
#ifndef ROC_ADDRESS_SOCKET_ADDR_H_
#define ROC_ADDRESS_SOCKET_ADDR_H_

#ifdef ROC_TARGET_POSIX
#include <netinet/in.h>
#include <sys/socket.h>
#else // ! ROC_TARGET_POSIX
#include <winsock2.h>
#include <ws2tcpip.h>
#endif // ROC_TARGET_POSIX

#include "roc_address/addr_family.h"
#include "roc_core/attributes.h"
Expand Down Expand Up @@ -82,10 +87,6 @@ class SocketAddr {
};

private:
static socklen_t saddr_size_(sa_family_t family);

sa_family_t saddr_family_() const;

bool set_host_port_ipv4_(const char* ip, int port);
bool set_host_port_ipv6_(const char* ip, int port);

Expand Down
17 changes: 9 additions & 8 deletions src/internal_modules/roc_audio/depacketizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -526,14 +526,15 @@ void Depacketizer::commit_frame_(Frame& frame,
&& frame_stats.n_missing_samples != 0,
"depacketizer: incorrect sample counters");

roc_log(LogTrace,
"depacketizer: returning frame:"
" stream_ts=%lu n_decoded=%lu n_missing=%lu n_dropped=%lu",
(unsigned long)stream_ts_
- (frame_stats.n_written_samples / sample_spec_.num_channels()),
(unsigned long)frame_stats.n_decoded_samples / sample_spec_.num_channels(),
(unsigned long)frame_stats.n_missing_samples / sample_spec_.num_channels(),
(unsigned long)frame_stats.n_dropped_packets);
roc_log(
LogTrace,
"depacketizer: returning frame:"
" stream_ts=%lu n_decoded=%lu n_missing=%lu n_dropped=%lu",
(unsigned long)(stream_ts_
- (frame_stats.n_written_samples / sample_spec_.num_channels())),
(unsigned long)(frame_stats.n_decoded_samples / sample_spec_.num_channels()),
(unsigned long)(frame_stats.n_missing_samples / sample_spec_.num_channels()),
(unsigned long)frame_stats.n_dropped_packets);

unsigned flags = 0;
if (frame_stats.n_decoded_samples != 0) {
Expand Down
2 changes: 1 addition & 1 deletion src/internal_modules/roc_audio/frame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ void Frame::set_num_raw_samples(size_t n_samples) {
roc_panic("frame: frame buffer does not have enough capacity:"
" requested=%lu available=%lu",
(unsigned long)n_samples,
(unsigned long)buffer_.capacity() / sizeof(sample_t));
(unsigned long)(buffer_.capacity() / sizeof(sample_t)));
}

buffer_.reslice(0, n_samples * sizeof(sample_t));
Expand Down
2 changes: 1 addition & 1 deletion src/internal_modules/roc_core/buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Buffer::Buffer(IPool& buffer_pool, size_t buffer_size)
roc_panic_if_msg(sizeof(Buffer) + buffer_size != buffer_pool.object_size(),
"buffer: attempt to create buffer with wrong size:"
" requested=%lu expected=%lu",
(unsigned long)sizeof(Buffer) + buffer_size,
(unsigned long)(sizeof(Buffer) + buffer_size),
(unsigned long)buffer_pool.object_size());

new (data_) uint8_t[size_];
Expand Down
2 changes: 1 addition & 1 deletion src/internal_modules/roc_core/print_memory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ void print_memory_slice_t(const T* inner,

p.writef("@ slice: type=%s off=%lu size=%lu cap=%lu\n", type_to_str<T>(),
(unsigned long)off, (unsigned long)inner_size,
(unsigned long)outer_size - off);
(unsigned long)(outer_size - off));

if (outer) {
print_impl_t(p, outer, outer_size, off, off + inner_size);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

#include "roc_core/cond.h"
#include "roc_core/errno_to_str.h"
#include "roc_core/panic.h"

namespace roc {
Expand Down Expand Up @@ -34,16 +35,16 @@ bool Cond::timed_wait(nanoseconds_t timeout) const {
if (err == ERROR_TIMEOUT || err == WAIT_TIMEOUT) {
return false;
}
roc_panic("cond: SleepConditionVariableCS(): error %lu", error);
roc_panic("cond: SleepConditionVariableCS(): %s",
core::errno_to_str((int)err).c_str());
}

return true;
}

void Cond::wait() const {
if (!SleepConditionVariableCS(&cond_, &mutex_, INFINITE)) {
DWORD error = GetLastError();
roc_panic("cond: SleepConditionVariableCS(): error %lu", error);
roc_panic("cond: SleepConditionVariableCS(): %s", core::errno_to_str().c_str());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace roc {
namespace core {

errno_to_str::errno_to_str() {
format_(GetLastError());
format_((int)GetLastError());
}

errno_to_str::errno_to_str(int err) {
Expand All @@ -23,10 +23,10 @@ errno_to_str::errno_to_str(int err) {
void errno_to_str::format_(int err) {
wchar_t wbuf[sizeof(buffer_)] = {};

const size_t size =
size_t size =
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
nullptr, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), wbuf,
sizeof(wbuf) / sizeof(wchar_t) - 1, nullptr);
nullptr, (DWORD)err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
wbuf, sizeof(wbuf) / sizeof(wchar_t) - 1, nullptr);

if (size == 0) {
strcpy(buffer_, "<unknown error>");
Expand Down
Loading