-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
.\" Copyright 2025 Shota FUJI
.\"
.\" Licensed under the Zero-Clause BSD License or the Apache License, Version 2.0, at your option.
.\" You may not use, copy, modify, or distribute this file except according to those terms. You can
.\" find a copy of the Zero-Clause BSD License at LICENSES/0BSD.txt, and a copy of the Apache License,
.\" Version 2.0 at LICENSES/Apache-2.0.txt. You may also obtain a copy of the Apache License, Version
.\" 2.0 at <https://www.apache.org/licenses/LICENSE-2.0>
.\"
.\" SPDX-License-Identifier: 0BSD OR Apache-2.0
.TH sood 3
.SH NAME
sood \- SOOD message used for Roon service discovery
.SH SYNOPSIS
.nf
.B #include <sood.h>
.fi
.SH DESCRIPTION
SOOD message is a UDP packet data format used for Roon Server discovery.
This
.B libsood
library provides parser functions and constants for the service discovery
process.
.PP
This library does NOT provide functions performing I/O. User is
responsible for sending and/or receiving UDP packet.
.SS Strings
Otherwise noted, this library uses an address and length to represent
strings, named "*_ptr" and "*_len" correspondingly.
Characters are encoded as UTF\-8.
.SS Allocation
This library does not allocate memory. User is responsible for allocating
a struct and pass an address of the struct via function parameter, usually
named
.B dst\fR.
.SS Bit size
Platforms having non-8bit byte (char) are not supported.
.SH RETURN VALUE
Functions provided by this library returns a shared enum as result codes.
.SS SOOD_OK
Procedure successfully completed and destination pointer is populated if
any.
.SS SOOD_ITERATOR_DONE
Only
.BR sood_message_iter_next (3)
returns this code.
Iterator reached at the end of a message and no more bytes to read.
.SS SOOD_ERR_PARSE_HEADER_SIZE_MISMATCH
Aborted header parsing due to received byte size being shorter than that
of SOOD message header.
.SS SOOD_ERR_PARSE_INVALID_SIGNATURE
Aborted header parsing due to the received bytes does not starts with SOOD
message signature (magic bytes).
.SS SOOD_ERR_PARSE_EMPTY_KEY
Aborted body parsing due to size of key is 0. libsood currently rejects
empty keys.
.SS SOOD_ERR_PARSE_KEY_SIZE_MISMATCH
Aborted body parsing due to message bytes ends at middle of a key field.
.SS SOOD_ERR_PARSE_NON_UTF8_KEY
Aborted body parsing due to message has a key that is not a valid UTF-8
string.
.SS SOOD_ERR_PARSE_VALUE_SIZE_CORRUPTED
Aborted body parsing due to message bytes ends at middle of value size
field. (A value size field is unsigned 16bit integer.)
.SS SOOD_ERR_PARSE_VALUE_SIZE_MISMATCH
Aborted body parsing due to message bytes ends at middle of a value field.
.SS SOOD_ERR_PARSE_NON_UTF8_VALUE
Aborted body parsing due to message has a value that is not a valid UTF-8
string. As SOOD message is schema\-less key\-value, every value has to be a
valid UTF-8 string.
.SS SOOD_ERR_VALIDATE_MISSING_REQUIRED_PROPERTY
Aborted response message parsing due to message does not have expected
key.
.SS SOOD_ERR_VALIDATE_UNEXPECTED_VALUE_TYPE
Aborted response message parsing due to fields have unexpected format,
such as port number field having non\-decimal string.
.SS SOOD_ERR_VALIDATE_UNEXPECTED_MESSAGE_KIND
Aborted response message parsing due to message type field is not set to
.BR R .
.SH CONSTANTS
.SS SOOD_DISCOVERY_QUERY_PREBUILT
A SOOD message ready to send via IP multicast or broadcast. This bytes
contains a NUL character: do not treat as C\-strings.
.nf
.RS
#include <sys/socket.h>
sendto (sockfd,
SOOD_DISCOVERY_QUERY_PREBUILT,
sizeof(SOOD_DISCOVERY_QUERY_PREBUILT),
0, &multicast_address,
sizeof(multicast_address));
.RE
.fi
.SS SOOD_DISCOVERY_MULTICAST_IPV4_ADDRESS_BE
IPv4 multicast address Roon Server listens to. This is in network byte
order.
.SS SOOD_DISCOVERY_MULTICAST_IPV4_ADDRESS
Same as
.BR SOOD_DISCOVERY_MULTICAST_IPV4_ADDRESS_BE ,
but in a byte array.
.SS SOOD_DISCOVERY_SERVER_UDP_PORT
UDP port for sending IPv4 multicast and broadcast to.
.SH SEE ALSO
.BR sood_parse (3),
.BR sood_get_result_string (3),
.BR sood_message_iterator (3),
.BR sood_message_iter_next (3),
.BR sood_discovery_response_parse (3)