aboutsummaryrefslogtreecommitdiff
path: root/audio/libshout
diff options
context:
space:
mode:
authorSunpoet Po-Chuan Hsieh <sunpoet@FreeBSD.org>2019-09-03 19:12:45 +0000
committerSunpoet Po-Chuan Hsieh <sunpoet@FreeBSD.org>2019-09-03 19:12:45 +0000
commiteefe67ff8361a65f309da52ee13de042ee8b5bbf (patch)
treee2021ae4ab42e24b0ff4e13a99d14633a5316faf /audio/libshout
parent13aab65e2bcc993552d873d5d4930b210bbd9f71 (diff)
downloadports-eefe67ff8361a65f309da52ee13de042ee8b5bbf.tar.gz
ports-eefe67ff8361a65f309da52ee13de042ee8b5bbf.zip
Fix blocking state of connections
Notes
Notes: svn path=/head/; revision=511026
Diffstat (limited to 'audio/libshout')
-rw-r--r--audio/libshout/Makefile2
-rw-r--r--audio/libshout/files/patch-include-shout-shout.h.in26
-rw-r--r--audio/libshout/files/patch-src-connection.c59
-rw-r--r--audio/libshout/files/patch-src-shout.c25
4 files changed, 111 insertions, 1 deletions
diff --git a/audio/libshout/Makefile b/audio/libshout/Makefile
index aa79e050c481..e7fff83fe03e 100644
--- a/audio/libshout/Makefile
+++ b/audio/libshout/Makefile
@@ -3,7 +3,7 @@
PORTNAME= libshout
PORTVERSION= 2.4.3
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= audio net
MASTER_SITES= https://downloads.xiph.org/releases/libshout/ \
https://svn.xiph.org/releases/libshout/ \
diff --git a/audio/libshout/files/patch-include-shout-shout.h.in b/audio/libshout/files/patch-include-shout-shout.h.in
new file mode 100644
index 000000000000..2f31584f9d84
--- /dev/null
+++ b/audio/libshout/files/patch-include-shout-shout.h.in
@@ -0,0 +1,26 @@
+Obtained from: https://gitlab.xiph.org/xiph/icecast-libshout/commit/0ac7ed9e84c3871d4427acc1ce59dca5e4af21ef
+
+--- include/shout/shout.h.in.orig 2019-05-22 09:05:32 UTC
++++ include/shout/shout.h.in
+@@ -85,6 +85,11 @@ extern "C" {
+ #define SHOUT_TLS_RFC2818 ( 11) /* Use TLS for transport layer like HTTPS [RFC2818] does. */
+ #define SHOUT_TLS_RFC2817 ( 12) /* Use TLS via HTTP Upgrade:-header [RFC2817]. */
+
++/* Possible values for blocking */
++#define SHOUT_BLOCKING_DEFAULT (255) /* Use the default blocking setting. */
++#define SHOUT_BLOCKING_FULL ( 0) /* Block in all I/O related functions */
++#define SHOUT_BLOCKING_NONE ( 1) /* Do not block in I/O related functions */
++
+ #define SHOUT_AI_BITRATE "bitrate"
+ #define SHOUT_AI_SAMPLERATE "samplerate"
+ #define SHOUT_AI_CHANNELS "channels"
+@@ -244,7 +249,8 @@ int shout_set_protocol(shout_t *self, un
+ unsigned int shout_get_protocol(shout_t *self);
+
+ /* Instructs libshout to use nonblocking I/O. Must be called before
+- * shout_open (no switching back and forth midstream at the moment). */
++ * shout_open (no switching back and forth midstream at the moment).
++ * nonblocking is one of SHOUT_BLOCKING_xxx. */
+ int shout_set_nonblocking(shout_t* self, unsigned int nonblocking);
+ unsigned int shout_get_nonblocking(shout_t *self);
+
diff --git a/audio/libshout/files/patch-src-connection.c b/audio/libshout/files/patch-src-connection.c
new file mode 100644
index 000000000000..8920d1b0ae22
--- /dev/null
+++ b/audio/libshout/files/patch-src-connection.c
@@ -0,0 +1,59 @@
+Obtained from: https://gitlab.xiph.org/xiph/icecast-libshout/commit/0ac7ed9e84c3871d4427acc1ce59dca5e4af21ef
+ https://gitlab.xiph.org/xiph/icecast-libshout/commit/b807c1e2550718bdc73d65ac1b05255d18f45c54
+
+--- src/connection.c.orig 2019-05-20 19:32:59 UTC
++++ src/connection.c
+@@ -118,7 +118,7 @@ static struct timeval shout_connection_i
+ .tv_usec = (timeout % 1000) * 1000
+ };
+ return tv;
+- } else if (con->nonblocking) {
++ } else if (con->nonblocking == SHOUT_BLOCKING_NONE) {
+ return tv_nonblocking;
+ } else {
+ return tv_blocking;
+@@ -167,7 +167,7 @@ static shout_connection_return_state_t s
+ }
+ break;
+ case SHOUT_SOCKSTATE_CONNECTING:
+- if (con->nonblocking) {
++ if (con->nonblocking == SHOUT_BLOCKING_NONE) {
+ ret = shout_connection_iter__wait_for_io(con, shout, 1, 1, 0);
+ if (ret != SHOUT_RS_DONE) {
+ return ret;
+@@ -460,7 +460,7 @@ int shout_connection_ite
+ break; \
+ case SHOUT_RS_TIMEOUT: \
+ case SHOUT_RS_NOTNOW: \
+- if (con->nonblocking) \
++ if (con->nonblocking == SHOUT_BLOCKING_NONE) \
+ return SHOUTERR_RETRY; \
+ retry = 1; \
+ break; \
+@@ -518,7 +518,7 @@ int shout_connection_sel
+ }
+ int shout_connection_set_nonblocking(shout_connection_t *con, unsigned int nonblocking)
+ {
+- if (!con)
++ if (!con || (nonblocking != SHOUT_BLOCKING_DEFAULT && nonblocking != SHOUT_BLOCKING_FULL && nonblocking != SHOUT_BLOCKING_NONE))
+ return SHOUTERR_INSANE;
+
+ if (con->socket != SOCK_ERROR)
+@@ -563,13 +563,14 @@ int shout_connection_con
+ if (con->socket != SOCK_ERROR || con->current_socket_state != SHOUT_SOCKSTATE_UNCONNECTED)
+ return SHOUTERR_BUSY;
+
+- shout_connection_set_nonblocking(con, shout_get_nonblocking(shout));
++ if (con->nonblocking == SHOUT_BLOCKING_DEFAULT)
++ shout_connection_set_nonblocking(con, shout_get_nonblocking(shout));
+
+ port = shout->port;
+- if (shout_get_protocol(shout) == SHOUT_PROTOCOL_ICY)
++ if (con->impl == shout_icy_impl)
+ port++;
+
+- if (con->nonblocking) {
++ if (con->nonblocking == SHOUT_BLOCKING_NONE) {
+ con->socket = sock_connect_non_blocking(shout->host, port);
+ } else {
+ con->socket = sock_connect(shout->host, port);
diff --git a/audio/libshout/files/patch-src-shout.c b/audio/libshout/files/patch-src-shout.c
new file mode 100644
index 000000000000..295aa2ae6dd2
--- /dev/null
+++ b/audio/libshout/files/patch-src-shout.c
@@ -0,0 +1,25 @@
+Obtained from: https://gitlab.xiph.org/xiph/icecast-libshout/commit/0ac7ed9e84c3871d4427acc1ce59dca5e4af21ef
+
+--- src/shout.c.orig 2019-05-22 09:05:32 UTC
++++ src/shout.c
+@@ -417,7 +417,7 @@ int shout_set_metadata(shout_t *self, sh
+ #ifdef HAVE_OPENSSL
+ shout_connection_select_tlsmode(connection, self->tls_mode);
+ #endif
+- shout_connection_set_nonblocking(connection, 0);
++ shout_connection_set_nonblocking(connection, SHOUT_BLOCKING_FULL);
+
+ connection->target_message_state = SHOUT_MSGSTATE_PARSED_FINAL;
+
+@@ -989,7 +989,10 @@ unsigned int shout_get_protocol(shout_t
+
+ int shout_set_nonblocking(shout_t *self, unsigned int nonblocking)
+ {
+- if (!self || (nonblocking != 0 && nonblocking != 1))
++ if (nonblocking == SHOUT_BLOCKING_DEFAULT)
++ nonblocking = SHOUT_BLOCKING_FULL;
++
++ if (!self || (nonblocking != SHOUT_BLOCKING_FULL && nonblocking != SHOUT_BLOCKING_NONE))
+ return SHOUTERR_INSANE;
+
+ if (self->connection)