commit: e3f00c5a2749dd9ee9846e778ca007d80dbe4c72
parent bc4a4ccb65b4844a4b5778cd88caaeaa998fbc3e
Author: Michael Forney <mforney@mforney.org>
Date: Mon, 25 May 2020 18:36:55 -0700
transmission: Update to 3.00
Diffstat:
8 files changed, 234 insertions(+), 204 deletions(-)
diff --git a/pkg/transmission/.gitignore b/pkg/transmission/.gitignore
@@ -1,4 +1,4 @@
/libminiupnp.ninja
/libnatpmp.ninja
/src
-/transmission-2.94.tar.xz
+/transmission-3.00.tar.xz
diff --git a/pkg/transmission/README.md b/pkg/transmission/README.md
@@ -7,7 +7,7 @@ Generated with
./configure \
--disable-nls \
--without-gtk \
- --without-systemd-daemon \
+ --without-systemd \
LIBCURL_CFLAGS=-I/src/oasis/out/pkg/curl/include \
LIBCURL_LIBS=/src/oasis/out/pkg/curl/libcurl.a \
PKG_CONFIG=true
diff --git a/pkg/transmission/config.h b/pkg/transmission/config.h
@@ -1,54 +1,82 @@
#define PACKAGE_DATA_DIR "/share"
#define WITH_INOTIFY 1
-#define PACKAGE_NAME "transmission"
-#define PACKAGE_TARNAME "transmission"
-#define PACKAGE_VERSION "2.94"
-#define PACKAGE_STRING "transmission 2.94"
-#define PACKAGE_BUGREPORT "https://github.com/transmission/transmission"
-#define PACKAGE_URL ""
-#define PACKAGE "transmission"
-#define VERSION "2.94"
-#define STDC_HEADERS 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRING_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_STRINGS_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_UNISTD_H 1
+/* #undef BUILD_MAC_CLIENT */
+/* #undef ENABLE_NLS */
+/* #undef GETTEXT_PACKAGE */
+#define HAVE_BASENAME 1
+/* #undef HAVE_BIND_TEXTDOMAIN_CODESET */
+/* #undef HAVE_CANONICALIZE_FILE_NAME */
+#define HAVE_DAEMON 1
+/* #undef HAVE_DCGETTEXT */
+#define HAVE_DECL_POSIX_FADVISE 1
+#define HAVE_DIRNAME 1
#define HAVE_DLFCN_H 1
-#define LT_OBJDIR ".libs/"
-#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
-#define HAVE_STDBOOL_H 1
+#define HAVE_FALLOCATE64 1
+#define HAVE_GETMNTENT 1
+#define HAVE_GETPAGESIZE 1
+/* #undef HAVE_GETTEXT */
+/* #undef HAVE_HTONLL */
#define HAVE_ICONV 1
+#define HAVE_INTTYPES_H 1
+/* #undef HAVE_LC_MESSAGES */
+/* #undef HAVE_LIBAPPINDICATOR */
+/* #undef HAVE_LIBINTL_H */
+/* #undef HAVE_LOCALE_H */
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LRINTF 1
+#define HAVE_MEMMEM 1
+#define HAVE_MEMORY_H 1
+#define HAVE_MKDTEMP 1
+/* #undef HAVE_NTOHLL */
+#define HAVE_POSIX_FADVISE 1
+#define HAVE_POSIX_FALLOCATE 1
+#define HAVE_POSIX_MEMALIGN 1
#define HAVE_PREAD 1
+#define HAVE_PTHREAD 1
#define HAVE_PWRITE 1
-#define HAVE_LRINTF 1
-#define HAVE_STRLCPY 1
-#define HAVE_DAEMON 1
-#define HAVE_DIRNAME 1
-#define HAVE_BASENAME 1
+#define HAVE_STATVFS 1
+#define HAVE_STDINT_H 1
+#define HAVE_STDLIB_H 1
#define HAVE_STRCASECMP 1
-#define HAVE_LOCALTIME_R 1
-#define HAVE_FALLOCATE64 1
-#define HAVE_POSIX_FALLOCATE 1
-#define HAVE_MEMMEM 1
+#define HAVE_STRCASESTR 1
+#define HAVE_STRINGS_H 1
+#define HAVE_STRING_H 1
+#define HAVE_STRLCPY 1
#define HAVE_STRSEP 1
#define HAVE_STRTOLD 1
#define HAVE_SYSLOG 1
-#define HAVE_VALLOC 1
-#define HAVE_GETPAGESIZE 1
-#define HAVE_POSIX_MEMALIGN 1
-#define HAVE_STATVFS 1
-#define HAVE_MKDTEMP 1
-#define HAVE_USELOCALE 1
-#define HAVE_PTHREAD 1
-#define HAVE_GETMNTENT 1
-#define HAVE_DECL_POSIX_FADVISE 1
-#define HAVE_POSIX_FADVISE 1
#define HAVE_SYS_STATVFS_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_USELOCALE 1
+#define HAVE_VALLOC 1
+/* #undef HAVE_XFS_XFS_H */
+/* #undef HAVE_XLOCALE_H */
+/* #undef HAVE__CONFIGTHREADLOCALE */
+#define LT_OBJDIR ".libs/"
+/* #undef MINIUPNPC_API_VERSION */
+#define PACKAGE "transmission"
+#define PACKAGE_BUGREPORT "https://github.com/transmission/transmission"
+#define PACKAGE_NAME "transmission"
+#define PACKAGE_STRING "transmission 3.00"
+#define PACKAGE_TARNAME "transmission"
+#define PACKAGE_URL ""
+#define PACKAGE_VERSION "3.00"
+/* #undef PTHREAD_CREATE_JOINABLE */
+#define STDC_HEADERS 1
+#define SYSTEM_MINIUPNP 1
+#define TIME_WITH_SYS_TIME 1
+/* #undef TR_LIGHTWEIGHT */
+/* #undef USE_SYSTEMD */
+#define VERSION "3.00"
#define WITH_UTP 1
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+/* #undef _FILE_OFFSET_BITS */
+/* #undef _LARGE_FILES */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
diff --git a/pkg/transmission/gen.lua b/pkg/transmission/gen.lua
@@ -5,16 +5,16 @@ end)
sub('libminiupnp.ninja', function()
cflags{
'-D _GNU_SOURCE',
- '-I $outdir/miniupnp',
+ '-I $outdir/miniupnpc',
'-idirafter $basedir/pkg/openbsd/src/sys',
}
- build('sed', '$outdir/miniupnp/miniupnpcstrings.h', '$srcdir/third-party/miniupnp/miniupnpcstrings.h.in', {
+ build('sed', '$outdir/miniupnpc/miniupnpcstrings.h', '$srcdir/third-party/miniupnpc/miniupnpcstrings.h.in', {
expr='-e s,OS/version,Linux, -e s,version,,',
})
lib('libminiupnp.a', [[
- third-party/miniupnp/(
+ third-party/miniupnpc/(
connecthostport.c
igd_desc_parse.c
minisoap.c
@@ -25,9 +25,11 @@ sub('libminiupnp.ninja', function()
portlistingparse.c
receivedata.c
upnpcommands.c
+ upnpdev.c
+ upnperrors.c
upnpreplyparse.c
)
- ]], {'$outdir/miniupnp/miniupnpcstrings.h', 'pkg/openbsd/fetch'})
+ ]], {'$outdir/miniupnpc/miniupnpcstrings.h', 'pkg/openbsd/fetch'})
end)
cflags{
@@ -39,7 +41,7 @@ cflags{
'-I $dir',
'-I $srcdir',
'-I $srcdir/third-party',
- '-I $srcdir/third-party/libb64',
+ '-I $srcdir/third-party/libb64/include',
'-I $srcdir/third-party/libnatpmp',
'-I $basedir/pkg/libevent/src/include',
'-I $basedir/pkg/libutp/src',
@@ -96,10 +98,12 @@ lib('libtransmission.a', [[
rpcimpl.c
rpc-server.c
session.c
+ session-id.c
stats.c
torrent.c
torrent-ctor.c
torrent-magnet.c
+ tr-assert.c
tr-dht.c
tr-lpd.c
tr-udp.c
@@ -120,9 +124,10 @@ lib('libtransmission.a', [[
watchdir-inotify.c
file-posix.c
+ subprocess-posix.c
crypto-utils-bearssl.c
)
- libb64.a libdht.a libminiupnp.a libnatpmp.a
+ libb64.a libdht.a libminiupnpc.a libnatpmp.a
$builddir/pkg/(
bearssl/libbearssl.a
curl/libcurl.a.d
@@ -132,7 +137,7 @@ lib('libtransmission.a', [[
)
]])
-lib('libb64.a', {'third-party/libb64/cdecode.c', 'third-party/libb64/cencode.c'})
+lib('libb64.a', {'third-party/libb64/src/cdecode.c', 'third-party/libb64/src/cencode.c'})
lib('libdht.a', {'third-party/dht/dht.c'})
exe('transmission-daemon', {
@@ -143,11 +148,7 @@ exe('transmission-daemon', {
file('bin/transmission-daemon', '755', '$outdir/transmission-daemon')
man{'daemon/transmission-daemon.1'}
-exe('transmission-remote', {'daemon/remote.c', 'libtransmission.a.d'})
-file('bin/transmission-remote', '755', '$outdir/transmission-remote')
-man{'daemon/transmission-remote.1'}
-
-for _, tool in ipairs{'create', 'edit', 'show'} do
+for _, tool in ipairs{'create', 'edit', 'remote', 'show'} do
exe('transmission-'..tool, {'utils/'..tool..'.c', 'libtransmission.a.d'})
file('bin/transmission-'..tool, '755', '$outdir/transmission-'..tool)
man{'utils/transmission-'..tool..'.1'}
diff --git a/pkg/transmission/patch/0001-Use-BearSSL-for-SHA1-and-DH-add-fallback-RC4.patch b/pkg/transmission/patch/0001-Use-BearSSL-for-SHA1-and-DH-add-fallback-RC4.patch
@@ -1,20 +1,20 @@
-From c8d489d361634413a518d614f02f3ecdaad3d4ec Mon Sep 17 00:00:00 2001
+From eb8e399417b22099b5a52e5fb468979e44486e73 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Sun, 17 Nov 2019 01:27:04 -0800
Subject: [PATCH] Use BearSSL for SHA1 and DH, add fallback RC4
---
- libtransmission/crypto-utils-bearssl.c | 229 ++++++++++++++++++++++++
- libtransmission/crypto-utils-fallback.c | 81 +++++++++
- 2 files changed, 310 insertions(+)
+ libtransmission/crypto-utils-bearssl.c | 234 ++++++++++++++++++++++++
+ libtransmission/crypto-utils-fallback.c | 77 ++++++++
+ 2 files changed, 311 insertions(+)
create mode 100644 libtransmission/crypto-utils-bearssl.c
diff --git a/libtransmission/crypto-utils-bearssl.c b/libtransmission/crypto-utils-bearssl.c
new file mode 100644
-index 000000000..23bdf5c45
+index 000000000..5672a48df
--- /dev/null
+++ b/libtransmission/crypto-utils-bearssl.c
-@@ -0,0 +1,229 @@
+@@ -0,0 +1,234 @@
+#include <assert.h>
+#include <stdlib.h>
+
@@ -23,6 +23,7 @@ index 000000000..23bdf5c45
+#include "crypto-utils.h"
+
+#define TR_CRYPTO_DH_SECRET_FALLBACK
++#define TR_CRYPTO_X509_FALLBACK
+#define TR_CRYPTO_RC4_FALLBACK
+#include "crypto-utils-fallback.c"
+
@@ -32,49 +33,47 @@ index 000000000..23bdf5c45
+
+#define MY_NAME "tr_crypto_utils"
+
-+tr_sha1_ctx_t
-+tr_sha1_init (void)
++tr_sha1_ctx_t tr_sha1_init(void)
+{
-+ br_sha1_context * ctx;
++ br_sha1_context * ctx;
+
-+ ctx = tr_malloc (sizeof (*ctx));
-+ if (!ctx)
-+ return NULL;
++ ctx = tr_malloc(sizeof (*ctx));
++ if (!ctx)
++ {
++ return NULL;
++ }
+
-+ br_sha1_init (ctx);
++ br_sha1_init(ctx);
+
-+ return ctx;
++ return ctx;
+}
+
-+bool
-+tr_sha1_update (tr_sha1_ctx_t handle,
-+ const void * data,
-+ size_t data_length)
++bool tr_sha1_update(tr_sha1_ctx_t handle, void const* data, size_t data_length)
+{
-+ assert (handle != NULL);
++ TR_ASSERT(handle != NULL);
+
-+ if (data_length == 0)
-+ return true;
++ if (data_length == 0)
++ {
++ return true;
++ }
+
-+ assert (data != NULL);
++ TR_ASSERT(data != NULL);
+
-+ br_sha1_update (handle, data, data_length);
++ br_sha1_update(handle, data, data_length);
+
-+ return true;
++ return true;
+}
+
-+bool
-+tr_sha1_final (tr_sha1_ctx_t handle,
-+ uint8_t * hash)
++bool tr_sha1_final(tr_sha1_ctx_t handle, uint8_t* hash)
+{
-+ if (hash != NULL)
++ if (hash != NULL)
+ {
-+ assert (handle != NULL);
-+ br_sha1_out (handle, hash);
++ TR_ASSERT(handle != NULL);
++ br_sha1_out(handle, hash);
+ }
+
-+ tr_free (handle);
-+ return true;
++ tr_free(handle);
++ return true;
+}
+
+/***
@@ -82,180 +81,182 @@ index 000000000..23bdf5c45
+***/
+
+typedef struct {
-+ const uint8_t * prime_num;
-+ size_t prime_num_length;
-+ const uint8_t * generator_num;
-+ size_t generator_num_length;
-+ uint8_t * private_key;
-+ size_t private_key_length;
++ uint8_t const* prime_num;
++ size_t prime_num_length;
++ uint8_t const* generator_num;
++ size_t generator_num_length;
++ uint8_t* private_key;
++ size_t private_key_length;
+} DH;
+
-+tr_dh_ctx_t
-+tr_dh_new (const uint8_t * prime_num,
-+ size_t prime_num_length,
-+ const uint8_t * generator_num,
-+ size_t generator_num_length)
++tr_dh_ctx_t tr_dh_new(uint8_t const* prime_num, size_t prime_num_length, uint8_t const* generator_num,
++ size_t generator_num_length)
+{
-+ DH * handle;
++ DH* handle;
+
-+ assert (prime_num != NULL);
-+ assert (generator_num != NULL);
-+ assert (generator_num_length < prime_num_length);
++ TR_ASSERT(prime_num != NULL);
++ TR_ASSERT(generator_num != NULL);
++ TR_ASSERT(generator_num_length < prime_num_length);
+
-+ if (generator_num_length > prime_num_length)
-+ return NULL;
++ if (generator_num_length > prime_num_length)
++ {
++ return NULL;
++ }
+
-+ handle = tr_malloc (sizeof(*handle));
-+ if (handle == NULL)
-+ return NULL;
++ handle = tr_malloc(sizeof(*handle));
++ if (handle == NULL)
++ {
++ return NULL;
++ }
+
-+ handle->prime_num = prime_num;
-+ handle->prime_num_length = prime_num_length;
-+ handle->generator_num = generator_num;
-+ handle->generator_num_length = generator_num_length;
-+ handle->private_key = NULL;
++ handle->prime_num = prime_num;
++ handle->prime_num_length = prime_num_length;
++ handle->generator_num = generator_num;
++ handle->generator_num_length = generator_num_length;
++ handle->private_key = NULL;
+
-+ return handle;
++ return handle;
+}
+
+void
+tr_dh_free (tr_dh_ctx_t raw_handle)
+{
-+ DH * handle = raw_handle;
++ DH* handle = raw_handle;
+
-+ if (handle == NULL)
-+ return;
++ if (handle == NULL)
++ {
++ return;
++ }
+
-+ tr_free (handle->private_key);
-+ tr_free (handle);
++ tr_free(handle->private_key);
++ tr_free(handle);
+}
+
-+bool
-+tr_dh_make_key (tr_dh_ctx_t raw_handle,
-+ size_t private_key_length,
-+ uint8_t * public_key,
-+ size_t * public_key_length)
++bool tr_dh_make_key(tr_dh_ctx_t raw_handle, size_t private_key_length, uint8_t* public_key, size_t* public_key_length)
+{
-+ DH * handle = raw_handle;
-+ br_rsa_public modexp;
-+ br_rsa_public_key key;
-+ uint8_t * x;
-+ size_t xlen;
++ TR_ASSERT(raw_handle != NULL);
++ TR_ASSERT(public_key != NULL);
+
-+ assert (handle != NULL);
-+ assert (public_key != NULL);
++ DH* handle = raw_handle;
++ br_rsa_public modexp;
++ br_rsa_public_key key;
++ uint8_t* x;
++ size_t xlen;
+
-+ modexp = br_rsa_public_get_default ();
++ modexp = br_rsa_public_get_default();
+
-+ handle->private_key = tr_malloc (private_key_length);
-+ handle->private_key_length = private_key_length;
++ handle->private_key = tr_malloc(private_key_length);
++ handle->private_key_length = private_key_length;
+
-+ if (!handle->private_key)
-+ goto fail;
++ if (!handle->private_key)
++ {
++ goto fail;
++ }
+
-+ if (!tr_rand_buffer (handle->private_key, handle->private_key_length))
-+ goto fail;
++ if (!tr_rand_buffer(handle->private_key, handle->private_key_length))
++ {
++ goto fail;
++ }
+
-+ memset (public_key, 0, handle->prime_num_length - handle->generator_num_length);
-+ memcpy (public_key + handle->prime_num_length - handle->generator_num_length, handle->generator_num, handle->generator_num_length);
++ memset(public_key, 0, handle->prime_num_length - handle->generator_num_length);
++ memcpy(public_key + handle->prime_num_length - handle->generator_num_length, handle->generator_num, handle->generator_num_length);
+
-+ key.n = (unsigned char *)handle->prime_num;
-+ key.nlen = handle->prime_num_length;
-+ key.e = handle->private_key;
-+ key.elen = handle->private_key_length;
++ key.n = (unsigned char*)handle->prime_num;
++ key.nlen = handle->prime_num_length;
++ key.e = handle->private_key;
++ key.elen = handle->private_key_length;
+
-+ if (!modexp (public_key, handle->prime_num_length, &key))
-+ goto fail;
++ if (!modexp(public_key, handle->prime_num_length, &key))
++ {
++ goto fail;
++ }
+
-+ *public_key_length = handle->prime_num_length;
++ *public_key_length = handle->prime_num_length;
+
-+ return true;
++ return true;
+
+fail:
-+ tr_free(handle->private_key);
-+ handle->private_key = NULL;
-+ return false;
++ tr_free(handle->private_key);
++ handle->private_key = NULL;
++ return false;
+}
+
-+tr_dh_secret_t
-+tr_dh_agree (tr_dh_ctx_t raw_handle,
-+ const uint8_t * other_public_key,
-+ size_t other_public_key_length)
++tr_dh_secret_t tr_dh_agree(tr_dh_ctx_t raw_handle, uint8_t const* other_public_key, size_t other_public_key_length)
+{
-+ DH * handle = raw_handle;
-+ struct tr_dh_secret * ret;
-+ br_rsa_public modexp;
-+ br_rsa_public_key key;
-+ uint8_t * x;
-+ size_t xlen;
++ TR_ASSERT(raw_handle != NULL);
++ TR_ASSERT(other_public_key != NULL);
+
-+ assert (handle != NULL);
-+ assert (other_public_key != NULL);
++ DH* handle = raw_handle;
++ struct tr_dh_secret* ret;
++ br_rsa_public modexp;
++ br_rsa_public_key key;
++ uint8_t* x;
++ size_t xlen;
+
-+ if (other_public_key_length > handle->prime_num_length)
-+ return NULL;
++ if (other_public_key_length > handle->prime_num_length)
++ {
++ return NULL;
++ }
+
-+ ret = tr_dh_secret_new(handle->prime_num_length);
-+ if (!ret)
-+ return NULL;
++ ret = tr_dh_secret_new(handle->prime_num_length);
++ if (!ret)
++ {
++ return NULL;
++ }
+
-+ memset (ret->key, 0, ret->key_length - other_public_key_length);
-+ memcpy (ret->key + ret->key_length - other_public_key_length, other_public_key, other_public_key_length);
++ memset(ret->key, 0, ret->key_length - other_public_key_length);
++ memcpy(ret->key + ret->key_length - other_public_key_length, other_public_key, other_public_key_length);
+
-+ modexp = br_rsa_public_get_default ();
++ modexp = br_rsa_public_get_default();
+
-+ key.n = (unsigned char *)handle->prime_num;
-+ key.nlen = handle->prime_num_length;
-+ key.e = handle->private_key;
-+ key.elen = handle->private_key_length;
++ key.n = (unsigned char*)handle->prime_num;
++ key.nlen = handle->prime_num_length;
++ key.e = handle->private_key;
++ key.elen = handle->private_key_length;
+
-+ if (!modexp (ret->key, ret->key_length, &key))
++ if (!modexp(ret->key, ret->key_length, &key))
+ {
-+ tr_dh_secret_free (ret);
-+ ret = NULL;
++ tr_dh_secret_free (ret);
++ ret = NULL;
+ }
+
-+ return ret;
++ return ret;
+}
+
+/***
+****
+***/
+
-+bool
-+tr_rand_buffer (void * buffer,
-+ size_t length)
++bool tr_rand_buffer(void* buffer, size_t length)
+{
-+ static br_hmac_drbg_context ctx;
-+ static bool init;
-+ br_prng_seeder seeder;
++ TR_ASSERT(buffer != NULL);
+
-+ assert (buffer != NULL);
++ static br_hmac_drbg_context ctx;
++ static bool init;
++ br_prng_seeder seeder;
+
-+ if (!init)
++ if (!init)
+ {
-+ br_hmac_drbg_init (&ctx, &br_sha256_vtable, NULL, 0);
-+ seeder = br_prng_seeder_system (NULL);
-+ if (!seeder || !seeder(&ctx.vtable))
-+ return false;
-+ init = true;
++ br_hmac_drbg_init(&ctx, &br_sha256_vtable, NULL, 0);
++ seeder = br_prng_seeder_system(NULL);
++ if (!seeder || !seeder(&ctx.vtable))
++ {
++ return false;
++ }
++ init = true;
+ }
+
-+ br_hmac_drbg_generate (&ctx, buffer, length);
-+ return true;
++ br_hmac_drbg_generate(&ctx, buffer, length);
++ return true;
+}
diff --git a/libtransmission/crypto-utils-fallback.c b/libtransmission/crypto-utils-fallback.c
-index 0ca1ad75e..9fdb044a9 100644
+index c17b54e25..a521956a3 100644
--- a/libtransmission/crypto-utils-fallback.c
+++ b/libtransmission/crypto-utils-fallback.c
-@@ -75,3 +75,84 @@ tr_dh_secret_free (tr_dh_secret_t handle)
+@@ -92,3 +92,80 @@ void tr_x509_cert_free(tr_x509_cert_t handle)
}
- #endif /* TR_CRYPTO_DH_SECRET_FALLBACK */
-+
-+/***
-+****
-+***/
+ #endif /* TR_CRYPTO_X509_FALLBACK */
+
+#ifdef TR_CRYPTO_RC4_FALLBACK
+
@@ -334,5 +335,5 @@ index 0ca1ad75e..9fdb044a9 100644
+
+#endif /* TR_CRYPTO_RC4_FALLBACK */
--
-2.24.0
+2.26.2
diff --git a/pkg/transmission/sha256 b/pkg/transmission/sha256
@@ -1 +1 @@
-35442cc849f91f8df982c3d0d479d650c6ca19310a994eccdaa79a4af3916b7d transmission-2.94.tar.xz
+9144652fe742f7f7dd6657716e378da60b751aaeda8bef8344b3eefc4db255f2 transmission-3.00.tar.xz
diff --git a/pkg/transmission/url b/pkg/transmission/url
@@ -1 +1 @@
-url = "https://github.com/transmission/transmission-releases/raw/master/transmission-2.94.tar.xz"
+url = "https://github.com/transmission/transmission-releases/raw/master/transmission-3.00.tar.xz"
diff --git a/pkg/transmission/ver b/pkg/transmission/ver
@@ -1 +1 @@
-2.94 r1
+3.00 r0