libsood

Zig library for Roon Core discovery message, with C-compatible API and WebAssembly.

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
.\" 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_message_iter_next 3


.SH NAME
sood_message_iter_next \- Get a next property from SOOD message body


.SH SYNOPSIS
.nf
.B #include <sood.h>

\fBsood_result sood_message_iter_next(sood_message_iter \fR*\fIiter\fB,
                                   sood_message_property \fR*\fIdst\fB);
.fi


.SH DESCRIPTION
Advances an iterator and reads a next property from a
.B sood_message_iter
into
.I *dst\fR.
Make sure to call
.BR sood_message_iterator (3)
before calling
.BR sood_message_iter_next ()
- operating upon uninitialized
.B sood_message_iter
will lead to reading from uninitialized memory.
.PP
If an iterator is at the end of a SOOD message body,
.BR sood_message_iter_next ()
returns
.B SOOD_ITERATOR_DONE
result code.


.SH RETURN VALUE
See
.BR sood (3)
for a list of return values.


.SH EXAMPLES
.nf
#include <sys/socket.h>
#include <string.h>
#include <sood.h>

char received[512];
ssize_t received_size;
sood_result result;
sood_message msg;
sood_message_iter iter;
sood_message_property prop;

received_size = recv(sockfd, received, sizeof(received), 0);
close(sockfd);
if (received_size > 0) {
  result = sood_parse(&msg, received, received_size);
  if (result != SOOD_OK) {
    printf("%s\\n", sood_get_result_string(result));
    return 1;
  }

  sood_message_iterator(&iter, &msg);

  while (1) {
    memset(&prop, 0, sizeof(prop));
    result = sood_message_iter_next(&iter, &prop);
    switch (result) {
      case SOOD_OK:
        printf("%.*s=%.*s\\n",
               prop.key_ptr, prop.key_len,
               prop.value_ptr, prop.value_len);
        break;
      case SOOD_ITERATOR_DONE:
        return 0;
      case SOOD_ITERATOR_DONE:
        printf("%s\\n", sood_get_result_string(result));
        return 1;
    }
  }
}
.fi


.SH SEE ALSO

.BR sood (3),
.BR sood_discovery_response_parse (3),
.BR sood_get_result_string (3),
.BR sood_parse (3),
.BR sood_message_iterator (3)