-
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
.\" 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 Zero-Clause BSD License
.\" at <https://opensource.org/license/0bsd> and 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_discovery_response_parse 3
.SH NAME
sood_discovery_response_parse \- Parse SOOD message sent by Roon Server
.SH SYNOPSIS
.nf
.B #include <sood.h>
\fBsood_result sood_discovery_response_parse(
sood_discovery_response \fR*\fIdst\fB,
const char \fR*\fImessage_ptr\fB,
size_t \fImessage_len\fB
);
.fi
.SH DESCRIPTION
Parses an array of bytes as a SOOD message, then populate
.I *dst
with parsed data if the bytes is a valid SOOD message.
.PP
.BR sood_discovery_response_parse ()
does, unlike
.BR sood_parse (3)
and
.BR sood_message_iter_next (3),
parse the entire message bytes in one-go, validate known properties and
cast numerical properties into corresponding data type. Unless you need an
access to properties not defined in the
.BR sood_discovery_response ,
use
.BR sood_discovery_response_parse ().
.SH RETURN VALUE
See
.BR sood (3)
for a list of return values.
.SH EXAMPLES
.nf
#include <sys/socket.h>
char received[512];
ssize_t received_size;
sood_discovery_response resp;
sood_result result;
received_size = recv(sockfd, received, sizeof(received), 0);
close(sockfd);
if (received_size > 0) {
result = sood_discovery_response_parse(
&resp,
received,
received_size
);
if (result != SOOD_OK) {
printf("%s\\n", sood_get_result_string(result));
return 1;
}
printf("Name: %.*s\\n", resp.name_len, resp.name_ptr);
printf("Version: %.*s\\n", resp.display_version_len, resp.display_version_ptr);
printf("Unique ID: %.*s\\n", resp.unique_id_len, resp.unique_id_ptr);
printf("HTTP port: %d\\n", resp.http_port);
return 0;
}
.fi
.SH SEE ALSO
.BR sood (3),
.BR sood_get_result_string (3)