diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 00000000..ce320321 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,23 @@ +name: Continuous Integration + +# This action works with pull requests and pushes +on: + pull_request: + push: + branches: + - master + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check code style + uses: creyD/prettier_action@v4.3 + with: + dry: true + working_directory: hugo/ + prettier_options: --check diff --git a/.gitignore b/.gitignore index ba1bb60c..5d0778ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /public/ /mumble-www.7z /hugo/resources/_gen/ +*.lock diff --git a/hugo/.prettierignore b/hugo/.prettierignore new file mode 100644 index 00000000..e5be4227 --- /dev/null +++ b/hugo/.prettierignore @@ -0,0 +1,2 @@ +*.ice +*.html diff --git a/hugo/.prettierrc b/hugo/.prettierrc new file mode 100644 index 00000000..56f0f23c --- /dev/null +++ b/hugo/.prettierrc @@ -0,0 +1,4 @@ +{ + "printWidth": 120, + "proseWrap": "always" +} diff --git a/hugo/archetypes/default.md b/hugo/archetypes/default.md index 00e77bd7..26f317f3 100644 --- a/hugo/archetypes/default.md +++ b/hugo/archetypes/default.md @@ -3,4 +3,3 @@ title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true --- - diff --git a/hugo/assets/css/_common.scss b/hugo/assets/css/_common.scss index 94136d59..c6c26c8a 100644 --- a/hugo/assets/css/_common.scss +++ b/hugo/assets/css/_common.scss @@ -1,118 +1,123 @@ -a { - color: black; -} - -aside, em, i { - font-style: italic; -} - -sup { - vertical-align: super; -} - -sub { - vertical-align: sub; -} - -h1 { - grid-template: "header"; - font-size: 200%; - align-self: center; -} - -ul.menu { - list-style-type: none; - margin: 0; - padding: 0; - - li { - display: inline-block; - - a { - display: inline-block; - color: black; - text-align: center; - padding: 14px 16px; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - } -} - -.markdown-body { - line-height: 1.7em; - - ul { - list-style-type: disc; - padding-left: 0em; - } - b, strong { - font-weight: bold; - } -} - -figure { - border: 0px solid #c0c0c0; - display: inline-block; - img { - display: block; - } -} -figcaption { - display: block; - background-color: #eeeeee; - /* font: italic smaller sans-serif; */ - font-style: italic; - padding: 3px 6px; -} -.figp { - display: block; - margin-bottom: 16px; -} - -@media (max-width: 1899px) { - aside.article-toc { display: none; } -} -.article-toc { - position: fixed; - right: 2em; - border: 1px solid #ccc; - border-radius: 0.4em; - padding: 4px 8px; - max-width: 280px; -} -.article-toc-title { - font-weight: bold; -} -.article-toc p { - margin-bottom: 0.4em; -} -.article-toc ul { - list-style-type: none; - padding-left: 0; -} - -.label { - border: 1px solid #ccc; - background-color: #fcc; - /* color: red; */ - border-radius: 4px; - padding: 0px 2px; -} - -.feed-icons { - text-align: right; - margin-top: 1em; - line-height: 32px; - - a { - display: inline-block; - } - img { - width: 32px; - height: 32px; - } -} +a { + color: black; +} + +aside, +em, +i { + font-style: italic; +} + +sup { + vertical-align: super; +} + +sub { + vertical-align: sub; +} + +h1 { + grid-template: "header"; + font-size: 200%; + align-self: center; +} + +ul.menu { + list-style-type: none; + margin: 0; + padding: 0; + + li { + display: inline-block; + + a { + display: inline-block; + color: black; + text-align: center; + padding: 14px 16px; + text-decoration: none; + + &:hover { + text-decoration: underline; + } + } + } +} + +.markdown-body { + line-height: 1.7em; + + ul { + list-style-type: disc; + padding-left: 0em; + } + b, + strong { + font-weight: bold; + } +} + +figure { + border: 0px solid #c0c0c0; + display: inline-block; + img { + display: block; + } +} +figcaption { + display: block; + background-color: #eeeeee; + /* font: italic smaller sans-serif; */ + font-style: italic; + padding: 3px 6px; +} +.figp { + display: block; + margin-bottom: 16px; +} + +@media (max-width: 1899px) { + aside.article-toc { + display: none; + } +} +.article-toc { + position: fixed; + right: 2em; + border: 1px solid #ccc; + border-radius: 0.4em; + padding: 4px 8px; + max-width: 280px; +} +.article-toc-title { + font-weight: bold; +} +.article-toc p { + margin-bottom: 0.4em; +} +.article-toc ul { + list-style-type: none; + padding-left: 0; +} + +.label { + border: 1px solid #ccc; + background-color: #fcc; + /* color: red; */ + border-radius: 4px; + padding: 0px 2px; +} + +.feed-icons { + text-align: right; + margin-top: 1em; + line-height: 32px; + + a { + display: inline-block; + } + img { + width: 32px; + height: 32px; + } +} diff --git a/hugo/assets/css/_fonts.scss b/hugo/assets/css/_fonts.scss index f4500101..a05d5350 100644 --- a/hugo/assets/css/_fonts.scss +++ b/hugo/assets/css/_fonts.scss @@ -1,154 +1,172 @@ @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 100; font-display: swap; - src: url("Inter-Thin.woff2?v=3.19") format("woff2"), - url("Inter-Thin.woff?v=3.19") format("woff"); + src: + url("Inter-Thin.woff2?v=3.19") format("woff2"), + url("Inter-Thin.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 100; font-display: swap; - src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"), - url("Inter-ThinItalic.woff?v=3.19") format("woff"); + src: + url("Inter-ThinItalic.woff2?v=3.19") format("woff2"), + url("Inter-ThinItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 200; font-display: swap; - src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"), - url("Inter-ExtraLight.woff?v=3.19") format("woff"); + src: + url("Inter-ExtraLight.woff2?v=3.19") format("woff2"), + url("Inter-ExtraLight.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 200; font-display: swap; - src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"), - url("Inter-ExtraLightItalic.woff?v=3.19") format("woff"); + src: + url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraLightItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 300; font-display: swap; - src: url("Inter-Light.woff2?v=3.19") format("woff2"), - url("Inter-Light.woff?v=3.19") format("woff"); + src: + url("Inter-Light.woff2?v=3.19") format("woff2"), + url("Inter-Light.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 300; font-display: swap; - src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"), - url("Inter-LightItalic.woff?v=3.19") format("woff"); + src: + url("Inter-LightItalic.woff2?v=3.19") format("woff2"), + url("Inter-LightItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 400; font-display: swap; - src: url("Inter-Regular.woff2?v=3.19") format("woff2"), - url("Inter-Regular.woff?v=3.19") format("woff"); + src: + url("Inter-Regular.woff2?v=3.19") format("woff2"), + url("Inter-Regular.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 400; font-display: swap; - src: url("Inter-Italic.woff2?v=3.19") format("woff2"), - url("Inter-Italic.woff?v=3.19") format("woff"); + src: + url("Inter-Italic.woff2?v=3.19") format("woff2"), + url("Inter-Italic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 500; font-display: swap; - src: url("Inter-Medium.woff2?v=3.19") format("woff2"), - url("Inter-Medium.woff?v=3.19") format("woff"); + src: + url("Inter-Medium.woff2?v=3.19") format("woff2"), + url("Inter-Medium.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 500; font-display: swap; - src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"), - url("Inter-MediumItalic.woff?v=3.19") format("woff"); + src: + url("Inter-MediumItalic.woff2?v=3.19") format("woff2"), + url("Inter-MediumItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 600; font-display: swap; - src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"), - url("Inter-SemiBold.woff?v=3.19") format("woff"); + src: + url("Inter-SemiBold.woff2?v=3.19") format("woff2"), + url("Inter-SemiBold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 600; font-display: swap; - src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-SemiBoldItalic.woff?v=3.19") format("woff"); + src: + url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-SemiBoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 700; font-display: swap; - src: url("Inter-Bold.woff2?v=3.19") format("woff2"), - url("Inter-Bold.woff?v=3.19") format("woff"); + src: + url("Inter-Bold.woff2?v=3.19") format("woff2"), + url("Inter-Bold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 700; font-display: swap; - src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-BoldItalic.woff?v=3.19") format("woff"); + src: + url("Inter-BoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-BoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 800; font-display: swap; - src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"), - url("Inter-ExtraBold.woff?v=3.19") format("woff"); + src: + url("Inter-ExtraBold.woff2?v=3.19") format("woff2"), + url("Inter-ExtraBold.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 800; font-display: swap; - src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"), - url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff"); + src: + url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: normal; + font-family: "Inter"; + font-style: normal; font-weight: 900; font-display: swap; - src: url("Inter-Black.woff2?v=3.19") format("woff2"), - url("Inter-Black.woff?v=3.19") format("woff"); + src: + url("Inter-Black.woff2?v=3.19") format("woff2"), + url("Inter-Black.woff?v=3.19") format("woff"); } @font-face { - font-family: 'Inter'; - font-style: italic; + font-family: "Inter"; + font-style: italic; font-weight: 900; font-display: swap; - src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"), - url("Inter-BlackItalic.woff?v=3.19") format("woff"); + src: + url("Inter-BlackItalic.woff2?v=3.19") format("woff2"), + url("Inter-BlackItalic.woff?v=3.19") format("woff"); } /* ------------------------------------------------------- @@ -161,23 +179,22 @@ Usage: } */ @font-face { - font-family: 'Inter var'; + font-family: "Inter var"; font-weight: 100 900; font-display: swap; font-style: normal; - font-named-instance: 'Regular'; + font-named-instance: "Regular"; src: url("Inter-roman.var.woff2?v=3.19") format("woff2"); } @font-face { - font-family: 'Inter var'; + font-family: "Inter var"; font-weight: 100 900; font-display: swap; font-style: italic; - font-named-instance: 'Italic'; + font-named-instance: "Italic"; src: url("Inter-italic.var.woff2?v=3.19") format("woff2"); } - /* -------------------------------------------------------------------------- [EXPERIMENTAL] Multi-axis, single variable font. @@ -192,7 +209,7 @@ explicitly, e.g. */ @font-face { - font-family: 'Inter var experimental'; + font-family: "Inter var experimental"; font-weight: 100 900; font-display: swap; font-style: oblique 0deg 10deg; diff --git a/hugo/assets/css/_layout.scss b/hugo/assets/css/_layout.scss index 886a90fe..81e07311 100644 --- a/hugo/assets/css/_layout.scss +++ b/hugo/assets/css/_layout.scss @@ -1,113 +1,124 @@ -body { - font-family: 'Inter', sans-serif; - background-color: #F2F2F2; -} - -@import 'common.scss'; -@import 'layout/header.scss'; -@import 'layout/footer.scss'; - -.content-container { - background-color: white; - padding: 40px; -} - -.content { - margin: auto; - max-width: 1140px; - line-height: 1.3em; - - h1, h2, h3, h4, h5, h6 { - font-weight: bold; - margin: 1em 0 0.5em; - } - - h1 { - font-size: 26px; - } - h2 { - font-size: 22px; - } - h3 { - font-size: 20px; - } - h4 { - font-size: 18px; - } - h5 { - font-size: 16px; - } - h6 { - font-size: 12px; - } - - ul, p { - margin: 2px 0 16px; - } - b { - font-weight: bold; - } - ul ul { - margin: 2px 0 2px; - } - li { - list-style-type: disc; - margin-left: 16px; - } -} - -#bloglist { - & > div { - margin-top: 30px; - } - - & > div::after { - display: block; - content: ""; - clear: both; - } - - & > div:nth-child(1) { - margin-top: 0; - } -} - -nav.blogposts { - display: grid; - grid-template-columns: 1fr 1fr; - - a { - margin: 10px 0; - text-decoration: none; - color: #7e7e7e; - } - - div:nth-child(1) { - text-align: left; - } - - div:nth-child(2) { - text-align: right; - } -} -h1, h2, h3, h4, h5, h6 { - position: relative; - - .heading-link { - display: none; - width: 21px; - position: absolute; - top: 6px; - left: -21px; - opacity: 0.7; - font-size: 12px; - - &:hover { - text-decoration: none; - } - } - - &:hover .heading-link { - display: block; - } -} +body { + font-family: "Inter", sans-serif; + background-color: #f2f2f2; +} + +@import "common.scss"; +@import "layout/header.scss"; +@import "layout/footer.scss"; + +.content-container { + background-color: white; + padding: 40px; +} + +.content { + margin: auto; + max-width: 1140px; + line-height: 1.3em; + + h1, + h2, + h3, + h4, + h5, + h6 { + font-weight: bold; + margin: 1em 0 0.5em; + } + + h1 { + font-size: 26px; + } + h2 { + font-size: 22px; + } + h3 { + font-size: 20px; + } + h4 { + font-size: 18px; + } + h5 { + font-size: 16px; + } + h6 { + font-size: 12px; + } + + ul, + p { + margin: 2px 0 16px; + } + b { + font-weight: bold; + } + ul ul { + margin: 2px 0 2px; + } + li { + list-style-type: disc; + margin-left: 16px; + } +} + +#bloglist { + & > div { + margin-top: 30px; + } + + & > div::after { + display: block; + content: ""; + clear: both; + } + + & > div:nth-child(1) { + margin-top: 0; + } +} + +nav.blogposts { + display: grid; + grid-template-columns: 1fr 1fr; + + a { + margin: 10px 0; + text-decoration: none; + color: #7e7e7e; + } + + div:nth-child(1) { + text-align: left; + } + + div:nth-child(2) { + text-align: right; + } +} +h1, +h2, +h3, +h4, +h5, +h6 { + position: relative; + + .heading-link { + display: none; + width: 21px; + position: absolute; + top: 6px; + left: -21px; + opacity: 0.7; + font-size: 12px; + + &:hover { + text-decoration: none; + } + } + + &:hover .heading-link { + display: block; + } +} diff --git a/hugo/assets/css/content/_documentation.scss b/hugo/assets/css/content/_documentation.scss index 42434237..09becc54 100644 --- a/hugo/assets/css/content/_documentation.scss +++ b/hugo/assets/css/content/_documentation.scss @@ -1,35 +1,39 @@ #documentation-header { - display: flex; - flex-direction: row; - margin: 1em 0; - align-items: flex-end; - padding-bottom: 0.3em; - border-bottom: 1px solid var(--lt-color-border-default); - justify-content: space-between; - h1, #page-title { - margin: 0; - padding: 0; - border: 0; + display: flex; + flex-direction: row; + margin: 1em 0; + align-items: flex-end; + padding-bottom: 0.3em; + border-bottom: 1px solid var(--lt-color-border-default); + justify-content: space-between; + h1, + #page-title { + margin: 0; + padding: 0; + border: 0; + } + #page-edit-button { + font-size: 0.8rem; + font-weight: bold; + border: 1px solid var(--lt-color-border-default); + border-radius: 1rem; + padding: 0.4rem 1rem 0.35rem 1rem; + line-height: normal; + text-decoration: none; + transition: + 0.2s background-color, + 0.15s color, + 0.025s border; + &:is(a) { + color: var(--lt-color-gray-500); } - #page-edit-button { - font-size: 0.8rem; - font-weight: bold; - border: 1px solid var(--lt-color-border-default); - border-radius: 1rem; - padding: 0.4rem 1rem 0.35rem 1rem; - line-height: normal; - text-decoration: none; - transition: 0.2s background-color, 0.15s color, 0.025s border; - &:is(a) { - color: var(--lt-color-gray-500); - } - &:hover { - background-color: var(--lt-color-border-light); - color: var(--lt-color-gray-600); - } - &:active { - background-color: var(--lt-color-border-default); - color: var(--lt-color-gray-600); - } + &:hover { + background-color: var(--lt-color-border-light); + color: var(--lt-color-gray-600); } -} \ No newline at end of file + &:active { + background-color: var(--lt-color-border-default); + color: var(--lt-color-gray-600); + } + } +} diff --git a/hugo/assets/css/content/_downloads.scss b/hugo/assets/css/content/_downloads.scss index 07b54871..8b47194d 100644 --- a/hugo/assets/css/content/_downloads.scss +++ b/hugo/assets/css/content/_downloads.scss @@ -1,78 +1,78 @@ -.download-box-container { - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; -} - -.download-box { - justify-self: center; - align-self: center; - margin: 15px; - text-align: center; -} - -.os-name { - display: block; -} - -.os { - display: block; - width: 100px; - height: 100px; - background-repeat: no-repeat; - background-size: contain; - background-position: center center; - margin: 0 auto; -} - -.os-appimage { - background-image: url(icons/appimage.svg); -} - -.os-windows { - background-image: url(icons/windows.svg); -} - -.os-mac { - background-image: url(icons/apple.svg); -} - -.os-linux { - background-image: url(icons/linux.svg); -} - -.os-ubuntu { - background-image: url(icons/ubuntu.svg); -} - -.os-ios { - background-image: url(icons/app-store-ios.svg); -} - -.os-android { - background-image: url(icons/android.svg); -} - -table.development-snapshots { - text-align: center; -} - -a.suggested-download-button { - display: grid; - grid-template-columns: auto 1fr; - grid-gap: 16px; - background: #3fb33f linear-gradient(#30dd30, #3fb33f); - border: 1px solid #66b566; - border-radius: 8px; - padding: 24px 24px; - color: #000; - font-size: 32px; - line-height: 32px; - - > img.suggested-download-button-icon { - height: 32px; - background: transparent; - } - > .suggested-download-button-caption { - margin: auto 0; - } -} +.download-box-container { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; +} + +.download-box { + justify-self: center; + align-self: center; + margin: 15px; + text-align: center; +} + +.os-name { + display: block; +} + +.os { + display: block; + width: 100px; + height: 100px; + background-repeat: no-repeat; + background-size: contain; + background-position: center center; + margin: 0 auto; +} + +.os-appimage { + background-image: url(icons/appimage.svg); +} + +.os-windows { + background-image: url(icons/windows.svg); +} + +.os-mac { + background-image: url(icons/apple.svg); +} + +.os-linux { + background-image: url(icons/linux.svg); +} + +.os-ubuntu { + background-image: url(icons/ubuntu.svg); +} + +.os-ios { + background-image: url(icons/app-store-ios.svg); +} + +.os-android { + background-image: url(icons/android.svg); +} + +table.development-snapshots { + text-align: center; +} + +a.suggested-download-button { + display: grid; + grid-template-columns: auto 1fr; + grid-gap: 16px; + background: #3fb33f linear-gradient(#30dd30, #3fb33f); + border: 1px solid #66b566; + border-radius: 8px; + padding: 24px 24px; + color: #000; + font-size: 32px; + line-height: 32px; + + > img.suggested-download-button-icon { + height: 32px; + background: transparent; + } + > .suggested-download-button-caption { + margin: auto 0; + } +} diff --git a/hugo/assets/css/content/_home.scss b/hugo/assets/css/content/_home.scss index f1b0c79b..ea9e31be 100644 --- a/hugo/assets/css/content/_home.scss +++ b/hugo/assets/css/content/_home.scss @@ -1,44 +1,43 @@ - -.home-screenshots { - display: flex; - flex-direction: column; - - figure { - width: 500px; - margin: 0 0 1em 1em; - box-shadow: 2px 2px 8px 0px #888888; - } -} -@media (max-width: 949px) { - .home-screenshots { - display: none; - } -} - -.content { - .download-button { - display: inline-block; - background-color: #4CAF50; - color: white; - font-size: 20px; - line-height: 20px; - padding: 20px; - border-radius: 15px; - cursor: pointer; - text-align: center; - text-decoration: none; - &:hover { - background-color: #0C9F10; - } - } -} - -#home-newsblock { - display: grid; - grid-template-columns: 1fr 1fr; - grid-gap: 2em; - - @media (max-width: 600px) { - grid-template-columns: 1fr; - } -} +.home-screenshots { + display: flex; + flex-direction: column; + + figure { + width: 500px; + margin: 0 0 1em 1em; + box-shadow: 2px 2px 8px 0px #888888; + } +} +@media (max-width: 949px) { + .home-screenshots { + display: none; + } +} + +.content { + .download-button { + display: inline-block; + background-color: #4caf50; + color: white; + font-size: 20px; + line-height: 20px; + padding: 20px; + border-radius: 15px; + cursor: pointer; + text-align: center; + text-decoration: none; + &:hover { + background-color: #0c9f10; + } + } +} + +#home-newsblock { + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 2em; + + @media (max-width: 600px) { + grid-template-columns: 1fr; + } +} diff --git a/hugo/assets/css/content/_sponsors.scss b/hugo/assets/css/content/_sponsors.scss index a18a0545..f4add40a 100644 --- a/hugo/assets/css/content/_sponsors.scss +++ b/hugo/assets/css/content/_sponsors.scss @@ -1,6 +1,6 @@ -img.sponsorlogo { - float:right; - max-width: #{'min(40vw, 380px)'}; - max-height: 200px; - margin: 12px 0 12px 24px; -} +img.sponsorlogo { + float: right; + max-width: #{"min(40vw, 380px)"}; + max-height: 200px; + margin: 12px 0 12px 24px; +} diff --git a/hugo/assets/css/content/blog/_release-notes.scss b/hugo/assets/css/content/blog/_release-notes.scss index 7e5cbd6b..8d20657e 100644 --- a/hugo/assets/css/content/blog/_release-notes.scss +++ b/hugo/assets/css/content/blog/_release-notes.scss @@ -1,43 +1,71 @@ -.release-notes { - h2 { - border: 0; - } - .item { - display: grid; - grid-template: "title" auto - "desc" auto - "prs" auto - "commits" auto / 100%; - border: 1px solid darkgrey; - border-radius: 4px; - margin: 1em 0 0.4em 0; - padding: 0.4em; - } - .category-title { display: inline; } - .item-title { grid-area: title; margin: 0; line-height: 1.8em; } - .item-desc { grid-area: desc; margin-bottom: 0.4em; line-height: 1.8em; } - .item-prs { grid-area: prs; } - - .item-commits { - grid-area: commits; - margin-bottom: 4px; font-size: 0.8em; line-height: 1.8em; - - & > details { - display: inline-block; - - & > summary { - list-style-position: outside; margin-left: 16px; - - & > * { background-color: lightgrey; border-radius: 4px; margin-right: 2px; padding: 2px 4px; } - } - } - } - .item-prs, - .item-commits > details { vertical-align: top; } - - .item-prs > .pr-link, - .commit-hashlink, - .pr-link { display: inline-block; line-height: 1.2em; } - - ul { padding-left: 1em; } -} +.release-notes { + h2 { + border: 0; + } + .item { + display: grid; + grid-template: + "title" auto + "desc" auto + "prs" auto + "commits" auto / 100%; + border: 1px solid darkgrey; + border-radius: 4px; + margin: 1em 0 0.4em 0; + padding: 0.4em; + } + .category-title { + display: inline; + } + .item-title { + grid-area: title; + margin: 0; + line-height: 1.8em; + } + .item-desc { + grid-area: desc; + margin-bottom: 0.4em; + line-height: 1.8em; + } + .item-prs { + grid-area: prs; + } + + .item-commits { + grid-area: commits; + margin-bottom: 4px; + font-size: 0.8em; + line-height: 1.8em; + + & > details { + display: inline-block; + + & > summary { + list-style-position: outside; + margin-left: 16px; + + & > * { + background-color: lightgrey; + border-radius: 4px; + margin-right: 2px; + padding: 2px 4px; + } + } + } + } + .item-prs, + .item-commits > details { + vertical-align: top; + } + + .item-prs > .pr-link, + .commit-hashlink, + .pr-link { + display: inline-block; + line-height: 1.2em; + } + + ul { + padding-left: 1em; + } +} diff --git a/hugo/assets/css/layout/_footer.scss b/hugo/assets/css/layout/_footer.scss index 78e19d8f..bcd106f5 100644 --- a/hugo/assets/css/layout/_footer.scss +++ b/hugo/assets/css/layout/_footer.scss @@ -1,35 +1,35 @@ -body > footer { - padding: 20px; - background-color: #F2F2F2; - border-top: 1px solid #D2D2D2; - - font-size: 14px; - line-height: 16px; -} - -.footer-content { - max-width: 1140px; - margin: auto; - - ul { - list-style-type: none; - margin: 0; - padding: 0; - display: inline-flex; - line-height: 2.0em; - li { - display: inline-block; - } - a { - display: block; - color: black; - text-align: center; - padding-right: 0.4em; - margin-right: 1.6em; - text-decoration: none; - } - } - .copyleft { - color: #a6a6a6; - } -} +body > footer { + padding: 20px; + background-color: #f2f2f2; + border-top: 1px solid #d2d2d2; + + font-size: 14px; + line-height: 16px; +} + +.footer-content { + max-width: 1140px; + margin: auto; + + ul { + list-style-type: none; + margin: 0; + padding: 0; + display: inline-flex; + line-height: 2em; + li { + display: inline-block; + } + a { + display: block; + color: black; + text-align: center; + padding-right: 0.4em; + margin-right: 1.6em; + text-decoration: none; + } + } + .copyleft { + color: #a6a6a6; + } +} diff --git a/hugo/assets/css/layout/_header.scss b/hugo/assets/css/layout/_header.scss index dd3fb51b..64d6b39d 100644 --- a/hugo/assets/css/layout/_header.scss +++ b/hugo/assets/css/layout/_header.scss @@ -1,50 +1,50 @@ -.logo { - grid-template: "logo"; - align-self: center; - height: 100px; - width: 100px; - background: url(mumble.svg) no-repeat; - background-size: 100px; - - a { - display: block; - width: 100%; - height: 100%; - } -} - -#page-head { - h1 { - padding-left: 10px; - margin-top: 10px; - a { - text-decoration: none; - margin-top: 10px; - } - & > sub { - display: block; - font-size: 16px; - margin-top: 10px; - } - } -} - -body > #page-head { - background-color: #F2F2F2; - border-bottom: 1px solid #D2D2D2; - - nav { - grid-template: "nav"; - text-align: right; - align-self: center; - } -} - -#header-content { - max-width: 1140px; - padding: 10px; - margin: auto; - display: grid; - grid-template-columns: auto auto 1fr; - grid-template-areas: "logo header nav"; -} +.logo { + grid-template: "logo"; + align-self: center; + height: 100px; + width: 100px; + background: url(mumble.svg) no-repeat; + background-size: 100px; + + a { + display: block; + width: 100%; + height: 100%; + } +} + +#page-head { + h1 { + padding-left: 10px; + margin-top: 10px; + a { + text-decoration: none; + margin-top: 10px; + } + & > sub { + display: block; + font-size: 16px; + margin-top: 10px; + } + } +} + +body > #page-head { + background-color: #f2f2f2; + border-bottom: 1px solid #d2d2d2; + + nav { + grid-template: "nav"; + text-align: right; + align-self: center; + } +} + +#header-content { + max-width: 1140px; + padding: 10px; + margin: auto; + display: grid; + grid-template-columns: auto auto 1fr; + grid-template-areas: "logo header nav"; +} diff --git a/hugo/assets/css/main.scss b/hugo/assets/css/main.scss index ad2ddee2..c7b724ad 100644 --- a/hugo/assets/css/main.scss +++ b/hugo/assets/css/main.scss @@ -1,39 +1,40 @@ -@import 'layout'; - -@import 'content/blog/release-notes'; -@import 'content/documentation'; -@import 'content/downloads'; -@import 'content/home'; -@import 'content/sponsors'; - -@media only screen and (max-width: 768px) { - #header-content { - display: block !important; - text-align: center !important; - - .logo { - margin: 0 auto !important; - } - nav { - text-align: center !important; - } - } - - .download-box-container { - grid-template-columns: 1fr 1fr !important; - } - .home-screenshots { - display: none; - } -} - -main a[href^="https://wiki.mumble.info"]::after { - content: 'W'; - vertical-align: super; - font-size: 8px; - margin-left: 2px; -} - -.markdown-body table tr.outdated { - background-color:#FFFFC0; -} +@import "layout"; + +@import "content/blog/release-notes"; +@import "content/documentation"; +@import "content/downloads"; +@import "content/home"; +@import "content/sponsors"; + +@media only screen and (max-width: 768px) { + #header-content { + display: block !important; + text-align: center !important; + + .logo { + margin: 0 auto !important; + } + nav { + text-align: center !important; + } + } + + .download-box-container { + grid-template-columns: 1fr 1fr !important; + } + .home-screenshots { + display: none; + } +} + +main a[href^="https://wiki.mumble.info"]::after +{ + content: "W"; + vertical-align: super; + font-size: 8px; + margin-left: 2px; +} + +.markdown-body table tr.outdated { + background-color: #ffffc0; +} diff --git a/hugo/content/about.md b/hugo/content/about.md index de8033ab..896b89ca 100644 --- a/hugo/content/about.md +++ b/hugo/content/about.md @@ -2,7 +2,8 @@ title: About --- -Mumble is a [free, open source](https://en.wikipedia.org/wiki/Free_and_open-source_software), low latency, high quality voice chat application. +Mumble is a [free, open source](https://en.wikipedia.org/wiki/Free_and_open-source_software), low latency, high quality +voice chat application. ### Source Code & Development @@ -12,31 +13,33 @@ For other Mumble Projects, see the [overview of Mumble repositories on GitHub](h ### Licenses -Mumble is Free and Open-Source Software. -The core project is licensed under a BSD-style license. See our [LICENSE file](https://www.mumble.info/LICENSE) for details. +Mumble is Free and Open-Source Software. The core project is licensed under a BSD-style license. See our +[LICENSE file](https://www.mumble.info/LICENSE) for details. -Our other projects may use different licenses. For details please refer to the respective GitHub repositories, see: [Overview of all Mumble projects on GitHub](https://github.com/mumble-voip). +Our other projects may use different licenses. For details please refer to the respective GitHub repositories, see: +[Overview of all Mumble projects on GitHub](https://github.com/mumble-voip). ## About us -We are a team of voluntary developers - both professional and non-professional - from various countries, including Italy, Germany, USA and more. +We are a team of voluntary developers - both professional and non-professional - from various countries, including +Italy, Germany, USA and more. ### Core Team Active Team Members are: -| Name | GitHub Profile | Focus | -| --- | --- | --- | -| Davide Beatrici | [davidebeatrici](https://github.com/davidebeatrici) | Core developer | -| Robert Adam | [Krzmbrzl](https://github.com/Krzmbrzl) | Core developer, GitHub Management | -| Nik Reist | [ZeroAbility](https://github.com/ZeroAbility) | Developer, Release Management | -| Jan Klass | [Kissaki](https://github.com/Kissaki) | Developer, Website & Community work | -| - | [Natenom](https://github.com/Natenom) | Testing | +| Name | GitHub Profile | Focus | +| --------------- | --------------------------------------------------- | ----------------------------------- | +| Davide Beatrici | [davidebeatrici](https://github.com/davidebeatrici) | Core developer | +| Robert Adam | [Krzmbrzl](https://github.com/Krzmbrzl) | Core developer, GitHub Management | +| Nik Reist | [ZeroAbility](https://github.com/ZeroAbility) | Developer, Release Management | +| Jan Klass | [Kissaki](https://github.com/Kissaki) | Developer, Website & Community work | +| - | [Natenom](https://github.com/Natenom) | Testing | ### Contributors -Contributions from the community are an important part of the project. -You can find a [list of contributors on GitHub](https://github.com/mumble-voip/mumble/graphs/contributors). +Contributions from the community are an important part of the project. You can find a +[list of contributors on GitHub](https://github.com/mumble-voip/mumble/graphs/contributors). ### Contact diff --git a/hugo/content/blog/2010-06-01-home-sweet-home.md b/hugo/content/blog/2010-06-01-home-sweet-home.md index b278f940..20a2fdfc 100644 --- a/hugo/content/blog/2010-06-01-home-sweet-home.md +++ b/hugo/content/blog/2010-06-01-home-sweet-home.md @@ -4,14 +4,19 @@ author: .D0T date: 2010-06-01T01:01:16+00:00 categories: - News - --- + First things first: **Welcome to our shiny new blog 😉** -This is the official blog of the Mumble project. With this blog we will try to keep our user base informed about notable events in and around Mumble as well as other trivia we consider worth sharing. +This is the official blog of the Mumble project. With this blog +we will try to keep our user base informed about notable events in and around Mumble as well as other trivia we consider +worth sharing. -We hope you will like this blog. You can give us feedback via comments as well as in our forums. +We hope you will like this blog. You can give us feedback via comments as well as in +our forums. **Have fun.** -**PS:** For those of you who visited our “old” blog (the one at `http://sourceforge.net/apps/wordpress/mumble/`) please update your bookmarks to point to this one () and spread the word. +**PS:** For those of you who visited our “old” blog (the one at +`http://sourceforge.net/apps/wordpress/mumble/`) please update your bookmarks to point to this one +() and spread the word. diff --git a/hugo/content/blog/2010-06-08-oh-no-weve-made-a-buzzword.md b/hugo/content/blog/2010-06-08-oh-no-weve-made-a-buzzword.md index fd549417..258cce06 100644 --- a/hugo/content/blog/2010-06-08-oh-no-weve-made-a-buzzword.md +++ b/hugo/content/blog/2010-06-08-oh-no-weve-made-a-buzzword.md @@ -7,16 +7,36 @@ categories: tags: - history - latency - --- -When we first started with Mumble, we did it because none of the commercial alternatives had quality we were happy with, and there were no open source projects that would have been a good starting base. So, we made our own. This means Mumble was made to satisfy a need; the need we have for high quality voicecom when we play. As such, our two focus areas are voice quality and voice latency. Oh, and “cool technical stuff”. But I digress. Quality is subjective, and is hard to quantify, but latency is much easier to test. + +When we first started with Mumble, we did it because none of the commercial alternatives had quality we were happy with, +and there were no open source projects that would have been a good starting base. So, we made our own. This means Mumble +was made to satisfy a need; the need we have for high quality voicecom when we play. As such, our two focus areas are +voice quality and voice latency. Oh, and “cool technical stuff”. But I digress. Quality is subjective, and +is hard to quantify, but latency is much easier to test. -At the time, we were playing a lot of Battlefield 2. And one of our primary problem with the voicecomms we had was that if you saw a grenade a yelled “GRENADE!”, what your clanmate actually heard was a loud boom, followed by your desperate attempt to warn him (or her). It really should be the other way around, and we’ve made sure to emphasize this every chance we got. At first, people were skeptical. Did latency really matter? But as more people moved to use Mumble, more people discovered that quality and latency does matter, as it allows you to speak naturally instead of feeling like a shared walkie talkie. +At the time, we were playing a lot of Battlefield 2. And one of our primary problem with the voicecomms we had was that +if you saw a grenade a yelled “GRENADE!”, what your clanmate actually heard was a loud boom, followed by +your desperate attempt to warn him (or her). It really should be the other way around, and we’ve made sure to +emphasize this every chance we got. At first, people were skeptical. Did latency really matter? But as more people moved +to use Mumble, more people discovered that quality and latency does matter, as it allows you to speak naturally instead +of feeling like a shared walkie talkie. -A few years pass. Other competing products arrive. Old competing products get released in new versions… And they all mention the magical words “low latency”. There are now YouTube videos comparing latency, and numerous technical quasi-explanations around the web on what latency you can achieve with solution X over solution Y. People discuss individual milliseconds. I’m not sure if I should be proud or ashamed, but we’ve made “low-latency” a new buzzword for gaming VoIP. Proud, because it means we’ve managed to make the entire field of VoIP apps better for the end user. Ashamed, because to most people it is still just a word without any actual definition to it. +A few years pass. Other competing products arrive. Old competing products get released in new versions… And they +all mention the magical words “low latency”. There are now YouTube videos comparing latency, and numerous +technical quasi-explanations around the web on what latency you can achieve with solution X over solution Y. People +discuss individual milliseconds. I’m not sure if I should be proud or ashamed, but we’ve made +“low-latency” a new buzzword for gaming VoIP. Proud, because it means we’ve managed to make the entire +field of VoIP apps better for the end user. Ashamed, because to most people it is still just a word without any actual +definition to it. -Our best repeatable results, achieved using either ALSA hw: or WASAPI exclusive mode, is around 40-50 ms. That’s mouth to ear, including network travel time. But what does that actually mean? According to Google, 40milliseconds equals 13.6 meters. So, place two people 15 meters apart, each with a headset, and have person A say “Latency”. Person B will hear it in the headset before he can hear it through the air. That is _low_ latency. Unfortunately, such configurations are useless for actual gaming; exclusive hardware devices means the games can’t use it. +Our best repeatable results, achieved using either ALSA hw: or WASAPI exclusive mode, is around 40-50 ms. That’s +mouth to ear, including network travel time. But what does that actually mean? According to Google, +40milliseconds equals 13.6 meters. +So, place two people 15 meters apart, each with a headset, and have person A say “Latency”. Person B will +hear it in the headset before he can hear it through the air. That is _low_ latency. Unfortunately, such configurations +are useless for actual gaming; exclusive hardware devices means the games can’t use it. It’s still a cool result. diff --git a/hugo/content/blog/2010-07-21-first-mumble-tracker-squash-meeting.md b/hugo/content/blog/2010-07-21-first-mumble-tracker-squash-meeting.md index 2a2f049c..2e56030e 100644 --- a/hugo/content/blog/2010-07-21-first-mumble-tracker-squash-meeting.md +++ b/hugo/content/blog/2010-07-21-first-mumble-tracker-squash-meeting.md @@ -4,18 +4,31 @@ author: slicer date: 2010-07-21T23:01:44+00:00 categories: - News - --- -Over the past few months, most of the Mumble team has been busy with other projects. This has lead to an unfortunate build-up of unsolved bug and feature requests. This Sunday, we had our first developer meeting to address this. + +Over the past few months, most of the Mumble team has been busy with other projects. This has lead to an unfortunate +build-up of unsolved bug and feature requests. This Sunday, we had our first developer meeting to address this. Every now and then, real life and other projects have to take priority over Mumble development. Since about mid-march, the only requests we’ve really done anything about has been patches. Bug reports and feature requests have been put on the “todo” list, which by now has become pretty long. -In an effort to address this, this Sunday saw our first developer meeting (held using Mumble, of course). This saw quite a few results, which I’ll go through in turn. +In an effort to address this, this Sunday saw our first developer meeting (held using Mumble, of course). This saw quite +a few results, which I’ll go through in turn. -First of all, 1.2.3 is now more or less feature complete. Krejler has a block of OSX interactive overlay code that is missing, and .D0T, pcgod and other contributors are working hard on finishing an initial version of audio recording. The current plan is to get these features in, resolve any bugs that remain and then release 1.2.3. With a bit of luck that will happen inside of a month. +First of all, 1.2.3 is now more or less feature complete. Krejler has a block of OSX interactive overlay code that is +missing, and .D0T, pcgod and other contributors are working hard on finishing an initial version of audio recording. The +current plan is to get these features in, resolve any bugs that remain and then release 1.2.3. With a bit of luck that +will happen inside of a month. -As a consequence of the above, that means the 200 feature requests we currently have unresolved in the tracker will not be addressed for 1.2.3. Once 1.2.3 is out, we’ll start going through the requests and implement things that look fun or make a lot of sense. In the meantime, we’re currently evaluating replacements for the feature request tracker itself. While the tracker works well for bugs, it lacks a few features we’d like to see for feature requests, such as popularity tracking, milestone targets and easy marking of duplicates. SF.net is currently implementing [SF.net 2.0][1] and maybe that will improve things. If not, we’ll probably need an alternative. +As a consequence of the above, that means the 200 feature requests we currently have unresolved in the tracker will not +be addressed for 1.2.3. Once 1.2.3 is out, we’ll start going through the requests and implement things that look +fun or make a lot of sense. In the meantime, we’re currently evaluating replacements for the feature request +tracker itself. While the tracker works well for bugs, it lacks a few features we’d like to see for feature +requests, such as popularity tracking, milestone targets and easy marking of duplicates. SF.net is currently +implementing [SF.net 2.0][1] and maybe that will improve things. If not, we’ll probably need an alternative. -Most of the meeting was spent triaging bug reports. All bug reports should now either have been assigned to a developer for fixing, set pending with request for more information, or left open because triaging them takes a lot longer. As it turns out, this triaging is a good thing, as it allows all of us to work independently on fixing specific bugs, which means we should have a fairly bug-free snapshot ready inside of a week. +Most of the meeting was spent triaging bug reports. All bug reports should now either have been assigned to a developer +for fixing, set pending with request for more information, or left open because triaging them takes a lot longer. As it +turns out, this triaging is a good thing, as it allows all of us to work independently on fixing specific bugs, which +means we should have a fairly bug-free snapshot ready inside of a week. - [1]: https://sourceforge.net/blog/get-ready-for-a-whole-new-forge/ +[1]: https://sourceforge.net/blog/get-ready-for-a-whole-new-forge/ diff --git a/hugo/content/blog/2010-08-17-for-the-record.md b/hugo/content/blog/2010-08-17-for-the-record.md index c144c985..8a197f9d 100644 --- a/hugo/content/blog/2010-08-17-for-the-record.md +++ b/hugo/content/blog/2010-08-17-for-the-record.md @@ -7,46 +7,88 @@ categories: tags: - feature - recording - --- -As you already know if you read the article on our [Tracker Squash Meeting][1] or listened to the buzz in `#mumble` on {{< wiki IRC />}} the upcoming {{< wiki "1.2.3" "1.2.3 release" />}} will have a recording feature. The work on this has progressed nicely and since we are now shipping the first snapshots with this new feature in them we think it is time to give you a proper introduction. + +As you already know if you read the article on our [Tracker Squash Meeting][1] or listened to the buzz in `#mumble` on +{{< wiki IRC />}} the upcoming {{< wiki "1.2.3" "1.2.3 release" />}} will have a recording feature. The work on this has +progressed nicely and since we are now shipping the first snapshots with this new feature in them we think it is time to +give you a proper introduction. Let’s start with the basic rules we established for the recorder: -* Recording is only possible while you are connected to a server and you can only record what you hear or say. -* For privacy reasons we will not allow recording on pre 1.2.3 servers. (They are not able to properly warn their users) -* There will be no ACLs to disallow it on newer servers. (We feel that if we restrict the feature that way the Open Source nature of our project will lead to forks with the warnings completely removed which is an even worse situation for the users) +- Recording is only possible while you are connected to a server and you can only record what you hear or say. +- For privacy reasons we will not allow recording on pre 1.2.3 servers. (They are not able to properly warn their users) +- There will be no ACLs to disallow it on newer servers. (We feel that if we restrict the feature that way the Open + Source nature of our project will lead to forks with the warnings completely removed which is an even worse situation + for the users) -Once you are on a server that fulfils these prerequisites you can open the Recorder via our Icon toolbar or the menu (Self->Recorder) and “Start” the recording. You can record for as long as your disk space lasts or until you grow tired of it. The data is encoded and written away on the fly. Supported audio formats at this time are: +Once you are on a server that fulfils these prerequisites you can open the Recorder via our Icon toolbar or the menu +(Self->Recorder) and “Start” the recording. You can record for as long as your disk space lasts or until you +grow tired of it. The data is encoded and written away on the fly. Supported audio formats at this time are: -* wav (uncompressed) -* ogg/vorbis (compressed) -* au (uncompressed) -* flac (lossless compressed) +- wav (uncompressed) +- ogg/vorbis (compressed) +- au (uncompressed) +- flac (lossless compressed) -You might ask: “Where is mp3 support?”. Well, mp3 has [licensing issues][4] which have prevented the library we use for encoding ([libsndfile][5]) from supporting it. As we do not want any legal troubles either we decided it would be best to keep it that way. We think as we offer multiple lossless formats this should not be much of an issue as you can always encode to mp3 afterwards. +You might ask: “Where is mp3 support?”. Well, mp3 has [licensing issues][4] which have prevented the library +we use for encoding ([libsndfile][5]) from supporting it. As we do not want any legal troubles either we decided it +would be best to keep it that way. We think as we offer multiple lossless formats this should not be much of an issue as +you can always encode to mp3 afterwards. -Besides the format you can configure the recording mode. As a normal user you will most likely want to stick with the default: Mixdown. This means all audio streams Mumble receives are mixed together and stored in one audio file. This has the advantage of taking up little space and being easy to handle. But sometimes this is not enough: Say you want to record a Podcast interview or be able to cut out specific comments/noises from a single user in your recording later on. In this case Multichannel recording will be your mode of choice. In this mode Mumble creates a separate audio file for every user you hear. Once you are done recording you can then use audio editors like [Audacity][6], Cubase or Ableton Live to put things back together and to do your editing. To make this as easy as possible Mumble adds silence to the beginning of the files of users who joined the conversation later and in general fills the gaps between talk with the right amount of silence to keep the tracks lined up. +Besides the format you can configure the recording mode. As a normal user you will most likely want to stick with the +default: Mixdown. This means all audio streams Mumble receives are mixed together and stored in one audio file. This has +the advantage of taking up little space and being easy to handle. But sometimes this is not enough: Say you want to +record a Podcast interview or be able to cut out specific comments/noises from a single user in your recording later on. +In this case Multichannel recording will be your mode of choice. In this mode Mumble creates a separate audio file for +every user you hear. Once you are done recording you can then use audio editors like [Audacity][6], Cubase or Ableton +Live to put things back together and to do your editing. To make this as easy as possible Mumble adds silence to the +beginning of the files of users who joined the conversation later and in general fills the gaps between talk with the +right amount of silence to keep the tracks lined up. -Last but not least let me get to these funny %user, %date etc. things in the target directory and filename. These are so called template variables, if you ever did some (web-)programming you already know what those are good for but let me explain it for the rest. Template variables are special “words” that will be replaced with actual content by the program later on. Mumble currently offers the following variables: +Last but not least let me get to these funny %user, %date etc. things in the target directory and filename. These are so +called template variables, if you ever did some (web-)programming you already know what those are good for but let me +explain it for the rest. Template variables are special “words” that will be replaced with actual content by +the program later on. Mumble currently offers the following variables: -* %user – Inserts the users name -* %date – Inserts the current date -* %time – Inserts the current time -* %host – Inserts the hostname +- %user – Inserts the users name +- %date – Inserts the current date +- %time – Inserts the current time +- %host – Inserts the hostname -This means that if as your filename you choose something like “%time-%host” Mumble might expand this to the actual filename “11-23-21-mycoolserver.net.ogg” (Note: Mumble appends the right format extension on its own, it is not included in %host or anything). This helps you to customize the way your files are named the way you can handle them best later on. But as I said those variables can also be used in directory names. If you do a lot of recording all those files will clutter up your recording directory pretty fast and even with a great naming scheme you might have trouble to find what you want, this is especially true for multichannel recording with a lot of users. So if this is the way you will use recording you definitely want to add some template variables to your directory names. Mumble will automatically create these directories as needed so “C:\mygreatpath\to\somewhere\%date\%time\” will create a directory with the current date, in it a directory for the current time and in that will put your recordings. Do a second recording an hour later? Time has changed so it’ll end up in another directory. Same goes for the date of course. +This means that if as your filename you choose something like “%time-%host” Mumble might expand this to the +actual filename “11-23-21-mycoolserver.net.ogg” (Note: Mumble appends the right format extension on its own, +it is not included in %host or anything). This helps you to customize the way your files are named the way you can +handle them best later on. But as I said those variables can also be used in directory names. If you do a lot of +recording all those files will clutter up your recording directory pretty fast and even with a great naming scheme you +might have trouble to find what you want, this is especially true for multichannel recording with a lot of users. So if +this is the way you will use recording you definitely want to add some template variables to your directory names. +Mumble will automatically create these directories as needed so “C:\mygreatpath\to\somewhere\%date\%time\” +will create a directory with the current date, in it a directory for the current time and in that will put your +recordings. Do a second recording an hour later? Time has changed so it’ll end up in another directory. Same goes +for the date of course. -This concludes this rundown of our new recording feature. For the audio geeks there is a small appendix with more information on what we actually save in terms of audio data. We hope you will test the hell out of this new feature before we release it with the 1.2.3 stable. Whether you find any bugs or not please give us feedback. The easiest way to do so is to leave comment below. +This concludes this rundown of our new recording feature. For the audio geeks there is a small appendix with more +information on what we actually save in terms of audio data. We hope you will test the hell out of this new feature +before we release it with the 1.2.3 stable. Whether you find any bugs or not please give us feedback. The easiest way to +do so is to leave comment below. The Mumble Team -Appendix: So this is how we save it. But the audio geeks among you might ask themselves what we do actually save? Currently the answer to that is: Pretty much the same as you can hear minus positional audio (mono only at this time) plus what you say. Meaning it receives the same post-processing as the audio you hear does and if you have 44.1Khz audio output the file will contain 44.1Khz afterwards (this will change later, internally Mumble always operates at 48Khz and we want to retain that level of quality). The files contain either 24bit PCM (wav & flac) or the full 32bit float range (au & vorbis). Note that due to an internal API restriction our preprocessors currently only operate on 16bit PCM data. This is going to change soon which will make our whole processing pipeline 48Khz/32bit float. As far as codecs go the only lossy codec we offer is ogg/vorbis. For now we stick with the default quality level libsndfile chose for it which is [0.4][7]. +Appendix: So this is how we save it. But the audio geeks among you might ask themselves what we do actually save? +Currently the answer to that is: Pretty much the same as you can hear minus positional audio (mono only at this time) +plus what you say. Meaning it receives the same post-processing as the audio you hear does and if you have 44.1Khz audio +output the file will contain 44.1Khz afterwards (this will change later, internally Mumble always operates at 48Khz and +we want to retain that level of quality). The files contain either 24bit PCM (wav & flac) or the full 32bit float range +(au & vorbis). Note that due to an internal API restriction our preprocessors currently only operate on 16bit PCM data. +This is going to change soon which will make our whole processing pipeline 48Khz/32bit float. As far as codecs go the +only lossy codec we offer is ogg/vorbis. For now we stick with the default quality level libsndfile chose for it which +is [0.4][7]. - [1]: http://blog.mumble.info/first-mumble-tracker-squash-meeting - [4]: http://www.mega-nerd.com/libsndfile/FAQ.html#Q020 - [5]: http://www.mega-nerd.com/libsndfile/ - [6]: https://sourceforge.net/projects/audacity/ - [7]: https://en.wikipedia.org/wiki/Vorbis#Technical_details +[1]: http://blog.mumble.info/first-mumble-tracker-squash-meeting +[4]: http://www.mega-nerd.com/libsndfile/FAQ.html#Q020 +[5]: http://www.mega-nerd.com/libsndfile/ +[6]: https://sourceforge.net/projects/audacity/ +[7]: https://en.wikipedia.org/wiki/Vorbis#Technical_details diff --git a/hugo/content/blog/2010-09-06-mumble-for-ios-beta-test-phase1.md b/hugo/content/blog/2010-09-06-mumble-for-ios-beta-test-phase1.md index acc69098..44eb2657 100644 --- a/hugo/content/blog/2010-09-06-mumble-for-ios-beta-test-phase1.md +++ b/hugo/content/blog/2010-09-06-mumble-for-ios-beta-test-phase1.md @@ -1,5 +1,5 @@ --- -title: 'Mumble for iOS Beta Test: Phase 1' +title: "Mumble for iOS Beta Test: Phase 1" author: mkrautz date: 2010-09-06T16:00:20+00:00 categories: @@ -8,27 +8,42 @@ tags: - beta - ios - iphone - --- + As promised some time ago, the beta test for Mumble for iOS-based devices has now gone live. -The portal for the beta testing efforts can be found at ~~Mumble for iOS Beta Portal~~. If you are interested in testing the application, please read on for more information on joining the beta test. +The portal for the beta testing efforts can be found at ~~Mumble for iOS Beta Portal~~. If you are interested in testing +the application, please read on for more information on joining the beta test. -In the initial phase of beta testing we will let about 40 people into the beta. This is not a lot of people, but since the beta test is done using Apple’s ad-hoc distribution scheme, we’re limited to 100 unique devices for the beta test. +In the initial phase of beta testing we will let about 40 people into the beta. This is not a lot of people, but since +the beta test is done using Apple’s ad-hoc distribution scheme, we’re limited to 100 unique devices for the +beta test. -In its current state, the application works for just basic voice chat. It’s quite bare-bones at the moment, which is why we’re only letting a few people into the beta in the first phase of testing. The currently available version is 0.1, and while it works for basic voice chat, it lacks a lot of convenience features for navigating a server (switching channels easily, viewing comments, etc.), viewing log messages, sending and receiving text messages, and so on. These will all be implemented during the beta, and improved until they provide a good mobile interface for Mumble. A roadmap of the which features we prioritize will be available at a later point in the beta. +In its current state, the application works for just basic voice chat. It’s quite bare-bones at the moment, which +is why we’re only letting a few people into the beta in the first phase of testing. The currently available +version is 0.1, and while it works for basic voice chat, it lacks a lot of convenience features for navigating a server +(switching channels easily, viewing comments, etc.), viewing log messages, sending and receiving text messages, and so +on. These will all be implemented during the beta, and improved until they provide a good mobile interface for Mumble. A +roadmap of the which features we prioritize will be available at a later point in the beta. -The beta test will initially only be for iPhone form-factor devices, not iPads. It’s too early to focus on the iPad form factor, since the phone app will still work on there, albeit upscaled. Once the feature set of the iOS client is more complete, we can begin looking at supporting iOS devices with other form factors. +The beta test will initially only be for iPhone form-factor devices, not iPads. It’s too early to focus on the +iPad form factor, since the phone app will still work on there, albeit upscaled. Once the feature set of the iOS client +is more complete, we can begin looking at supporting iOS devices with other form factors. -Another thing to note is that the beta client will only work on iOS devices that run 4.0 or greater. This means that if you’re on an iPad with iOS 3.2, or an iPhone or iPod Touch running an old OS, you won’t be able to run it. If your device is running your beta application will be ignored. +Another thing to note is that the beta client will only work on iOS devices that run 4.0 or greater. This means that if +you’re on an iPad with iOS 3.2, or an iPhone or iPod Touch running an old OS, you won’t be able to run it. +If your device is running your beta application will be ignored. -We also request that developers who themselves are able to build and run the application on their devices do not sign up for the beta test. This is, again, because of the limited slots available for testers. +We also request that developers who themselves are able to build and run the application on their devices do not sign up +for the beta test. This is, again, because of the limited slots available for testers. -We hope you’re going to enjoy being able to Mumble on the go, and that you’re willing to help improve the experience of using Mumble on iOS devices in the beta test. +We hope you’re going to enjoy being able to Mumble on the go, and that you’re willing to help improve the +experience of using Mumble on iOS devices in the beta test. -Last but not least, we want to remind you there are already Mumble clients available for other mobile platforms. The Mumble client for Android is available on [GitHub][1], and the desktop version of Mumble runs on [Maemo][2] devices. +Last but not least, we want to remind you there are already Mumble clients available for other mobile platforms. The +Mumble client for Android is available on [GitHub][1], and the desktop version of Mumble runs on [Maemo][2] devices. - [1]: https://github.com/pcgod/mumble-android "Mumble for Android" - [2]: https://maemo.org/packages/view/mumble/ "Mumble for Maemo" +[1]: https://github.com/pcgod/mumble-android "Mumble for Android" +[2]: https://maemo.org/packages/view/mumble/ "Mumble for Maemo" diff --git a/hugo/content/blog/2010-09-27-building-web-services-for-mumble.md b/hugo/content/blog/2010-09-27-building-web-services-for-mumble.md index d25a3be5..a545af19 100644 --- a/hugo/content/blog/2010-09-27-building-web-services-for-mumble.md +++ b/hugo/content/blog/2010-09-27-building-web-services-for-mumble.md @@ -10,29 +10,49 @@ tags: - json - web - xml - --- -Mumble provides a pretty neat online experience to its users as it is – still, people often look for some kind of an interface to query the server for status information over the web. The most common use for such an interface is an embedded channel viewer on a team’s web site, but it could be used for monitoring or other kinds of status notifications as well – the limit being your imagination. + +Mumble provides a pretty neat online experience to its users as it is – still, people often look for some kind of +an interface to query the server for status information over the web. The most common use for such an interface is an +embedded channel viewer on a team’s web site, but it could be used for monitoring or other kinds of status +notifications as well – the limit being your imagination. -If you take a look at the {{< wiki "3rd Party Applications" "3rd party applications Wiki page" />}}, you will see that quite a few apps around Mumble have emerged recently, and probably a lot more are currently in development. This is great, as it makes the Mumble ecosystem a lot more vivid. The downside is that if you want to use these applications, you will soon run into problems if each application uses its own protocol to expose information, because using this method will require the server side component and the channel viewer application to match. +If you take a look at the {{< wiki "3rd Party Applications" "3rd party applications Wiki page" />}}, you will see that +quite a few apps around Mumble have emerged recently, and probably a lot more are currently in development. This is +great, as it makes the Mumble ecosystem a lot more vivid. The downside is that if you want to use these applications, +you will soon run into problems if each application uses its own protocol to expose information, because using this +method will require the server side component and the channel viewer application to match. -Needing to install a specific server-side component for each individual app would cause a lot of unneccessary work for both installation and maintenance, so being able to use a single server-side component for all apps would be preferable – especially if your favorite web interface already implemented the server side component. +Needing to install a specific server-side component for each individual app would cause a lot of unneccessary work for +both installation and maintenance, so being able to use a single server-side component for all apps would be preferable +– especially if your favorite web interface already implemented the server side component. -From a client’s perspective, being able to use your favorite app with a certain server would require the server admin to configure an interface for the client to use. Being able to simply use an existing interface would mean a lot less work, especially since web interface applications usually provide the server side for all servers that they manage. +From a client’s perspective, being able to use your favorite app with a certain server would require the server +admin to configure an interface for the client to use. Being able to simply use an existing interface would mean a lot +less work, especially since web interface applications usually provide the server side for all servers that they manage. -The ultimate goal is that each channel viewer is compatible with each server side implementation, no matter which one the respective administrators choose to install, while still being easily maintainable for each server admin. +The ultimate goal is that each channel viewer is compatible with each server side implementation, no matter which one +the respective administrators choose to install, while still being easily maintainable for each server admin. -However, this can only be achieved when the components use the same data format, because otherwise they simply would not understand each other. To achieve this, the {{< wiki "Channel Viewer Protocol" />}} has been agreed upon. If you want to create a new web application, you are highly encouraged to use the JSON or XML data format defined in the Protocol. +However, this can only be achieved when the components use the same data format, because otherwise they simply would not +understand each other. To achieve this, the {{< wiki "Channel Viewer Protocol" />}} has been agreed upon. If you want to +create a new web application, you are highly encouraged to use the JSON or XML data format defined in the Protocol. -The Channel Viewer Protocol is aimed to be extendable, lightweight and easy to implement on both the server and client side. By using it, you will enable your users to freely choose which applications they prefer to use, and thereby support the idea of software freedom, because giving the user a choice is what this is all about. 🙂 +The Channel Viewer Protocol is aimed to be extendable, lightweight and easy to implement on both the server and client +side. By using it, you will enable your users to freely choose which applications they prefer to use, and thereby +support the idea of software freedom, because giving the user a choice is what this is all about. 🙂 -If you have any proposals for the standard, please feel free to visit the {{< wiki IRC "#mumble channel on IRC" />}} or post in the [forums][6]. +If you have any proposals for the standard, please feel free to visit the {{< wiki IRC "#mumble channel on IRC" />}} or +post in the [forums][6]. — -**Note by staff:** Svedrin, the author of this article, is a Mumble community member and developer of the 3rd party Web-Interface [Mumble-Django][7]. We thank him very much for contributing this article. We would love to be able to publish articles written by our community on a regular basis, so if you have an idea you think is worth getting into this blog, please {{< wiki "FAQ/English#How_can_I_help_or_contact_you.3F" "contact" />}} us. +**Note by staff:** Svedrin, the author of this article, is a Mumble community member and developer of the 3rd party +Web-Interface [Mumble-Django][7]. We thank him very much for contributing this article. We would love to be able to +publish articles written by our community on a regular basis, so if you have an idea you think is worth getting into +this blog, please {{< wiki "FAQ/English#How_can_I_help_or_contact_you.3F" "contact" />}} us. - [6]: http://sourceforge.net/apps/phpbb/mumble/ - [7]: https://bitbucket.org/Svedrin/mumble-django/wiki/Home +[6]: http://sourceforge.net/apps/phpbb/mumble/ +[7]: https://bitbucket.org/Svedrin/mumble-django/wiki/Home diff --git a/hugo/content/blog/2010-10-05-lost-in-translation.md b/hugo/content/blog/2010-10-05-lost-in-translation.md index c3b2136d..880696a5 100644 --- a/hugo/content/blog/2010-10-05-lost-in-translation.md +++ b/hugo/content/blog/2010-10-05-lost-in-translation.md @@ -6,18 +6,26 @@ categories: - Community tags: - translation - --- -One important milestone for any Mumble release is freezing the text-strings. After a freeze, no changes are allowed, which means our translators can start working. For this release, we’d like a bit of help proofing and checking the strings before we freeze them. + +One important milestone for any Mumble release is freezing the text-strings. After a freeze, no changes are allowed, +which means our translators can start working. For this release, we’d like a bit of help proofing and checking the +strings before we freeze them. The usual method for freezing strings is to export them all to a webpage, load that webpage into Word and use the spelling and grammar checker. This catches the worst mistakes, and there always are quite a few. However, it does not catch nuances of language, and it certainly doesn’t catch wrong information. -As I was looking through the strings for this release, I notice that the tooltip for the bitrate in the audiostats mention that you can adjust the bitrate by changing complexity in the audio settings. We replaced the complexity slider with a direct bitrate slider before 1.2.0, so that text has been wrong for quite a few releases. Thankfully, it appears nobody has noticed. +As I was looking through the strings for this release, I notice that the tooltip for the bitrate in the audiostats +mention that you can adjust the bitrate by changing complexity in the audio settings. We replaced the complexity slider +with a direct bitrate slider before 1.2.0, so that text has been wrong for quite a few releases. Thankfully, it appears +nobody has noticed. -Translations are one of the last hurdles before 1.2.3 ships, and since translations can’t start until strings are frozen, we need a bit of help. The dev team wrote these strings, and we’ve seen them so many times we aren’t really reading them anymore. It’s therefore hard for us to spot mistakes and errors. +Translations are one of the last hurdles before 1.2.3 ships, and since translations can’t start until strings are +frozen, we need a bit of help. The dev team wrote these strings, and we’ve seen them so many times we aren’t +really reading them anymore. It’s therefore hard for us to spot mistakes and errors. -So, if you find any spelling, grammar or textual logic errors in the current snapshot, or in the [exported strings][2], please let us know 🙂 +So, if you find any spelling, grammar or textual logic errors in the current snapshot, or in the [exported strings][2], +please let us know 🙂 **UPDATE:** Strings are frozen now. Thanks for your help. - [2]: https://www.mumble.info/en-ac2b6ca497387652bfe96ef75d444ac1cb622d76.html "Exported strings" +[2]: https://www.mumble.info/en-ac2b6ca497387652bfe96ef75d444ac1cb622d76.html "Exported strings" diff --git a/hugo/content/blog/2010-11-13-exterminate.md b/hugo/content/blog/2010-11-13-exterminate.md index 86b98328..0feb414f 100644 --- a/hugo/content/blog/2010-11-13-exterminate.md +++ b/hugo/content/blog/2010-11-13-exterminate.md @@ -6,19 +6,25 @@ categories: - Community tags: - Bugs - --- + Hello fellow Mumblers, -As you might have realised it has been quite some time since 1.2.2 was released and we are eager to take the next step: 1.2.3 stable. +As you might have realised it has been quite some time since 1.2.2 was released and we are eager to take the next step: +1.2.3 stable. -Unfortunately there is one tricky thing about stable releases: They should be stable 🙂 With now more than [190.000 users][1] using 1.2.2 we cannot risk pushing something out there that breaks what used to work or behaves erratically in other obvious ways. This is why we need **YOUR HELP**. +Unfortunately there is one tricky thing about stable releases: They should be stable 🙂 With now more than [190.000 +users][1] using 1.2.2 we cannot risk pushing something out there that breaks what used to work or behaves erratically in +other obvious ways. This is why we need **YOUR HELP**. -In our quest to exterminate each and every bug in Mumble, a quest at least as futile as honorable in software development, we rely on bugreports from you. If you want a quick and stable 1.2.3 release, then get one of our snapshots and test it. If you find a bug please visit our [bugtracker][2] and, unless there already is one, create a ticket. Please remember that for us to be able to fix the bug we will need as much information on it as possible. +In our quest to exterminate each and every bug in Mumble, a quest at least as futile as honorable in software +development, we rely on bugreports from you. If you want a quick and stable 1.2.3 release, then get one of our snapshots +and test it. If you find a bug please visit our [bugtracker][2] and, unless there already is one, create a ticket. +Please remember that for us to be able to fix the bug we will need as much information on it as possible. Thanks, The Mumble Team - [1]: http://www.sjuengling.de/mus/ - [2]: https://github.com/mumble-voip/mumble/issues/ +[1]: http://www.sjuengling.de/mus/ +[2]: https://github.com/mumble-voip/mumble/issues/ diff --git a/hugo/content/blog/2010-12-05-mumble-1-2-3-rc-released.md b/hugo/content/blog/2010-12-05-mumble-1-2-3-rc-released.md index b140409b..e84f5c12 100644 --- a/hugo/content/blog/2010-12-05-mumble-1-2-3-rc-released.md +++ b/hugo/content/blog/2010-12-05-mumble-1-2-3-rc-released.md @@ -7,9 +7,12 @@ categories: tags: - Bugs - rc - --- -We are happy to announce the release of the first Release Candidate of the upcoming Mumble 1.2.3. As the name implies we consider this release to be ready to be a stable version. If no show stoppers pop up the candidate will be re-released as stable soon. If you find any issues please report them asap or they will be in the stable release. + +We are happy to announce the release of the first Release Candidate of the upcoming Mumble 1.2.3. As the name implies we +consider this release to be ready to be a stable version. If no show stoppers pop up the candidate will be re-released +as stable soon. If you find any issues please report them asap or +they will be in the stable release.   diff --git a/hugo/content/blog/2011-01-23-mumble-1-2-3-rc2-released.md b/hugo/content/blog/2011-01-23-mumble-1-2-3-rc2-released.md index c836d37e..b9d2227f 100644 --- a/hugo/content/blog/2011-01-23-mumble-1-2-3-rc2-released.md +++ b/hugo/content/blog/2011-01-23-mumble-1-2-3-rc2-released.md @@ -6,14 +6,16 @@ categories: - Release tags: - rc - --- -We just released our next Release Candidate: Mumble 1.2.3 RC2. This Candidate is pretty much what most of the people using the latest Snapshots have been using the last weeks and we consider it to be very reliable. + +We just released our next Release Candidate: Mumble 1.2.3 RC2. This Candidate is pretty much what most of the people +using the latest Snapshots have been using the last weeks and we consider it to be very reliable. As always the download can be found on our webpage at . If you want to know what exactly was changed since the last RC you can find our commitlog [here][1]. -Thanks to all the people that tested RC1 and reported bugs. Without you quite a few release critical bugs would have slipped through. Kudos to you all. +Thanks to all the people that tested RC1 and reported bugs. Without you quite a few release critical bugs would have +slipped through. Kudos to you all. - [1]: http://mumble.git.sourceforge.net/git/gitweb.cgi?p=mumble/mumble;a=shortlog +[1]: http://mumble.git.sourceforge.net/git/gitweb.cgi?p=mumble/mumble;a=shortlog diff --git a/hugo/content/blog/2011-02-17-upcoming-1-2-3-release.md b/hugo/content/blog/2011-02-17-upcoming-1-2-3-release.md index 876c8e99..b70c288e 100644 --- a/hugo/content/blog/2011-02-17-upcoming-1-2-3-release.md +++ b/hugo/content/blog/2011-02-17-upcoming-1-2-3-release.md @@ -4,14 +4,17 @@ author: .D0T date: 2011-02-17T06:51:44+00:00 categories: - Release - --- -We have been closely monitoring our bug trackers and crash reporting database and have come to the conclusion that it is time to get Mumble 1.2.3 out there. -Since we had some minor code changes since the last RC we want to give the code a few more days to cool down and **we plan to release Mumble 1.2.3 stable the upcoming weekend**. +We have been closely monitoring our bug trackers and crash reporting database and have come to the conclusion that it is +time to get Mumble 1.2.3 out there. + +Since we had some minor code changes since the last RC we want to give the code a few more days to cool down and **we +plan to release Mumble 1.2.3 stable the upcoming weekend**. -We hope you’ll enjoy our new release. Snapshots/RC users will receive auto updates to stable. Mumble 1.2.2 stable users will see the usual update notification. Of course there will also be another blog entry 😉 +We hope you’ll enjoy our new release. Snapshots/RC users will receive auto updates to stable. Mumble 1.2.2 stable +users will see the usual update notification. Of course there will also be another blog entry 😉 Regards, - + The Mumble Team diff --git a/hugo/content/blog/2011-02-19-mumble-1-2-3-released.md b/hugo/content/blog/2011-02-19-mumble-1-2-3-released.md index 8bd3ca9d..3005e458 100644 --- a/hugo/content/blog/2011-02-19-mumble-1-2-3-released.md +++ b/hugo/content/blog/2011-02-19-mumble-1-2-3-released.md @@ -4,30 +4,33 @@ author: .D0T date: 2011-02-19T23:50:16+00:00 categories: - Release - --- -After a rather long development cycle we are proud to present: Mumble 1.2.3 stable. This stable marks the fourth release in our 1.2.X Mumble series and besides ton of bug-fixes introduces some long awaited features like [recording][2], priority speakers {{< wiki "1.2.3" "and more" />}}. + +After a rather long development cycle we are proud to present: Mumble 1.2.3 stable. This stable marks the fourth release +in our 1.2.X Mumble series and besides ton of bug-fixes introduces some long awaited features like [recording][2], +priority speakers {{< wiki "1.2.3" "and more" />}}. The following Mumble 1.2.3 stable packages are available for download: -* [Windows Client + Server][4] -* [MacOSX Client + Server][5] -* [Linux Server binaries][6] -* [Source release (.tar.gz)][7] +- [Windows Client + Server][4] +- [MacOSX Client + Server][5] +- [Linux Server binaries][6] +- [Source release (.tar.gz)][7] All of those can also be found on our [homepage][8]. We also have Ubuntu -Special thanks to our community for their contributions to code, documentation, support and testing as well as the many great ideas they have come up with. +Special thanks to our community for their contributions to code, documentation, support and testing as well as the many +great ideas they have come up with. Your, Mumble Team - [2]: http://blog.mumble.info/for-the-record/ - [4]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/mumble-1.2.3.msi/download - [5]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/Mumble-1.2.3.dmg/download - [6]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/murmur-static_x86-1.2.3.tar.bz2/download - [7]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/mumble-1.2.3.tar.gz/download - [8]: https://www.mumble.info +[2]: http://blog.mumble.info/for-the-record/ +[4]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/mumble-1.2.3.msi/download +[5]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/Mumble-1.2.3.dmg/download +[6]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/murmur-static_x86-1.2.3.tar.bz2/download +[7]: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3/mumble-1.2.3.tar.gz/download +[8]: https://www.mumble.info diff --git a/hugo/content/blog/2011-09-26-back-online.md b/hugo/content/blog/2011-09-26-back-online.md index 1a73be4a..f35ac434 100644 --- a/hugo/content/blog/2011-09-26-back-online.md +++ b/hugo/content/blog/2011-09-26-back-online.md @@ -6,9 +6,12 @@ categories: - News tags: - outage - --- -After a 43 hour outage (4pm CET 24.09.11 till 11am CET 26.09.11) our services are up and running again. The outage caused by a cascading hardware failure destroyed, among other things, our servers back-plane and RAID-controller. To replace the defunct parts we had to rely on remote hands to provision replacements and do the repairs lengthening the process. + +After a 43 hour outage (4pm CET 24.09.11 till 11am CET 26.09.11) our services are up and running again. The outage +caused by a cascading hardware failure destroyed, among other things, our servers back-plane and RAID-controller. To +replace the defunct parts we had to rely on remote hands to provision replacements and do the repairs lengthening the +process. No data was lost in this incident (yes we would have had backups ;-)) and we are fully operational again. @@ -26,10 +29,16 @@ Original announcement: > Blog and mumble public server list down > -> As you might have noticed the mumble public server list is currently unavailable. Around 16:00 CET this saturday the box serving mumble.info, this includes our blog and the public server list, became unresponsive. Remote diagnostics reports a dual disc failure as well as an backup battery failure in the servers raid-5. Efforts to try to remotely recover the server showed that the drives themselves are probably intact while the server itself is unstable at hardware level. +> As you might have noticed the mumble public server list is currently unavailable. Around 16:00 CET this saturday the +> box serving mumble.info, this includes our blog and the public server list, became unresponsive. Remote diagnostics +> reports a dual disc failure as well as an backup battery failure in the servers raid-5. Efforts to try to remotely +> recover the server showed that the drives themselves are probably intact while the server itself is unstable at +> hardware level. > -> At this point we believe we will have to rely on remote hands to recover the data and to repair or even replace the server. Unfortunately our read-only cache we usually could fail over to is currently not available either. +> At this point we believe we will have to rely on remote hands to recover the data and to repair or even replace the +> server. Unfortunately our read-only cache we usually could fail over to is currently not available either. > -> So what does this mean? It will probably take us some time to get our services back online. Until this time neither our blog nor the public server list will be available. We apologize for any inconvenience this may cause. +> So what does this mean? It will probably take us some time to get our services back online. Until this time neither +> our blog nor the public server list will be available. We apologize for any inconvenience this may cause. > > Your Mumble team diff --git a/hugo/content/blog/2011-10-29-snapshot-auto-update-ooopss.md b/hugo/content/blog/2011-10-29-snapshot-auto-update-ooopss.md index 0d08e122..ed5b291b 100644 --- a/hugo/content/blog/2011-10-29-snapshot-auto-update-ooopss.md +++ b/hugo/content/blog/2011-10-29-snapshot-auto-update-ooopss.md @@ -6,10 +6,12 @@ categories: - News tags: - snapshot - --- -We noticed a medium sized ooops in Mumble today. It seems that in February this year a regression slipped in that broke automatic update checks for snapshot builds. The regression is now fixed. -We recommend all snapshot users to update to the new version by manually triggering an update check via “Help->Check for Update”. +We noticed a medium sized ooops in Mumble today. It seems that in February this year a regression slipped in that broke +automatic update checks for snapshot builds. The regression is now fixed. + +We recommend all snapshot users to update to the new version by manually triggering an update check via +“Help->Check for Update”. Sorry for the inconvenience. diff --git a/hugo/content/blog/2012-01-15-important-update-to-mumble-1-2-3a.md b/hugo/content/blog/2012-01-15-important-update-to-mumble-1-2-3a.md index 3cffa657..54c0f798 100644 --- a/hugo/content/blog/2012-01-15-important-update-to-mumble-1-2-3a.md +++ b/hugo/content/blog/2012-01-15-important-update-to-mumble-1-2-3a.md @@ -1,16 +1,23 @@ --- -title: 'IMPORTANT: Update to Mumble 1.2.3a' +title: "IMPORTANT: Update to Mumble 1.2.3a" author: .D0T date: 2012-01-15T11:45:47+00:00 categories: - News - --- -Due to an expiring certificate no Mumble 1.2.2 or newer released before today (15.01.2012) will work on the Windows Platform after 15 January 2012 11:36:47 GMT. If such an outdated Mumble is launched after that date the error message “A referral was returned by the server” will be displayed by Windows and Mumble will not start. + +Due to an expiring certificate no Mumble 1.2.2 or newer released before today (15.01.2012) will work on the Windows +Platform after 15 January 2012 11:36:47 GMT. If such an outdated Mumble is launched after that date the error message +“A referral was returned by the server” will be displayed by Windows and Mumble will not start. **You can get fixed installers from [from our project page][1].** -You can get the fixed Mumble 1.2.3a stable installer from:
http://sourceforge.net/projects/mumble/files/Mumble/1.2.3a/mumble-1.2.3a.msi/download (uninstall 1.2.3 stable first).
An updated installer for the snapshot version is available from: https://mumble.info/snapshot/mumble-1.2.3-271-gca8b25c.msi
You can also download a fixed Mumble.exe for the 1.2.3 stable from: http://sourceforge.net/projects/mumble/files/Mumble/1.2.3a/mumble-1.2.3-resigned-binary.zip/download
+You can get the fixed Mumble 1.2.3a stable installer from:
+http://sourceforge.net/projects/mumble/files/Mumble/1.2.3a/mumble-1.2.3a.msi/download (uninstall +1.2.3 stable first).
An updated installer for the snapshot version is available from: +https://mumble.info/snapshot/mumble-1.2.3-271-gca8b25c.msi
+You can also download a fixed Mumble.exe for the 1.2.3 stable from: +http://sourceforge.net/projects/mumble/files/Mumble/1.2.3a/mumble-1.2.3-resigned-binary.zip/download
We are sorry for the inconvenience this may cause. We will follow up with a more detailed explanation later. @@ -18,4 +25,4 @@ Regards, The Mumble team - [1]: https://mumble.info +[1]: https://mumble.info diff --git a/hugo/content/blog/2012-02-12-mumble-for-ios-1-0.md b/hugo/content/blog/2012-02-12-mumble-for-ios-1-0.md index 6595c087..33a76602 100644 --- a/hugo/content/blog/2012-02-12-mumble-for-ios-1-0.md +++ b/hugo/content/blog/2012-02-12-mumble-for-ios-1-0.md @@ -4,57 +4,70 @@ author: mkrautz date: 2012-02-12T20:41:27+00:00 categories: - Release - --- + Today we’ve released [Mumble for iOS 1.0 on the App Store][1]. -This has been brewing for some time, but we are finally comfortable with calling this release 1.0, from both a feature and a UI perspective. The app is, of course, free of charge and open source. +This has been brewing for some time, but we are finally comfortable with calling this release 1.0, from both a feature +and a UI perspective. The app is, of course, free of charge and open source. -**UPDATE:** _The initial release was excluded from the App Store in France. We’ve since fixed this error, and apologize for any inconvenience this has caused!_ +**UPDATE:** _The initial release was excluded from the App Store in France. We’ve since fixed this error, and +apologize for any inconvenience this has caused!_ ## Availability -Mumble for iOS 1.0 runs on iPhone 3Gs, iPhone 4, iPhone 4s, iPod Touch 3rd Gen, iPod Touch 4th Gen, iPad and iPad 2. It requires iOS 5 or greater to run. +Mumble for iOS 1.0 runs on iPhone 3Gs, iPhone 4, iPhone 4s, iPod Touch 3rd Gen, iPod Touch 4th Gen, iPad and iPad 2. It +requires iOS 5 or greater to run. -The application is currently built for the phone form factor, and work is still ongoing to create a gorgeous iPad UI for it. +The application is currently built for the phone form factor, and work is still ongoing to create a gorgeous iPad UI for +it. ## Features -The 1.0 version of the application includes the functionality that is needed to get a typical Mumble user up and running on an iOS device. However, the client is not at feature parity with its desktop sibling just yet. Current features include: - -* Voice-Activity, Push-To-Talk and Continuous transmission modes. -* Ability to turn off audio preprocessing to save power (and reduce UI lag). This feature is provided mainly for users of iPhone 3Gs and iPod Touch 3rd Gen, where preprocessing is more taxing on the CPU. -* Codec presets (Low, Balanced and High), for selecting your Transmission Quality. -* Force TCP-mode for networks where that is required. -* Support for creating self-signed certificates on-device and using them to connect to a server. -* Support for importing certificates into the app from iTunes. Export to iTunes also possible. -* Support for connecting to passworded servers (using either a user password or a server password). -* Access token support for ‘password protected’ channels, and other access token trickeries. -* The same world-wide public server list that is available in the desktop Mumble client. -* Excellent favourite server support. -* Support for connecting to LAN servers discovered via Bonjour. -* Ability to join servers by opening mumble:// URLs -* Separate server and channel-only views for easier use on small screens. (Push-To-Talk only available in the channel view.) -* Support for self-muting and self-deafening. -* Support for sending and receiving text messages. +The 1.0 version of the application includes the functionality that is needed to get a typical Mumble user up and running +on an iOS device. However, the client is not at feature parity with its desktop sibling just yet. Current features +include: + +- Voice-Activity, Push-To-Talk and Continuous transmission modes. +- Ability to turn off audio preprocessing to save power (and reduce UI lag). This feature is provided mainly for users + of iPhone 3Gs and iPod Touch 3rd Gen, where preprocessing is more taxing on the CPU. +- Codec presets (Low, Balanced and High), for selecting your Transmission Quality. +- Force TCP-mode for networks where that is required. +- Support for creating self-signed certificates on-device and using them to connect to a server. +- Support for importing certificates into the app from iTunes. Export to iTunes also possible. +- Support for connecting to passworded servers (using either a user password or a server password). +- Access token support for ‘password protected’ channels, and other access token trickeries. +- The same world-wide public server list that is available in the desktop Mumble client. +- Excellent favourite server support. +- Support for connecting to LAN servers discovered via Bonjour. +- Ability to join servers by opening mumble:// URLs +- Separate server and channel-only views for easier use on small screens. (Push-To-Talk only available in the channel + view.) +- Support for self-muting and self-deafening. +- Support for sending and receiving text messages. (A similar list of features, but tailored towards the casual AppStore app-cruising user is available [here][1]) -We have tried hard to include the features that a regular, non-administrator user of Mumble would use on a day-to-day basis, and we think we have mostly succeeded in that. However, not everything we would like to have available at launch is there. These missing features are: +We have tried hard to include the features that a regular, non-administrator user of Mumble would use on a day-to-day +basis, and we think we have mostly succeeded in that. However, not everything we would like to have available at launch +is there. These missing features are: -* Self-registration -* Local muting other people -* Viewing channel comments and setting and viewing user comments +- Self-registration +- Local muting other people +- Viewing channel comments and setting and viewing user comments We’re aware that these features are nice-to-haves, and will work on making these available as soon as we can. ## The Future -For the immediate future, we are working on implementing the above list of missing features, and fixing the bugs and crashes that are found in the wild by users of the 1.0 version of the application. +For the immediate future, we are working on implementing the above list of missing features, and fixing the bugs +and crashes that are found in the wild by users of the 1.0 version of the application. -As mentioned earlier in this blog post, we also plan to implement a UI for the iPad. Along with this, we hope to add many of the administrative features found in the desktop Mumble client. The improved screen real-estate available on the iPad makes the implementation of these features preferable to do on the iPad first. +As mentioned earlier in this blog post, we also plan to implement a UI for the iPad. Along with this, we hope to +add many of the administrative features found in the desktop Mumble client. The improved screen real-estate available +on the iPad makes the implementation of these features preferable to do on the iPad first. ## Feature Requests and Bug Reports @@ -66,7 +79,8 @@ Feature requests are welcome on there, as well. ## Concluding Remarks -We hope that you will enjoy using the app as much as we have enjoyed creating it. If you like it, _do not forget to rate it in the App Store_. +We hope that you will enjoy using the app as much as we have enjoyed creating it. If you like it, _do not forget to rate +it in the App Store_. The app, like the Mumble desktop client, is Open Source, available under a BSD-style license. @@ -82,5 +96,5 @@ Regards, The Mumble Team - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://github.com/mumble-voip/mumble-iphoneos +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://github.com/mumble-voip/mumble-iphoneos diff --git a/hugo/content/blog/2012-04-26-mumble-for-ios-1-1.md b/hugo/content/blog/2012-04-26-mumble-for-ios-1-1.md index 2616820f..11075a45 100644 --- a/hugo/content/blog/2012-04-26-mumble-for-ios-1-1.md +++ b/hugo/content/blog/2012-04-26-mumble-for-ios-1-1.md @@ -10,43 +10,52 @@ categories: - Release tags: - ios - --- + Today we’re releasing version 1.1 of the Mumble iOS app on the App Store. -This release addresses quite a few of the most sought-after features missing from the 1.0 version, along with fixes for various crashes and memory leaks. +This release addresses quite a few of the most sought-after features missing from the 1.0 version, along with fixes for +various crashes and memory leaks. ## **New Features** -* An improved icon for the app. Thanks Karsten Bruns! -* Searchable public server list. Thanks Jimmy Selgen Nielsen! -* Bluetooth headset support. -* Echo Cancellation support for the built-in mic. -* Improved Push-to-Talk configurability and discoverability. -* Self-registration is now supported. -* Intermediate certificates can now, optionally, be shown in the Certificate Preferences. Intermediate certificates are colored green. Identities keep their yellow color. -* When exporting a certificate for which a chain can be built, the whole chain will be exported. -* Improved crash reporting. After a crash, the app will allow you to submit a crash report directly to the Mumble Developers. An ‘Always’ option is also available, and we hope users will make use of this feature. +- An improved icon for the app. Thanks Karsten Bruns! +- Searchable public server list. Thanks Jimmy Selgen Nielsen! +- Bluetooth headset support. +- Echo Cancellation support for the built-in mic. +- Improved Push-to-Talk configurability and discoverability. +- Self-registration is now supported. +- Intermediate certificates can now, optionally, be shown in the Certificate Preferences. Intermediate certificates are + colored green. Identities keep their yellow color. +- When exporting a certificate for which a chain can be built, the whole chain will be exported. +- Improved crash reporting. After a crash, the app will allow you to submit a crash report directly to the Mumble + Developers. An ‘Always’ option is also available, and we hope users will make use of this feature. ## **Bug Fixes** -* Various crash bugs have been fixed. -* Various memory leaks have been plugged. Thanks Jimmy Selgen Nielsen! -* The 1.0 version of the app failed to parse some Distinguished Names from X.509 certificates. A more solid DN parser has been implemented. -* When connecting to a server, the client will now attempt to build up a full certificate chain using certificates found in the app’s keychain. -* Importing a PKCS #12 file now correctly imports an identity (certificate and private key), along with all intermediate certificates. -* All action sheets in the app have been converted to black to better fit in with the rest of the app. -* Transitioning between the Channel view and a modal view, such as Access Tokens, now provides a better visual experience. -* The mumble.sqlite database is no longer a hidden file in ~/Documents. It now lives in ~/Library. -* The public server list file is no longer a hidden file in ~/Documents. It now lives in ~/Library. - -Mumble for iOS is Open Source software released under the BSD license. We’re always looking for new contributors, and valuable feedback from the community. We’d like to thank the people who’ve reported bugs, and helped beta test the 1.1 release. +- Various crash bugs have been fixed. +- Various memory leaks have been plugged. Thanks Jimmy Selgen Nielsen! +- The 1.0 version of the app failed to parse some Distinguished Names from X.509 certificates. A more solid DN parser + has been implemented. +- When connecting to a server, the client will now attempt to build up a full certificate chain using certificates found + in the app’s keychain. +- Importing a PKCS #12 file now correctly imports an identity (certificate and private key), along with all intermediate + certificates. +- All action sheets in the app have been converted to black to better fit in with the rest of the app. +- Transitioning between the Channel view and a modal view, such as Access Tokens, now provides a better visual + experience. +- The mumble.sqlite database is no longer a hidden file in ~/Documents. It now lives in ~/Library. +- The public server list file is no longer a hidden file in ~/Documents. It now lives in ~/Library. + +Mumble for iOS is Open Source software released under the BSD license. We’re always looking for new contributors, +and valuable feedback from the community. We’d like to thank the people who’ve reported bugs, and helped +beta test the 1.1 release. Head on over to the app’s [GitHub repository][2] if you too are interested in contributing! And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://github.com/mumble-voip/mumble-iphoneos +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://github.com/mumble-voip/mumble-iphoneos diff --git a/hugo/content/blog/2012-09-11-opus-codec-now-ietf-standard-rfc-6716.md b/hugo/content/blog/2012-09-11-opus-codec-now-ietf-standard-rfc-6716.md index 41b38037..c676e0a4 100644 --- a/hugo/content/blog/2012-09-11-opus-codec-now-ietf-standard-rfc-6716.md +++ b/hugo/content/blog/2012-09-11-opus-codec-now-ietf-standard-rfc-6716.md @@ -4,10 +4,12 @@ author: .D0T date: 2012-09-11T20:00:01+00:00 categories: - Tech talk - --- -Mumble’s future primary codec Opus is now an official IETF standard ([RFC 6716][1]) and its reference implementations officially released. This is very good news for the Web as well as Mumble. If you want to figure out more about this new codec take a look at the announcements of [Mozilla][2] and the [Xiph.Org Foundation][3] . - [1]: https://tools.ietf.org/html/rfc6716 - [2]: https://hacks.mozilla.org/2012/09/its-opus-it-rocks-and-now-its-an-audio-codec-standard/ - [3]: https://xiph.org/press/2012/rfc-6716/ +Mumble’s future primary codec Opus is now an official IETF standard ([RFC 6716][1]) and its reference +implementations officially released. This is very good news for the Web as well as Mumble. If you want to figure out +more about this new codec take a look at the announcements of [Mozilla][2] and the [Xiph.Org Foundation][3] . + +[1]: https://tools.ietf.org/html/rfc6716 +[2]: https://hacks.mozilla.org/2012/09/its-opus-it-rocks-and-now-its-an-audio-codec-standard/ +[3]: https://xiph.org/press/2012/rfc-6716/ diff --git a/hugo/content/blog/2012-09-20-mumble-for-ios-1-1-1.md b/hugo/content/blog/2012-09-20-mumble-for-ios-1-1-1.md index 84841f90..3e45678e 100644 --- a/hugo/content/blog/2012-09-20-mumble-for-ios-1-1-1.md +++ b/hugo/content/blog/2012-09-20-mumble-for-ios-1-1-1.md @@ -6,14 +6,16 @@ categories: - Release tags: - ios - --- - We’ve released an emergency iOS 6 bug fix for the Mumble iOS client today — Mumble for iOS 1.1.1. -It works around a compatibility issue with iOS 6 that caused users to be silent when transmitting audio. A few other crash bugs have also been fixed in the 1.1.1 release. +We’ve released an emergency iOS 6 bug fix for the Mumble iOS client today — Mumble for iOS 1.1.1. + +It works around a compatibility issue with iOS 6 that caused users to be silent when transmitting audio. A few other +crash bugs have also been fixed in the 1.1.1 release. Along with that, the new version of the app uses the latest version of MumbleKit. -As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. +As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, +and remember to rate it in the App Store. - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 diff --git a/hugo/content/blog/2012-10-28-call-for-translations.md b/hugo/content/blog/2012-10-28-call-for-translations.md index 120c6db3..b4a8e8dd 100644 --- a/hugo/content/blog/2012-10-28-call-for-translations.md +++ b/hugo/content/blog/2012-10-28-call-for-translations.md @@ -4,11 +4,12 @@ author: .D0T date: 2012-10-28T21:43:00+00:00 categories: - News - --- + Hi, -Mumble version 1.2.4 is now feature complete. Accordingly we have entered string freeze before the upcoming release. This means there will be no new text added or replaced before the release. +Mumble version 1.2.4 is now feature complete. Accordingly we have entered string freeze before the upcoming release. +This means there will be no new text added or replaced before the release. Our translation guide can be found at {{< wiki "Language Translation" />}}. @@ -18,7 +19,8 @@ might want to take a look at. You can find it in our wiki at {{< wiki "Windows i We are looking forward to your translations, updates and fixes. -If you have any questions or suggestions feel free to send them to the translators mailing list or hit us up on IRC in #mumble on freenode. +If you have any questions or suggestions feel free to send them to the translators mailing list or hit us up on IRC in +#mumble on freenode. Regards, diff --git a/hugo/content/blog/2012-11-15-announcing-mumble-1-2-4-beta.md b/hugo/content/blog/2012-11-15-announcing-mumble-1-2-4-beta.md index fc8c8cc8..3466417c 100644 --- a/hugo/content/blog/2012-11-15-announcing-mumble-1-2-4-beta.md +++ b/hugo/content/blog/2012-11-15-announcing-mumble-1-2-4-beta.md @@ -8,17 +8,18 @@ tags: - beta - feature - translation - --- + The Mumble team is proud to announce the first beta of Mumble 1.2.4. This is a big step towards the next stable release in the 1.2 series. -Now is a good time to try the {{< wiki Upcoming new />}} and old features and report back to us about any issues you can find. +Now is a good time to try the {{< wiki Upcoming new />}} and old features and report back to us about any issues you can +find. You can get the 1.2.4 beta from our page at [www.mumble.info][2]. We would also like to encourage you again to [translate Mumble][3] to your native language. - [2]: https://www.mumble.info - [3]: http://blog.mumble.info/call-for-translations/ +[2]: https://www.mumble.info +[3]: http://blog.mumble.info/call-for-translations/ diff --git a/hugo/content/blog/2013-01-15-mumble-1-2-4-rc.md b/hugo/content/blog/2013-01-15-mumble-1-2-4-rc.md index 7429b96d..e2508031 100644 --- a/hugo/content/blog/2013-01-15-mumble-1-2-4-rc.md +++ b/hugo/content/blog/2013-01-15-mumble-1-2-4-rc.md @@ -7,14 +7,16 @@ categories: tags: - Bugs - rc - --- -Thanks to your help we have been able to resolve quite a few issues since entering beta for 1.2.4. We have now reached a point where we feel confident putting out a release candidate for the new version. + +Thanks to your help we have been able to resolve quite a few issues since entering beta for 1.2.4. We have now reached a +point where we feel confident putting out a release candidate for the new version. Unless any new, release-critical, issues are found we plan to release the actual Mumble 1.2.4 stable shortly. As always you can find the download at [mumble.info][1]. -**EDIT:** We (finally) resolved our build system issues and barring any unexpected blockers appearing we will release Mumble 1.2.4 this Saturday (1st June, 2013) evening (CEST). Sorry for the delay. +**EDIT:** We (finally) resolved our build system issues and barring any unexpected blockers appearing we will release +Mumble 1.2.4 this Saturday (1st June, 2013) evening (CEST). Sorry for the delay. - [1]: https://mumble.info +[1]: https://mumble.info diff --git a/hugo/content/blog/2013-06-01-mumble-1-2-4-released.md b/hugo/content/blog/2013-06-01-mumble-1-2-4-released.md index 43435783..7baf64f3 100644 --- a/hugo/content/blog/2013-06-01-mumble-1-2-4-released.md +++ b/hugo/content/blog/2013-06-01-mumble-1-2-4-released.md @@ -4,26 +4,36 @@ author: .D0T date: 2013-06-01T22:13:27+00:00 categories: - Release - --- + The Mumble team is proud to announce the release of version 1.2.4 of the Mumble VoIP application. -With this new version we are introducing the revolutionary [Opus][1] [audio codec][2], Windows 8 support and many other improvements over our last stable release (see the {{< wiki "1.2.4" "Mumble 1.2.4" />}} wiki page for more information). Opus is now the primary audio codec of choice for Mumble. +With this new version we are introducing the revolutionary [Opus][1] [audio codec][2], Windows 8 support and many other +improvements over our last stable release (see the {{< wiki "1.2.4" "Mumble 1.2.4" />}} wiki page for more information). +Opus is now the primary audio codec of choice for Mumble. -We are also happy to see our positional audio technology seeing wider adoption in the gaming world with Valve including support in many of their source engine games. Namely Team Fortress 2, Half-Life 2: Deathmatch, Counter-Strike: Source and Day of Defeat: Source on all supported platforms including Linux and Mac OS X. +We are also happy to see our positional audio technology seeing wider adoption in the gaming world with Valve including +support in many of their source engine games. Namely Team Fortress 2, Half-Life 2: Deathmatch, Counter-Strike: Source +and Day of Defeat: Source on all supported platforms including Linux and Mac OS X. -Positional audio allows you to hear your teammates from the position they are in-game without any changes to your Mumble server. On any game server. For more information about how it works and how to activate it visit our {{< wiki "Positional-Audio" "Positional audio" />}} wiki page. +Positional audio allows you to hear your teammates from the position they are in-game without any changes to your Mumble +server. On any game server. For more information about how it works and how to activate it visit our +{{< wiki "Positional-Audio" "Positional audio" />}} wiki page. -Positional audio information can be used by the Mumble server to even greater effect. To show the power of this technology we have also released a Source engine game-specific plugin for the mumo server-side scripting framework for Mumble. To find out more about that visit the {{< wiki Mumo_source "Mumo Source plugin" />}} wiki page. +Positional audio information can be used by the Mumble server to even greater effect. To show the power of this +technology we have also released a Source engine game-specific plugin for the mumo server-side scripting framework for +Mumble. To find out more about that visit the {{< wiki Mumo_source "Mumo Source plugin" />}} wiki page. -As always you can find the new release on our web site at . If you have any questions or comments visit our [forums][6] or join our IRC channel #mumble on freenode.org . +As always you can find the new release on our web site at . If you have any questions or +comments visit our [forums][6] or join our IRC channel #mumble on freenode.org . -For a list of known issues and their workarounds, please consult the {{< wiki "1.2.4 Known Issues" "known issues page" />}} for the 1.2.4 release on the Mumble wiki. +For a list of known issues and their workarounds, please consult the +{{< wiki "1.2.4 Known Issues" "known issues page" />}} for the 1.2.4 release on the Mumble wiki. The Mumble team - [1]: https://www.opus-codec.org/ - [2]: https://en.wikipedia.org/wiki/Audio_codec - [6]: https://forums.mumble.info/ +[1]: https://www.opus-codec.org/ +[2]: https://en.wikipedia.org/wiki/Audio_codec +[6]: https://forums.mumble.info/ diff --git a/hugo/content/blog/2013-06-11-mumble-for-ios-1-2.md b/hugo/content/blog/2013-06-11-mumble-for-ios-1-2.md index a74e3ae0..28065403 100644 --- a/hugo/content/blog/2013-06-11-mumble-for-ios-1-2.md +++ b/hugo/content/blog/2013-06-11-mumble-for-ios-1-2.md @@ -6,8 +6,8 @@ categories: - Release tags: - ios - --- + Earlier today, we released [Mumble for iOS 1.2][1]. This release is compatible with the 1.2.4 protocol and includes support for the Opus codec. @@ -16,7 +16,8 @@ It also fixes many of the most irritating bugs people have found and reported wi -As usual, the source code is availble on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of any kind are warmly appreciated. +As usual, the source code is availble on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of any kind are +warmly appreciated. The full list of changes in Mumble for iOS 1.2: @@ -46,16 +47,19 @@ User Interface: • The channel-only view mode tab has been removed. -• Clicking the Mumble icon when connected to a server will now toggle between showing all channels, and the one you are in. +• Clicking the Mumble icon when connected to a server will now toggle between showing all channels, and the one you are +in. Bug fixes: -• The bug that caused the ‘red bar’ to appear randomly when using Mumble along with Bluetooth accessories, Siri, or other audio apps has been fixed. +• The bug that caused the ‘red bar’ to appear randomly when using Mumble along with Bluetooth accessories, +Siri, or other audio apps has been fixed. • Various minor bug fixes. -As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. +As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and +remember to rate it in the App Store. - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://github.com/mumble-voip/mumble-iphoneos - [3]: https://github.com/mumble-voip/mumblekit +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://github.com/mumble-voip/mumble-iphoneos +[3]: https://github.com/mumble-voip/mumblekit diff --git a/hugo/content/blog/2013-06-20-mumble-for-ios-1-2-1.md b/hugo/content/blog/2013-06-20-mumble-for-ios-1-2-1.md index 013f6f0f..c608e3bc 100644 --- a/hugo/content/blog/2013-06-20-mumble-for-ios-1-2-1.md +++ b/hugo/content/blog/2013-06-20-mumble-for-ios-1-2-1.md @@ -6,19 +6,25 @@ categories: - Release tags: - ios - --- -Today, we’ll be releasing [Mumble for iOS 1.2.1][1]. This is a minor bug fix release to the 1.2 release we did earlier this month. -We found a nasty race condition which could cause crashes when the audio subsystem of the app was started or restarted. This bug seemed to happen very often on 4th generation iPod Touch devices, but could happen on all iOS devices with some bad luck. +Today, we’ll be releasing [Mumble for iOS 1.2.1][1]. This is a minor bug fix release to the 1.2 release we did +earlier this month. + +We found a nasty race condition which could cause crashes when the audio subsystem of the app was started or restarted. +This bug seemed to happen very often on 4th generation iPod Touch devices, but could happen on all iOS devices with some +bad luck. -We also fixed an issue where users using the “Low” quality preset would be unable to speak to others when on a 1.2.4 server in Opus mode.  To allow the “Low” quality to mode +We also fixed an issue where users using the “Low” quality preset would be unable to speak to others when on +a 1.2.4 server in Opus mode.  To allow the “Low” quality to mode -to work correctly on all servers, we’ve changed it to use Opus in Opus mode, and CELT 0.7 (our baseline codec) on everything else. Previously, we always used Speex for it. +to work correctly on all servers, we’ve changed it to use Opus in Opus mode, and CELT 0.7 (our baseline codec) on +everything else. Previously, we always used Speex for it. -As usual, the source code for the app is available on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of any kind are warmly appreciated. +As usual, the source code for the app is available on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of +any kind are warmly appreciated. The full list of changes in Mumble for iOS 1.2.1: @@ -30,8 +36,9 @@ The full list of changes in Mumble for iOS 1.2.1: • Fixed several crash bugs which were triggered when using the the ‘Low’ audio quality mode. -As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. +As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and +remember to rate it in the App Store. - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://github.com/mumble-voip/mumble-iphoneos - [3]: https://github.com/mumble-voip/mumblekit +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://github.com/mumble-voip/mumble-iphoneos +[3]: https://github.com/mumble-voip/mumblekit diff --git a/hugo/content/blog/2013-09-20-mumble-for-ios-1-2-2.md b/hugo/content/blog/2013-09-20-mumble-for-ios-1-2-2.md index 88e0a6aa..f451a933 100644 --- a/hugo/content/blog/2013-09-20-mumble-for-ios-1-2-2.md +++ b/hugo/content/blog/2013-09-20-mumble-for-ios-1-2-2.md @@ -6,17 +6,23 @@ categories: - Release tags: - ios - --- -This Wednesday, to coincide with the release of iOS 7, we released [Mumble for iOS 1.2.2][1]. This is a primarily a release to fix incompatibilities with iOS 7, but it also includes a few other oft-requested goodies. + +This Wednesday, to coincide with the release of iOS 7, we released [Mumble for iOS 1.2.2][1]. This is a primarily a +release to fix incompatibilities with iOS 7, but it also includes a few other oft-requested goodies. -Running the previous version of Mumble for iOS (1.2.1) on iPhone 4S or iPhone 5 with iOS 7, the app could sometimes get into a state where no audio would be recorded. This is the primary compatibility issue that this new 1.2.2 release addresses, and we recommend you upgrade as soon as you get the chance. +Running the previous version of Mumble for iOS (1.2.1) on iPhone 4S or iPhone 5 with iOS 7, the app could sometimes get +into a state where no audio would be recorded. This is the primary compatibility issue that this new 1.2.2 release +addresses, and we recommend you upgrade as soon as you get the chance. -We’ve also added a speakerphone toggle in the app’s preferences. This allows you to change whether Mumble will output to your iPhone’s speaker or its receiver, allowing you to use it more like a regular mobile phone if you please. +We’ve also added a speakerphone toggle in the app’s preferences. This allows you to change whether Mumble +will output to your iPhone’s speaker or its receiver, allowing you to use it more like a regular mobile phone if +you please. -As usual, the source code for the app is available on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of any kind are warmly appreciated. +As usual, the source code for the app is available on GitHub ([Mumble for iOS][2], [MumbleKit][3]), and contributions of +any kind are warmly appreciated. The full list of changes in Mumble for iOS 1.2.2: @@ -26,10 +32,12 @@ The full list of changes in Mumble for iOS 1.2.2: • Speakerphone mode is now optional (a preference). -• Mumble now forces CELT mode when using Opus, for performance reasons. This can be disabled in the app’s preferences. +• Mumble now forces CELT mode when using Opus, for performance reasons. This can be disabled in the app’s +preferences. -As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. +As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and +remember to rate it in the App Store. - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://github.com/mumble-voip/mumble-iphoneos - [3]: https://github.com/mumble-voip/mumblekit +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://github.com/mumble-voip/mumble-iphoneos +[3]: https://github.com/mumble-voip/mumblekit diff --git a/hugo/content/blog/2014-02-05-mumble-1-2-5.md b/hugo/content/blog/2014-02-05-mumble-1-2-5.md index 7e476420..40a1c452 100644 --- a/hugo/content/blog/2014-02-05-mumble-1-2-5.md +++ b/hugo/content/blog/2014-02-05-mumble-1-2-5.md @@ -5,37 +5,43 @@ date: 2014-02-05T15:00:13+00:00 categories: - Release - Security - --- + The Mumble team has released version 1.2.5 of the Mumble VoIP application. -This new version contains two important client-side security fixes. We advise our users to download this update as soon as possible from our SourceForge downloads page: +This new version contains two important client-side security fixes. We advise our users to download this update as soon +as possible from our SourceForge downloads page: This release contains no new features. For all practical purposes, it is a bug-fix release on top of 1.2.4. -For a list of known issues with this release, please see the 1.2.5 Known Issues wiki page: {{< wiki "1.2.5 Known Issues" />}}. +For a list of known issues with this release, please see the 1.2.5 Known Issues wiki page: +{{< wiki "1.2.5 Known Issues" />}}. Security advisories for the two fixed vulnerabilities are available below: -[Mumble-SA-2014-001](/security/mumble-sa-2014-001) ([txt](/security/Mumble-SA-2014-001.txt), [sig](/security/Mumble-SA-2014-001.sig)) ([CVE-2014-0044][4]) +[Mumble-SA-2014-001](/security/mumble-sa-2014-001) ([txt](/security/Mumble-SA-2014-001.txt), +[sig](/security/Mumble-SA-2014-001.sig)) ([CVE-2014-0044][4]) -– A malformed Opus voice packet sent to a Mumble client could trigger a NULL pointer dereference or an out-of-bounds array access. +– A malformed Opus voice packet sent to a Mumble client could trigger a NULL pointer dereference or an +out-of-bounds array access. -[Mumble-SA-2014-002](/security/mumble-sa-2014-002) ([txt](/security/Mumble-SA-2014-002.txt), [sig](/security/Mumble-SA-2014-001.sig)) ([CVE-2014-0045][7]) +[Mumble-SA-2014-002](/security/mumble-sa-2014-002) ([txt](/security/Mumble-SA-2014-002.txt), +[sig](/security/Mumble-SA-2014-001.sig)) ([CVE-2014-0045][7]) – A malformed Opus voice packet sent to a Mumble client could trigger a heap-based buffer overflow. -If you are using Mumble on Linux or BSD, we recommend that you keep a close eye on your vendor’s security advisories to determine the availability of an update that fixes these vulnerabilities. +If you are using Mumble on Linux or BSD, we recommend that you keep a close eye on your vendor’s security +advisories to determine the availability of an update that fixes these vulnerabilities. The Mumble team _[Update 2014-02-07: added a link to the Known Issues page]_ - [2]: https://www.mumble.info/security/Mumble-SA-2014-001.txt - [3]: https://www.mumble.info/security/Mumble-SA-2014-001.txt.sig - [4]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0044 - [5]: https://www.mumble.info/security/Mumble-SA-2014-002.txt - [6]: https://www.mumble.info/security/Mumble-SA-2014-002.txt.sig - [7]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0045 +[2]: https://www.mumble.info/security/Mumble-SA-2014-001.txt +[3]: https://www.mumble.info/security/Mumble-SA-2014-001.txt.sig +[4]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0044 +[5]: https://www.mumble.info/security/Mumble-SA-2014-002.txt +[6]: https://www.mumble.info/security/Mumble-SA-2014-002.txt.sig +[7]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0045 diff --git a/hugo/content/blog/2014-02-05-mumble-for-ios-1-2-3.md b/hugo/content/blog/2014-02-05-mumble-for-ios-1-2-3.md index bb53c755..09bf5568 100644 --- a/hugo/content/blog/2014-02-05-mumble-for-ios-1-2-3.md +++ b/hugo/content/blog/2014-02-05-mumble-for-ios-1-2-3.md @@ -7,32 +7,38 @@ categories: - Security tags: - ios - --- + The Mumble team has released [version 1.2.3 of the iOS Mumble client][1]. -This new version contains two important client-side security fixes, and we advise users to download this update from the App Store as soon as possible. +This new version contains two important client-side security fixes, and we advise users to download this update from the +App Store as soon as possible. Alongside these security fixes, this release also includes a few minor bug fixes: -* Increased the size of Mumble’s encoding buffer for Opus packets to be able to encode all Opus packets without triggering Opus’s internal rate limiting. -* Fixed a bug that could cause the certificate accept alert view that is shown upon connecting to a server with an unknown certificate to sometimes be hidden on iOS 7. -* Several external libraries have been synced to their latest stable versions. +- Increased the size of Mumble’s encoding buffer for Opus packets to be able to encode all Opus packets without + triggering Opus’s internal rate limiting. +- Fixed a bug that could cause the certificate accept alert view that is shown upon connecting to a server with an + unknown certificate to sometimes be hidden on iOS 7. +- Several external libraries have been synced to their latest stable versions. Security advisories for the two fixed vulnerabilities are available below: -* [Mumble-SA-2014-003](/security/mumble-sa-2014-003) ([txt](/security/Mumble-SA-2014-003.txt), [sig](/security/Mumble-SA-2014-003.sig)) - * A malformed Opus voice packet sent to a MumbleKit client could trigger a NULL pointer dereference. +- [Mumble-SA-2014-003](/security/mumble-sa-2014-003) ([txt](/security/Mumble-SA-2014-003.txt), + [sig](/security/Mumble-SA-2014-003.sig)) + + - A malformed Opus voice packet sent to a MumbleKit client could trigger a NULL pointer dereference. -* [Mumble-SA-2014-004](/security/mumble-sa-2014-004) ([txt](/security/Mumble-SA-2014-004.txt), [sig](/security/Mumble-SA-2014-004.sig)) - * A malformed Opus voice packet sent to a MumbleKit client could trigger a heap-based buffer overflow. +- [Mumble-SA-2014-004](/security/mumble-sa-2014-004) ([txt](/security/Mumble-SA-2014-004.txt), + [sig](/security/Mumble-SA-2014-004.sig)) + - A malformed Opus voice packet sent to a MumbleKit client could trigger a heap-based buffer overflow. The Mumble team - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: https://www.mumble.info/security/Mumble-SA-2014-003.txt - [3]: https://www.mumble.info/security/Mumble-SA-2014-003.txt.sig - [4]: https://www.mumble.info/security/Mumble-SA-2014-004.txt - [5]: https://www.mumble.info/security/Mumble-SA-2014-004.txt.sig +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: https://www.mumble.info/security/Mumble-SA-2014-003.txt +[3]: https://www.mumble.info/security/Mumble-SA-2014-003.txt.sig +[4]: https://www.mumble.info/security/Mumble-SA-2014-004.txt +[5]: https://www.mumble.info/security/Mumble-SA-2014-004.txt.sig diff --git a/hugo/content/blog/2014-02-10-version-numbering-change.md b/hugo/content/blog/2014-02-10-version-numbering-change.md index a1c7ed9b..7798978e 100644 --- a/hugo/content/blog/2014-02-10-version-numbering-change.md +++ b/hugo/content/blog/2014-02-10-version-numbering-change.md @@ -4,17 +4,23 @@ author: .D0T date: 2014-02-10T21:19:13+00:00 categories: - Release - --- -Mumble’s version numbers have been a great source of confusion for a long time. Version 1.1.8 being incompatible with 1.2.0, only incrementing the last place of the version number even though big changes were made and so on. This will change. + +Mumble’s version numbers have been a great source of confusion for a long time. Version 1.1.8 being incompatible +with 1.2.0, only incrementing the last place of the version number even though big changes were made and so on. This +will change. **TL;DR:** The next version will be 1.3.0 not 1.2.6. The next feature release after that 1.4.0 and so on. In practice we used `1..` in which the _major_ number is incremented for breaking changes and the _minor_ number for feature releases. This wasn’t actually intended but we were never quite happy with the amount and kind of features we added to actually name a release Mumble 2. Even with the massive and backwards compatibility breaking changes introduced in {{< wiki "1.2.0" />}}. -We do realize this is kinda ridiculous so for future releases we will switch to a `..` numbering schema. _Major_ and _minor_ have the same meaning as above while _patch_ is used only for security and bugfix releases like {{< wiki "1.2.5" />}}. +We do realize this is kinda ridiculous so for future releases we will switch to a `..` numbering +schema. _Major_ and _minor_ have the same meaning as above while _patch_ is used only for security and bugfix releases +like {{< wiki "1.2.5" />}}. -This means that the next feature release of Mumble will be {{< wiki "1.3.0" />}} and still will be fully compatible with 1.2.X clients and servers. The next backwards compatibility breaking changes will be in Mumble 2 but there will likely be multiple feature releases before we will feel the need to take that step. +This means that the next feature release of Mumble will be {{< wiki "1.3.0" />}} and still will be fully compatible with +1.2.X clients and servers. The next backwards compatibility breaking changes will be in Mumble 2 but there will likely +be multiple feature releases before we will feel the need to take that step. Regards, diff --git a/hugo/content/blog/2014-03-10-mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1.md b/hugo/content/blog/2014-03-10-mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1.md index 9cd877c8..7788a161 100644 --- a/hugo/content/blog/2014-03-10-mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1.md +++ b/hugo/content/blog/2014-03-10-mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1.md @@ -6,31 +6,40 @@ categories: - News tags: - ios - --- -A word of warning: ‘Mumble for iOS’ 1.2.3 is incredibly unusable on iOS 7.1 – if you depend on it, you should probably not update to iOS 7.1 just yet. -There is a problem with audio subsystem, which is causing it to endlessly try to restart itself. This manifests itself via iOS’s ‘red bar’ (signalling that an app is using background audio) toggling itself on and off very fast (even when inside the app!), making the app unusable. +A word of warning: ‘Mumble for iOS’ 1.2.3 is incredibly unusable on iOS 7.1 – if you depend on it, you +should probably not update to iOS 7.1 just yet. + +There is a problem with audio subsystem, which is causing it to endlessly try to restart itself. This manifests itself +via iOS’s ‘red bar’ (signalling that an app is using background audio) toggling itself on and off very +fast (even when inside the app!), making the app unusable. -We’ve identified the problem, and we’re working on a fix. If you’ve already updated to iOS 7.1, fear not! We’ve also found a workaround which, while inconvenient, should help you work around the issue until a proper fix has been released. +We’ve identified the problem, and we’re working on a fix. If you’ve already updated to iOS 7.1, fear +not! We’ve also found a workaround which, while inconvenient, should help you work around the issue until a proper +fix has been released. To work around the issue, you disable Echo Cancellation in the app. Here’s how: -* In Mumble’s Preferences, navigate to ‘Advanced’ under Audio. -* When in there, look for the ‘Audio Input’ section. -* There should be a checkbox for Echo Cancellation. Disable it. +- In Mumble’s Preferences, navigate to ‘Advanced’ under Audio. +- When in there, look for the ‘Audio Input’ section. +- There should be a checkbox for Echo Cancellation. Disable it. -It can be hard when the bug is occurring. If you’re having trouble, swipe/drag the checkbox’s button to disable it. +It can be hard when the bug is occurring. If you’re having trouble, swipe/drag the checkbox’s button to +disable it. -* Double tap your home button. -* Swipe upwards on the Mumble app to close it. -* Re-open Mumble. The issue should be gone. -* If the issue is still present, navigate to ‘Echo Cancellation’ again, and check that it’s really disabled. It might not work the first time, due to the ‘red bar’ making it very hard to actually execute these steps. +- Double tap your home button. +- Swipe upwards on the Mumble app to close it. +- Re-open Mumble. The issue should be gone. +- If the issue is still present, navigate to ‘Echo Cancellation’ again, and check that it’s really + disabled. It might not work the first time, due to the ‘red bar’ making it very hard to actually execute + these steps. We hope it works for you! -Furthermore, we’d like to note that we hope to be able to submit an updated app with this issue fixed tonight. This update will also bring some other goodies, so stay tuned. +Furthermore, we’d like to note that we hope to be able to submit an updated app with this issue fixed tonight. +This update will also bring some other goodies, so stay tuned. The Mumble Team diff --git a/hugo/content/blog/2014-03-12-mumble-for-ios-1-3-0.md b/hugo/content/blog/2014-03-12-mumble-for-ios-1-3-0.md index 51272321..66380c15 100644 --- a/hugo/content/blog/2014-03-12-mumble-for-ios-1-3-0.md +++ b/hugo/content/blog/2014-03-12-mumble-for-ios-1-3-0.md @@ -6,15 +6,17 @@ categories: - Release tags: - ios - --- + The Mumble team has released [version 1.3.0 of the iOS Mumble client][1]. -This new version contains a fix for the [iOS 7.1 issue we recently blogged about][2]. It is also the first release to use the iOS 7 look and feel. +This new version contains a fix for the [iOS 7.1 issue we recently blogged about][2]. It is also the first release to +use the iOS 7 look and feel. -As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and remember to rate it in the App Store. +As always, it’s available on the [App Store][1]. And don’t forget — if you enjoy the app, please spread the word, and +remember to rate it in the App Store. The Mumble team - [1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 - [2]: http://blog.mumble.info/mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1/ +[1]: https://itunes.apple.com/us/app/mumble/id443472808?mt=8 +[2]: http://blog.mumble.info/mumble-for-ios-1-2-3-is-buggy-when-running-on-ios-7-1/ diff --git a/hugo/content/blog/2014-04-10-mumble-and-heartbleed.md b/hugo/content/blog/2014-04-10-mumble-and-heartbleed.md index 60df7bb4..7ceda4d8 100644 --- a/hugo/content/blog/2014-04-10-mumble-and-heartbleed.md +++ b/hugo/content/blog/2014-04-10-mumble-and-heartbleed.md @@ -5,30 +5,43 @@ date: 2014-04-10T23:21:53+00:00 categories: - Security - Tech talk - --- -Most of the Mumble project’s communication this week regarding the [Heartbleed][1] vulnerability has happened via IRC. This blog post attempts to fix that by providing answers to the most frequently asked questions here on our blog. + +Most of the Mumble project’s communication this week regarding the [Heartbleed][1] vulnerability has happened via +IRC. This blog post attempts to fix that by providing answers to the most frequently asked questions here on our blog. -If you’re reading this blog post, you’re probably wondering whether your Mumble client or Murmur server is vulnerable to the [Heartbleed][1] ([CVE-2014-0160][2]) vulnerability in [OpenSSL][3]. +If you’re reading this blog post, you’re probably wondering whether your Mumble client or Murmur server is +vulnerable to the [Heartbleed][1] ([CVE-2014-0160][2]) vulnerability in [OpenSSL][3]. The answer is: “It depends.” -The binary Mumble and Murmur packages that are available to download from [SourceForge][4] and [mumble.info][5] are not affected. These packages use [OpenSSL][3] 1.0.0, and as such are not vulnerable to [Heartbleed][1]. (This is also why you have not seen any new releases from us to fix this issue.) +The binary Mumble and Murmur packages that are available to download from [SourceForge][4] and [mumble.info][5] are not +affected. These packages use [OpenSSL][3] 1.0.0, and as such are not vulnerable to [Heartbleed][1]. (This is also why +you have not seen any new releases from us to fix this issue.) -So, if you’re using a Mumble client/server on Windows or Mac OS X that you downloaded from [SourceForge][4] or [mumble.info][5], you’re not vulnerable. If you’re running the ‘static’ Linux server, you are not vulnerable either. If you’re running the iOS client, you’re also good. +So, if you’re using a Mumble client/server on Windows or Mac OS X that you downloaded from [SourceForge][4] or +[mumble.info][5], you’re not vulnerable. If you’re running the ‘static’ Linux server, you are +not vulnerable either. If you’re running the iOS client, you’re also good. -However, if you are running Mumble client or a Murmur server that you didn’t download from [SourceForge][4] or [mumble.info][5], you are most likely vulnerable. This includes Mumble and Murmur packages from Linux and other Unix-like systems’s package managers, and importantly also the Ubuntu PPA archives that we link to from the front page of [mumble.info][5]. +However, if you are running Mumble client or a Murmur server that you didn’t download from [SourceForge][4] or +[mumble.info][5], you are most likely vulnerable. This includes Mumble and Murmur packages from Linux and other +Unix-like systems’s package managers, and importantly also the Ubuntu PPA archives that we link to from the front +page of [mumble.info][5]. -If you’re on a Unix-like system, you should ensure that your [OpenSSL][3] package is up-to-date and that it includes a fix for [Heartbleed][1]. Once that is the case, you are no longer vulnerable. (Make sure you restart your server instances after updating [OpenSSL][3] for the update to have any effect.) +If you’re on a Unix-like system, you should ensure that your [OpenSSL][3] package is up-to-date and that it +includes a fix for [Heartbleed][1]. Once that is the case, you are no longer vulnerable. (Make sure you restart your +server instances after updating [OpenSSL][3] for the update to have any effect.) -Once you have patched [OpenSSL][3] on any vulnerable systems, you should also strongly consider to revoke and reissue any certificates, private keys and passwords that have been used by either Mumble or Murmur on the vulnerable machine, as these might have been readable by attackers. +Once you have patched [OpenSSL][3] on any vulnerable systems, you should also strongly consider to revoke and reissue +any certificates, private keys and passwords that have been used by either Mumble or Murmur on the vulnerable machine, +as these might have been readable by attackers. The Mumble Team - [1]: http://heartbleed.com/ - [2]: https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160 - [3]: https://www.openssl.org/ - [4]: https://sourceforge.net/projects/mumble/ - [5]: https://mumble.info +[1]: http://heartbleed.com/ +[2]: https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160 +[3]: https://www.openssl.org/ +[4]: https://sourceforge.net/projects/mumble/ +[5]: https://mumble.info diff --git a/hugo/content/blog/2014-05-14-mumble-1-2-6.md b/hugo/content/blog/2014-05-14-mumble-1-2-6.md index b26e7319..a4e1d062 100644 --- a/hugo/content/blog/2014-05-14-mumble-1-2-6.md +++ b/hugo/content/blog/2014-05-14-mumble-1-2-6.md @@ -5,36 +5,45 @@ date: 2014-05-14T23:50:39+00:00 categories: - Release - Security - --- + The Mumble team has released version 1.2.6 of the Mumble VoIP application. -This new version contains two client-side security fixes. We advise our users to download this update as soon as possible from our SourceForge downloads page: +This new version contains two client-side security fixes. We advise our users to download this update as soon as +possible from our SourceForge downloads page: This release contains no new features. For all practical purposes, it is a bug-fix release on top of 1.2.5. -The release contains new versions of both Mumble (client) and Murmur (server), but since the security fixes only apply to the client, you should be fine if you are still running 1.2.5 or even 1.2.4 Murmur server. +The release contains new versions of both Mumble (client) and Murmur (server), but since the security fixes only apply +to the client, you should be fine if you are still running 1.2.5 or even 1.2.4 Murmur server. For a list of known issues with this release, please see the wiki page {{< wiki "1.2.6 Known Issues" />}}. Security advisories for the fixed vulnerabilities are available below: -[Mumble-SA-2014-005](/security/mumble-sa-2014-005) ([txt](/security/Mumble-SA-2014-005.txt), [sig](/security/Mumble-SA-2014-005.sig)) – SVG images with local file references could trigger client DoS +[Mumble-SA-2014-005](/security/mumble-sa-2014-005) ([txt](/security/Mumble-SA-2014-005.txt), +[sig](/security/Mumble-SA-2014-005.sig)) – SVG images with local file references could trigger client DoS -[Mumble-SA-2014-006](/security/mumble-sa-2014-006) ([txt](/security/Mumble-SA-2014-006.txt), [sig](/security/Mumble-SA-2014-006.sig)) – The Mumble client did not properly HTML-escape some external strings before using them in a rich-text (HTML) context. +[Mumble-SA-2014-006](/security/mumble-sa-2014-006) ([txt](/security/Mumble-SA-2014-006.txt), +[sig](/security/Mumble-SA-2014-006.sig)) – The Mumble client did not properly HTML-escape some external strings +before using them in a rich-text (HTML) context. -For our binary packages (Windows and OS X clients), this release also fixes Qt’s GIF decoder vulnerability: [CVE-2014-0190][6] – The GIF decoder in QtGui in Qt before 5.3 allows remote attackers to cause a denial of service (NULL pointer dereference) via invalid width and height values in a GIF image. +For our binary packages (Windows and OS X clients), this release also fixes Qt’s GIF decoder vulnerability: +[CVE-2014-0190][6] – The GIF decoder in QtGui in Qt before 5.3 allows remote attackers to cause a denial of +service (NULL pointer dereference) via invalid width and height values in a GIF image. -If you are using Mumble on Linux or BSD, we recommend that you keep an eye on your vendor’s security advisories or package updates to determine the availability of an update that fixes these vulnerabilities. +If you are using Mumble on Linux or BSD, we recommend that you keep an eye on your vendor’s security advisories or +package updates to determine the availability of an update that fixes these vulnerabilities. -And last but not least, we should mention that snapshot builds are also affected by these issues. So if you are running snapshots, we strongly recommend that you install any updates when your client prompts you. +And last but not least, we should mention that snapshot builds are also affected by these issues. So if you are running +snapshots, we strongly recommend that you install any updates when your client prompts you. The Mumble team - [2]: https://www.mumble.info/security/Mumble-SA-2014-005.txt - [3]: https://www.mumble.info/security/Mumble-SA-2014-005.txt.sig - [4]: https://www.mumble.info/security/Mumble-SA-2014-006.txt - [5]: https://www.mumble.info/security/Mumble-SA-2014-006.txt.sig - [6]: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0190 +[2]: https://www.mumble.info/security/Mumble-SA-2014-005.txt +[3]: https://www.mumble.info/security/Mumble-SA-2014-005.txt.sig +[4]: https://www.mumble.info/security/Mumble-SA-2014-006.txt +[5]: https://www.mumble.info/security/Mumble-SA-2014-006.txt.sig +[6]: https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0190 diff --git a/hugo/content/blog/2014-06-14-mumble-1-2-7.md b/hugo/content/blog/2014-06-14-mumble-1-2-7.md index 95b80d08..774c3601 100644 --- a/hugo/content/blog/2014-06-14-mumble-1-2-7.md +++ b/hugo/content/blog/2014-06-14-mumble-1-2-7.md @@ -5,29 +5,37 @@ date: 2014-06-14T10:15:47+00:00 categories: - Release - Security - --- -The Mumble team has released version 1.2.7 of the Mumble VoIP application. This is a minor bug fix release in the stable 1.2-series of Mumble. -This release contains a couple of bug fixes to the Mumble client and updates OpenSSL to version 1.0.0m due to an OpenSSL security advisory. We advise our users to download this update as soon as possible from our SourceForge downloads page: +The Mumble team has released version 1.2.7 of the Mumble VoIP application. This is a minor bug fix release in the stable +1.2-series of Mumble. + +This release contains a couple of bug fixes to the Mumble client and updates OpenSSL to version 1.0.0m due to an OpenSSL +security advisory. We advise our users to download this update as soon as possible from our SourceForge downloads page: + -If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client packages we advise you to update to get the OpenSSL security fixes. If you are using Mumble or Murmur from your distro, you do not need to update, but make sure your OpenSSL library has received an update for the security issues. +If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client +packages we advise you to update to get the OpenSSL security fixes. If you are using Mumble or Murmur from your distro, +you do not need to update, but make sure your OpenSSL library has received an update for the security issues. Changes in this release: -* The log view in Mumble 1.2.6 didn’t correctly scroll when an image is included in a text message. ([Issue #1258][1]) -* Some users were unable to connect to Mumble servers due to a “remote host closed the connection” caused by a bug in Skype’s optional click-to-call feature ([Issue #1271][2]) -* OpenSSL has been updated to 1.0.0m due to [OpenSSL Security Advisory [05 Jun 2014]][3] +- The log view in Mumble 1.2.6 didn’t correctly scroll when an image is included in a text message. ([Issue + #1258][1]) +- Some users were unable to connect to Mumble servers due to a “remote host closed the connection” caused by + a bug in Skype’s optional click-to-call feature ([Issue #1271][2]) +- OpenSSL has been updated to 1.0.0m due to [OpenSSL Security Advisory [05 Jun 2014]][3] For a source-level changelog, please see [the GitHub commit list][4] or the [CHANGES file][5] for Mumble 1.2.7. -All of these changes are already available in our snapshot builds, so if you like living on the bleeding edge and want to help out with Mumble development, feel free to check out our development snapshots at [http://mumble.info/.][6] +All of these changes are already available in our snapshot builds, so if you like living on the bleeding edge and want +to help out with Mumble development, feel free to check out our development snapshots at [http://mumble.info/.][6] The Mumble team - [1]: https://github.com/mumble-voip/mumble/issues/1258 - [2]: https://github.com/mumble-voip/mumble/issues/1271 - [3]: https://www.openssl.org/news/secadv_20140605.txt - [4]: https://github.com/mumble-voip/mumble/commits/1.2.7 - [5]: https://github.com/mumble-voip/mumble/blob/1.2.7/CHANGES - [6]: https://www.mumble.info "https://www.mumble.info" +[1]: https://github.com/mumble-voip/mumble/issues/1258 +[2]: https://github.com/mumble-voip/mumble/issues/1271 +[3]: https://www.openssl.org/news/secadv_20140605.txt +[4]: https://github.com/mumble-voip/mumble/commits/1.2.7 +[5]: https://github.com/mumble-voip/mumble/blob/1.2.7/CHANGES +[6]: https://www.mumble.info "https://www.mumble.info" diff --git a/hugo/content/blog/2014-08-08-mumble-1-2-8.md b/hugo/content/blog/2014-08-08-mumble-1-2-8.md index d27e3b8b..42020168 100644 --- a/hugo/content/blog/2014-08-08-mumble-1-2-8.md +++ b/hugo/content/blog/2014-08-08-mumble-1-2-8.md @@ -5,28 +5,35 @@ date: 2014-08-08T23:38:26+00:00 categories: - Release - Security - --- -The Mumble team has released version 1.2.8 of the Mumble VoIP application. This is a minor bug fix release in the stable 1.2-series of Mumble. -This release contains a couple of bug fixes to the Mumble client and updates OpenSSL to version 1.0.0n due to an OpenSSL security advisory. We advise our users to download this update as soon as possible from our SourceForge downloads page: +The Mumble team has released version 1.2.8 of the Mumble VoIP application. This is a minor bug fix release in the stable +1.2-series of Mumble. + +This release contains a couple of bug fixes to the Mumble client and updates OpenSSL to version 1.0.0n due to an OpenSSL +security advisory. We advise our users to download this update as soon as possible from our SourceForge downloads page: + -If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client packages we advise you to update to get the OpenSSL security fixes. If you are using Mumble or Murmur from your distro, you do not need to update, but make sure your OpenSSL library has received an update for the security issues. +If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client +packages we advise you to update to get the OpenSSL security fixes. If you are using Mumble or Murmur from your distro, +you do not need to update, but make sure your OpenSSL library has received an update for the security issues. Changes in this release: -* OpenSSL has been updated to 1.0.0n due to [OpenSSL Security Advisory [06 August 2014]][1] -* A PulseAudio issue that could cause the Mumble client to crash on launch has been fixed. -* Various source-level issues that made the Mumble build fail when built with Clang has been fixed. -* The Windows installer, as well as all .EXE and .DLL files are now code-signed with an Authenticode signature that uses a SHA256 digest in addition to the previous SHA1-based signature. -* The Windows build is now built using the buildenv/1.2.x/win32 build environment from mumble-releng. -* For a source-level changelog, please see [the GitHub commit list][2] or the [CHANGES file][3] for Mumble 1.2.8. +- OpenSSL has been updated to 1.0.0n due to [OpenSSL Security Advisory [06 August 2014]][1] +- A PulseAudio issue that could cause the Mumble client to crash on launch has been fixed. +- Various source-level issues that made the Mumble build fail when built with Clang has been fixed. +- The Windows installer, as well as all .EXE and .DLL files are now code-signed with an Authenticode signature that uses + a SHA256 digest in addition to the previous SHA1-based signature. +- The Windows build is now built using the buildenv/1.2.x/win32 build environment from mumble-releng. +- For a source-level changelog, please see [the GitHub commit list][2] or the [CHANGES file][3] for Mumble 1.2.8. -All of these changes are already available in our snapshot builds, so if you like living on the bleeding edge and want to help out with Mumble development, feel free to check out our development snapshots at [http://mumble.info/.][4] +All of these changes are already available in our snapshot builds, so if you like living on the bleeding edge and want +to help out with Mumble development, feel free to check out our development snapshots at [http://mumble.info/.][4] The Mumble team - [1]: https://www.openssl.org/news/secadv_20140806.txt - [2]: https://github.com/mumble-voip/mumble/commits/1.2.8 - [3]: https://github.com/mumble-voip/mumble/blob/1.2.8/CHANGES - [4]: https://www.mumble.info "https://www.mumble.info" +[1]: https://www.openssl.org/news/secadv_20140806.txt +[2]: https://github.com/mumble-voip/mumble/commits/1.2.8 +[3]: https://github.com/mumble-voip/mumble/blob/1.2.8/CHANGES +[4]: https://www.mumble.info "https://www.mumble.info" diff --git a/hugo/content/blog/2014-09-07-changes-in-translation-workflow.md b/hugo/content/blog/2014-09-07-changes-in-translation-workflow.md index bbda3e9b..6d75401a 100644 --- a/hugo/content/blog/2014-09-07-changes-in-translation-workflow.md +++ b/hugo/content/blog/2014-09-07-changes-in-translation-workflow.md @@ -5,11 +5,16 @@ date: 2014-09-07T10:56:31+00:00 categories: - Community - News - --- -We have finally finished integrating Transifex into our workflow. Transifex is an online translation tool which allows collaborative translation of applications directly from a browser. -For Mumble this means that it is now easier than ever before to contribute translations for your language to the project. Simply visit our Transifex project page, sign up and get started. For a step by step guide see {{< wiki "Language Translation" "this page in our wiki" />}}. +We have finally finished integrating Transifex into our +workflow. Transifex is an online translation tool which allows collaborative translation of applications directly from a +browser. + +For Mumble this means that it is now easier than ever before to contribute translations for your language to the +project. Simply visit our Transifex project +page, sign up and get started. For a step by step guide see +{{< wiki "Language Translation" "this page in our wiki" />}}. The direct integration into our workflow also means your translations will be integrated into Mumble snapshots in a timely manner. Translations changes will be pulled in once per day. We will still do a quick review before they actually hit the Snapshots but as the work we have to do for accepting changes is now reduced to literally two mouse-clicks you can expect to see your work without much more delay. diff --git a/hugo/content/blog/2014-09-07-new-forums-and-wiki.md b/hugo/content/blog/2014-09-07-new-forums-and-wiki.md index 5379cdf9..5692a890 100644 --- a/hugo/content/blog/2014-09-07-new-forums-and-wiki.md +++ b/hugo/content/blog/2014-09-07-new-forums-and-wiki.md @@ -5,20 +5,30 @@ date: 2014-09-07T11:11:08+00:00 categories: - Community - News - --- -As you might have already noticed we changed the hosting for our wiki as well as the forums. Especially if our previous forums hosted at SourceForge gave you trouble or the slow loading when editing the wiki made you sad this is the time to take another look. -You can find the **forums** on . The **wiki** as usual can be reached via . +As you might have already noticed we changed the hosting for our wiki as well as the forums. Especially if our previous +forums hosted at SourceForge gave you trouble or the slow loading when editing the wiki made you sad this is the time to +take another look. + +You can find the **forums** on . The **wiki** as usual can be reached +via . -While old wiki URLs will keep working and are redirected to the new one we recommend updating any links/bookmarks you might have to prevent any breakage in the future. The contents of the old phpBB SF forums were transferred to the new one. If you had an account on these forums you can use password recovery to re-claim your account. Make sure to pay attention to the instructions mentioned on the recovery page. This content and account transfer wasn’t possible for the basic SF discussion forums. We decided to turn those read-only to keep the information they contain accessible. +While old wiki URLs will keep working and are redirected to the new one we recommend updating any links/bookmarks you +might have to prevent any breakage in the future. The contents of the old phpBB SF forums were transferred to the new +one. If you had an account on these forums you can use password recovery to re-claim your account. Make sure to pay +attention to the instructions mentioned on the recovery page. This content and account transfer wasn’t possible +for the basic SF discussion forums. We decided to turn those read-only to keep the information they contain accessible. -While we were at it we gave the forum a new look and thanks to a generous open source sponsorship by [fastly.com][1] forum as well as the wiki are now behind a CDN and should feel snappy like never before. +While we were at it we gave the forum a new look and thanks to a generous open source sponsorship by +[fastly.com][1] forum as well as the wiki are now behind a +CDN and should feel snappy like +never before. We hope you like these changes and are looking forward to seeing you in the forums. The Mumble Team - [1]: https://www.fastly.com/ "fastly.com" +[1]: https://www.fastly.com/ "fastly.com" diff --git a/hugo/content/blog/2015-06-11-mumble-1-2-9.md b/hugo/content/blog/2015-06-11-mumble-1-2-9.md index 2d326963..2433c994 100644 --- a/hugo/content/blog/2015-06-11-mumble-1-2-9.md +++ b/hugo/content/blog/2015-06-11-mumble-1-2-9.md @@ -5,41 +5,58 @@ date: 2015-06-11T18:46:27+00:00 categories: - Release - Security - --- -The Mumble team has released version 1.2.9 of the Mumble VoIP application. Version 1.2.9 is a maintenance release in the stable 1.2-series of Mumble. -This release contains a couple of bug fixes to the Mumble client and contains updates to various Mumble dependencies, most prominently OpenSSL (1.0.1n) and Qt 4.8 (latest from Git). It is also the first release in the 1.2.x series that enables TLS 1.2 and modern TLS cipher suites. +The Mumble team has released version 1.2.9 of the Mumble VoIP application. Version 1.2.9 is a maintenance release in the +stable 1.2-series of Mumble. + +This release contains a couple of bug fixes to the Mumble client and contains updates to various Mumble dependencies, +most prominently OpenSSL (1.0.1n) and Qt 4.8 (latest from Git). It is also the first release in the 1.2.x series that +enables TLS 1.2 and modern TLS cipher suites. -If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client packages we advise you to update to get the latest security fixes from our dependencies. +If you are using one our packaged static Murmur servers, or Murmur on Windows, or any of our packaged Mumble client +packages we advise you to update to get the latest security fixes from our dependencies. Changes in this release: -* OpenSSL has been updated to 1.0.1n. -* Qt 4.8 has been synced to the latest sources from Git. -* Mumble and Murmur now use TLS 1.2 if the server/client combination allows it. -* Mumble and Murmur now prefer ECDHE + AES-GCM cipher suites if possible, providing Perfect Forward Secrecy. +- OpenSSL has been updated to 1.0.1n. +- Qt 4.8 has been synced to the latest sources from Git. +- Mumble and Murmur now use TLS 1.2 if the server/client combination allows it. +- Mumble and Murmur now prefer ECDHE + AES-GCM cipher suites if possible, providing Perfect Forward Secrecy. For a source-level changelog, please see [https://github.com/mumble-voip/mumble/compare/1.2.8…1.2.9][1] -All of these changes are already available in our snapshot builds (the 1.3.x series), so if you like living on the bleeding edge and want to help out with Mumble development, feel free to check out our development snapshots at [http://mumble.info/][2]. +All of these changes are already available in our snapshot builds (the 1.3.x series), so if you like living on the +bleeding edge and want to help out with Mumble development, feel free to check out our development snapshots at +[http://mumble.info/][2]. -The TLS 1.2 support in our binary packages is backported from Qt 5. Unfortunately, that means that if you are using Mumble from a package manager, you’re not going to get a TLS 1.2-enabled build. +The TLS 1.2 support in our binary packages is backported from Qt 5. Unfortunately, that means that if you are using +Mumble from a package manager, you’re not going to get a TLS 1.2-enabled build. Our backported patches to Qt 4 are available at: [https://github.com/mumble-voip/mumble-developers-qt/commit/a02610cf11395896bb0fd06725bc7545b80bd7fe][3] - [https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40][4] +[https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40][4] -We do not advise distributions to pick up these patches as-is. In particular, they change the meaning of QSsl::TlsV1 to mean ‘TLS 1.0 or later’. This is not desirable to the vast majority of software out there — but it works for Mumble’s binary packages. If there are any distributions out there willing to carry this diff to their Qt 4 packages to allow TLS 1.2 support for Mumble 1.2.9, we’re willing to prepare a more fitting patch to Qt 4.8 that implements the behavior of “QSsl::TlsV1_0OrLater” from the upcoming Qt 5.5 release. +We do not advise distributions to pick up these patches as-is. In particular, they change the meaning of QSsl::TlsV1 to +mean ‘TLS 1.0 or later’. This is not desirable to the vast majority of software out there — but it +works for Mumble’s binary packages. If there are any distributions out there willing to carry this diff to their +Qt 4 packages to allow TLS 1.2 support for Mumble 1.2.9, we’re willing to prepare a more fitting patch to Qt 4.8 +that implements the behavior of “QSsl::TlsV1_0OrLater” from the upcoming Qt 5.5 release. For this release, we’re also providing binaries on [GitHub][5]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/compare/1.2.8...1.2.9 "https://github.com/mumble-voip/mumble/compare/1.2.8...1.2.9" - [2]: https://www.mumble.info/ "https://www.mumble.info/" - [3]: https://github.com/mumble-voip/mumble-developers-qt/commit/a02610cf11395896bb0fd06725bc7545b80bd7fe "https://github.com/mumble-voip/mumble-developers-qt/commit/a02610cf11395896bb0fd06725bc7545b80bd7fe" - [4]: https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40 "https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40" - [5]: https://github.com/mumble-voip/mumble/releases/tag/1.2.9 "https://github.com/mumble-voip/mumble/releases/tag/1.2.9" +[1]: + https://github.com/mumble-voip/mumble/compare/1.2.8...1.2.9 + "https://github.com/mumble-voip/mumble/compare/1.2.8...1.2.9" +[2]: https://www.mumble.info/ "https://www.mumble.info/" +[3]: + https://github.com/mumble-voip/mumble-developers-qt/commit/a02610cf11395896bb0fd06725bc7545b80bd7fe + "https://github.com/mumble-voip/mumble-developers-qt/commit/a02610cf11395896bb0fd06725bc7545b80bd7fe" +[4]: + https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40 + "https://github.com/mumble-voip/mumble-developers-qt/commit/2e23c3b6af5f820e56d08c7aad9129d74f609f40" +[5]: https://github.com/mumble-voip/mumble/releases/tag/1.2.9 "https://github.com/mumble-voip/mumble/releases/tag/1.2.9" diff --git a/hugo/content/blog/2015-07-10-mumble-1-2-10.md b/hugo/content/blog/2015-07-10-mumble-1-2-10.md index c12fe22b..2fa4070c 100644 --- a/hugo/content/blog/2015-07-10-mumble-1-2-10.md +++ b/hugo/content/blog/2015-07-10-mumble-1-2-10.md @@ -5,11 +5,13 @@ date: 2015-07-10T12:01:11+00:00 categories: - Release - Security - --- -The Mumble team has released version 1.2.10 of the Mumble VoIP application. Version 1.2.10 is a security release in the stable 1.2-series of Mumble. -This release updates OpenSSL to 1.0.1p. This version of OpenSSL fixes ["Alternative chains certificate forgery" (CVE-2015-1793)][1]. +The Mumble team has released version 1.2.10 of the Mumble VoIP application. Version 1.2.10 is a security release in the +stable 1.2-series of Mumble. + +This release updates OpenSSL to 1.0.1p. This version of OpenSSL fixes ["Alternative chains certificate forgery" +(CVE-2015-1793)][1]. There are no source changes to Mumble itself in this build. The version bump is only relevant to our binary releases. @@ -19,5 +21,7 @@ You can download this release on [GitHub][2]. Enjoy! The Mumble team - [1]: https://www.openssl.org/news/secadv_20150709.txt - [2]: https://github.com/mumble-voip/mumble/releases/tag/1.2.10 "https://github.com/mumble-voip/mumble/releases/tag/1.2.10" +[1]: https://www.openssl.org/news/secadv_20150709.txt +[2]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.10 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.10" diff --git a/hugo/content/blog/2015-12-06-mumble-1-2-11.md b/hugo/content/blog/2015-12-06-mumble-1-2-11.md index 49ba82ee..0e1e37c0 100644 --- a/hugo/content/blog/2015-12-06-mumble-1-2-11.md +++ b/hugo/content/blog/2015-12-06-mumble-1-2-11.md @@ -5,24 +5,30 @@ date: 2015-12-06T10:34:21+00:00 categories: - Release - Security - --- -The Mumble team has [released version 1.2.11][1] of the Mumble VoIP application. Version 1.2.11 is a bugfix and security release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.11][1] of the Mumble VoIP application. Version 1.2.11 is a bugfix and security +release in the stable 1.2-series of Mumble. -For our binary releases, this release updates OpenSSL to 1.0.1q. Please see OpenSSL’s security advisory on the 1.0.1q release for more information: +For our binary releases, this release updates OpenSSL to 1.0.1q. Please see OpenSSL’s security advisory on the +1.0.1q release for more information: -Furthermore, we have also updated various other libraries in our binary releases to patch security vulnerabilities in those. For more information, we recommend you check out the [mumble-releng repository on GitHub][2]. +Furthermore, we have also updated various other libraries in our binary releases to patch security vulnerabilities in +those. For more information, we recommend you check out the [mumble-releng repository on GitHub][2]. Bug fixes in this release include: -* Fixed a bug where Mumble global shortcuts on X11 would not release properly when Chrome/Chromium was the frontmost application. -* Improved the help text for allowing keyboard keys to be used for global shortcuts on OS X Mavericks and above. -* Fixed a bug where clients would automatically reconnect after being kicked. -* Inserting an image in the chat should now always cause Mumble to scroll correctly to the bottom of the log. -* Opening mumble:// URLs should now correctly allow people to change channels if a URL is opened while Mumble is running. -* Fixed an issue where the “shortcut/linux/evdev/enable” config option was not saved correctly, and overwritten when closing Mumble. +- Fixed a bug where Mumble global shortcuts on X11 would not release properly when Chrome/Chromium was the frontmost + application. +- Improved the help text for allowing keyboard keys to be used for global shortcuts on OS X Mavericks and above. +- Fixed a bug where clients would automatically reconnect after being kicked. +- Inserting an image in the chat should now always cause Mumble to scroll correctly to the bottom of the log. +- Opening mumble:// URLs should now correctly allow people to change channels if a URL is opened while Mumble is + running. +- Fixed an issue where the “shortcut/linux/evdev/enable” config option was not saved correctly, and + overwritten when closing Mumble. For a full changelog, please see [the diff between 1.2.10 and 1.2.11 on GitHub][3]. @@ -32,7 +38,9 @@ You can download this release on [GitHub][4]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.11 - [2]: https://github.com/mumble-voip/mumble-releng/tree/master/buildenv/1.2.x - [3]: https://github.com/mumble-voip/mumble/compare/1.2.10...1.2.11 - [4]: https://github.com/mumble-voip/mumble/releases/tag/1.2.11 "https://github.com/mumble-voip/mumble/releases/tag/1.2.11" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.11 +[2]: https://github.com/mumble-voip/mumble-releng/tree/master/buildenv/1.2.x +[3]: https://github.com/mumble-voip/mumble/compare/1.2.10...1.2.11 +[4]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.11 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.11" diff --git a/hugo/content/blog/2015-12-20-mumble-1-2-12.md b/hugo/content/blog/2015-12-20-mumble-1-2-12.md index cc2ef421..669c9828 100644 --- a/hugo/content/blog/2015-12-20-mumble-1-2-12.md +++ b/hugo/content/blog/2015-12-20-mumble-1-2-12.md @@ -4,17 +4,20 @@ author: mkrautz date: 2015-12-20T18:56:01+00:00 categories: - Release - --- -The Mumble team has [released version 1.2.12][1] of the Mumble VoIP application. Version 1.2.12 is a bugfix release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.12][1] of the Mumble VoIP application. Version 1.2.12 is a bugfix release in +the stable 1.2-series of Mumble. Issues fixes in this release include: -* In Mumble 1.2.11, the log would always scroll-to-bottom, even if manually scrolled up to view a previous message. Scroll-to-bottom is now only triggered if the log view has not manually scrolled by the user. -* Fixed a bug where a stale overlay client could cause the Mumble UI to freeze under some circumstances. -* Fixed a bug where CELT and Opus encoders were not properly reset when using more than one frame per packet in Mumble. This would previously cause noisy artifacts at the beginning of transmissions. +- In Mumble 1.2.11, the log would always scroll-to-bottom, even if manually scrolled up to view a previous message. + Scroll-to-bottom is now only triggered if the log view has not manually scrolled by the user. +- Fixed a bug where a stale overlay client could cause the Mumble UI to freeze under some circumstances. +- Fixed a bug where CELT and Opus encoders were not properly reset when using more than one frame per packet in Mumble. + This would previously cause noisy artifacts at the beginning of transmissions. For a full changelog, please see [the diff between 1.2.11 and 1.2.12 on GitHub][2]. @@ -24,6 +27,8 @@ You can download this release on [GitHub][3]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.12 - [2]: https://github.com/mumble-voip/mumble/compare/1.2.11...1.2.12 - [3]: https://github.com/mumble-voip/mumble/releases/tag/1.2.12 "https://github.com/mumble-voip/mumble/releases/tag/1.2.12" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.12 +[2]: https://github.com/mumble-voip/mumble/compare/1.2.11...1.2.12 +[3]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.12 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.12" diff --git a/hugo/content/blog/2016-01-10-mumble-1-2-13.md b/hugo/content/blog/2016-01-10-mumble-1-2-13.md index b9922699..86a2eca2 100644 --- a/hugo/content/blog/2016-01-10-mumble-1-2-13.md +++ b/hugo/content/blog/2016-01-10-mumble-1-2-13.md @@ -5,23 +5,35 @@ date: 2016-01-10T13:01:11+00:00 categories: - Release - Security - --- -The Mumble team has [released version 1.2.13][1] of the Mumble VoIP application. Version 1.2.13 is a security release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.13][1] of the Mumble VoIP application. Version 1.2.13 is a security release in +the stable 1.2-series of Mumble. -Mumble 1.2.13 fixes a security-relevant bug in Murmur when running on Windows systems that allowed an unauthenticated user to cause Denial of Service on the server’s UDP connection. See [Mumble-SA-2016-001](/security/mumble-sa-2016-001) ([txt](/security/Mumble-SA-2016-001.txt), [sig](/security/Mumble-SA-2016-001.sig)). +Mumble 1.2.13 fixes a security-relevant bug in Murmur when running on Windows systems that allowed an unauthenticated +user to cause Denial of Service on the server’s UDP connection. See +[Mumble-SA-2016-001](/security/mumble-sa-2016-001) ([txt](/security/Mumble-SA-2016-001.txt), +[sig](/security/Mumble-SA-2016-001.sig)). We would like to thank [LuaMilkshake][4] for responsibly reporting this issue to the Mumble project. -This release of Mumble on Windows is also the first stable release in the 1.2-series that is only code-signed with a SHA256 authenticode signature and certificate. Previous releases were signed by both a SHA1 signature and certificate, as well as a SHA256 signature and certificate. +This release of Mumble on Windows is also the first stable release in the 1.2-series that is only code-signed with a +SHA256 authenticode signature and certificate. Previous releases were signed by both a SHA1 signature and certificate, +as well as a SHA256 signature and certificate. -This new code-signing setup can cause issues with some versions of Windows that do not support SHA256 code-signing. If your Mumble installer on Windows does not seem to be Authenticode signed, it probably means that your version of Windows does not support SHA256 code-signing. In that case, we recommend that you ensure the integrity of your Mumble installer by verifying the detached GPG signature (mumble-1.2.13.msi.sig) against our ["Mumble Automatic Build Infrastructure 2016" GPG key][5]. +This new code-signing setup can cause issues with some versions of Windows that do not support SHA256 code-signing. If +your Mumble installer on Windows does not seem to be Authenticode signed, it probably means that your version of Windows +does not support SHA256 code-signing. In that case, we recommend that you ensure the integrity of your Mumble installer +by verifying the detached GPG signature (mumble-1.2.13.msi.sig) against our ["Mumble Automatic Build Infrastructure +2016" GPG key][5]. Issues fixes in this release include: -* In previous versions of Mumble, it was possible to perform a Denial of Service attack on Murmur servers running on Windows. See [Mumble-SA-2016-001](/security/mumble-sa-2016-001) ([txt](/security/Mumble-SA-2016-001.txt), [sig](/security/Mumble-SA-2016-001.sig)) for more information. +- In previous versions of Mumble, it was possible to perform a Denial of Service attack on Murmur servers running on + Windows. See [Mumble-SA-2016-001](/security/mumble-sa-2016-001) ([txt](/security/Mumble-SA-2016-001.txt), + [sig](/security/Mumble-SA-2016-001.sig)) for more information. For a full changelog, please see [the diff between 1.2.12 and 1.2.13 on GitHub][6]. @@ -31,8 +43,10 @@ You can download this release on [GitHub][7]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.13 - [4]: https://github.com/LuaMilkshake - [5]: https://github.com/mumble-voip/mumble-gpg-signatures/blob/master/gpg.txt - [6]: https://github.com/mumble-voip/mumble/compare/1.2.12...1.2.13 - [7]: https://github.com/mumble-voip/mumble/releases/tag/1.2.13 "https://github.com/mumble-voip/mumble/releases/tag/1.2.13" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.13 +[4]: https://github.com/LuaMilkshake +[5]: https://github.com/mumble-voip/mumble-gpg-signatures/blob/master/gpg.txt +[6]: https://github.com/mumble-voip/mumble/compare/1.2.12...1.2.13 +[7]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.13 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.13" diff --git a/hugo/content/blog/2016-03-01-mumble-1-2-14.md b/hugo/content/blog/2016-03-01-mumble-1-2-14.md index 7f80fa05..31a6c7d8 100644 --- a/hugo/content/blog/2016-03-01-mumble-1-2-14.md +++ b/hugo/content/blog/2016-03-01-mumble-1-2-14.md @@ -4,15 +4,24 @@ author: mkrautz date: 2016-03-01T05:57:28+00:00 categories: - Release - --- -The Mumble team has [released version 1.2.14][1] of the Mumble VoIP application. Version 1.2.14 is a bugfix release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.14][1] of the Mumble VoIP application. Version 1.2.14 is a bugfix release in +the stable 1.2-series of Mumble. -The actual source changes in 1.2.14 are small. This release removes a [commit][2] that caused crashing issues on exit for some users of our overlay feature. This commit was backported from the 1.3.x (master) branch in order to fix a hang issue some people are seeing with the overlay, but the change was not ready for prime time. +The actual source changes in 1.2.14 are small. This release removes a [commit][2] that caused crashing issues on exit +for some users of our overlay feature. This commit was backported from the 1.3.x (master) branch in order to fix a hang +issue some people are seeing with the overlay, but the change was not ready for prime time. -The previous release of Mumble, 1.2.13, transitioned to only signing Windows releases of Mumble with our SHA256 Authenticode certificate. As explained in the blog post for 1.2.13, we went from a scenario where we signed Mumble with both a SHA1 signature and certificate, as well as a SHA256 signature and certificate. We did this because of Microsoft’s SHA1 deprecation in code signing. This change has caused several issues for Windows Vista users, and we’ve refined the process. The Mumble 1.2.14 release is now signed with a SHA1 signature and SHA256 certificate, as well as a SHA256 signature and SHA256 certificate. This makes it easier for legacy versions of Windows to verify the signature of Mumble. +The previous release of Mumble, 1.2.13, transitioned to only signing Windows releases of Mumble with our SHA256 +Authenticode certificate. As explained in the blog post for 1.2.13, we went from a scenario where we signed Mumble with +both a SHA1 signature and certificate, as well as a SHA256 signature and certificate. We did this because of +Microsoft’s SHA1 deprecation in code signing. This change has caused several issues for Windows Vista users, and +we’ve refined the process. The Mumble 1.2.14 release is now signed with a SHA1 signature and SHA256 certificate, +as well as a SHA256 signature and SHA256 certificate. This makes it easier for legacy versions of Windows to verify the +signature of Mumble. For a full changelog, please see [the diff between 1.2.13 and 1.2.14 on GitHub][3]. @@ -20,7 +29,9 @@ You can download this release on [GitHub][4]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.14 - [2]: https://github.com/mumble-voip/mumble/commit/6f3bacbded1b91c8eff6d13de436d9650aaf36e1 - [3]: https://github.com/mumble-voip/mumble/compare/1.2.13...1.2.14 - [4]: https://github.com/mumble-voip/mumble/releases/tag/1.2.14 "https://github.com/mumble-voip/mumble/releases/tag/1.2.14" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.14 +[2]: https://github.com/mumble-voip/mumble/commit/6f3bacbded1b91c8eff6d13de436d9650aaf36e1 +[3]: https://github.com/mumble-voip/mumble/compare/1.2.13...1.2.14 +[4]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.14 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.14" diff --git a/hugo/content/blog/2016-03-05-mumble-1-2-15.md b/hugo/content/blog/2016-03-05-mumble-1-2-15.md index 01b0f631..132f2811 100644 --- a/hugo/content/blog/2016-03-05-mumble-1-2-15.md +++ b/hugo/content/blog/2016-03-05-mumble-1-2-15.md @@ -4,20 +4,27 @@ author: mkrautz date: 2016-03-05T16:45:30+00:00 categories: - Release - --- -The Mumble team has [released version 1.2.15][1] of the Mumble VoIP application. Version 1.2.15 is a bugfix release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.15][1] of the Mumble VoIP application. Version 1.2.15 is a bugfix release in +the stable 1.2-series of Mumble. Changes in this release: -* Support for XInput (“XboxInput”) has been backported from 1.3.x. This is due to an incompatibility in a recent Windows 10 update that make programs that use Xbox controllers via DirectInput very unstable (See issues [#2104][2] and [#2147][3] for more information.) -* Various improvements to the WASAPI audio backend has been backported from 1.3.x. This should bring better compatibility with audio devices that do not provide floating point samples, such as headsets used via an Xbox controller. -* A blacklist for misbehaving DirectInput devices has been backported from 1.3.x. This blacklists an input device presented by various popular DACs. -* The ability to disable the public server list, as well as the ability to create and/or edit Mumble’s server list has been backported from 1.3.x. -* Various references to `mumble.sourceforge.net` have been changed to point to `www.mumble.info` or `wiki.mumble.info` -* OpenSSL has been updated to OpenSSL 1.0.1s in our binary releases. +- Support for XInput (“XboxInput”) has been backported from 1.3.x. This is due to an incompatibility in a + recent Windows 10 update that make programs that use Xbox controllers via DirectInput very unstable (See issues + [#2104][2] and [#2147][3] for more information.) +- Various improvements to the WASAPI audio backend has been backported from 1.3.x. This should bring better + compatibility with audio devices that do not provide floating point samples, such as headsets used via an Xbox + controller. +- A blacklist for misbehaving DirectInput devices has been backported from 1.3.x. This blacklists an input device + presented by various popular DACs. +- The ability to disable the public server list, as well as the ability to create and/or edit Mumble’s server list + has been backported from 1.3.x. +- Various references to `mumble.sourceforge.net` have been changed to point to `www.mumble.info` or `wiki.mumble.info` +- OpenSSL has been updated to OpenSSL 1.0.1s in our binary releases. For a full changelog, please see [the diff between 1.2.14 and 1.2.15 on GitHub][4]. @@ -25,8 +32,10 @@ You can download this release on [GitHub][5]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.15 - [2]: https://github.com/mumble-voip/mumble/issues/2104 - [3]: https://github.com/mumble-voip/mumble/issues/2147 - [4]: https://github.com/mumble-voip/mumble/compare/1.2.14...1.2.15 - [5]: https://github.com/mumble-voip/mumble/releases/tag/1.2.15 "https://github.com/mumble-voip/mumble/releases/tag/1.2.15" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.15 +[2]: https://github.com/mumble-voip/mumble/issues/2104 +[3]: https://github.com/mumble-voip/mumble/issues/2147 +[4]: https://github.com/mumble-voip/mumble/compare/1.2.14...1.2.15 +[5]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.15 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.15" diff --git a/hugo/content/blog/2016-05-05-mumble-1-2-16.md b/hugo/content/blog/2016-05-05-mumble-1-2-16.md index 1d1a4b8e..57fee8fb 100644 --- a/hugo/content/blog/2016-05-05-mumble-1-2-16.md +++ b/hugo/content/blog/2016-05-05-mumble-1-2-16.md @@ -5,30 +5,37 @@ date: 2016-05-05T22:50:36+00:00 categories: - Release - Security - --- -The Mumble team has [released version 1.2.16][1] of the Mumble VoIP application. Version 1.2.16 is a bugfix and security release in the stable 1.2-series of Mumble. -This version of Mumble updates our binary packages to use OpenSSL 1.0.1t due to the [OpenSSL Security Advisory 20160503][2]. +The Mumble team has [released version 1.2.16][1] of the Mumble VoIP application. Version 1.2.16 is a bugfix and security +release in the stable 1.2-series of Mumble. + +This version of Mumble updates our binary packages to use OpenSSL 1.0.1t due to the [OpenSSL Security Advisory +20160503][2]. Changes in this release: -* For our binary packages, OpenSSL has been updated to 1.0.1t because of [OpenSSL Security Advisory 20160503][2] -* Mumble will no longer try to poll for changes in XInput button state when no controllers are connected. -* The last references (public server list registration and crash reporting) to the old domain name for the Mumble service host, “mumble.hive.no”, have been changed to use “mumble.info” instead. -* The overlay blacklist from 1.3.0 snapshots has been backported to 1.2.16. +- For our binary packages, OpenSSL has been updated to 1.0.1t because of [OpenSSL Security Advisory 20160503][2] +- Mumble will no longer try to poll for changes in XInput button state when no controllers are connected. +- The last references (public server list registration and crash reporting) to the old domain name for the Mumble + service host, “mumble.hive.no”, have been changed to use “mumble.info” instead. +- The overlay blacklist from 1.3.0 snapshots has been backported to 1.2.16. For a full changelog, please see [the diff between 1.2.15 and 1.2.16 on GitHub][3]. -We recommend that all users of our binary Mumble and Murmur (the server component of Mumble) upgrade as soon as possible. Users of our binary Murmur packages running on Intel CPUs that support AES-NI should upgrade immediately due to CVE-2016-2107 (via [OpenSSL Security Advisory 20160503][2]). +We recommend that all users of our binary Mumble and Murmur (the server component of Mumble) upgrade as soon as +possible. Users of our binary Murmur packages running on Intel CPUs that support AES-NI should upgrade immediately due +to CVE-2016-2107 (via [OpenSSL Security Advisory 20160503][2]). You can download this release on [GitHub][4]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.16 - [2]: https://www.openssl.org/news/secadv/20160503.txt - [3]: https://github.com/mumble-voip/mumble/compare/1.2.15...1.2.16 - [4]: https://github.com/mumble-voip/mumble/releases/tag/1.2.16 "https://github.com/mumble-voip/mumble/releases/tag/1.2.16" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.16 +[2]: https://www.openssl.org/news/secadv/20160503.txt +[3]: https://github.com/mumble-voip/mumble/compare/1.2.15...1.2.16 +[4]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.16 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.16" diff --git a/hugo/content/blog/2016-09-24-mumble-1-2-17.md b/hugo/content/blog/2016-09-24-mumble-1-2-17.md index dac99c8f..96e29dca 100644 --- a/hugo/content/blog/2016-09-24-mumble-1-2-17.md +++ b/hugo/content/blog/2016-09-24-mumble-1-2-17.md @@ -5,33 +5,41 @@ date: 2016-09-24T21:36:28+00:00 categories: - Release - Security - --- -The Mumble team has [released version 1.2.17][1] of the Mumble VoIP application. Version 1.2.17 is a bugfix and security release in the stable 1.2-series of Mumble. -This version of Mumble updates our binary packages to use OpenSSL 1.0.2i (from 1.0.1t) due to the [OpenSSL Security Advisory 20160922][2]. Other dependencies have [also been updated][3]. +The Mumble team has [released version 1.2.17][1] of the Mumble VoIP application. Version 1.2.17 is a bugfix and security +release in the stable 1.2-series of Mumble. + +This version of Mumble updates our binary packages to use OpenSSL 1.0.2i (from 1.0.1t) due to the [OpenSSL Security +Advisory 20160922][2]. Other dependencies have [also been updated][3]. Changes in this release: -* For our binary packages, OpenSSL has been updated to 1.0.2i (from 1.0.1t) because of [OpenSSL Security Advisory 20160922][2]. The binary releases have been updated to use 1.0.2 rather than 1.0.1 because 1.0.1 will be end-of-life at the end of 2016. -* Fixed a bug that could cause the Mumble log view to be inacessible after receiving a specially crafted text message. -* The PulseAudio backend will now fall back to default device if the chosen device is no longer present. -* Mumble now explicitly sends plain text notifications to KDE and Freedesktop.org notification endpoints. -* Xbox One controllers are now properly blacklisted from DirectInput on Windows 10 Anniversary Update. -* Xbox button/controller names as shown by Mumble should now be correct for controllers other than the first controller. +- For our binary packages, OpenSSL has been updated to 1.0.2i (from 1.0.1t) because of [OpenSSL Security Advisory + 20160922][2]. The binary releases have been updated to use 1.0.2 rather than 1.0.1 because 1.0.1 will be end-of-life + at the end of 2016. +- Fixed a bug that could cause the Mumble log view to be inacessible after receiving a specially crafted text message. +- The PulseAudio backend will now fall back to default device if the chosen device is no longer present. +- Mumble now explicitly sends plain text notifications to KDE and Freedesktop.org notification endpoints. +- Xbox One controllers are now properly blacklisted from DirectInput on Windows 10 Anniversary Update. +- Xbox button/controller names as shown by Mumble should now be correct for controllers other than the first controller. + For a full changelog, please see [the diff between 1.2.16 and 1.2.17 on GitHub][4]. -We recommend that all users of our binary Mumble and Murmur (the server component of Mumble) packages upgrade as soon as possible. +We recommend that all users of our binary Mumble and Murmur (the server component of Mumble) packages upgrade as soon as +possible. You can download this release on [GitHub][5]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.17 - [2]: https://www.openssl.org/news/secadv/20160922.txt - [3]: https://github.com/mumble-voip/mumble-releng/tree/master/buildenv/1.2.x - [4]: https://github.com/mumble-voip/mumble/compare/1.2.16...1.2.17 - [5]: https://github.com/mumble-voip/mumble/releases/tag/1.2.17 "https://github.com/mumble-voip/mumble/releases/tag/1.2.17" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.17 +[2]: https://www.openssl.org/news/secadv/20160922.txt +[3]: https://github.com/mumble-voip/mumble-releng/tree/master/buildenv/1.2.x +[4]: https://github.com/mumble-voip/mumble/compare/1.2.16...1.2.17 +[5]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.17 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.17" diff --git a/hugo/content/blog/2016-12-13-mumble-1-2-18.md b/hugo/content/blog/2016-12-13-mumble-1-2-18.md index 301b6158..7aa39e6d 100644 --- a/hugo/content/blog/2016-12-13-mumble-1-2-18.md +++ b/hugo/content/blog/2016-12-13-mumble-1-2-18.md @@ -4,9 +4,10 @@ author: mkrautz date: 2016-12-13T22:43:27+00:00 categories: - Release - --- -The Mumble team has [released version 1.2.18][1] of the Mumble VoIP application. Version 1.2.18 is a bugfix release in the stable 1.2-series of Mumble. + +The Mumble team has [released version 1.2.18][1] of the Mumble VoIP application. Version 1.2.18 is a bugfix release in +the stable 1.2-series of Mumble. This version of Mumble fixes a few compatibility issues with macOS Sierra, along with a few general fixes. @@ -14,11 +15,11 @@ This version of Mumble fixes a few compatibility issues with macOS Sierra, along Changes in this release: -* Fixed a problem where some settings were improperly saved on macOS Sierra. -* AppNap is now disabled via LSAppNapIsDisabled=true in the Info.plist. -* Improved text rendering on Retina displays on macOS (NSHighResolutionCapable in Info.plist + a patched Qt 4). -* The build now explicitly passes -std=c++98 unless CONFIG+=c++11, CONFIG+=c++14 or CONFIG+=c++1z is specified. -* Mumble now includes /usr/lib/${MULTIARCH_TRIPLE}/c++11 in modern C++ mode (for Ubuntu’s Ice) +- Fixed a problem where some settings were improperly saved on macOS Sierra. +- AppNap is now disabled via LSAppNapIsDisabled=true in the Info.plist. +- Improved text rendering on Retina displays on macOS (NSHighResolutionCapable in Info.plist + a patched Qt 4). +- The build now explicitly passes -std=c++98 unless CONFIG+=c++11, CONFIG+=c++14 or CONFIG+=c++1z is specified. +- Mumble now includes /usr/lib/${MULTIARCH_TRIPLE}/c++11 in modern C++ mode (for Ubuntu’s Ice) For a full changelog, please see [the diff between 1.2.17 and 1.2.18 on GitHub][2]. @@ -26,6 +27,8 @@ You can download this release on [GitHub][3]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.18 - [2]: https://github.com/mumble-voip/mumble/compare/1.2.17...1.2.18 - [3]: https://github.com/mumble-voip/mumble/releases/tag/1.2.18 "https://github.com/mumble-voip/mumble/releases/tag/1.2.18" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.18 +[2]: https://github.com/mumble-voip/mumble/compare/1.2.17...1.2.18 +[3]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.18 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.18" diff --git a/hugo/content/blog/2017-01-27-mumble-1-2-19.md b/hugo/content/blog/2017-01-27-mumble-1-2-19.md index 117b3f91..15b3fede 100644 --- a/hugo/content/blog/2017-01-27-mumble-1-2-19.md +++ b/hugo/content/blog/2017-01-27-mumble-1-2-19.md @@ -5,18 +5,24 @@ date: 2017-01-27T15:00:23+00:00 categories: - Release - Security - --- -The Mumble team has [released version 1.2.19][1] of the Mumble VoIP application. Version 1.2.19 is a bugfix and security release in the stable 1.2-series of Mumble. -This version of Mumble fixes a problem where the output of Murmur’s -limits command was never shown. It also updates the OpenSSL version that our binary packages are built against to 1.0.2k. +The Mumble team has [released version 1.2.19][1] of the Mumble VoIP application. Version 1.2.19 is a bugfix and security +release in the stable 1.2-series of Mumble. + +This version of Mumble fixes a problem where the output of Murmur’s -limits command was never shown. It also +updates the OpenSSL version that our binary packages are built against to 1.0.2k. Changes in this release: -* OpenSSL in our binary packages have been updated to 1.0.2k due to OpenSSL Security Advisory [26 Jan 2017] -* Murmur’s -limits command will now print output as it runs, instead of at exit. (98cd156f0c26be2bacc22d8c64db9c349f16a213) +- OpenSSL in our binary packages have been updated to 1.0.2k due to + OpenSSL + Security Advisory [26 Jan 2017] +- Murmur’s -limits command will now print output as it runs, instead of at exit. + (98cd156f0c26be2bacc22d8c64db9c349f16a213) + For a full changelog, please see [the diff between 1.2.18 and 1.2.19 on GitHub][2]. @@ -24,6 +30,8 @@ You can download this release on [GitHub][3]. Enjoy! The Mumble team - [1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.19 - [2]: https://github.com/mumble-voip/mumble/compare/1.2.18...1.2.19 - [3]: https://github.com/mumble-voip/mumble/releases/tag/1.2.19 "https://github.com/mumble-voip/mumble/releases/tag/1.2.19" +[1]: https://github.com/mumble-voip/mumble/releases/tag/1.2.19 +[2]: https://github.com/mumble-voip/mumble/compare/1.2.18...1.2.19 +[3]: + https://github.com/mumble-voip/mumble/releases/tag/1.2.19 + "https://github.com/mumble-voip/mumble/releases/tag/1.2.19" diff --git a/hugo/content/blog/2017-05-03-progress-report-april-2017.md b/hugo/content/blog/2017-05-03-progress-report-april-2017.md index 3a729991..7cfeb25b 100644 --- a/hugo/content/blog/2017-05-03-progress-report-april-2017.md +++ b/hugo/content/blog/2017-05-03-progress-report-april-2017.md @@ -1,5 +1,5 @@ --- -title: 'Progress Report: April 2017' +title: "Progress Report: April 2017" author: Kissaki date: 2017-05-03T10:36:33+00:00 categories: @@ -7,78 +7,88 @@ categories: tags: - mumble - progress - --- -This month, we continued work on features for 1.3, some bug fixes and code improvements. We also improved our wiki documentation and categorization and in small parts our `README`, `INSTALL` and manual texts. -We did some fixes and improvements on the overlay exceptions system (supporting whitelisting of programs started from launchers). +This month, we continued work on features for 1.3, some bug fixes and code improvements. We also improved our wiki +documentation and categorization and in small parts our `README`, `INSTALL` and manual texts. + +We did some fixes and improvements on the overlay exceptions system (supporting whitelisting of programs started from +launchers). After restructuring our unit tests for easier testing we implemented more of them for new code we merged. ## New Features -* Introduced option to hide OS information from the server you connect to PR [#3009][1] [#3015][2] +- Introduced option to hide OS information from the server you connect to PR [#3009][1] [#3015][2] ## Mumble Client -* Fixed issue with default local volume dialog size PR [#3007][3] -* Fixed tooltips that could show when the Mumble window was not active PR [#3010][4] -* Updated translations from Transifex (our translation platform) PR [#3044][5] [#3016][6] -* Fixed a wizard issue by switching to the “classic” style PR [#3020][7] -* Fix an issue of the Mumble window no longer being visible in some cases with hide in tray enabled and specific Unix window managers (no tray icons) PR [#3025][8] -* Dropped overlay not being attached if not being injected because of issues in specific cases -* Added the itch.io launcher and Daybreak Games’ launcher as known launchers to overlay exceptions PR [#3049][9] [#3046][10] -* Allow drag-dropping files and folders into the overlay exception lists (configuration) PR [#3001][11] +- Fixed issue with default local volume dialog size PR [#3007][3] +- Fixed tooltips that could show when the Mumble window was not active PR [#3010][4] +- Updated translations from Transifex (our translation platform) PR [#3044][5] [#3016][6] +- Fixed a wizard issue by switching to the “classic” style PR [#3020][7] +- Fix an issue of the Mumble window no longer being visible in some cases with hide in tray enabled and specific Unix + window managers (no tray icons) PR [#3025][8] +- Dropped overlay not being attached if not being injected because of issues in specific cases +- Added the itch.io launcher and Daybreak Games’ launcher as known launchers to overlay exceptions PR [#3049][9] + [#3046][10] +- Allow drag-dropping files and folders into the overlay exception lists (configuration) PR [#3001][11] ## Positional Audio Plugins -* Updated our Battlefield 1 Positional Audio Plugin PR [#3003][12] -* Updated our Battlefield 4 Positional Audio Plugin PR [#2999][13] -* Updated our Battlefield 2142 Positional Audio Plugin PR [#3040][14] +- Updated our Battlefield 1 Positional Audio Plugin PR [#3003][12] +- Updated our Battlefield 4 Positional Audio Plugin PR [#2999][13] +- Updated our Battlefield 2142 Positional Audio Plugin PR [#3040][14] ## Mumble Server -* Check for validity of configured database driver PR [#3039][15] +- Check for validity of configured database driver PR [#3039][15] ## Documentation -* Cleaned up wiki documentation and categorization -* Updated documentation on {{< wiki "Obtaining a Let's Encrypt Murmur Certificate" />}} -* Describe `SIGHUP` and `SIGUSR1` in the manual file (`SIGHUP` exists for quite some time, `SIGUSR1` is a more recent new feature) PR [#3050][17] - * `SIGHUP` for log rotation - * `SIGUSR1` for reloading TLS settings (e.g. reloading Let’s Encrypt server certificates without downtime) +- Cleaned up wiki documentation and categorization +- Updated documentation on {{< wiki "Obtaining a Let's Encrypt Murmur Certificate" />}} +- Describe `SIGHUP` and `SIGUSR1` in the manual file (`SIGHUP` exists for quite some time, `SIGUSR1` is a more recent + new feature) PR [#3050][17] + - `SIGHUP` for log rotation + - `SIGUSR1` for reloading TLS settings (e.g. reloading Let’s Encrypt server certificates without downtime) ## Miscellaneous -* Improved code quality and potential issues (identified issues with CppCheck and PVS-Studio) PR# [#3051][18] [#3054][19] [#3008][20] # -* Some more work on our public builds (no-pch builds) (travis-ci and appveyor) PR [#3014][21] [#3013][22] [#3012][23] [#3011][24] -* Introduce build flag/configuration CONFIG(dpkg-buildflags) PR [#3033][25] [#3034][26] - -And as always, apart from these features that landed in our master development branch, we had discussions, community/user communication and work on features and improvements that are still work in progress. Our main goal continues to be to bring version 1.3 to a release candidate state.  You can already use 1.3, with most of the features mentioned above, when you install our development snapshots available from our [homepage][27]. - - [1]: https://github.com/mumble-voip/mumble/pull/3009 - [2]: https://github.com/mumble-voip/mumble/pull/3015 - [3]: https://github.com/mumble-voip/mumble/pull/3007 - [4]: https://github.com/mumble-voip/mumble/pull/3010 - [5]: https://github.com/mumble-voip/mumble/pull/3045 - [6]: https://github.com/mumble-voip/mumble/pull/3016 - [7]: https://github.com/mumble-voip/mumble/pull/3020 - [8]: https://github.com/mumble-voip/mumble/pull/3025 - [9]: https://github.com/mumble-voip/mumble/pull/3049 - [10]: https://github.com/mumble-voip/mumble/pull/3046 - [11]: https://github.com/mumble-voip/mumble/pull/3001 - [12]: https://github.com/mumble-voip/mumble/pull/3003 - [13]: https://github.com/mumble-voip/mumble/pull/2999 - [14]: https://github.com/mumble-voip/mumble/pull/3040 - [15]: https://github.com/mumble-voip/mumble/pull/3039 - [17]: https://github.com/mumble-voip/mumble/pull/3050 - [18]: https://github.com/mumble-voip/mumble/pull/3051 - [19]: https://github.com/mumble-voip/mumble/pull/3054 - [20]: https://github.com/mumble-voip/mumble/pull/3008 - [21]: https://github.com/mumble-voip/mumble/pull/3014 - [22]: https://github.com/mumble-voip/mumble/pull/3013 - [23]: https://github.com/mumble-voip/mumble/pull/3012 - [24]: https://github.com/mumble-voip/mumble/pull/3011 - [25]: https://github.com/mumble-voip/mumble/pull/3033 - [26]: https://github.com/mumble-voip/mumble/pull/3034 - [27]: https://www.mumble.info/ +- Improved code quality and potential issues (identified issues with CppCheck and PVS-Studio) PR# [#3051][18] + [#3054][19] [#3008][20] # +- Some more work on our public builds (no-pch builds) (travis-ci and appveyor) PR [#3014][21] [#3013][22] [#3012][23] + [#3011][24] +- Introduce build flag/configuration CONFIG(dpkg-buildflags) PR [#3033][25] [#3034][26] + +And as always, apart from these features that landed in our master development branch, we had discussions, +community/user communication and work on features and improvements that are still work in progress. Our main goal +continues to be to bring version 1.3 to a release candidate state.  You can already use 1.3, with most of the features +mentioned above, when you install our development snapshots available from our [homepage][27]. + +[1]: https://github.com/mumble-voip/mumble/pull/3009 +[2]: https://github.com/mumble-voip/mumble/pull/3015 +[3]: https://github.com/mumble-voip/mumble/pull/3007 +[4]: https://github.com/mumble-voip/mumble/pull/3010 +[5]: https://github.com/mumble-voip/mumble/pull/3045 +[6]: https://github.com/mumble-voip/mumble/pull/3016 +[7]: https://github.com/mumble-voip/mumble/pull/3020 +[8]: https://github.com/mumble-voip/mumble/pull/3025 +[9]: https://github.com/mumble-voip/mumble/pull/3049 +[10]: https://github.com/mumble-voip/mumble/pull/3046 +[11]: https://github.com/mumble-voip/mumble/pull/3001 +[12]: https://github.com/mumble-voip/mumble/pull/3003 +[13]: https://github.com/mumble-voip/mumble/pull/2999 +[14]: https://github.com/mumble-voip/mumble/pull/3040 +[15]: https://github.com/mumble-voip/mumble/pull/3039 +[17]: https://github.com/mumble-voip/mumble/pull/3050 +[18]: https://github.com/mumble-voip/mumble/pull/3051 +[19]: https://github.com/mumble-voip/mumble/pull/3054 +[20]: https://github.com/mumble-voip/mumble/pull/3008 +[21]: https://github.com/mumble-voip/mumble/pull/3014 +[22]: https://github.com/mumble-voip/mumble/pull/3013 +[23]: https://github.com/mumble-voip/mumble/pull/3012 +[24]: https://github.com/mumble-voip/mumble/pull/3011 +[25]: https://github.com/mumble-voip/mumble/pull/3033 +[26]: https://github.com/mumble-voip/mumble/pull/3034 +[27]: https://www.mumble.info/ diff --git a/hugo/content/blog/2020-06-08-mumble-1-3-1-release.md b/hugo/content/blog/2020-06-08-mumble-1-3-1-release.md index c8849926..ed49fdb1 100644 --- a/hugo/content/blog/2020-06-08-mumble-1-3-1-release.md +++ b/hugo/content/blog/2020-06-08-mumble-1-3-1-release.md @@ -1,59 +1,65 @@ ---- -title: Mumble 1.3.1 Release Announcement -author: Jan Klass -date: 2020-06-08 -categories: - - Release - - Security ---- -The Mumble team has released [**version 1.3.1**](https://github.com/mumble-voip/mumble/releases/tag/1.3.1) of the Mumble VoIP application. This is a **bugfix and security release** of the current and stable 1.3 series. - -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.1) or from within your Windows client or software package management system. - - - -## Changes in this Version - -### Security - -* Fixed: Potential exploit in the OCB2 encryption ({{< issue 4227 >}}) - -### ICE - -* Fixed: Added missing UserKDFIterations field to UserInfo => Prevents getRegistration() from failing with enumerator out of range error ({{< issue 3835 >}}) - -### GRPC - -* Fixed: Segmentation fault during murmur shutdown ({{< issue 3938 >}}) - -### Client - -* Fixed: Crash when using multiple monitors ({{< issue 3756 >}}) -* FIxed: Don't send empty message from clipboard via shortcut, if clipboard is empty ({{< issue 3864 >}}) -* Fixed: Talking indicator being able to freeze to indicate talking when self-muted ({{< issue 4006 >}}) -* Fixed: High CPU usage for update-check if update server not available ({{< issue 4019 >}}) -* Fixed: DBus getCurrentUrl returning empty string when not in root-channel ({{< issue 4029 >}}) -* Fixed: Small parts of whispering leaking out to normal talk ({{< issue 4051 >}}) -* Fixed: Last audio frame of normal talking sent to last whisper target instead when using VoiceActivation ({{< issue 4050 >}}) -* Fixed: LAN-icon not found in ConnectDialog ({{< issue 4058 >}}) -* Improved: Set maximal vertical size for User Volume Adjustment dialog ({{< issue 3801 >}}) -* Improved: Don't send empty data to PulseAudio ({{< issue 3316 >}}) -* Improved: Use the SRV resolved port for UDP connections ({{< issue 3820 >}}) -* Improved: Manual Plugin UI ({{< issue 3919 >}}) -* Improved: Don't start Jack server by default ({{< issue 3990 >}}) -* Improved: Overlay doesn't hook into all other processes by default ({{< issue 4041 >}}) -* Improved: Wait longer before disconnecting from a server due to unanswered Ping-messages ({{< issue 4123 >}}) - -### Server - -* Fixed: Possibility to circumvent max user-count in channel ({{< issue 3880 >}}) -* Fixed: Rate-limit implementation susceptible to time-underflow ({{< issue 4004 >}}) -* Fixed: OpenSSL error 140E0197 with Qt >= 5.12.2 ({{< issue 4032 >}}) -* Fixed: VersionCheck for SQL for when to use the WAL feature ({{< issue 4163 >}}) -* Fixed: Wrong database encoding that could lead to server-crash ({{< issue 4220 >}}) -* Fixed: DB crash due to primary key violation (now performs "UPSERT" to avoid this) ({{< issue 4105 >}}) -* Improved: The fields in the `Version` ProtoBuf message are now size-restricted in order to avoid attacks that can render another client unresponsive ({{< issue 4101 >}}) - -### Windows Installer - -* Improved: Mumble icon (now properly displayed) ({{< issue 4204 >}}) +--- +title: Mumble 1.3.1 Release Announcement +author: Jan Klass +date: 2020-06-08 +categories: + - Release + - Security +--- + +The Mumble team has released [**version 1.3.1**](https://github.com/mumble-voip/mumble/releases/tag/1.3.1) of the Mumble +VoIP application. This is a **bugfix and security release** of the current and stable 1.3 series. + +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.1) +or from within your Windows client or software package management system. + + + +## Changes in this Version + +### Security + +- Fixed: Potential exploit in the OCB2 encryption ({{< issue 4227 >}}) + +### ICE + +- Fixed: Added missing UserKDFIterations field to UserInfo => Prevents getRegistration() from failing with enumerator + out of range error ({{< issue 3835 >}}) + +### GRPC + +- Fixed: Segmentation fault during murmur shutdown ({{< issue 3938 >}}) + +### Client + +- Fixed: Crash when using multiple monitors ({{< issue 3756 >}}) +- FIxed: Don't send empty message from clipboard via shortcut, if clipboard is empty ({{< issue 3864 >}}) +- Fixed: Talking indicator being able to freeze to indicate talking when self-muted ({{< issue 4006 >}}) +- Fixed: High CPU usage for update-check if update server not available ({{< issue 4019 >}}) +- Fixed: DBus getCurrentUrl returning empty string when not in root-channel ({{< issue 4029 >}}) +- Fixed: Small parts of whispering leaking out to normal talk ({{< issue 4051 >}}) +- Fixed: Last audio frame of normal talking sent to last whisper target instead when using VoiceActivation + ({{< issue 4050 >}}) +- Fixed: LAN-icon not found in ConnectDialog ({{< issue 4058 >}}) +- Improved: Set maximal vertical size for User Volume Adjustment dialog ({{< issue 3801 >}}) +- Improved: Don't send empty data to PulseAudio ({{< issue 3316 >}}) +- Improved: Use the SRV resolved port for UDP connections ({{< issue 3820 >}}) +- Improved: Manual Plugin UI ({{< issue 3919 >}}) +- Improved: Don't start Jack server by default ({{< issue 3990 >}}) +- Improved: Overlay doesn't hook into all other processes by default ({{< issue 4041 >}}) +- Improved: Wait longer before disconnecting from a server due to unanswered Ping-messages ({{< issue 4123 >}}) + +### Server + +- Fixed: Possibility to circumvent max user-count in channel ({{< issue 3880 >}}) +- Fixed: Rate-limit implementation susceptible to time-underflow ({{< issue 4004 >}}) +- Fixed: OpenSSL error 140E0197 with Qt >= 5.12.2 ({{< issue 4032 >}}) +- Fixed: VersionCheck for SQL for when to use the WAL feature ({{< issue 4163 >}}) +- Fixed: Wrong database encoding that could lead to server-crash ({{< issue 4220 >}}) +- Fixed: DB crash due to primary key violation (now performs "UPSERT" to avoid this) ({{< issue 4105 >}}) +- Improved: The fields in the `Version` ProtoBuf message are now size-restricted in order to avoid attacks that can + render another client unresponsive ({{< issue 4101 >}}) + +### Windows Installer + +- Improved: Mumble icon (now properly displayed) ({{< issue 4204 >}}) diff --git a/hugo/content/blog/2020-07-09-mumble-1-3-2-release.md b/hugo/content/blog/2020-07-09-mumble-1-3-2-release.md index 6b1b0c70..418411d6 100644 --- a/hugo/content/blog/2020-07-09-mumble-1-3-2-release.md +++ b/hugo/content/blog/2020-07-09-mumble-1-3-2-release.md @@ -1,31 +1,30 @@ ---- -title: Mumble 1.3.2 Release Announcement -author: Robert Adam -date: 2020-07-09 -categories: - - Release ---- -The Mumble team has released [**version 1.3.2**](https://github.com/mumble-voip/mumble/releases/tag/1.3.2) of the Mumble VoIP application. This is a -**bugfix release** of the current and stable 1.3 series. - -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.2) or from within your Windows client or software package management -system. - - - -## Changes in this Version - -### Client - -Fixed: Overlay not starting ({{}}) - -### Server - -Fixed: keychain-error on macOS for custom certificates ({{}}) - - -## Known issues - -- Overlay blocked by BattleEye. A request to whitelist it has been made. -- Overlay blocked by CS:GO Trusted Mode +--- +title: Mumble 1.3.2 Release Announcement +author: Robert Adam +date: 2020-07-09 +categories: + - Release +--- + +The Mumble team has released [**version 1.3.2**](https://github.com/mumble-voip/mumble/releases/tag/1.3.2) of the Mumble +VoIP application. This is a **bugfix release** of the current and stable 1.3 series. + +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.2) +or from within your Windows client or software package management system. + + + +## Changes in this Version + +### Client + +Fixed: Overlay not starting ({{}}) + +### Server + +Fixed: keychain-error on macOS for custom certificates ({{}}) + +## Known issues + +- Overlay blocked by BattleEye. A request to whitelist it has been made. +- Overlay blocked by CS:GO Trusted Mode diff --git a/hugo/content/blog/2020-10-01-hacktoberfest.md b/hugo/content/blog/2020-10-01-hacktoberfest.md index 507e6b56..19ce3324 100644 --- a/hugo/content/blog/2020-10-01-hacktoberfest.md +++ b/hugo/content/blog/2020-10-01-hacktoberfest.md @@ -1,21 +1,35 @@ ---- -title: Hacktoberfest - GitHub contribution event -date: 2020-10-01 -categories: - - News ---- -**Hacktoberfest** is a yearly month-long event encouraging contributions on GitHub, organized by the cloud hoster Digital Ocean. You can find more information about the event on the [Hacktoberfest website](https://hacktoberfest.digitalocean.com/). - -The spirit of the event is to strengthen communities and encourage contribution. As a physical encouragement with four eligible contributions you can get a free T-shirt and stickers. See the project website for details. - -This post is meant as a shoutout to this event, but also to lay out how we intend to handle it and to point out how you can start contributing to our project. - -We marked our issue tickets that are [marked with the **good first issue** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) with the [**Hacktoberfest** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3AHacktoberfest) as well. These could be a good starting point for new contributors. - -The [**help wanted** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) also contains tickets for which we would welcome contributions. These may be more difficult or more effort though. - -But the event is not limited to these tickets. In fact not even limited to tickets at all. Any created Pull Request is eligible as a contribution unless marked as invalid or spam. Please see the event website for specifics. - -In general we welcome contributions. If you are unsure of how you can best spend your time with us, or whether to invest time into a specific solution, feel free to comment on tickets and feature requests, create a ticket for discussion, create draft pull request laying out a design and concept, or reaching out to us in chat. - -Good luck and have fun! +--- +title: Hacktoberfest - GitHub contribution event +date: 2020-10-01 +categories: + - News +--- + +**Hacktoberfest** is a yearly month-long event encouraging contributions on GitHub, organized by the cloud hoster +Digital Ocean. You can find more information about the event on the +[Hacktoberfest website](https://hacktoberfest.digitalocean.com/). + +The spirit of the event is to strengthen communities and encourage contribution. As a physical encouragement with four +eligible contributions you can get a free T-shirt and stickers. See the project website for details. + +This post is meant as a shoutout to this event, but also to lay out how we intend to handle it and to point out how you +can start contributing to our project. + +We marked our issue tickets that are +[marked with the **good first issue** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) +with the +[**Hacktoberfest** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3AHacktoberfest) as +well. These could be a good starting point for new contributors. + +The +[**help wanted** label](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) +also contains tickets for which we would welcome contributions. These may be more difficult or more effort though. + +But the event is not limited to these tickets. In fact not even limited to tickets at all. Any created Pull Request is +eligible as a contribution unless marked as invalid or spam. Please see the event website for specifics. + +In general we welcome contributions. If you are unsure of how you can best spend your time with us, or whether to invest +time into a specific solution, feel free to comment on tickets and feature requests, create a ticket for discussion, +create draft pull request laying out a design and concept, or reaching out to us in chat. + +Good luck and have fun! diff --git a/hugo/content/blog/2020-10-05-mumble-1-3-3-release.md b/hugo/content/blog/2020-10-05-mumble-1-3-3-release.md index 3f77ea9e..6572516f 100644 --- a/hugo/content/blog/2020-10-05-mumble-1-3-3-release.md +++ b/hugo/content/blog/2020-10-05-mumble-1-3-3-release.md @@ -1,41 +1,43 @@ ---- -title: Mumble 1.3.3 Release Announcement -author: Robert Adam -date: 2020-10-05 -categories: - - Release - - Security ---- -The Mumble team has released [**version 1.3.3**](https://github.com/mumble-voip/mumble/releases/tag/1.3.3) of the Mumble VoIP application. This is a -**bugfix and security release** of the current and stable 1.3 series. - -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.3) or from within your Windows client or software package management -system. - - - -## Changes in this Version - -### Client - -- Fixed: Chatbox invisble (zero height) (#4388) -- Fixed: Handling of invalid packet sizes (#4394) -- Fixed: Race-condition leading to loss of shortcuts (#4430) -- Fixed: Link in About dialog is now clickable again (#4454) -- Fixed: Sizing issues in ACL-Editor (#4455) -- Improved: PulseAudio now always samples at 48 kHz (#4449) - -### Server - -- Fixed: Crash due to problems when using PostgreSQL (#4370) -- Fixed: Handling of invalid package sizes (#4392) - -## Known issues - -- Overlay blocked by BattleEye. A request to whitelist it has been made. -- Overlay blocked by CS:GO Trusted Mode. - -## Warning - -- The static server binary for Linux is using an outdated version of OpenSSL - see https://github.com/mumble-voip/mumble/issues/4001 for details. This warning only applies to the package released by us named `murmur-static_x86`. It does not apply to our Ubuntu PPA releases or other maintained packages. +--- +title: Mumble 1.3.3 Release Announcement +author: Robert Adam +date: 2020-10-05 +categories: + - Release + - Security +--- + +The Mumble team has released [**version 1.3.3**](https://github.com/mumble-voip/mumble/releases/tag/1.3.3) of the Mumble +VoIP application. This is a **bugfix and security release** of the current and stable 1.3 series. + +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.3) +or from within your Windows client or software package management system. + + + +## Changes in this Version + +### Client + +- Fixed: Chatbox invisble (zero height) (#4388) +- Fixed: Handling of invalid packet sizes (#4394) +- Fixed: Race-condition leading to loss of shortcuts (#4430) +- Fixed: Link in About dialog is now clickable again (#4454) +- Fixed: Sizing issues in ACL-Editor (#4455) +- Improved: PulseAudio now always samples at 48 kHz (#4449) + +### Server + +- Fixed: Crash due to problems when using PostgreSQL (#4370) +- Fixed: Handling of invalid package sizes (#4392) + +## Known issues + +- Overlay blocked by BattleEye. A request to whitelist it has been made. +- Overlay blocked by CS:GO Trusted Mode. + +## Warning + +- The static server binary for Linux is using an outdated version of OpenSSL - see + https://github.com/mumble-voip/mumble/issues/4001 for details. This warning only applies to the package released by us + named `murmur-static_x86`. It does not apply to our Ubuntu PPA releases or other maintained packages. diff --git a/hugo/content/blog/2020-12-24-mumble-1-4-0-snapshot.md b/hugo/content/blog/2020-12-24-mumble-1-4-0-snapshot.md index 1ef125df..e5cca356 100644 --- a/hugo/content/blog/2020-12-24-mumble-1-4-0-snapshot.md +++ b/hugo/content/blog/2020-12-24-mumble-1-4-0-snapshot.md @@ -7,108 +7,118 @@ categories: - Development Snapshot --- -This year we have a Christmas present for you: we are proud to announce that the first **snapshot release of Mumble 1.4.0** is released as of now. It -is a very important step towards the actual release of version 1.4.0. +This year we have a Christmas present for you: we are proud to announce that the first **snapshot release of Mumble +1.4.0** is released as of now. It is a very important step towards the actual release of version 1.4.0. -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). - -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Feature spotlight -As there are many, many changes with this new version, here is a selection of things that we think are most prominent. If you're interested in all -changes, have a look at the full [changelog](#changelog). +As there are many, many changes with this new version, here is a selection of things that we think are most prominent. +If you're interested in all changes, have a look at the full [changelog](#changelog). ### Channel listeners -This feature can to some extent be compared to the ability to link channels. Except that this does not operate on a per-channel basis but on a -per-user basis. +This feature can to some extent be compared to the ability to link channels. Except that this does not operate on a +per-channel basis but on a per-user basis. -Concretely this new feature allows a user to "listen to" a channel. In that case all audio that is heard by people in this particular channel (be it -by direct communication, shouts or via linked channels) is also heard by the listening user. Conceptually you could picture "listening to" a channel -with placing a microphone in a room and then listening to what is recorded. +Concretely this new feature allows a user to "listen to" a channel. In that case all audio that is heard by people in +this particular channel (be it by direct communication, shouts or via linked channels) is also heard by the listening +user. Conceptually you could picture "listening to" a channel with placing a microphone in a room and then listening to +what is recorded. -This feature is one-way only meaning that in order to speak to people in the listened channel, you'll have to either join the channel or shout to it. +This feature is one-way only meaning that in order to speak to people in the listened channel, you'll have to either +join the channel or shout to it. -It should be noted though that you will not be secretly listened to with this new feature. Listening to a channel creates a new entry in the channel's -user-list (referred to as an "ear" or a "listener") and is thereby just as visible as a user actually being in that channel. There is also a dedicated -ACL and several new server config options that can restrict this new feature. +It should be noted though that you will not be secretly listened to with this new feature. Listening to a channel +creates a new entry in the channel's user-list (referred to as an "ear" or a "listener") and is thereby just as visible +as a user actually being in that channel. There is also a dedicated ACL and several new server config options that can +restrict this new feature. -Older clients (< 1.4.0) will not indicate listeners in the UI though! They are informed if this feature is enabled on a server when they join it though -(via chat). +Older clients (< 1.4.0) will not indicate listeners in the UI though! They are informed if this feature is enabled on a +server when they join it though (via chat). Note: This feature requires server-side support and is thus only available on servers at least running Mumble 1.4.0. ![Channel listeners](/blog/media/ChannelListeners.png) - ### TalkingUI -Have you ever been in a situation where you heard someone talking but couldn't quite figure out who it was? Then this feature is probably for you! +Have you ever been in a situation where you heard someone talking but couldn't quite figure out who it was? Then this +feature is probably for you! -The TalkingUI can be considered the equivalent of the already existing overlay but for non-gamers or in other terms "for everyday usage". +The TalkingUI can be considered the equivalent of the already existing overlay but for non-gamers or in other terms "for +everyday usage". -This feature adds an optional floating window containing a list of currently speaking users and their respective channels. This allows you to quickly -see who's currently talking and in which channel that person currently is in (this becomes important if you want to respond to that person). +This feature adds an optional floating window containing a list of currently speaking users and their respective +channels. This allows you to quickly see who's currently talking and in which channel that person currently is in (this +becomes important if you want to respond to that person). -The big difference between the TalkingUI and Mumble's main window (which of course also contains this information) is that the TalkingUI does not -contain all the other UI elements nor does it necessarily show the entire channel-tree. Furthermore it automatically resizes itself to the minimal -size needed to display the respective information. Thus it usually does not take up a lot of space and can therefore be left floating in the corner of -the screen without consuming too much screen real estate. +The big difference between the TalkingUI and Mumble's main window (which of course also contains this information) is +that the TalkingUI does not contain all the other UI elements nor does it necessarily show the entire channel-tree. +Furthermore it automatically resizes itself to the minimal size needed to display the respective information. Thus it +usually does not take up a lot of space and can therefore be left floating in the corner of the screen without consuming +too much screen real estate. -Note that the TalkingUI is highly configurable (Settings -> User Interface) and also does provides selection and context-menu support just as you get -it in the main window. In fact the selection between TalkingUI and main window is synchronized and thus this plays really nice with the new "whisper -to selected" feature allowing to whisper to whatever currently is selected in the UI (be it a channel or a user). +Note that the TalkingUI is highly configurable (Settings -> User Interface) and also does provides selection and +context-menu support just as you get it in the main window. In fact the selection between TalkingUI and main window is +synchronized and thus this plays really nice with the new "whisper to selected" feature allowing to whisper to whatever +currently is selected in the UI (be it a channel or a user). ![TalkingUI](/blog/media/TalkingUI.png) - ### UI indication for access restrictions -In previous versions of Mumble there was no indication of whether you are able to join a channel or not. You just had to try it out and either it -worked or you got a Permission Denied message. This feature solves this problem by marking "access-restricted" channels with a lock icon. Access -restricted channels are all channels that are either only open to a specific group on the server or require a password (access token) to join. +In previous versions of Mumble there was no indication of whether you are able to join a channel or not. You just had to +try it out and either it worked or you got a Permission Denied message. This feature solves this problem by marking +"access-restricted" channels with a lock icon. Access restricted channels are all channels that are either only open to +a specific group on the server or require a password (access token) to join. -In total a channel can be in one of three states: either it is not access-restricted in which case it just looks like channels used to look prior to -the introduction of this feature or it is indeed access-restricted. In the latter case a lock icon is shown to the right of channel name. This look -can either be open and green or closed and red. Green means that you can enter the channel nonetheless (you belong to the required group or have the -correct password (access token) set) whereas red means that you are not allowed to enter the channel. +In total a channel can be in one of three states: either it is not access-restricted in which case it just looks like +channels used to look prior to the introduction of this feature or it is indeed access-restricted. In the latter case a +lock icon is shown to the right of channel name. This look can either be open and green or closed and red. Green means +that you can enter the channel nonetheless (you belong to the required group or have the correct password (access token) +set) whereas red means that you are not allowed to enter the channel. -Note that this is also a feature that requires server-side support and thus only takes effect on servers that are at least running Mumble version -1.4.0. +Note that this is also a feature that requires server-side support and thus only takes effect on servers that are at +least running Mumble version 1.4.0. ![Access restricted channels](/blog/media/AccessRestrictedChannels.png) - ### Markdown -For those of you who don't know what markdown is, we recommend a quick read of the respective [Wikipedia -article](https://en.wikipedia.org/wiki/Markdown). In simple words it allows formatting of text by simply typing a few extra characters in your text. +For those of you who don't know what markdown is, we recommend a quick read of the respective +[Wikipedia article](https://en.wikipedia.org/wiki/Markdown). In simple words it allows formatting of text by simply +typing a few extra characters in your text. -Mumble now supports markdown for text messages written in the normal chat bar. It is not supported for cases in which you use the dedicated message -editor. Furthermore only a subset of markdown is supported: sections, inline-code, code-blocks, bold, italic and strike-through text, links and -quotes. _Not_ supported are lists and tables. +Mumble now supports markdown for text messages written in the normal chat bar. It is not supported for cases in which +you use the dedicated message editor. Furthermore only a subset of markdown is supported: sections, inline-code, +code-blocks, bold, italic and strike-through text, links and quotes. _Not_ supported are lists and tables. -This feature is probably best explained by an example. Try pasting the following text into the chat bar and see for yourself: +This feature is probably best explained by an example. Try pasting the following text into the chat bar and see for +yourself: ```` # Markdown @@ -135,39 +145,38 @@ We can escape special characters using the \\ character: \*not italic\* and \*\* ![Markdown](/blog/media/Markdown.png) - ### Stereo playback -With version 1.4.0 Mumble (finally) learned how to play back stereo audio streams. This means that it is now possible to send a stereo stream to a -Mumble client and it will actually be played back without being mixed down to a mono stream. +With version 1.4.0 Mumble (finally) learned how to play back stereo audio streams. This means that it is now possible to +send a stereo stream to a Mumble client and it will actually be played back without being mixed down to a mono stream. -Note however that this feature is currently restricted to playback. The official Mumble client will still continue sending audio as mono. This feature -is primarily intended to be made use of by (music) bots. - -If you want to try this feature out yourself, you can either write a bot using [pymumble](https://github.com/azlux/pymumble) version 1.2 or later or -you can simply use a recent version of [botamusqiue](https://github.com/azlux/botamusique). +Note however that this feature is currently restricted to playback. The official Mumble client will still continue +sending audio as mono. This feature is primarily intended to be made use of by (music) bots. +If you want to try this feature out yourself, you can either write a bot using +[pymumble](https://github.com/azlux/pymumble) version 1.2 or later or you can simply use a recent version of +[botamusqiue](https://github.com/azlux/botamusique). ### Nicknames -For those of you who are annoyed by people using excessively long or complicated names or people changing their nickname frequently, Mumble 1.4.0 -introduces the possibility to set a nickname for every client. +For those of you who are annoyed by people using excessively long or complicated names or people changing their nickname +frequently, Mumble 1.4.0 introduces the possibility to set a nickname for every client. Depending on your configuration, a nickname will either be displayed next to a user's name or replace it entirely. -The nickname will persist across restarts of client and server. In fact it'll last until you either remove it again or the person the nickname was -assigned to changes their client-certificate (Mumble's way of keeping track of a user's identity). +The nickname will persist across restarts of client and server. In fact it'll last until you either remove it again or +the person the nickname was assigned to changes their client-certificate (Mumble's way of keeping track of a user's +identity). -Note that nicknames are _not_ tied to a particular server. That means that if you assign a nickname to a user on server A and then you meet that -person again on server B, they will still have that very same nickname set on server B. +Note that nicknames are _not_ tied to a particular server. That means that if you assign a nickname to a user on server +A and then you meet that person again on server B, they will still have that very same nickname set on server B. ![Nicknames](/blog/media/Nicknames.png) - ## Special thanks -We want to thank everyone who spent time on the project. Without this kind of help from you, we would not be able to provide the software the way it is. - +We want to thank everyone who spent time on the project. Without this kind of help from you, we would not be able to +provide the software the way it is. ## Changelog @@ -219,14 +228,16 @@ This changelog is the product of 1082 commits contributed to the Mumble reposito - Improved: Formatting & spacing of messages in chat ({{}}) - Improved: Audio wizard (appearance & explanations) ({{}}) - Improved: Echo cancellation settings ({{}}, {{}}) -- Improved: Users can now always choose to receive update-notifications for the client ({{}}, {{}}) +- Improved: Users can now always choose to receive update-notifications for the client ({{}}, + {{}}) - Improved: Echo cancellation is now enabled by default on all platforms but MacOS ({{}}) - Improved: Accessibility ({{}}, {{}}) - Improved: Some settings pages ({{}}, {{}}) - Improved: CoreAudio implementation ({{}}) - Improved: The user is notified if a change (e.g. local mute) could not be saved permanently ({{}}) - Improved: Server Browser UI ({{}}) -- Improved: Clear selection in shortcut settings after having removed shortcut to avoid accidental subsequent removal ({{}}) +- Improved: Clear selection in shortcut settings after having removed shortcut to avoid accidental subsequent removal + ({{}}) - Improved: Noise cancelling & associated UI ({{}}) - Improved: Use zeroconf instead of Bonjour on Windows if available ({{}}) - Improved: Tooltips for shortcut settings ({{}}) @@ -255,7 +266,6 @@ This changelog is the product of 1082 commits contributed to the Mumble reposito - Improved: Uninstall no longer deletes murmur.ini file ({{}}) - Complete refactoring ({{}}) - ### Positional audio plugins - Added: General Source Engine support ({{}}) @@ -263,7 +273,6 @@ This changelog is the product of 1082 commits contributed to the Mumble reposito - Updated: GTA V ({{}}) - Updated: Manual plugin's UI now shows a speaker's location ({{}}) - ### Overall - The project has been migrated to be built with cmake instead of qmake ({{}}) diff --git a/hugo/content/blog/2021-02-10-mumble-1-3-4-release.md b/hugo/content/blog/2021-02-10-mumble-1-3-4-release.md index 300a257c..fa60f8fe 100644 --- a/hugo/content/blog/2021-02-10-mumble-1-3-4-release.md +++ b/hugo/content/blog/2021-02-10-mumble-1-3-4-release.md @@ -1,43 +1,42 @@ ---- -title: Mumble 1.3.4 Release Announcement -author: Robert Adam -date: 2021-01-10 -categories: - - Release - - Security ---- -The Mumble team has released [**version 1.3.4**](https://github.com/mumble-voip/mumble/releases/tag/1.3.4) of the Mumble VoIP application. This is a -**bugfix and security release** of the current and stable 1.3 series. - -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.4) or from within your Windows client or software package management -system. - - - -## Changes in this Version - -### Client - -- Fixed: Don't use outdated (non-existent) notification icon names on Linux ({{< issue 4705 >}}) -- Fixed: Security vulnerability caused by allowing non http/https URL schemes in public server list ({{< issue 4733 >}}) - -### Server - -- Fixed: Exit status for actions like `--version` or `--supw` was always set to non-zero ({{< issue 3998 >}}) - -### General - -- Fixed: Packet loss & audio artifacts caused by OCB2 XEX* mitigation ({{< issue 4720 >}}) - -## Known issues - -- Overlay blocked by BattleEye. A request to whitelist it has been made. -- Overlay blocked by CS:GO Trusted Mode. - -## Warning - -- The static server binary for Linux is using an outdated version of OpenSSL - see https://github.com/mumble-voip/mumble/issues/4001 for details. This - warning only applies to the package released by us named `murmur-static_x86`. It does not apply to our Ubuntu PPA releases or other maintained - packages. - +--- +title: Mumble 1.3.4 Release Announcement +author: Robert Adam +date: 2021-01-10 +categories: + - Release + - Security +--- + +The Mumble team has released [**version 1.3.4**](https://github.com/mumble-voip/mumble/releases/tag/1.3.4) of the Mumble +VoIP application. This is a **bugfix and security release** of the current and stable 1.3 series. + +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/1.3.4) +or from within your Windows client or software package management system. + + + +## Changes in this Version + +### Client + +- Fixed: Don't use outdated (non-existent) notification icon names on Linux ({{< issue 4705 >}}) +- Fixed: Security vulnerability caused by allowing non http/https URL schemes in public server list ({{< issue 4733 >}}) + +### Server + +- Fixed: Exit status for actions like `--version` or `--supw` was always set to non-zero ({{< issue 3998 >}}) + +### General + +- Fixed: Packet loss & audio artifacts caused by OCB2 XEX\* mitigation ({{< issue 4720 >}}) + +## Known issues + +- Overlay blocked by BattleEye. A request to whitelist it has been made. +- Overlay blocked by CS:GO Trusted Mode. + +## Warning + +- The static server binary for Linux is using an outdated version of OpenSSL - see + https://github.com/mumble-voip/mumble/issues/4001 for details. This warning only applies to the package released by us + named `murmur-static_x86`. It does not apply to our Ubuntu PPA releases or other maintained packages. diff --git a/hugo/content/blog/2021-02-26-mumble-1-4-0-snapshot2.md b/hugo/content/blog/2021-02-26-mumble-1-4-0-snapshot2.md index 05d31c92..2e662333 100644 --- a/hugo/content/blog/2021-02-26-mumble-1-4-0-snapshot2.md +++ b/hugo/content/blog/2021-02-26-mumble-1-4-0-snapshot2.md @@ -7,36 +7,38 @@ categories: - Development Snapshot --- -After the [first snapshot]({{< relref "/blog/2020-12-24-mumble-1-4-0-snapshot" >}}) has been released -on Christmas last year (2020), we now present you an updated version of the snapshot version of the upcoming -feature release 1.4.0. +After the [first snapshot]({{< relref "/blog/2020-12-24-mumble-1-4-0-snapshot" >}}) has been released on Christmas last year +(2020), we now present you an updated version of the snapshot version of the upcoming feature release 1.4.0. -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Changelog -The changes listed here are relative to the last snapshot version. Note also that the development snapshot also -includes all fixes that were shipped in the recently released version [1.3.4](https://www.mumble.info/blog/mumble-1.3.4-release-announcement/). +The changes listed here are relative to the last snapshot version. Note also that the development snapshot also includes +all fixes that were shipped in the recently released version +[1.3.4](https://www.mumble.info/blog/mumble-1.3.4-release-announcement/). ### Client @@ -56,15 +58,12 @@ includes all fixes that were shipped in the recently released version [1.3.4](ht - Fixed: Issues with Mumble URL versioning ({{< issue 4778 >}}) - Improved: Shortcut representation and interaction in settings ({{< issue 4722 >}}) - ### Server - Changed: Make default max bandwidth the highest supported ({{< issue 4700 >}}) - Fixed: Fix protocol version not being set correctly ({{< issue 4683 >}}) - Fixed: Older clients not being warned about ChannelListener ({{< issue 4689 >}}) - ### Positional audio plugins - Updated: Among Us plugin to work with v2020.12.09s ({{< issue 4663 >}}) - diff --git a/hugo/content/blog/2021-03-20-weblate-translation/index.md b/hugo/content/blog/2021-03-20-weblate-translation/index.md index 7251ddb4..00c4790a 100644 --- a/hugo/content/blog/2021-03-20-weblate-translation/index.md +++ b/hugo/content/blog/2021-03-20-weblate-translation/index.md @@ -1,82 +1,114 @@ ---- -title: Switch to Weblate as Translation Platform -author: Jan Klass -date: 2021-05-10 -categories: - - News ---- -The Mumble client is available in many languages. For the translation process we recently moved from the [Transifex](https://www.transifex.com/) online platform to [Weblate](https://weblate.org/). In this post we describe our translation history, reasoning, and current approach. - - -Translations now happen in the [Mumble client project on Hosted Weblate](https://hosted.weblate.org/projects/mumble/mumble-client/). - - - -## History - From local to online - -Our Mumble client is making use of the Qt framework which provides various features. Amongst them also a system for localization. - - -In the source folder `src/mumble` we produce a `.ts` file for each language, which contains the source and corresponding translated texts. These files could be edited manually with a text or XML editor, or a translation application. - - -To lower the barrier for potential translators we moved to [Transifex](https://www.transifex.com/), a web based translation platform in 2014. Using a web platform contributors and anyone else can access translation information with a web browser, which made it a lot easier to work with. It also adds a few collaborative features that can be used. - -To integrate the third party service we implemented a bot ([MumbleTransifexBot](https://github.com/mumble-voip/MumbleTransifexBot)) that would pull translation updates and create pull requests on GitHub for us. Once established this significantly reduced the work necessary for maintaining this system and integrating translation changes. - -## Reevaluation - -In the 6 years since we switched to Transifex, the translation platform changed significantly. Good alternatives appeared, and we took some discussion from an issue ticket as initiation for a reevaluation of our situation and opportunities. - - -Making systematic changes always results in foreseen and unforeseen effort, so not only did we have to evaluate whether there were better alternatives around, but also whether it was worth it to invest into switching to it. A migration is not only a change for our integration and hosting process, but also for existing translators that have to potentially learn new processes and interfaces. We had to evaluate not only technical aspects but also terms of service, and human aspects. - -When looking for alternatives we quickly came to three big contenders: - -1. Transifex - alread established and integrated -2. Crowdin - a promising alternative -3. Weblate - official hosted instance of the Weblate open source software - -We documented our evaluation and also asked for feedback [in a discussion topic *(#4641)*](https://github.com/mumble-voip/mumble/discussions/4641). - -All three provide free hosting for open source (some limits apply). As a project with a small team and very limited resources we are very greatful for this. Without these we would be in a much worse position. - -Various useful features are shared between the platforms, while the user interface and user experience differs greatly between them, as well as the technology behind it and resulting way to integrate them. - -In the end we decided to initiate a move to [Hosted Weblate](https://hosted.weblate.org/). Apart from the feature aspects we are also glad to move to a hosted open source software for translations. - -## Migration to Weblate - -The migration itself has mostly technical aspects to it, and a lot of related work. Deep-diving into the localization setup and aspects of our project also showed some inconsistencies and questions for the future, and potential for cleanup which we applied. The migration is/was tracked in [ticket #4727](https://github.com/mumble-voip/mumble/issues/4727). - -Weblate provides integration to GitHub and pull request creation. Some advanced configuration scenarios allow for additional customization. Thanks to the integration we were able to phase out our integration and PR creation bot. - -Interestingly enough even before finishing the migration and even with notices on Hosted Weblate to not translate yet we received contributions on there. - -We have been using Weblate for several weeks now, and have received numerous contributions. Thank you to all existing and future translators! - -The process is not as smooth as we would like it to be yet, but we are glad we made the transition already. And we hope existing and future translators like the Hosted Weblate platform. - -## Weblate Translation Platform - -[Weblate](https://weblate.org/) is open source software. The hosted instance services not only us as FOSS but [other projects](https://hosted.weblate.org/projects/) as well. - - -We are very thankful for the free hosting they provide to us. If you are looking for a translation platform for other FOSS or [commercial projects (pricing)](https://weblate.org/en/hosting/), please consider using them. [Direct donations to them](https://weblate.org/en/donate/) are helping them too, and were explicitly mentioned for consideration after approving our project. - - -## Our Translation Project on Hosted Weblate - -We support numerous languages, and also have some languages that are not complete enough for productive use yet. If you are fluent in one of them, please consider contributing to [our translations](https://hosted.weblate.org/projects/mumble/mumble-client/). - -![Weblate translation status by language](https://hosted.weblate.org/widgets/mumble/-/mumble-client/horizontal-auto.svg) - -If you want to translate a language that we did not add yet, and are willing to commit to it, please create a request in [our issue tracker](https://github.com/mumble-voip/mumble/issues). We can add additional languages. - -Have any feedback, positive or negative, praise or concerns? We would love to hear from you! - -## Road to Mumble version 1.4 - -We recently landed blockers for 1.4, and are now in the process of preparing a last development snapshot, a feature freeze, and then plan to publish release candidates. - -We would love to release 1.4.0 with many, complete, and good translations. If you are a willing translator, please take this opportunity to focus on finalizing translations towards the upcoming release. It would be great if we had finalized translations within about a month or two. Thank you very much. +--- +title: Switch to Weblate as Translation Platform +author: Jan Klass +date: 2021-05-10 +categories: + - News +--- + +The Mumble client is available in many languages. For the translation process we recently moved from the +[Transifex](https://www.transifex.com/) online platform to [Weblate](https://weblate.org/). In this post we describe our +translation history, reasoning, and current approach. + +Translations now happen in the +[Mumble client project on Hosted Weblate](https://hosted.weblate.org/projects/mumble/mumble-client/). + + + +## History - From local to online + +Our Mumble client is making use of the Qt framework which provides various features. Amongst them also a system for +localization. + +In the source folder `src/mumble` we produce a `.ts` file for each language, which contains the source and corresponding +translated texts. These files could be edited manually with a text or XML editor, or a translation application. + +To lower the barrier for potential translators we moved to [Transifex](https://www.transifex.com/), a web based +translation platform in 2014. Using a web platform contributors and anyone else can access translation information with +a web browser, which made it a lot easier to work with. It also adds a few collaborative features that can be used. + +To integrate the third party service we implemented a bot +([MumbleTransifexBot](https://github.com/mumble-voip/MumbleTransifexBot)) that would pull translation updates and create +pull requests on GitHub for us. Once established this significantly reduced the work necessary for maintaining this +system and integrating translation changes. + +## Reevaluation + +In the 6 years since we switched to Transifex, the translation platform changed significantly. Good alternatives +appeared, and we took some discussion from an issue ticket as initiation for a reevaluation of our situation and +opportunities. + +Making systematic changes always results in foreseen and unforeseen effort, so not only did we have to evaluate whether +there were better alternatives around, but also whether it was worth it to invest into switching to it. A migration is +not only a change for our integration and hosting process, but also for existing translators that have to potentially +learn new processes and interfaces. We had to evaluate not only technical aspects but also terms of service, and human +aspects. + +When looking for alternatives we quickly came to three big contenders: + +1. Transifex - alread established and integrated +2. Crowdin - a promising alternative +3. Weblate - official hosted instance of the Weblate open source software + +We documented our evaluation and also asked for feedback +[in a discussion topic _(#4641)_](https://github.com/mumble-voip/mumble/discussions/4641). + +All three provide free hosting for open source (some limits apply). As a project with a small team and very limited +resources we are very greatful for this. Without these we would be in a much worse position. + +Various useful features are shared between the platforms, while the user interface and user experience differs greatly +between them, as well as the technology behind it and resulting way to integrate them. + +In the end we decided to initiate a move to [Hosted Weblate](https://hosted.weblate.org/). Apart from the feature +aspects we are also glad to move to a hosted open source software for translations. + +## Migration to Weblate + +The migration itself has mostly technical aspects to it, and a lot of related work. Deep-diving into the localization +setup and aspects of our project also showed some inconsistencies and questions for the future, and potential for +cleanup which we applied. The migration is/was tracked in +[ticket #4727](https://github.com/mumble-voip/mumble/issues/4727). + +Weblate provides integration to GitHub and pull request creation. Some advanced configuration scenarios allow for +additional customization. Thanks to the integration we were able to phase out our integration and PR creation bot. + +Interestingly enough even before finishing the migration and even with notices on Hosted Weblate to not translate yet we +received contributions on there. + +We have been using Weblate for several weeks now, and have received numerous contributions. Thank you to all existing +and future translators! + +The process is not as smooth as we would like it to be yet, but we are glad we made the transition already. And we hope +existing and future translators like the Hosted Weblate platform. + +## Weblate Translation Platform + +[Weblate](https://weblate.org/) is open source software. The hosted instance services not only us as FOSS but +[other projects](https://hosted.weblate.org/projects/) as well. + +We are very thankful for the free hosting they provide to us. If you are looking for a translation platform for other +FOSS or [commercial projects (pricing)](https://weblate.org/en/hosting/), please consider using them. +[Direct donations to them](https://weblate.org/en/donate/) are helping them too, and were explicitly mentioned for +consideration after approving our project. + +## Our Translation Project on Hosted Weblate + +We support numerous languages, and also have some languages that are not complete enough for productive use yet. If you +are fluent in one of them, please consider contributing to +[our translations](https://hosted.weblate.org/projects/mumble/mumble-client/). + +![Weblate translation status by language](https://hosted.weblate.org/widgets/mumble/-/mumble-client/horizontal-auto.svg) + +If you want to translate a language that we did not add yet, and are willing to commit to it, please create a request in +[our issue tracker](https://github.com/mumble-voip/mumble/issues). We can add additional languages. + +Have any feedback, positive or negative, praise or concerns? We would love to hear from you! + +## Road to Mumble version 1.4 + +We recently landed blockers for 1.4, and are now in the process of preparing a last development snapshot, a feature +freeze, and then plan to publish release candidates. + +We would love to release 1.4.0 with many, complete, and good translations. If you are a willing translator, please take +this opportunity to focus on finalizing translations towards the upcoming release. It would be great if we had finalized +translations within about a month or two. Thank you very much. diff --git a/hugo/content/blog/2021-03-21-mumble-1-4-0-snapshot3.md b/hugo/content/blog/2021-03-21-mumble-1-4-0-snapshot3.md index 0c4454ae..7e755614 100644 --- a/hugo/content/blog/2021-03-21-mumble-1-4-0-snapshot3.md +++ b/hugo/content/blog/2021-03-21-mumble-1-4-0-snapshot3.md @@ -7,35 +7,38 @@ categories: - Development Snapshot --- -After the [second snapshot]({{< relref "/blog/2021-02-26-mumble-1-4-0-snapshot2" >}}) has been released about a month ago, we now present you an -updated version of the snapshot of the upcoming feature release 1.4.0. +After the [second snapshot]({{< relref "/blog/2021-02-26-mumble-1-4-0-snapshot2" >}}) has been released about a month ago, +we now present you an updated version of the snapshot of the upcoming feature release 1.4.0. -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Changelog -The changes listed here are relative to the last snapshot version. Note also that the development snapshot also -includes all fixes that were shipped in the recently released version [1.3.4](https://www.mumble.info/blog/mumble-1.3.4-release-announcement/). +The changes listed here are relative to the last snapshot version. Note also that the development snapshot also includes +all fixes that were shipped in the recently released version +[1.3.4](https://www.mumble.info/blog/mumble-1.3.4-release-announcement/). ### Client @@ -46,7 +49,6 @@ includes all fixes that were shipped in the recently released version [1.3.4](ht - Fixed: Heap corruption caused by RNNoise ({{< issue 4850 >}}) - Fixed: Use Utf8 for name field in certificate (allowing non-ASCII characters in it) ({{< issue 4872 >}}) - ### Server - Added: Ability to explicitly broadcast welcome text via Ice ({{< issue 4809 >}}) @@ -56,9 +58,7 @@ includes all fixes that were shipped in the recently released version [1.3.4](ht - Fixed: Unauthenticated connections no longer add to user count ({{< issue 4817 >}}) - Fixed: 100ms timeout freezing when using gRPC ({{< issue 4833 >}}) - ### Positional audio plugins - Updated: Call of Duty 2 ({{< issue 4868 >}}) - Updated: Among Us plugin to work with v2021.3.5s ({{< issue 4858 >}}) - diff --git a/hugo/content/blog/2021-04-03-mumble-1-4-0-snapshot4.md b/hugo/content/blog/2021-04-03-mumble-1-4-0-snapshot4.md index ced2c442..40843c33 100644 --- a/hugo/content/blog/2021-04-03-mumble-1-4-0-snapshot4.md +++ b/hugo/content/blog/2021-04-03-mumble-1-4-0-snapshot4.md @@ -7,30 +7,33 @@ categories: - Development Snapshot --- -About two weeks have passed since our last release ([third snapshot]({{< relref "/blog/2021-03-21-mumble-1-4-0-snapshot3" >}})). In that time we were -able to fix a few bugs and work on the overall polish a bit more, so that we can release the forth snapshot of 1.4.0 today. +About two weeks have passed since our last release ([third +snapshot]({{< relref "/blog/2021-03-21-mumble-1-4-0-snapshot3" >}})). In that time we were able to fix a few bugs and work +on the overall polish a bit more, so that we can release the forth snapshot of 1.4.0 today. -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Changelog @@ -43,12 +46,10 @@ The changes listed here are relative to the last snapshot version. - Fixed: Line breaks not being respected in chat messages (sent directly via chat bar) ({{< issue 4902 >}}) - Revamped: Server information dialog ({{< issue 4891 >}}) - ### Server - Fixed: Prevent multiple sessions with ID 0 (causing different users to appear as a single one) ({{< issue 4886 >}}) - ### Positional audio plugins - Updated: Among Us plugin to work with v2021.3.31.3s ({{< issue 4901 >}}) diff --git a/hugo/content/blog/2021-04-21-mumble-1-4-0-snapshot5.md b/hugo/content/blog/2021-04-21-mumble-1-4-0-snapshot5.md index dd56e1cb..751d124e 100644 --- a/hugo/content/blog/2021-04-21-mumble-1-4-0-snapshot5.md +++ b/hugo/content/blog/2021-04-21-mumble-1-4-0-snapshot5.md @@ -7,30 +7,33 @@ categories: - Development Snapshot --- -With the arrival of the brand new plugin framework for Mumble, we release the fifth snapshot for the upcoming 1.4.0 stable release. Apart from that -there were also a couple of other changes since the [last snapshot](2021-04-03-mumble-1-4-0-snapshot4.md). +With the arrival of the brand new plugin framework for Mumble, we release the fifth snapshot for the upcoming 1.4.0 +stable release. Apart from that there were also a couple of other changes since the +[last snapshot](2021-04-03-mumble-1-4-0-snapshot4.md). -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Changelog @@ -44,14 +47,11 @@ The changes listed here are relative to the last snapshot version. - Fixed: Memory leak in ALSA implementation ({{< issue 4916 >}}) - Fixed: Minor bugs in ALSA implementation ({{< issue 4920 >}}) - ### Server - Changed: Allow spaces in username by default ({{< issue 4925 >}}) - Fixed: Fix undefined behavior on Linux hosts ({{< issue 4915 >}}) - ### Miscellaneous - Fixed: Cryptographic init potentially failing silently ({{< issue 4903 >}}) - diff --git a/hugo/content/blog/2021-05-16-mumble-1-4-0-snapshot6.md b/hugo/content/blog/2021-05-16-mumble-1-4-0-snapshot6.md index 580d9a0c..bb61a64b 100644 --- a/hugo/content/blog/2021-05-16-mumble-1-4-0-snapshot6.md +++ b/hugo/content/blog/2021-05-16-mumble-1-4-0-snapshot6.md @@ -7,31 +7,34 @@ categories: - Development Snapshot --- -Following the [last snapshot]({{< relref "2021-04-21-mumble-1-4-0-snapshot5" >}}) we proudly present our sixth development snapshot of the upcoming 1.4.0 stable -release. Note that this snapshot is intended to be the last one before the final release and as such with its publication we are introducing a -feature-freeze of the 1.4.x series. From now on only bug fixes will make it into this series. +Following the [last snapshot]({{< relref "2021-04-21-mumble-1-4-0-snapshot5" >}}) we proudly present our sixth development +snapshot of the upcoming 1.4.0 stable release. Note that this snapshot is intended to be the last one before the final release +and as such with its publication we are introducing a feature-freeze of the 1.4.x series. From now on only bug fixes will +make it into this series. -After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new version from our [**Downloads -page**]({{< relref "/downloads#development-snapshots" >}}). +After having understood what it means for a release to be a _snapshot release_ (see below), you can download the new +version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). ## Development Snapshots -A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the latest and greatest features -that were introduced since the last feature release. Note though that in contrast to a _release candidate_ the list of features that will be included -in the final 1.4.0 release is _not_ yet frozen and is thus subject to change. +A _development snapshot_ can be considered an open-beta for an upcoming feature release. This means that it contains the +latest and greatest features that were introduced since the last feature release. Note though that in contrast to a +_release candidate_ the list of features that will be included in the final 1.4.0 release is _not_ yet frozen and is +thus subject to change. -This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still contain bugs. These could be -minor ones, but in theory these could also be major. Therefore it is important that you always back up your data (e.g. configuration files) if you -have a previous version of Mumble installed. +This does also mean that these features have not been tested by a broad audience yet and are therefore likely to still +contain bugs. These could be minor ones, but in theory these could also be major. Therefore it is important that you +always back up your data (e.g. configuration files) if you have a previous version of Mumble installed. -Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software is key (e.g. in a business -context). +Due to the reasoning stated above, we do not recommend using snapshots in an environment where stability of the software +is key (e.g. in a business context). -That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with potentially arising problems -and report any problems you encounter to our [**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very -important for us to be able to make the actual release as stable and reliable as possible. +That being said though, we strongly encourage you to try snapshots out if you are a tech-savvy person that can deal with +potentially arising problems and report any problems you encounter to our +[**issue tracker**](https://github.com/mumble-voip/mumble/issues). This kind of feedback is very important for us to be +able to make the actual release as stable and reliable as possible. ## Changelog @@ -54,12 +57,10 @@ The changes listed here are relative to the last snapshot version. - Fixed: TalkingUI font not scaling properly ({{< issue 4991 >}}) - Removed: Classic theme ({{< issue 4969 >}}) - ### Server - Fixed: ChannelListener IDs colliding across VServers ({{< issue 5003 >}}) - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2021-09-12-mumble-release-candidate1.md b/hugo/content/blog/2021-09-12-mumble-release-candidate1.md index 801b92ba..111e46e5 100644 --- a/hugo/content/blog/2021-09-12-mumble-release-candidate1.md +++ b/hugo/content/blog/2021-09-12-mumble-release-candidate1.md @@ -7,14 +7,14 @@ categories: - Release Candidate --- -Quite some time has passed since our [last snapshot]({{< relref ""2021-05-16-mumble-1-4-0-snapshot6.md >}}) back in May of this year. Since then we -have worked hard to polish things up further and are therefore now able to present to you the first _release candidate_ (RC) of Mumble 1.4.0. +Quite some time has passed since our [last snapshot]({{< relref ""2021-05-16-mumble-1-4-0-snapshot6.md >}}) back in May of +this year. Since then we have worked hard to polish things up further and are therefore now able to present to you the first +_release candidate_ (RC) of Mumble 1.4.0. You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}). - ## Changelog The changes listed here are relative to the last snapshot version. @@ -38,7 +38,6 @@ The changes listed here are relative to the last snapshot version. - Fixed: onAudioOutputAboutToPlay plugin API function used wrong parameter order ({{< issue 5115 >}}) - Fixed: requestLocalUserTransmissionMode plugin API function now properly integrates with UI ({{< issue 5116 >}}) - ### Server - Fixed: Always bind to both IPv6 and IPv4 by default ({{< issue 5212 >}}) @@ -48,14 +47,12 @@ The changes listed here are relative to the last snapshot version. - Fixed: Tray icon not shown on Windows ({{< issue 5173 >}}) - Fixed: Wrong "Unable to find matching CELT codec" warning upon connecting ({{< issue 5112 >}}) - ### Positional audio plugins - Added: Update & port GTA5 to new Plugin API ({{< issue 5162 >}}) - Fixed: Update Among Us plugin to work with v2021.6.30s ({{< issue 5189 >}}) - Fixed: Update Source Engine plugin to work with L4D2 2.2.2.0 ({{< issue 5190 >}}) - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2021-12-07-new-versioning-scheme/index.md b/hugo/content/blog/2021-12-07-new-versioning-scheme/index.md index 89c1e96a..a66458f5 100644 --- a/hugo/content/blog/2021-12-07-new-versioning-scheme/index.md +++ b/hugo/content/blog/2021-12-07-new-versioning-scheme/index.md @@ -1,56 +1,61 @@ ---- -title: New versioning scheme -author: Robert Adam -date: 2021-12-07 -categories: - - News ---- -Mumble traditionally used a versioning scheme of the form _major.minor.patch_ where the patch version number was incremented for every bug-fix release -of a stable release series (e.g. 1.3.0 -> 1.3.1). Most notably though, the patch version was always starting at zero for a new stable release series -(e.g. 1.2.0, 1.3.0, etc.). This will no longer be the case. - - - -## Background - -Mumble was always using the [semantic versioning scheme](https://semver.org/) which generally makes it really easy to know what to expect when -switching from one version to another. While this is working great, using only the three common version numbers (_major.minor.patch_) poses a problem -when considering snapshot builds. A snapshot build is essentially a beta-release for an upcoming release. Thus it has to use the same version numbers -as that upcoming release. Thus, in order to get a unique versioning scheme, we had to make use of the fourth version number, that semantic versioning -allows for. We called this the _build number_. This build number was just a number that was incremented with every build of the Mumble binaries that -we performed. Thus a version could now look like this: 1.4.0.62 and the stable release would then simply use whatever build number was next in the -queue. - -## The problem - -In theory that worked great and solved the issue at hand: we now had a unique version for every release (be that a stable or a snapshot release). -However, as it turns out Windows doesn't like that: it restricts programs to use a three-component versioning scheme. While it is possible to set a -fourth component, without causing any issues (it is even displayed when checking the program's version), it is ignored for all relevant actions such -as upgrading to a newer version. However, it seems it wasn't ignored entirely as using a four-component versioning scheme caused Windows to install an -additional version of Mumble alongside the already installed version if one was to attempt to upgrade between Mumble versions that only differed in -the build number. - -## The solution - -After having researched quite a bit, we came to the conclusion that it seems to be impossible to get Windows to properly respect the build number in -our version specifier (old dogs don't learn new tricks), so it was clear that we had to find a different solution to this. We evaluated a few -different possibilities but eventually settled on using the patch version number as a replacement for the build number. Consequently, the latter will -be dropped. Thus, we are back at a 3-component version scheme but now the third component is the build number instead of the patch level -(_major.minor.build_). - -This appears to be a purely semantical difference and for the most part, it is. The only notable difference is that now the third component of the -version will (usually) no longer start at zero and then increment one by one while iterating through the different versions of a stable release -series. Instead, the build number will be increased with every build we create and thus the build number of the released stable versions will be -somewhat arbitrary. Therefore, it could be that the first release of the 1.4 series will be e.g. 1.4.53 while the first bug-fix release will then -become 1.4.281. - -This makes it impossible to tell (by just looking at the versions themselves) how many releases lay between two given version numbers. However, in -most scenarios this is probably not what is interesting anyway. Usually one is only interested in which version is newer and that is still immediately -obvious by looking at the version numbers. - -## Summary - -Versions remain in a three component format (and also compatible with the semantic versioning scheme) but the third component will now be the build -number instead of the patch level. The latter is no longer directly visible from the version specification (and in fact isn't really tracked in its -own right anymore). Therefore, you will start seeing much higher (and apparently discontinuous) numbers in the third component of future Mumble -versions. +--- +title: New versioning scheme +author: Robert Adam +date: 2021-12-07 +categories: + - News +--- + +Mumble traditionally used a versioning scheme of the form _major.minor.patch_ where the patch version number was +incremented for every bug-fix release of a stable release series (e.g. 1.3.0 -> 1.3.1). Most notably though, the patch +version was always starting at zero for a new stable release series (e.g. 1.2.0, 1.3.0, etc.). This will no longer be +the case. + + + +## Background + +Mumble was always using the [semantic versioning scheme](https://semver.org/) which generally makes it really easy to +know what to expect when switching from one version to another. While this is working great, using only the three common +version numbers (_major.minor.patch_) poses a problem when considering snapshot builds. A snapshot build is essentially +a beta-release for an upcoming release. Thus it has to use the same version numbers as that upcoming release. Thus, in +order to get a unique versioning scheme, we had to make use of the fourth version number, that semantic versioning +allows for. We called this the _build number_. This build number was just a number that was incremented with every build +of the Mumble binaries that we performed. Thus a version could now look like this: 1.4.0.62 and the stable release would +then simply use whatever build number was next in the queue. + +## The problem + +In theory that worked great and solved the issue at hand: we now had a unique version for every release (be that a +stable or a snapshot release). However, as it turns out Windows doesn't like that: it restricts programs to use a +three-component versioning scheme. While it is possible to set a fourth component, without causing any issues (it is +even displayed when checking the program's version), it is ignored for all relevant actions such as upgrading to a newer +version. However, it seems it wasn't ignored entirely as using a four-component versioning scheme caused Windows to +install an additional version of Mumble alongside the already installed version if one was to attempt to upgrade between +Mumble versions that only differed in the build number. + +## The solution + +After having researched quite a bit, we came to the conclusion that it seems to be impossible to get Windows to properly +respect the build number in our version specifier (old dogs don't learn new tricks), so it was clear that we had to find +a different solution to this. We evaluated a few different possibilities but eventually settled on using the patch +version number as a replacement for the build number. Consequently, the latter will be dropped. Thus, we are back at a +3-component version scheme but now the third component is the build number instead of the patch level +(_major.minor.build_). + +This appears to be a purely semantical difference and for the most part, it is. The only notable difference is that now +the third component of the version will (usually) no longer start at zero and then increment one by one while iterating +through the different versions of a stable release series. Instead, the build number will be increased with every build +we create and thus the build number of the released stable versions will be somewhat arbitrary. Therefore, it could be +that the first release of the 1.4 series will be e.g. 1.4.53 while the first bug-fix release will then become 1.4.281. + +This makes it impossible to tell (by just looking at the versions themselves) how many releases lay between two given +version numbers. However, in most scenarios this is probably not what is interesting anyway. Usually one is only +interested in which version is newer and that is still immediately obvious by looking at the version numbers. + +## Summary + +Versions remain in a three component format (and also compatible with the semantic versioning scheme) but the third +component will now be the build number instead of the patch level. The latter is no longer directly visible from the +version specification (and in fact isn't really tracked in its own right anymore). Therefore, you will start seeing much +higher (and apparently discontinuous) numbers in the third component of future Mumble versions. diff --git a/hugo/content/blog/2022-01-16-mumble-1-4-230.md b/hugo/content/blog/2022-01-16-mumble-1-4-230.md index 40a7ae9b..cebd843a 100644 --- a/hugo/content/blog/2022-01-16-mumble-1-4-230.md +++ b/hugo/content/blog/2022-01-16-mumble-1-4-230.md @@ -6,133 +6,145 @@ categories: - Release --- -We are proud to present you with the first stable release of the Mumble 1.4.x release series, which brings many new features, bug fixes and general -improvements. +We are proud to present you with the first stable release of the Mumble 1.4.x release series, which brings many new +features, bug fixes and general improvements. -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.230) or from within your Windows client or software package -management system. +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.230) +or from within your Windows client or software package management system. # Mumble 1.4.230 -It has been over two years since we released Mumble 1.3.0. Since then many new features and improvements have found their way into the software. And -not less importantly: many fixes for issues that have been encountered with Mumble. Talking about each and every change here would definitely exceed -the size of any reasonable release announcement. Therefore, we will restrict ourselves to highlighting what we think are the most prominent and/or -interesting changes and we invite everyone to simply try out the new version and explore what has changed yourself. For the interested reader, we of -course also include a full changelog at the bottom of this page as well. +It has been over two years since we released Mumble 1.3.0. Since then many new features and improvements have found +their way into the software. And not less importantly: many fixes for issues that have been encountered with Mumble. +Talking about each and every change here would definitely exceed the size of any reasonable release announcement. +Therefore, we will restrict ourselves to highlighting what we think are the most prominent and/or interesting changes +and we invite everyone to simply try out the new version and explore what has changed yourself. For the interested +reader, we of course also include a full changelog at the bottom of this page as well. -If you are wondering, why this first 1.4.x release is not versions 1.4.0, but 1.4.230, please see -[this recent blog post describing our _new versioning scheme_]({{< relref "/blog/2021-12-07-new-versioning-scheme/index.md" >}}) that +If you are wondering, why this first 1.4.x release is not versions 1.4.0, but 1.4.230, please see [this recent blog +post describing our _new versioning scheme_]({{< relref "/blog/2021-12-07-new-versioning-scheme/index.md" >}}) that explains the absence of the mentioned version numbers. - ## Feature spotlight -As there are many, many changes with this new version, here is a selection of things that we think are most prominent. If you're interested in all -changes, have a look at the [full changelog](#changelog). +As there are many, many changes with this new version, here is a selection of things that we think are most prominent. +If you're interested in all changes, have a look at the [full changelog](#changelog). ### Plugin framework -Mumble has supported something it called "plugins" for a very long time. However, these plugins were not what one would typically expect when hearing -about them for the first time. Instead of being general-purpose, (potentially) multi-function plugins, they were only ever dedicated for providing -positional data from games (generally by reading the game's in-memory representation). In addition to that, these plugins couldn't really be installed -and updated independently from the main application (for technical reasons) and therefore, plugins were mostly a static part of the Mumble client. - -With Mumble 1.4 a new, general purpose plugin framework has been introduced. With this framework, the range of possibilities offered to plugin -developers has been vastly increased and most importantly plugins are no longer restricted to positional data delivery (though that is of course still -possible) and they can now be installed and updated at any time, without causing incompatibilities with the main Mumble client. +Mumble has supported something it called "plugins" for a very long time. However, these plugins were not what one would +typically expect when hearing about them for the first time. Instead of being general-purpose, (potentially) +multi-function plugins, they were only ever dedicated for providing positional data from games (generally by reading the +game's in-memory representation). In addition to that, these plugins couldn't really be installed and updated +independently from the main application (for technical reasons) and therefore, plugins were mostly a static part of the +Mumble client. -If you want to find out more about this new plugin framework (including how to write your first plugin), check out [the -plugin documentation](https://github.com/mumble-voip/mumble/tree/master/docs/dev/plugins). +With Mumble 1.4 a new, general purpose plugin framework has been introduced. With this framework, the range of +possibilities offered to plugin developers has been vastly increased and most importantly plugins are no longer +restricted to positional data delivery (though that is of course still possible) and they can now be installed and +updated at any time, without causing incompatibilities with the main Mumble client. +If you want to find out more about this new plugin framework (including how to write your first plugin), check out +[the plugin documentation](https://github.com/mumble-voip/mumble/tree/master/docs/dev/plugins). ### Search dialog -If you have ever been on a somewhat large-ish Mumble server, you will probably know that sometimes it can be a bit hard to find a specific user or -channel. Some of you might even be familiar with the feature of "free-type search" which was a built-in search functionality that worked by simply -starting to type the user's or channel's name while the Mumble client has focus. However, this feature was very clumsy, not well documented and quite -unsuitable, if the searched-for text yields more than one match on that particular server. - -In order to improve on this situation, Mumble 1.4 ships with a fully featured search dialog that can be opened either via the menu bar or via the -shortcut Ctrl+F (this shortcut previously toggled the channel filter but that has been re-assigned to Ctrl+Shift+F). With this dialog you can easily -search for users or channels (or both) and you can even specify whether your search string is to be interpreted as a regular expression. +If you have ever been on a somewhat large-ish Mumble server, you will probably know that sometimes it can be a bit hard +to find a specific user or channel. Some of you might even be familiar with the feature of "free-type search" which was +a built-in search functionality that worked by simply starting to type the user's or channel's name while the Mumble +client has focus. However, this feature was very clumsy, not well documented and quite unsuitable, if the searched-for +text yields more than one match on that particular server. +In order to improve on this situation, Mumble 1.4 ships with a fully featured search dialog that can be opened either +via the menu bar or via the shortcut Ctrl+F (this shortcut previously toggled the channel filter but that has been +re-assigned to Ctrl+Shift+F). With this dialog you can easily search for users or channels (or both) and you can even +specify whether your search string is to be interpreted as a regular expression. ![Search dialog](/blog/media/SearchDialog.png) ### Channel listeners -This feature can to some extent be compared to the ability to link channels. Except that this does not operate on a per-channel basis but on a -per-user basis. +This feature can to some extent be compared to the ability to link channels. Except that this does not operate on a +per-channel basis but on a per-user basis. -Concretely this new feature allows a user to "listen to" a channel. In that case all audio that is heard by people in this particular channel (be it -by direct communication, shouts or via linked channels) is also heard by the listening user. Conceptually you could picture "listening to" a channel -with placing a microphone in a room and then listening to what is recorded. +Concretely this new feature allows a user to "listen to" a channel. In that case all audio that is heard by people in +this particular channel (be it by direct communication, shouts or via linked channels) is also heard by the listening +user. Conceptually you could picture "listening to" a channel with placing a microphone in a room and then listening to +what is recorded. -This feature is one-way only, meaning that in order to speak to people in the listened channel, you'll have to either join the channel or shout to it. +This feature is one-way only, meaning that in order to speak to people in the listened channel, you'll have to either +join the channel or shout to it. -It should be noted that you will not be secretly listened to with this new feature. Listening to a channel creates a new entry in the channel's -user-list (referred to as an "ear" or a "listener") and is thereby just as visible as a user actually being in that channel. There is also a dedicated -ACL and several new server config options that can restrict this new feature. +It should be noted that you will not be secretly listened to with this new feature. Listening to a channel creates a new +entry in the channel's user-list (referred to as an "ear" or a "listener") and is thereby just as visible as a user +actually being in that channel. There is also a dedicated ACL and several new server config options that can restrict +this new feature. -Older clients (< 1.4) will not indicate listeners in the UI though! However, they are informed if this feature is enabled on a server when they join -it (via chat). +Older clients (< 1.4) will not indicate listeners in the UI though! However, they are informed if this feature is +enabled on a server when they join it (via chat). Note: This feature requires server-side support and therefore is only available on servers running at least Mumble 1.4. ![Channel listeners](/blog/media/ChannelListeners.png) - ### TalkingUI -Have you ever been in a situation where you heard someone talking but couldn't quite figure out who it was? Then this feature is probably for you! +Have you ever been in a situation where you heard someone talking but couldn't quite figure out who it was? Then this +feature is probably for you! -The TalkingUI can be considered the equivalent of the already existing overlay but for "non-gamers" or in other terms for everyday usage. +The TalkingUI can be considered the equivalent of the already existing overlay but for "non-gamers" or in other terms +for everyday usage. -This feature adds an optional floating window, containing a list of currently speaking users and their respective channels. This allows you to quickly -see who's currently talking and in which channel that person currently is in (this becomes important if you want to respond to that person). +This feature adds an optional floating window, containing a list of currently speaking users and their respective +channels. This allows you to quickly see who's currently talking and in which channel that person currently is in (this +becomes important if you want to respond to that person). -The big difference between the TalkingUI and Mumble's main window (which of course also contains this information) is that the TalkingUI does not -contain all the other UI elements nor does it necessarily show the entire channel-tree. Furthermore it automatically resizes itself to the minimal -size needed to display the respective information. Thus it usually does not take up a lot of space and can therefore be left floating in the corner of -the screen without consuming too much screen real estate. +The big difference between the TalkingUI and Mumble's main window (which of course also contains this information) is +that the TalkingUI does not contain all the other UI elements nor does it necessarily show the entire channel-tree. +Furthermore it automatically resizes itself to the minimal size needed to display the respective information. Thus it +usually does not take up a lot of space and can therefore be left floating in the corner of the screen without consuming +too much screen real estate. -Note that the TalkingUI is highly configurable (Settings -> User Interface) and also provides selection and context-menu support just as you get -it in the main window. In fact, the selection between TalkingUI and main window is synchronized and thus this plays really nice with the new "whisper -to selected" feature allowing to whisper to whatever currently is selected in the UI (be it a channel or a user). +Note that the TalkingUI is highly configurable (Settings -> User Interface) and also provides selection and context-menu +support just as you get it in the main window. In fact, the selection between TalkingUI and main window is synchronized +and thus this plays really nice with the new "whisper to selected" feature allowing to whisper to whatever currently is +selected in the UI (be it a channel or a user). ![TalkingUI](/blog/media/TalkingUI.png) - ### UI indication for access restrictions -In previous versions of Mumble there was no indication of whether you are able to join a channel or not. You just had to try it out and either it -worked or you got a permission denied message. This feature solves this problem by marking "access-restricted" channels with a lock icon. Access -restricted channels are all channels that are either only open to a specific group on the server or require a password (access token) to join. +In previous versions of Mumble there was no indication of whether you are able to join a channel or not. You just had to +try it out and either it worked or you got a permission denied message. This feature solves this problem by marking +"access-restricted" channels with a lock icon. Access restricted channels are all channels that are either only open to +a specific group on the server or require a password (access token) to join. -In total, a channel can be in one of three states: either it is not access-restricted in which case it just looks like channels used to look prior to -the introduction of this feature or it is indeed access-restricted. In the latter case a lock icon is shown to the right of channel name. This look -can either be open and green or closed and red. Green means that you can enter the channel nonetheless (you belong to the required group or have the -correct password (access token) set) whereas red means that you are not allowed to enter the channel. +In total, a channel can be in one of three states: either it is not access-restricted in which case it just looks like +channels used to look prior to the introduction of this feature or it is indeed access-restricted. In the latter case a +lock icon is shown to the right of channel name. This look can either be open and green or closed and red. Green means +that you can enter the channel nonetheless (you belong to the required group or have the correct password (access token) +set) whereas red means that you are not allowed to enter the channel. -Note that this is also a feature that requires server-side support and thus only takes effect on servers that are at least running Mumble version -1.4. +Note that this is also a feature that requires server-side support and thus only takes effect on servers that are at +least running Mumble version 1.4. ![Access restricted channels](/blog/media/AccessRestrictedChannels.png) - ### Markdown -For those of you who don't know what markdown is, we recommend a quick read of the respective [Wikipedia -article](https://en.wikipedia.org/wiki/Markdown). In simple words it allows formatting of text by simply typing a few extra characters in it. +For those of you who don't know what markdown is, we recommend a quick read of the respective +[Wikipedia article](https://en.wikipedia.org/wiki/Markdown). In simple words it allows formatting of text by simply +typing a few extra characters in it. -Mumble now supports markdown for text messages written in the normal chat bar. It is not supported for cases in which you use the dedicated message -editor (e.g. for private messages). Furthermore only a subset of markdown is supported: sections, inline-code, code-blocks, bold, italic and -strike-through text, links and quotes. _Not_ supported are lists and tables. +Mumble now supports markdown for text messages written in the normal chat bar. It is not supported for cases in which +you use the dedicated message editor (e.g. for private messages). Furthermore only a subset of markdown is supported: +sections, inline-code, code-blocks, bold, italic and strike-through text, links and quotes. _Not_ supported are lists +and tables. -This feature is probably best explained by an example. Try pasting the following text into the chat bar and see for yourself: +This feature is probably best explained by an example. Try pasting the following text into the chat bar and see for +yourself: ```` # Markdown @@ -159,35 +171,35 @@ We can escape special characters using the \\ character: \*not italic\* and \*\* ![Markdown](/blog/media/Markdown.png) - ### Stereo playback -With version 1.4 Mumble (finally) learned how to play back stereo audio streams. This means that it is now possible to send a stereo stream to a -Mumble client and it will actually be played back without being mixed down to a mono stream. +With version 1.4 Mumble (finally) learned how to play back stereo audio streams. This means that it is now possible to +send a stereo stream to a Mumble client and it will actually be played back without being mixed down to a mono stream. -Note however that this feature is currently restricted to playback. The official Mumble client will still continue sending audio as mono. This feature -is primarily intended to be made use of by (music) bots. - -If you want to try this feature out yourself, you can either write a bot using [pymumble](https://github.com/azlux/pymumble) version 1.2 or later or -you can simply use a recent version of [botamusqiue](https://github.com/azlux/botamusique). +Note however that this feature is currently restricted to playback. The official Mumble client will still continue +sending audio as mono. This feature is primarily intended to be made use of by (music) bots. +If you want to try this feature out yourself, you can either write a bot using +[pymumble](https://github.com/azlux/pymumble) version 1.2 or later or you can simply use a recent version of +[botamusqiue](https://github.com/azlux/botamusique). ### Nicknames -For those of you who are annoyed by people using excessively long or complicated names or people changing their nickname frequently, Mumble 1.4 -introduces the possibility to set a nickname for users. +For those of you who are annoyed by people using excessively long or complicated names or people changing their nickname +frequently, Mumble 1.4 introduces the possibility to set a nickname for users. Depending on your configuration, a nickname will either be displayed next to a user's name or replace it entirely. -The nickname will persist across restarts of client and server. In fact it'll last until you either remove it again or the person the nickname was -assigned to changes their client-certificate (Mumble's way of keeping track of a user's identity). +The nickname will persist across restarts of client and server. In fact it'll last until you either remove it again or +the person the nickname was assigned to changes their client-certificate (Mumble's way of keeping track of a user's +identity). -Note that nicknames are _not_ tied to a particular server. That means that if you assign a nickname to a user on server A and then you meet that -person again on server B, they will still have that very same nickname set on server B (the same way friends are recognized across servers as well). +Note that nicknames are _not_ tied to a particular server. That means that if you assign a nickname to a user on server +A and then you meet that person again on server B, they will still have that very same nickname set on server B (the +same way friends are recognized across servers as well). ![Nicknames](/blog/media/Nicknames.png) - ## Changelog This is the full changelog for this release (changes relative to the Mumble 1.3.x release series). @@ -255,7 +267,8 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Fixed: Memory management issue in the source code ({{< issue 4982 >}}) - Fixed: Micro-freezes at startup due to version check ({{}}) - Fixed: Minor bugs in ALSA implementation ({{< issue 4920 >}}) -- Fixed: Ordering of users inconsistent on machines with different locale settings ({{< issue 4875 >}}, {{< issue 5295 >}}) +- Fixed: Ordering of users inconsistent on machines with different locale settings ({{< issue 4875 >}}, + {{< issue 5295 >}}) - Fixed: Positional audio not working properly after canceling audio wizard ({{< issue 5046 >}}) - Fixed: Prevent hooking if a screen-reader is active on Windows ({{}}) - Fixed: Properly show currently selected audio device in settings dialog ({{< issue 4974 >}}) @@ -269,7 +282,8 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Improved: Accessibility ({{}}, {{}}) - Improved: Audio wizard (appearance & explanations) ({{}}) - Improved: Automatically select Opus's low delay mode for decreased latency ({{}}) -- Improved: Clear selection in shortcut settings after having removed shortcut to avoid accidental subsequent removal ({{}}) +- Improved: Clear selection in shortcut settings after having removed shortcut to avoid accidental subsequent removal + ({{}}) - Improved: CoreAudio implementation ({{}}) - Improved: Echo cancellation is now enabled by default on all platforms but MacOS ({{}}) - Improved: Echo cancellation settings ({{}}, {{}}) @@ -286,7 +300,8 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Improved: Tooltips for shortcut settings ({{}}) - Improved: Use HTTPS links for presenting in the UI ({{}}) - Improved: Use zeroconf instead of Bonjour on Windows if available ({{}}) -- Improved: Users can now always choose to receive update-notifications for the client ({{}}, {{}}) +- Improved: Users can now always choose to receive update-notifications for the client ({{}}, + {{}}) - Removed: CELT 0.11.0 support ({{}}) - Removed: Classic theme ({{< issue 4969 >}}) - Removed: DirectSound support ({{}}) @@ -295,7 +310,6 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Revamped: Server information dialog ({{< issue 4891 >}}) - Updated: Opus to v1.3.1 ({{}}) - ### Server - Added: Ability to explicitly broadcast welcome text via Ice ({{< issue 4809 >}}) @@ -326,14 +340,12 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Improved: CPU utilization by using TCP_NODELAY mode by default ({{}}) - Improved: Use zeroconf instead of Bonjour on Windows if available ({{}}) - ### Installer - Complete refactoring ({{}}) - Improved: Chinese translations ({{}}, {{}}) - Improved: Uninstall no longer deletes murmur.ini file ({{}}) - ### Positional audio plugins - Added: Among Us ({{}}) @@ -342,16 +354,15 @@ This is the full changelog for this release (changes relative to the Mumble 1.3. - Updated: GTA V ({{}}, {{< issue 5162 >}}) - Updated: Manual plugin's UI now shows a speaker's location ({{}}) - ### Miscellaneous - Changed: The project has been migrated to be built with cmake instead of qmake ({{}}) - Fixed: Cryptographic init potentially failing silently ({{< issue 4903 >}}) - ## Changelog relative to latest development snapshot -This is the changelog relative to our [latest development snapshot]({{< relref "/blog/2021-09-12-mumble-release-candidate1.md" >}}). +This is the changelog relative to our [latest +development snapshot]({{< relref "/blog/2021-09-12-mumble-release-candidate1.md" >}}). ### Client @@ -370,20 +381,16 @@ This is the changelog relative to our [latest development snapshot]({{< relref " - Fixed: Wrong entry in plugin search path ({{< issue 5340 >}}) - Fixed: very distorted RNNoise output ({{< issue 5366 >}}) - ### Server - Fixed: Missing locks in ICE functions ({{< issue 5310 >}}) - Fixed: Narrow down lock scopes ({{< issue 5358 >}}) - Fixed: Validate/use the correct certifiacte from a peers chain ({{< issue 5311 >}}) - ### Positional audio plugins - Fixed: Update Among Us plugin to work with v2021.12.15s (1421) ({{< issue 5378 >}}) - - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2022-08-21-mumble-1-4-274.md b/hugo/content/blog/2022-08-21-mumble-1-4-274.md index 2ef76d67..cc86c747 100644 --- a/hugo/content/blog/2022-08-21-mumble-1-4-274.md +++ b/hugo/content/blog/2022-08-21-mumble-1-4-274.md @@ -6,16 +6,14 @@ categories: - Release --- -Today we release the first patch-release in the Mumble 1.4.x series. This should fix several issues that have been encountered in the previous 1.4.230 -release. +Today we release the first patch-release in the Mumble 1.4.x series. This should fix several issues that have been +encountered in the previous 1.4.230 release. -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.274) or from within your Windows client or software package -management system. +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.274) +or from within your Windows client or software package management system. - ## Changelog This is the full changelog for this release (changes relative to the Mumble 1.4.230 release). @@ -41,25 +39,21 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Remove duplicate entry for "What's this?" in UserModel ({{< issue 5795 >}}) - Fixed: User and channel status icons now take display scaling into account ({{< issue 5779 >}}) - ### Server - Fixed: Add missing line breaks to --help output ({{< issue 5456 >}}) - Fixed: Improve rememberchannelduration compare logic ({{< issue 5652 >}}) - Fixed: Update suppress state on ACL change ({{< issue 5780 >}}) - ### Positional audio plugins - Fixed: Fix Quake Live plugin ({{< issue 5653 >}}) - Fixed: Update Among Us plugin to work with v2022.3.29s (1864) ({{< issue 5654 >}}) - ### Installer - Fixed: Re-add URL protocol registration registry keys on install ({{< issue 5528 >}}) - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2022-09-14-mumble-1-4-287.md b/hugo/content/blog/2022-09-14-mumble-1-4-287.md index 83c88254..06e88e39 100644 --- a/hugo/content/blog/2022-09-14-mumble-1-4-287.md +++ b/hugo/content/blog/2022-09-14-mumble-1-4-287.md @@ -8,13 +8,11 @@ categories: Since the latest 1.4.274 release contained a couple of regressions, we now provide you with a fixed-up version 1.4.287. -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.287) or from within your Windows client or software package -management system. +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.4.287) +or from within your Windows client or software package management system. - ## Changelog This is the full changelog for this release (changes relative to the Mumble 1.4.274 release). @@ -29,12 +27,10 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Make hiding UI elements (in custom layout) persistent again ({{< issue 5862 >}}) - Fixed: Resolve log text scaling issues ({{< issue 5866 >}}) - ### Server - Fixed: Fix versions being transmitted incorrectly (with patch numbers > 255) ({{< issue 5868 >}}) - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2023-01-21-mumble-1-5-517.md b/hugo/content/blog/2023-01-21-mumble-1-5-517.md index 1b0e357b..7f09e869 100644 --- a/hugo/content/blog/2023-01-21-mumble-1-5-517.md +++ b/hugo/content/blog/2023-01-21-mumble-1-5-517.md @@ -7,15 +7,15 @@ categories: - Release Candidate --- -We are pleased to announce the new stable series of Mumble 1.5.x. This series is started out by means of an initial release candidate, that hopefully -lets us verify that there are no major issues with this version before we perform the actual stable release. +We are pleased to announce the new stable series of Mumble 1.5.x. This series is started out by means of an initial +release candidate, that hopefully lets us verify that there are no major issues with this version before we perform the +actual stable release. -You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under snapshots) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.517). +You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under +snapshots) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.517). - ## Changelog This is the full changelog for this release (changes relative to the Mumble 1.4.x series). @@ -97,7 +97,6 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Force 8 bytes alignment for CCameraAngles in GTAV plugin ({{< issue 5850 >}}) - Fixed: Update GTAV plugin to version 1.59.2612 ({{< issue 5679 >}}) - ## Known issues - Overlay blocked by BattleEye. A request to whitelist it has been made. diff --git a/hugo/content/blog/2024-03-03-mumble-1-5-613.md b/hugo/content/blog/2024-03-03-mumble-1-5-613.md index 9fc0e14e..1c296fb0 100644 --- a/hugo/content/blog/2024-03-03-mumble-1-5-613.md +++ b/hugo/content/blog/2024-03-03-mumble-1-5-613.md @@ -7,16 +7,17 @@ categories: - Release Candidate --- -It has been a while since we published the previous release candidate of the new stable series of Mumble 1.5.x. But now, we are here to present to you the second release candidate which should hopefully pave the way for a swift 1.5.x stable release. +It has been a while since we published the previous release candidate of the new stable series of Mumble 1.5.x. But now, +we are here to present to you the second release candidate which should hopefully pave the way for a swift 1.5.x stable +release. Since it has been so long, we have decided to allow some new features to be merged into this RC. -You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under snapshots) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.613). +You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under +snapshots) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.613). - ## Changelog This is the changelog for this release (changes relative to the previous RC Mumble 1.5.517). @@ -33,7 +34,8 @@ This is the changelog for this release (changes relative to the previous RC Mumb - Changed: Exclude and discourage RNNoise ({{< issue 6292 >}}) - Fixed: Allow using the keyboad to change local volume adjustment ({{< issue 6238 >}}) - Fixed: Chinese characters not displayed properly ({{< issue 6200 >}}) -- Fixed: Code blocks end on three backticks without interruption by any other pattern of backticks in the code ({{< issue 6261 >}}) +- Fixed: Code blocks end on three backticks without interruption by any other pattern of backticks in the code + ({{< issue 6261 >}}) - Fixed: Log incorrectly scrolling up ({{< issue 6290 >}}) - Fixed: Logging of plugin loading errors ({{< issue 6123 >}}) - Fixed: Migration of GKey shortcuts ({{< issue 5960 >}}) @@ -66,10 +68,8 @@ This is the changelog for this release (changes relative to the previous RC Mumb - Fixed: Source Engine plugin not working on Windows ({{< issue 6245 >}}) - Fixed: Use atomic operations in Link plugin ({{< issue 6075 >}}) - ## Known issues - macOS binaries not being signed/notarized (overlay installer not signed) ({{< issue 4263 >}}) - Overlay blocked by BattleEye. A request to whitelist it has been made. - Overlay blocked by CS:GO Trusted Mode - diff --git a/hugo/content/blog/2024-04-14-mumble-1-5-629.md b/hugo/content/blog/2024-04-14-mumble-1-5-629.md index 852d8898..0524f0d7 100644 --- a/hugo/content/blog/2024-04-14-mumble-1-5-629.md +++ b/hugo/content/blog/2024-04-14-mumble-1-5-629.md @@ -7,21 +7,25 @@ categories: - Release Candidate --- -We are happy to release the third and hopefully final release candidate of the new stable series Mumble 1.5.x. It fixes some issues and finally introduces the long-awaited accessibility overhaul of the entire application. +We are happy to release the third and hopefully final release candidate of the new stable series Mumble 1.5.x. It fixes +some issues and finally introduces the long-awaited accessibility overhaul of the entire application. -Also, as requested by popular demand, we reintroduce RNNoise in the form of our own [fork](https://github.com/mumble-voip/ReNameNoise). This should hopefully prevent any future issues while keeping a beloved Mumble feature. +Also, as requested by popular demand, we reintroduce RNNoise in the form of our own +[fork](https://github.com/mumble-voip/ReNameNoise). This should hopefully prevent any future issues while keeping a +beloved Mumble feature. -**Note**: If you want to use RNNoise and you are upgrading from the previous RC (1.5.613), you will need to manually re-enable RNNoise in the settings. +**Note**: If you want to use RNNoise and you are upgrading from the previous RC (1.5.613), you will need to manually +re-enable RNNoise in the settings. -You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under snapshots) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.629). +You can download the new version from our [**Downloads page**]({{< relref "/downloads#development-snapshots" >}}) (under +snapshots) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.629). - ## Changelog -This is the changelog for this RC release since [the previous]({{< relref "/blog/2024-03-03-mumble-1-5-613" >}}) RC release Mumble 1.5.613. +This is the changelog for this RC release since [the previous]({{< relref "/blog/2024-03-03-mumble-1-5-613" >}}) RC release +Mumble 1.5.613. ### Client @@ -35,10 +39,8 @@ This is the changelog for this RC release since [the previous]({{< relref "/blog - Fixed: Rare crash regarding whisper cache ({{< issue 6372 >}}) - ## Known issues - macOS binaries not being signed/notarized (overlay installer not signed) ({{< issue 4263 >}}) - Overlay blocked by BattleEye. A request to whitelist it has been made. - Overlay blocked by CS:GO Trusted Mode - diff --git a/hugo/content/blog/2024-05-19-mumble-1-5-634.md b/hugo/content/blog/2024-05-19-mumble-1-5-634.md index 92647983..0a8a4186 100644 --- a/hugo/content/blog/2024-05-19-mumble-1-5-634.md +++ b/hugo/content/blog/2024-05-19-mumble-1-5-634.md @@ -6,86 +6,90 @@ categories: - Release --- -After quite some time, we are proud to present you with the first stable release of the Mumble 1.5.x series. While this release may not be groundbreaking -in terms of flashy and new features, we implemented a lot of quality-of-life and structural improvements to provide a solid foundation for the -future development of the project. +After quite some time, we are proud to present you with the first stable release of the Mumble 1.5.x series. While this +release may not be groundbreaking in terms of flashy and new features, we implemented a lot of quality-of-life and +structural improvements to provide a solid foundation for the future development of the project. -You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the -[**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.634) or from within your Windows client or software package -management system. +You can download the new version from our [**Downloads page**]({{< relref "/downloads" >}}) or the [**GitHub release page**](https://github.com/mumble-voip/mumble/releases/tag/v1.5.634) +or from within your Windows client or software package management system. # Mumble 1.5.634 -Almost two years after the previous stable release Mumble 1.4.287, a lot of changes have been made to the codebase. With this update, you will surely -notice some long-standing bugs fixed, as well as some convenient changes that were long overdue. In the time between the major versions, the project has -exceeded the 10,000 commit mark and now has over 350 contributors. Thanks to all of you who contributed, translated, submitted issues, and tested -pre-releases! Without you, the Mumble project would not be possible at this scale ♥ +Almost two years after the previous stable release Mumble 1.4.287, a lot of changes have been made to the codebase. With +this update, you will surely notice some long-standing bugs fixed, as well as some convenient changes that were long +overdue. In the time between the major versions, the project has exceeded the 10,000 commit mark and now has over 350 +contributors. Thanks to all of you who contributed, translated, submitted issues, and tested pre-releases! Without you, +the Mumble project would not be possible at this scale ♥ -While the changelog is quite long, the amount of notable client changes is relatively small. For this release, we focus on the few main changes. -For the interested reader, we of course also include a full changelog at the bottom of this page as well. +While the changelog is quite long, the amount of notable client changes is relatively small. For this release, we focus +on the few main changes. For the interested reader, we of course also include a full changelog at the bottom of this +page as well. -If you are wondering why this first 1.5.x release is not version 1.5.0, but 1.5.634, please see -[this old blog post describing our _new versioning scheme_]({{< relref "/blog/2021-12-07-new-versioning-scheme/index.md" >}}) that +If you are wondering why this first 1.5.x release is not version 1.5.0, but 1.5.634, please see [this old blog +post describing our _new versioning scheme_]({{< relref "/blog/2021-12-07-new-versioning-scheme/index.md" >}}) that explains the absence of the aforementioned version numbers. - ## Feature spotlight ### Positional audio improvements -There have been some changes to the positional audio system, especially to better fine-tune the configuration. The maximum distance thresholds -have been significantly increased. The option to set a minimum volume of 0 has been brought back. And some clever psychoacoustic effects, such as -[interaural delay](https://en.wikipedia.org/wiki/Interaural_time_difference) as well as improved blooming will enhance the positional audio experience -even more. +There have been some changes to the positional audio system, especially to better fine-tune the configuration. The +maximum distance thresholds have been significantly increased. The option to set a minimum volume of 0 has been brought +back. And some clever psychoacoustic effects, such as +[interaural delay](https://en.wikipedia.org/wiki/Interaural_time_difference) as well as improved blooming will enhance +the positional audio experience even more. -For those users who wish to develop positional audio plugins - or try to debug them - we have added a convenient "Positional Audio Viewer" to the -developer context menu. This replaces the existing external "MumblePAHelper" with an in-client solution. It shows you the positional information of -your client and the associated metadata in real-time. +For those users who wish to develop positional audio plugins - or try to debug them - we have added a convenient +"Positional Audio Viewer" to the developer context menu. This replaces the existing external "MumblePAHelper" with an +in-client solution. It shows you the positional information of your client and the associated metadata in real-time. ![Positional Audio Viewer](/blog/media/PositionalAudioViewer.png) -For the positional audio viewer in action see: [https://odysee.com/@Mumble:5/positional-audio-viewer-left4dead:f](https://odysee.com/@Mumble:5/positional-audio-viewer-left4dead:f) +For the positional audio viewer in action see: +[https://odysee.com/@Mumble:5/positional-audio-viewer-left4dead:f](https://odysee.com/@Mumble:5/positional-audio-viewer-left4dead:f) ### UI and accessibility overhaul -Mumble 1.5 introduces some quality-of-life UI changes alongside the long-awaited accessibility overhaul. In the software context, -[accessibility features](https://en.wikipedia.org/wiki/Computer_accessibility) (often abbreviated as "a11y") are considerations and tools meant to -reduce the hassle of running a specific application for users with disabilities. Most often, you will find features specifically crafted or tweaked -for visually impaired users, but other disabilities such as cognitive or motor impairments should also be considered. - -We ensured that the entire application is now keyboard navigable and removed any existing focus traps. We also implemented forwarding of some context information, -such as the muted/deafened state of other users, are now forwarded to screen readers. Also, all existing settings pages, their contents, and -any actions that were previously only available as a toolbar button are now usable without a mouse. -If you are using a screen reader or other accessibility tooling and have any trouble using Mumble 1.5.634, make sure to let us know via our -[**GitHub issue tracker**](https://github.com/mumble-voip/mumble/issues). We want to make sure the application is usable by everyone. - -For users regulary connecting to very large Mumble servers, some neat features were added to make life easier: -The new message thresholding options will make Mumble suppress certain notifications when a configurable user limit is reached on the -server. Additionally, users are now able to not only hide certain channels explicitly when activating the channel filter, but also pin -channels in the filtered view even when they are empty. +Mumble 1.5 introduces some quality-of-life UI changes alongside the long-awaited accessibility overhaul. In the software +context, [accessibility features](https://en.wikipedia.org/wiki/Computer_accessibility) (often abbreviated as "a11y") +are considerations and tools meant to reduce the hassle of running a specific application for users with disabilities. +Most often, you will find features specifically crafted or tweaked for visually impaired users, but other disabilities +such as cognitive or motor impairments should also be considered. + +We ensured that the entire application is now keyboard navigable and removed any existing focus traps. We also +implemented forwarding of some context information, such as the muted/deafened state of other users, are now forwarded +to screen readers. Also, all existing settings pages, their contents, and any actions that were previously only +available as a toolbar button are now usable without a mouse. If you are using a screen reader or other accessibility +tooling and have any trouble using Mumble 1.5.634, make sure to let us know via our +[**GitHub issue tracker**](https://github.com/mumble-voip/mumble/issues). We want to make sure the application is usable +by everyone. + +For users regulary connecting to very large Mumble servers, some neat features were added to make life easier: The new +message thresholding options will make Mumble suppress certain notifications when a configurable user limit is reached +on the server. Additionally, users are now able to not only hide certain channels explicitly when activating the channel +filter, but also pin channels in the filtered view even when they are empty. ![Message threshold](/blog/media/MessageThreshold.png) -The new inline local volume adjustment slider removes the complexity of using a dedicated popup menu and therefore reduces the required -clicks for the same action significantly. +The new inline local volume adjustment slider removes the complexity of using a dedicated popup menu and therefore +reduces the required clicks for the same action significantly. ![Local volume adjustment](/blog/media/LocalVolumeAdjustment.png) -A lot of new global shortcut actions were added, including many of the menubar options, allowing to control Mumble with ease even when the -window is minimized or a fullscreen application is running. Furthermore, the volume of notifications, audio cues, and text-to-speech can -now be changed separately. +A lot of new global shortcut actions were added, including many of the menubar options, allowing to control Mumble with +ease even when the window is minimized or a fullscreen application is running. Furthermore, the volume of notifications, +audio cues, and text-to-speech can now be changed separately. -There have also been quite a lot of UI fixes, such as the chat log scrolling up when a new image is posted, the "channel name links" not -behaving correctly in the chat log, hiding UI elements not being persistent, and more! +There have also been quite a lot of UI fixes, such as the chat log scrolling up when a new image is posted, the "channel +name links" not behaving correctly in the chat log, hiding UI elements not being persistent, and more! ### Persistent channel listeners -Channel Listeners - a feature introduced in [Mumble 1.4]({{< relref "/blog/2022-01-16-mumble-1-4-230" >}}) - were previously only -valid for the current user session. In this release, we introduce persistent channel listeners for registered users. That means existing -listeners and their respective volume adjustments will be remembered by the server across reconnections. - +Channel Listeners - a feature introduced in [Mumble 1.4]({{< relref "/blog/2022-01-16-mumble-1-4-230" >}}) - were previously +only valid for the current user session. In this release, we introduce persistent channel listeners for registered users. +That means existing listeners and their respective volume adjustments will be remembered by the server across reconnections. ## Changelog @@ -142,7 +146,8 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Broken link targets with percent signs ({{< issue 5821 >}}) - Fixed: Chinese characters not displayed properly ({{< issue 6200 >}}) - Fixed: Clear shortcut data also for user-types ({{< issue 4636 >}}) -- Fixed: Code blocks end on three backticks without interruption by any other pattern of backticks in the code ({{< issue 6261 >}}) +- Fixed: Code blocks end on three backticks without interruption by any other pattern of backticks in the code + ({{< issue 6261 >}}) - Fixed: DB not found after migration on Windows ({{< issue 5593 >}}) - Fixed: DB transactions not effective ({{< issue 5531 >}}) - Fixed: Fallback theme ({{< issue 5088 >}}) @@ -166,7 +171,6 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Unresponsiveness due to shortcut system overload ({{< issue 5944 >}}) - Fixed: Use fixed dark font color for themeless notice labels ({{< issue 6256 >}}) - ### Server - Added: Ability to flag bot connections ({{< issue 5948 >}}) @@ -194,12 +198,10 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Rare crash regarding whisper cache ({{< issue 6372 >}}) - Fixed: Send enter restriction updates to correct user ({{< issue 6057 >}}) - ### Both - Fixed: Remove unreachable -V flag ({{< issue 6064 >}}) - ### Positional audio plugins - Added: Rewrite GTAV plugin to use signatures and game structs ({{< issue 5704 >}}) @@ -208,10 +210,8 @@ This is the full changelog for this release (changes relative to the Mumble 1.4. - Fixed: Update GTAV plugin to version 1.59.2612 ({{< issue 5679 >}}) - Fixed: Use atomic operations in Link plugin ({{< issue 6075 >}}) - ## Known issues - macOS binaries not being signed/notarized (overlay installer not signed) ({{< issue 4263 >}}) - Overlay blocked by BattleEye. A request to whitelist it has been made. - Overlay blocked by CS:GO Trusted Mode - diff --git a/hugo/content/blog/_index.md b/hugo/content/blog/_index.md index b67e18fb..9bff67d5 100644 --- a/hugo/content/blog/_index.md +++ b/hugo/content/blog/_index.md @@ -1,3 +1,3 @@ ---- -title: Blog ---- +--- +title: Blog +--- diff --git a/hugo/content/contact.md b/hugo/content/contact.md index c474c864..d54856ce 100644 --- a/hugo/content/contact.md +++ b/hugo/content/contact.md @@ -6,14 +6,15 @@ You can contact us in several ways. ## Community Channels -* [Issue tracker on GitHub](https://github.com/mumble-voip/mumble/issues) -* [Discussions on GitHub](https://github.com/mumble-voip/mumble/discussions) -* Chat [`#mumble:matrix.org`](https://matrix.to/#/#mumble:matrix.org) - usable with any Matrix chat client; for example [open with Element](https://app.element.io/#/room/#mumble:matrix.org) +- [Issue tracker on GitHub](https://github.com/mumble-voip/mumble/issues) +- [Discussions on GitHub](https://github.com/mumble-voip/mumble/discussions) +- Chat [`#mumble:matrix.org`](https://matrix.to/#/#mumble:matrix.org) + usable with any Matrix chat client; for example [open with Element](https://app.element.io/#/room/#mumble:matrix.org) ## Email -Note: Please **DON'T** use email for general support issues. For that, please refer to our community channels (see above). +Note: Please **DON'T** use email for general support issues. For that, please refer to our community channels (see +above). **General contact:** diff --git a/hugo/content/contribute.md b/hugo/content/contribute.md index d423cc79..ae23837c 100644 --- a/hugo/content/contribute.md +++ b/hugo/content/contribute.md @@ -8,28 +8,35 @@ You can contribute to the Mumble Project in multiple ways: ## Report Bugs -We track bugs, tasks and feature requests as [***issues* on GitHub**](https://github.com/mumble-voip/mumble/issues). +We track bugs, tasks and feature requests as [**_issues_ on GitHub**](https://github.com/mumble-voip/mumble/issues). If you find a bug, please **check if an issue ticket already exists** for it. If you find an existing issue ticket -* Provide additional information if you think any is missing (especially for reproducibility or environment conditions) -* Thumbs-up (👍) the ticket itself to indicate you experienced the issue too -* Sometimes we ask for testers for a potential fix *(see also our [`test-needed` ticket label](https://github.com/mumble-voip/mumble/labels/needs-testing))* -* You can follow it for update notifications +- Provide additional information if you think any is missing (especially for reproducibility or environment conditions) +- Thumbs-up (👍) the ticket itself to indicate you experienced the issue too +- Sometimes we ask for testers for a potential fix _(see also our + [`test-needed` ticket label](https://github.com/mumble-voip/mumble/labels/needs-testing))_ +- You can follow it for update notifications -If you **can not find a ticket** for your issue, please **create one**. Provide any context, expected and actual behavior, and environment information that can help us understand, reproduce, and fix the issue. +If you **can not find a ticket** for your issue, please **create one**. Provide any context, expected and actual +behavior, and environment information that can help us understand, reproduce, and fix the issue. -**Note:** For bugs that cause security concerns, please see [Report a vulnerability]({{< relref "security#reporting-a-vulnerability" >}}). +**Note:** For bugs that cause security concerns, please see [Report +a vulnerability]({{< relref "security#reporting-a-vulnerability" >}}). ## Vote for Feature Requests -Take a look at our tracked [Feature Requests]({{< relref "/feature-requests" >}}) and vote for those that you would love to see with a thumbs up (👍) reaction on GitHub. +Take a look at our tracked [Feature Requests]({{< relref "/feature-requests" >}}) and vote for those that you would love +to see with a thumbs up (👍) reaction on GitHub. ## Community Support -We receive support requests. We are often able to resolve them in a timely manner. But you may be able to help resolve them by communicating with the help-seeker. +We receive support requests. We are often able to resolve them in a timely manner. But you may be able to help resolve +them by communicating with the help-seeker. -The [tickets are labeled with `support`](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3Asupport). The [r/mumble/ subreddit](https://www.reddit.com/r/mumble/new/) also regularly receive support requests. +The +[tickets are labeled with `support`](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3Asupport). +The [r/mumble/ subreddit](https://www.reddit.com/r/mumble/new/) also regularly receive support requests. ## Development @@ -39,11 +46,15 @@ We are always looking for helping hands willing to contribute to Mumble. Mumble is available in various languages. -You can help improve or update existing translations, translate new texts on existing languages, or introduce additional languages. +You can help improve or update existing translations, translate new texts on existing languages, or introduce additional +languages. -We have a [Mumble project on Weblate](https://hosted.weblate.org/projects/mumble/mumble-client/) where you can register and start translating. +We have a [Mumble project on Weblate](https://hosted.weblate.org/projects/mumble/mumble-client/) where you can register +and start translating. -Weblate is a web translation platform. As a Website it is easy to access and use with any browser. For translators a global and project memory of translations as well as machine translations can help in finding good translations. Nevertheless, a native or good speaker is required to implement good translations. +Weblate is a web translation platform. As a Website it is easy to access and use with any browser. For translators a +global and project memory of translations as well as machine translations can help in finding good translations. +Nevertheless, a native or good speaker is required to implement good translations. The current status of our translations can be seen in the following graph: @@ -63,9 +74,12 @@ If you find any issues, take a look at [Report Bugs](#report-bugs-and-feature-re ### Mumble Development Mumble is mostly written in **C++** using the **Qt** library. -Thus previous knowledge in C++ and Qt is definitely useful, but we also encourage interested people who want to learn it to give it a try. We're happy to help you out, if needed. +Thus previous knowledge in C++ and Qt is definitely useful, but we also encourage interested people who want to learn it +to give it a try. We're happy to help you out, if needed. -The best way to get into Mumble development is to link up with us on [Matrix](https://matrix.org/). Join [`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) or use the [Direct Link via Element.io (Web App)](https://app.element.io/#/room/!VNUpYnUPdhTAqagvUu:matrix.org). +The best way to get into Mumble development is to link up with us on [Matrix](https://matrix.org/). Join +[`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) or use the +[Direct Link via Element.io (Web App)](https://app.element.io/#/room/!VNUpYnUPdhTAqagvUu:matrix.org). Alternatively you can create or comment on a pull request or issue report on GitHub. @@ -86,12 +100,13 @@ Take a look at the following documentation: - [Build Instructions](https://github.com/mumble-voip/mumble#building) #### Open issues and ongoing development -Also take a look at open [issues](https://github.com/mumble-voip/mumble/issues) and [pull requests](https://github.com/mumble-voip/mumble/pulls) on GitHub, especially with the following Labels: +Also take a look at open [issues](https://github.com/mumble-voip/mumble/issues) and +[pull requests](https://github.com/mumble-voip/mumble/pulls) on GitHub, especially with the following Labels: - [Good first issue](https://github.com/mumble-voip/mumble/labels/good%20first%20issue) - [Help wanted](https://github.com/mumble-voip/mumble/labels/help%20wanted) @@ -102,13 +117,19 @@ Also take a look at open [issues](https://github.com/mumble-voip/mumble/issues) #### Tips - To avoid unnecessary work and duplication, comment on issues and inform others what you plan to work on. -- You can also create [Draft Pull Requests](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests); this way you can work on the Pull Request, while others can see the progress and give you feedback. +- You can also create + [Draft Pull Requests](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/about-pull-requests#draft-pull-requests); + this way you can work on the Pull Request, while others can see the progress and give you feedback. ### Additional projects #### 3rd party Interfaces -Web interfaces, web-viewers, administration programs, CMS website modules – all neat things we would love to see! These could be written in any language supported by our Ice- or gRPC-based RPC Interfaces. You could start your own project or link up with an {{< wiki "3rd Party Applications" "already existing one" />}}. To get an idea about how interaction with the Mumble server might look like, you can take a look at the example scripts in our [GitHub repository for mumble-scripts](https://github.com/mumble-voip/mumble-scripts). +Web interfaces, web-viewers, administration programs, CMS website modules – all neat things we would love to see! These +could be written in any language supported by our Ice- or gRPC-based RPC Interfaces. You could start your own project or +link up with an {{< wiki "3rd Party Applications" "already existing one" />}}. To get an idea about how interaction with +the Mumble server might look like, you can take a look at the example scripts in our +[GitHub repository for mumble-scripts](https://github.com/mumble-voip/mumble-scripts). #### Ice authenticators @@ -116,13 +137,17 @@ See {{< wiki Authenticators />}}. We’re happy for every authenticator and auth #### Positional Audio plugins -Most of our [positional audio plugins](https://wiki.mumble.info/wiki/Games#Positional_audio) regularly break on game updates. To read on how you can help us update the plugins see the {{< wiki Pluginguide />}} page. +Most of our [positional audio plugins](https://wiki.mumble.info/wiki/Games#Positional_audio) regularly break on game +updates. To read on how you can help us update the plugins see the {{< wiki Pluginguide />}} page. -You can also add positional audio support to Games via our standard `Link` plugin. This way it will not get outdated, but you need permission to change (and access to) the Source Code of a game (e.g. via an open license or developer permission). See {{< wiki "Link" "Linking a game to Mumble" />}}. +You can also add positional audio support to Games via our standard `Link` plugin. This way it will not get outdated, +but you need permission to change (and access to) the Source Code of a game (e.g. via an open license or developer +permission). See {{< wiki "Link" "Linking a game to Mumble" />}}. #### Other 3rd party projects -If you are interested in more projects (Clients, Servers, cli tools etc.), you can also take a look at {{< wiki "3rd Party Applications" />}}. +If you are interested in more projects (Clients, Servers, cli tools etc.), you can also take a look at +{{< wiki "3rd Party Applications" />}}. Many of these projects will either gladly accept help or can (often) be forked easily, because of the open licenses. @@ -132,7 +157,8 @@ You find the official Mumble theme in its own [repository on GitHub](https://git Additional Mumble themes bring variety into Mumble's visual design and choices for different tastes. -You can find more information about themes in general and how to create themes on our {{< wiki Themes "Themes wiki page" />}}. +You can find more information about themes in general and how to create themes on our +{{< wiki Themes "Themes wiki page" />}}. ## Documentation & Website @@ -142,11 +168,13 @@ Improve our Documentation and Website. Right now you find most of the **(User) Documentation** in our [wiki](https://wiki.mumble.info). -Any contributions are welcome: improving existing pages or creating new ones with useful content. Also see the {{< wiki "Category:Please_Improve" "Please Improve Category" />}}. +Any contributions are welcome: improving existing pages or creating new ones with useful content. Also see the +{{< wiki "Category:Please_Improve" "Please Improve Category" />}}. You can create a wiki account {{< wiki "Special:RequestAccount" "here" />}}. -The **Development Documentation** is now in [Mumble's GitHub repo](https://github.com/mumble-voip/mumble/tree/master/docs/dev). +The **Development Documentation** is now in +[Mumble's GitHub repo](https://github.com/mumble-voip/mumble/tree/master/docs/dev). It is written in Markdown. @@ -175,11 +203,14 @@ Also take a look at open Issues and Pull Requests: ##### Ice methods -We have a [generated documentation](https://www.mumble.info/documentation/slice/1.3.0/html/Murmur.html) for exposed Ice methods. Although probably only developers will be able to understand it, please give us a note on any inconsistencies, errors or needed clarifications if you find them.sk +We have a [generated documentation](https://www.mumble.info/documentation/slice/1.3.0/html/Murmur.html) for exposed Ice +methods. Although probably only developers will be able to understand it, please give us a note on any inconsistencies, +errors or needed clarifications if you find them.sk #### External Documentation -- **Wikipedia**: Someone that is not a development team member needs to maintain the [article(s) at Wikipedia](https://en.wikipedia.org/wiki/Mumble_%28software%29). +- **Wikipedia**: Someone that is not a development team member needs to maintain the + [article(s) at Wikipedia](https://en.wikipedia.org/wiki/Mumble_%28software%29). ### Website @@ -193,8 +224,9 @@ You find the [Community Channels on the Contact page](https://www.mumble.info/co ## Hosting -Host your own Mumble Server and register it on our Public Server List (optional). -See our {{< wiki "Running_Murmur" "Server guide" />}} and [Server Registration details](https://wiki.mumble.info/wiki/Murmur.ini#Server_Registration). +Host your own Mumble Server and register it on our Public Server List (optional). See our +{{< wiki "Running_Murmur" "Server guide" />}} and +[Server Registration details](https://wiki.mumble.info/wiki/Murmur.ini#Server_Registration). ## Promotion @@ -202,6 +234,6 @@ Recommend Mumble to your friends and colleagues ;). Furthermore you can: -* Write about Mumble (e.g. in your blog or in social media). -* Ask (voice-)server hosters to consider providing Mumble servers. -* Create Videos, Tutorials or Benchmarks and publish them on prominent platforms. +- Write about Mumble (e.g. in your blog or in social media). +- Ask (voice-)server hosters to consider providing Mumble servers. +- Create Videos, Tutorials or Benchmarks and publish them on prominent platforms. diff --git a/hugo/content/documentation/_index.md b/hugo/content/documentation/_index.md index 6bdf2f1f..2fe5065b 100644 --- a/hugo/content/documentation/_index.md +++ b/hugo/content/documentation/_index.md @@ -2,4 +2,7 @@ title: Mumble Documentation date: 2020-12-22 --- -You can find documentation categories below. Older documentation we have not migrated to this website yet can be found in our documentation Wiki at [wiki.mumble.info](https://wiki.mumble.info/wiki/Main_Page). We are currently working on newer and more comprehensive documentation on this website, which will replace the content hosted in the Wiki. + +You can find documentation categories below. Older documentation we have not migrated to this website yet can be found +in our documentation Wiki at [wiki.mumble.info](https://wiki.mumble.info/wiki/Main_Page). We are currently working on +newer and more comprehensive documentation on this website, which will replace the content hosted in the Wiki. diff --git a/hugo/content/documentation/administration/_index.md b/hugo/content/documentation/administration/_index.md index f70f7c3d..09812105 100644 --- a/hugo/content/documentation/administration/_index.md +++ b/hugo/content/documentation/administration/_index.md @@ -1,3 +1,3 @@ ---- -title: Mumble Server Administration ---- +--- +title: Mumble Server Administration +--- diff --git a/hugo/content/documentation/administration/acl/index.md b/hugo/content/documentation/administration/acl/index.md index dd8758b8..7b7bbed3 100644 --- a/hugo/content/documentation/administration/acl/index.md +++ b/hugo/content/documentation/administration/acl/index.md @@ -1,274 +1,298 @@ ---- -title: Mumble Permission Configuration - ACL -date: 2023-06-10 ---- -For the configuration of permissions, Mumble uses ACLs (Access Control Lists). A rule may apply to a user or group of users and may give or revoke permissions. - -While the Group and ACL dialogs might seem complex at first, for simple configuration much of their complexity can be ignored. -The high configurability can be used for advanced and complex use cases. - -## Table of Contents - -{{< toc >}} - -## Edit Dialog - -Groups, group members, and ACL rules are configured in the channel edit dialog. - -If you have the **"Write ACL" permission** you can open the channel edit dialog in the context menu *(right-click)*. - -![Screenshot of channel context menu with edit action](screenshot-channel-edit.jpg) - -*For initial setup, before you have given anyone permission, you will need to authenticate as the administrative SuperUser account. On first server startup the password is logged in `mumble-server.log` as `2023-03-19 08:37:04.319 1 => Password for 'SuperUser' set to 'xxxxxx'`.* - -## Channels, Groups and ACL - -Groups and permissions are configured on channels. Channels inherit groups and rules by default. Groups can be used for grouping users into user roles. ACL rules are used to give or deny users or groups of users permissions on a channel. - -### User Groups - -In the *Groups* tab, you can see and edit the user groups of the channel. - -![Screenshot of channel groups dialog](screenshot-channel-groups.jpg) - -For a simple configuration, you will edit user groups on your servers root channel (the top-level, outer-most channel) and inherit these groups to all channels. - -![Screenshot of the root channel context menu with edit action](edit-root-channel.jpg) - -To describe the default permission setup we refer to the following example channel tree: - -```text -Root -├── ChannelA1 -│   ├── ChannelA11 -│   ├── ChannelA12 -│   └── ChannelA13 -└── ChannelB -``` - -By default - -* the `Root` channel defines an `admin` group - * the `admin` group is inheritable -* the other channels inherit the `admin` group - -#### Advanced User Groups - -Because user groups can be defined in channels you can define separate user groups for different channel sub trees, individual channels, or influence who is a member of a group in the context of different channels. - -For example, to have different moderators users in separate channel trees, given the following channel setup - -```text -Root -├── ChannelA1 -│   ├── ChannelA11 -│   ├── ChannelA12 -│   └── ChannelA13 -└── ChannelB -``` - -we can define a group `moderatorA` in `ChannelA1` and a group `moderatorB` in `ChannelB`. - -We may also define a group `userA` in `ChannelA1` and a group `userB` in `ChannelB` intending to only allow `userA` members to enter `ChannelA1` and its children, while only allowing `userB` members to enter the `ChannelB` channel. - -## ACL rules - -ACL rules are configured in the ACL tab of the channel edit dialog. - -![Screenshot of ACL dialog](screenshot-channel-acl.jpg) - -The Access Control *List* can have multiple rules. Rules may be inherited from parent channels - displayed in italics - or defined on the edited channel. - - -Permission are evaluated from top to bottom. (*Allow* and *deny* may be overwritten further down.) - -### Selector - -A rule consists of a selector and permission actions. - -The **selector defines who the rule applies to** - a user, user group. It may use a prefix to indicate its type or modify its select-behavior. - -| Prefix | Prefix-Type | Description | Example | -| ------ | ------------- | ------------------------------------------------ | ------------------------------ | -| *none* | Id-Type | User | `User1`, `John Doe` | -| `@` | Id-Type | Group | `@admin`, `@all`, `@moderator` | -| `@#` | Id-Type | Channel password / Access Token | `@#secret`, `@#u8DhwG2` | -| `~` | Eval-Locality | Evaluate in context of definition | `@~sub 1,1`, `@~moderator` | -| `!` | Inversion | Invert the meaning of the rest of the selector | `!TrustedUser`, `!@moderator` | - -### Permission Allow/Deny - -The permission actions can allow or deny a permission. If the rule neither allows nor denies a permission it does not influence the top-to-bottom permission evaluation. - -### Rule Examples - -For example, given the following channel setup - -```text -Root -├── ChannelA1 -│   ├── ChannelA11 -│   ├── ChannelA12 -│   └── ChannelA13 -└── ChannelB -``` - -`@admin` defined on channel `Root` with *Allow* `Write ACL` will give members of the `admin` group all permissions. - -![Screenshot of giving admin group Write ACL permission](acl-admin-allow-writeacl.jpg) - -### Meta Groups - -Meta groups can be used in ACL rules. Meta groups have implicitly defined members. The members are determined by user state. - -| Group | Description | Notes | -| -------- | ------------------- | -------------- | -| `@all` | Applies to everyone | Useful for default permissions or for clearing complex rules to a well defined state. | -| `@in` | In this channel | | -| `@out` | Outside of this channel | | -| `@~sub` | Sub-channel - `@~sub,a,b,c` | | - -#### `in` Group - -Given a channel tree - -```text -Root/ -├── ChannelA1 -│   ├── ChannelA11 -│   ├── ChannelA12 -└── ChannelB -``` - -To deny users outside of ChanA1 to send text messages to it, but allow users inside of it to send text messages, we add two rules. - -* *Deny* *Text message* to `@all` -* *Allow* *Text message* to `@in` - -Now users in `Root`, `ChanA11`, `ChanA12`, ChanB can not send text messages to ChanA1. But users inside of ChanA1 can. - -![Screenshot of in rule example all rule](acl-in-example1-1all.jpg) - -![Screenshot of in rule example in rule](acl-in-example1-2in.jpg) - -The rule is inherited into `ChanA11` and `ChanA12`. But it applies as a rule within each of those channels individually. So users outside of `ChanA11` can not send text messages to `ChanA11`, but users inside of it can. Users outside of `ChanA12` can not send text messages to `ChanA12`, but users inside of it can. - -If we define the second rule [on `ChanA1`] as `@~in` instead of `@in` then the inherited rule in `ChanA11` and `ChanA12` is interpreted in the context of `ChanA1`. That means that a user in `ChanA1` will be able to send text messages to `ChanA1`, `ChanA11`, and `ChanA12`. But a user not in `ChanA1` can not. Users in `ChanA11` and `ChanA12` will also not be able to send text messages to `ChanA1`, `ChanA11`, and `ChanA12`. - -#### `out` Group - -An `@out` meta group is the inverse of the `@in` meta group. This means that you can solve the same tasks alternatively with `in` or `out`, and inverse *allow* and *deny*. - -For example: - -* `@in` approach: *deny `@all`*, *allow `@in`* -* `@out` approach: *allow `@all`*, *deny `@out`* - -#### `sub` Group - -The `sub` group applies to subchannels and has three optional parameters `a,b,c`. It is written as `@~sub` or `@~sub,a` or `@~sub,a,b` or `@~sub,a,b,c` where `a`, `b`, and `c` are integer numbers. - -Because the `sub` group applies to a channel tree the rule only makes sense with a `~` tilde modifier (`@~sub`). -Without the `~` tilde the context in which the ACL is evaluated in is always the current channel, which would mean no children or parents would ever be considered. - -| Parameter | Description | Default | -| --------- | -------------------------------- | ------- | -| a | minimum number of common parents | `0` | -| b | minimum child path depth | `1` | -| c | maximum child path depth | | - - -Given the channel tree - -```text -ChanA -└── ChanB - └── ChanC -``` - -| Selector | On channel | Applies to user in | -| ------------- | ---------- | ------------------------- | -| `@~sub,0,0` | `ChanA` | `ChanA`, `ChanB`, `ChanC` | -| `@~sub,0,1` | `ChanA` | `ChanB`, `ChanC` | -| `@~sub,0,2` | `ChanA` | `ChanC` | -| `@~sub,0,0,0` | `ChanA` | `ChanA` | -| `@~sub,0,0,1` | `ChanA` | `ChanA`, `ChanB` | -| `@~sub,0,0,2` | `ChanA` | `ChanA`, `ChanB`, `ChanC` | -| `@~sub,0,1,1` | `ChanA` | `ChanB` | -| `@~sub,0,2,2` | `ChanA` | `ChanC` | - -In other words, `b` and `c` define the child depth span (children of `b`-th to `c`-th depth). - -Laid out in a different form: - -```text -Channel Tree: ChanA / ChanB / ChanC -@~sub,0,1 x x a=0: no sibling logic, b=1 start one level below the current channel, c empty: no depth limit -@~sub,0,1,1 x a=0: no sibling logic, b=1 start one level below the current channel, c=1: end one level below the current channel (inclusive) -``` - -##### `sub` Example 1 - -Given the channel tree - -```text -ChanA -└── ChanB - └── ChanC -``` - -A `@~sub` rule (equivalent to `@~sub,0,1`) on `ChanA` applies to users in `ChanB` and `ChanC` but gives permission on `ChanA`. - -For example, if *Text message* is *denied* on `ChanA`, but a `@~sub` rule on `ChanA` allows *Text message*, a user in `ChanB` or `ChanC` can send text messages to `ChanA`. A user in `ChanA` can not send a text message to `ChanA`. - -For example, with two rules on `ChanA` - -* `ChanA`: `@all` *Deny* *Text message* -* `ChanA`: `@~sub` *Allow* *Text message* - -=> - -* `ChanA`: user can not send text message to `ChanA` -* `ChanB`: user can send text message to `ChanA` -* `ChanC`: user can sent text message to `ChanA` - -### Evaluation Locality - -Given the channel tree - -```text -ChanA -└── ChanB - └── ChanC -``` - -Defining an ACL rule `@in` on `ChanA` that inherits to subchannels means it *exists* in `ChanA` as well as its children `ChanB1` and `ChanB2`. -Therefore, when checking this ACL inside e.g. `ChanB2` it acts as if it had been defined on it (aka: the evaluation of the ACL does not know that the original ACL was defined on `ChanA`). - -Defining an ACL rule `@~in` on `ChanA` that inherits to subchannels means it applies to `ChanA` as well as its children `ChanB1` and `ChanB2`. -But this time the evaluation of the ACL _does_ know that the ACL is defined in the context of `ChanA` and therefore `@~in` only refers to users in `ChanA`. - - -For example: - -If `ChanA` has `@all` *deny* *text message* and `@in` *allow* *text message* then - -* users in `ChanA` can only send text messages to `ChanA` -* users in `ChanB1` can only send text messages to `ChanB1` -* users in `ChanB2` can only send text messages to `ChanB2` - -If `ChanB` has `@all` *deny* *text message* and `@~in` *allow* *text message* then - -* users in `ChanA` can send text messages to `ChanA`, `ChanB1`, `ChanB2` -* users in `ChanB1` or `ChanB2` can not send text messages - -## Linking Channels - -Linked channels share communication. Connecting channels and then restricting which users can do what in which channels is a versatile approach for configuring complex permission behavior. - -## Testing with multiple clients - -The Mumble client by default ensures only one instance is running [on a system], and loads user configuration with a user certificate. -You can work around this with the `-m` and `-n` launch parameters (`mumble.exe -n -m`). - -This allows you to edit ACL with one client (normal launch, login as SuperUser or admin user), and test your ACL one or multiple unauthenticated clients. +--- +title: Mumble Permission Configuration - ACL +date: 2023-06-10 +--- + +For the configuration of permissions, Mumble uses ACLs (Access Control Lists). A rule may apply to a user or group of +users and may give or revoke permissions. + +While the Group and ACL dialogs might seem complex at first, for simple configuration much of their complexity can be +ignored. The high configurability can be used for advanced and complex use cases. + +## Table of Contents + +{{< toc >}} + +## Edit Dialog + +Groups, group members, and ACL rules are configured in the channel edit dialog. + +If you have the **"Write ACL" permission** you can open the channel edit dialog in the context menu _(right-click)_. + +![Screenshot of channel context menu with edit action](screenshot-channel-edit.jpg) + +_For initial setup, before you have given anyone permission, you will need to authenticate as the administrative +SuperUser account. On first server startup the password is logged in `mumble-server.log` as +`2023-03-19 08:37:04.319 1 => Password for 'SuperUser' set to 'xxxxxx'`._ + +## Channels, Groups and ACL + +Groups and permissions are configured on channels. Channels inherit groups and rules by default. Groups can be used for +grouping users into user roles. ACL rules are used to give or deny users or groups of users permissions on a channel. + +### User Groups + +In the _Groups_ tab, you can see and edit the user groups of the channel. + +![Screenshot of channel groups dialog](screenshot-channel-groups.jpg) + +For a simple configuration, you will edit user groups on your servers root channel (the top-level, outer-most channel) +and inherit these groups to all channels. + +![Screenshot of the root channel context menu with edit action](edit-root-channel.jpg) + +To describe the default permission setup we refer to the following example channel tree: + +```text +Root +├── ChannelA1 +│   ├── ChannelA11 +│   ├── ChannelA12 +│   └── ChannelA13 +└── ChannelB +``` + +By default + +- the `Root` channel defines an `admin` group + - the `admin` group is inheritable +- the other channels inherit the `admin` group + +#### Advanced User Groups + +Because user groups can be defined in channels you can define separate user groups for different channel sub trees, +individual channels, or influence who is a member of a group in the context of different channels. + +For example, to have different moderators users in separate channel trees, given the following channel setup + +```text +Root +├── ChannelA1 +│   ├── ChannelA11 +│   ├── ChannelA12 +│   └── ChannelA13 +└── ChannelB +``` + +we can define a group `moderatorA` in `ChannelA1` and a group `moderatorB` in `ChannelB`. + +We may also define a group `userA` in `ChannelA1` and a group `userB` in `ChannelB` intending to only allow `userA` +members to enter `ChannelA1` and its children, while only allowing `userB` members to enter the `ChannelB` channel. + +## ACL rules + +ACL rules are configured in the ACL tab of the channel edit dialog. + +![Screenshot of ACL dialog](screenshot-channel-acl.jpg) + +The Access Control _List_ can have multiple rules. Rules may be inherited from parent channels - displayed in italics - +or defined on the edited channel. + +Permission are evaluated from top to bottom. (_Allow_ and _deny_ may be overwritten further down.) + +### Selector + +A rule consists of a selector and permission actions. + +The **selector defines who the rule applies to** - a user, user group. It may use a prefix to indicate its type or +modify its select-behavior. + +| Prefix | Prefix-Type | Description | Example | +| ------ | ------------- | ---------------------------------------------- | ------------------------------ | +| _none_ | Id-Type | User | `User1`, `John Doe` | +| `@` | Id-Type | Group | `@admin`, `@all`, `@moderator` | +| `@#` | Id-Type | Channel password / Access Token | `@#secret`, `@#u8DhwG2` | +| `~` | Eval-Locality | Evaluate in context of definition | `@~sub 1,1`, `@~moderator` | +| `!` | Inversion | Invert the meaning of the rest of the selector | `!TrustedUser`, `!@moderator` | + +### Permission Allow/Deny + +The permission actions can allow or deny a permission. If the rule neither allows nor denies a permission it does not +influence the top-to-bottom permission evaluation. + +### Rule Examples + +For example, given the following channel setup + +```text +Root +├── ChannelA1 +│   ├── ChannelA11 +│   ├── ChannelA12 +│   └── ChannelA13 +└── ChannelB +``` + +`@admin` defined on channel `Root` with _Allow_ `Write ACL` will give members of the `admin` group all permissions. + +![Screenshot of giving admin group Write ACL permission](acl-admin-allow-writeacl.jpg) + +### Meta Groups + +Meta groups can be used in ACL rules. Meta groups have implicitly defined members. The members are determined by user +state. + +| Group | Description | Notes | +| ------- | --------------------------- | ------------------------------------------------------------------------------------- | +| `@all` | Applies to everyone | Useful for default permissions or for clearing complex rules to a well defined state. | +| `@in` | In this channel | | +| `@out` | Outside of this channel | | +| `@~sub` | Sub-channel - `@~sub,a,b,c` | | + +#### `in` Group + +Given a channel tree + +```text +Root/ +├── ChannelA1 +│   ├── ChannelA11 +│   ├── ChannelA12 +└── ChannelB +``` + +To deny users outside of ChanA1 to send text messages to it, but allow users inside of it to send text messages, we add +two rules. + +- _Deny_ _Text message_ to `@all` +- _Allow_ _Text message_ to `@in` + +Now users in `Root`, `ChanA11`, `ChanA12`, ChanB can not send text messages to ChanA1. But users inside of ChanA1 can. + +![Screenshot of in rule example all rule](acl-in-example1-1all.jpg) + +![Screenshot of in rule example in rule](acl-in-example1-2in.jpg) + +The rule is inherited into `ChanA11` and `ChanA12`. But it applies as a rule within each of those channels individually. +So users outside of `ChanA11` can not send text messages to `ChanA11`, but users inside of it can. Users outside of +`ChanA12` can not send text messages to `ChanA12`, but users inside of it can. + +If we define the second rule [on `ChanA1`] as `@~in` instead of `@in` then the inherited rule in `ChanA11` and `ChanA12` +is interpreted in the context of `ChanA1`. That means that a user in `ChanA1` will be able to send text messages to `ChanA1`, +`ChanA11`, and `ChanA12`. But a user not in `ChanA1` can not. Users in `ChanA11` and `ChanA12` will also not be able to send +text messages to `ChanA1`, `ChanA11`, and `ChanA12`. + +#### `out` Group + +An `@out` meta group is the inverse of the `@in` meta group. This means that you can solve the same tasks alternatively +with `in` or `out`, and inverse _allow_ and _deny_. + +For example: + +- `@in` approach: _deny `@all`_, _allow `@in`_ +- `@out` approach: _allow `@all`_, _deny `@out`_ + +#### `sub` Group + +The `sub` group applies to subchannels and has three optional parameters `a,b,c`. It is written as `@~sub` or `@~sub,a` +or `@~sub,a,b` or `@~sub,a,b,c` where `a`, `b`, and `c` are integer numbers. + +Because the `sub` group applies to a channel tree the rule only makes sense with a `~` tilde modifier (`@~sub`). Without +the `~` tilde the context in which the ACL is evaluated in is always the current channel, which would mean no children +or parents would ever be considered. + +| Parameter | Description | Default | +| --------- | -------------------------------- | ------- | +| a | minimum number of common parents | `0` | +| b | minimum child path depth | `1` | +| c | maximum child path depth | | + +Given the channel tree + +```text +ChanA +└── ChanB + └── ChanC +``` + +| Selector | On channel | Applies to user in | +| ------------- | ---------- | ------------------------- | +| `@~sub,0,0` | `ChanA` | `ChanA`, `ChanB`, `ChanC` | +| `@~sub,0,1` | `ChanA` | `ChanB`, `ChanC` | +| `@~sub,0,2` | `ChanA` | `ChanC` | +| `@~sub,0,0,0` | `ChanA` | `ChanA` | +| `@~sub,0,0,1` | `ChanA` | `ChanA`, `ChanB` | +| `@~sub,0,0,2` | `ChanA` | `ChanA`, `ChanB`, `ChanC` | +| `@~sub,0,1,1` | `ChanA` | `ChanB` | +| `@~sub,0,2,2` | `ChanA` | `ChanC` | + +In other words, `b` and `c` define the child depth span (children of `b`-th to `c`-th depth). + +Laid out in a different form: + +```text +Channel Tree: ChanA / ChanB / ChanC +@~sub,0,1 x x a=0: no sibling logic, b=1 start one level below the current channel, c empty: no depth limit +@~sub,0,1,1 x a=0: no sibling logic, b=1 start one level below the current channel, c=1: end one level below the current channel (inclusive) +``` + +##### `sub` Example 1 + +Given the channel tree + +```text +ChanA +└── ChanB + └── ChanC +``` + +A `@~sub` rule (equivalent to `@~sub,0,1`) on `ChanA` applies to users in `ChanB` and `ChanC` but gives permission on +`ChanA`. + +For example, if _Text message_ is _denied_ on `ChanA`, but a `@~sub` rule on `ChanA` allows _Text message_, a user in +`ChanB` or `ChanC` can send text messages to `ChanA`. A user in `ChanA` can not send a text message to `ChanA`. + +For example, with two rules on `ChanA` + +- `ChanA`: `@all` _Deny_ _Text message_ +- `ChanA`: `@~sub` _Allow_ _Text message_ + +=> + +- `ChanA`: user can not send text message to `ChanA` +- `ChanB`: user can send text message to `ChanA` +- `ChanC`: user can sent text message to `ChanA` + +### Evaluation Locality + +Given the channel tree + +```text +ChanA +└── ChanB + └── ChanC +``` + +Defining an ACL rule `@in` on `ChanA` that inherits to subchannels means it _exists_ in `ChanA` as well as its children +`ChanB1` and `ChanB2`. Therefore, when checking this ACL inside e.g. `ChanB2` it acts as if it had been defined on it +(aka: the evaluation of the ACL does not know that the original ACL was defined on `ChanA`). + +Defining an ACL rule `@~in` on `ChanA` that inherits to subchannels means it applies to `ChanA` as well as its children +`ChanB1` and `ChanB2`. But this time the evaluation of the ACL _does_ know that the ACL is defined in the context of +`ChanA` and therefore `@~in` only refers to users in `ChanA`. + +For example: + +If `ChanA` has `@all` _deny_ _text message_ and `@in` _allow_ _text message_ then + +- users in `ChanA` can only send text messages to `ChanA` +- users in `ChanB1` can only send text messages to `ChanB1` +- users in `ChanB2` can only send text messages to `ChanB2` + +If `ChanB` has `@all` _deny_ _text message_ and `@~in` _allow_ _text message_ then + +- users in `ChanA` can send text messages to `ChanA`, `ChanB1`, `ChanB2` +- users in `ChanB1` or `ChanB2` can not send text messages + +## Linking Channels + +Linked channels share communication. Connecting channels and then restricting which users can do what in which channels +is a versatile approach for configuring complex permission behavior. + +## Testing with multiple clients + +The Mumble client by default ensures only one instance is running [on a system], and loads user configuration with a +user certificate. You can work around this with the `-m` and `-n` launch parameters (`mumble.exe -n -m`). + +This allows you to edit ACL with one client (normal launch, login as SuperUser or admin user), and test your ACL one or +multiple unauthenticated clients. diff --git a/hugo/content/documentation/developer/_index.md b/hugo/content/documentation/developer/_index.md index e1de07a4..3b41fa6a 100644 --- a/hugo/content/documentation/developer/_index.md +++ b/hugo/content/documentation/developer/_index.md @@ -1,8 +1,14 @@ ---- -title: "Mumble Developer Documentation" ---- -A lot of the developer documentation can be found in the [Mumble repository docs subfolder](https://github.com/mumble-voip/mumble/tree/master/docs) as Markdown text documents. - -This includes some client documentation, but in [docs/dev](https://github.com/mumble-voip/mumble/tree/master/docs/dev) more technical documentation like [build instructions](https://github.com/mumble-voip/mumble/tree/master/docs/dev/build-instructions), source code, feature and concept documentation, and development workflow guidance. - -Apart from that documentation, referred to and linked above, this website hosts the following documentation and documentation categories. +--- +title: "Mumble Developer Documentation" +--- + +A lot of the developer documentation can be found in the +[Mumble repository docs subfolder](https://github.com/mumble-voip/mumble/tree/master/docs) as Markdown text documents. + +This includes some client documentation, but in [docs/dev](https://github.com/mumble-voip/mumble/tree/master/docs/dev) +more technical documentation like +[build instructions](https://github.com/mumble-voip/mumble/tree/master/docs/dev/build-instructions), source code, +feature and concept documentation, and development workflow guidance. + +Apart from that documentation, referred to and linked above, this website hosts the following documentation and +documentation categories. diff --git a/hugo/content/documentation/developer/channel-viewer-protocol/index.md b/hugo/content/documentation/developer/channel-viewer-protocol/index.md index 0278a8aa..98267750 100644 --- a/hugo/content/documentation/developer/channel-viewer-protocol/index.md +++ b/hugo/content/documentation/developer/channel-viewer-protocol/index.md @@ -1,400 +1,408 @@ ---- -title: "Channel Viewer Protocol" ---- -The Mumble server offers a ZeroC Ice API endpoint that allows programmatic access to the server. - -The Channel Viewer Protocol (“CVP”) is a simpler JSON or XML protocol offered by other applications that bind to the Mumble server Ice API. - -Multiple provider and consumer / viewer implementations exist. - -The document is encoded in UTF-8. - -## CVP Provider Guidelines - -* Information from the Mumble Server shall be provided as complete and unaltered as reasonably possible -* Custom fields that are not sourced directly from Mumble server shall use a `x_` name prefix to evade name clashes -* Any content-encoding headers shall announce the UTF-8 encoding being used -* Providers, Provider developers, publishers, and hosters MUST take sufficient care regarding user privacy, encryption, and authentication -* A provider may offer JSON, XML, or both -* Providers that offer JSON shall offer simple JSON responses as well as [JSONP](https://en.wikipedia.org/wiki/JSONP) with `callback` as the callback parameter - -## CVP Consumer Guidelines - -* A field not recognized by the client shall be silently ignored (forward-compatibility) -* Empty fields shall be interpreted as unset. A consumer shall not rely on a field that exists to have a usable value. - -## Address field, authentication, and user privacy - -User data MUST be protected through adequate means and authentication. - -If the provider does not support delivering users' addresses at all, it shall ignore any authentication data from client the client. - -Integrations into web and website frameworks and platforms should integrate into their session, authentication, and permission scheme to ensure deliberate data sharing over unintended leaking of information. - -To ease client implementation, the server shall use a `x_addrstr` text field that contains one of: - -* a fully qualified domain name like `somewhere.example.com` -* an IPv4 address in dotted quad notation like `192.168.0.1` -* an IPv6 address in colon notation like `2001:6f8:108f:1:21f:3cff:wx:yz` - -## Examples - -```text -Root -├── ChannelA -└── ChannelB - ├── htmlsubtesting - │ └── subsubtesting - └── plainsubtesting - └── subsubtesting -``` - -### JSON - -#### Server - -Mandatory server root object fields: - -```json -{ - "id": 1, - "name": "The Server Name", - "root": { } -} -``` - -Optional server fields: - -* `x_uptime`: The number of seconds this server has been running - -```json - "x_connecturl": "mumble://somewhere/", - "x_uptime": 7156 -``` - -#### Channel - -Mandatory channel fields: - -```json -{ - "id": 0, - "parent": -1, - "position": 0, - "name": "Root", - "description": "", - "links": [], - "users": [], - "channels": [], - "temporary": false -} -``` - -The fields `links`, `users`, and `channels` contain IDs of linked channels, users in the channel, and subchannels respectively. - -Optional channel fields: - -```json -"x_connecturl": "mumble://somewhere/somechannel" -``` - -#### User - -*Take note of the address and privacy notes in the corresponding general section.* - -Mandatory User fields: - -```json -{ - "session": 143, - "userid": 4, - "name": "Yps0", - "channel": 40, - "deaf": false, - "mute": false, - "selfDeaf": false, - "selfMute": false, - "suppress": false -} -``` - -Optional User fields: - -```json -{ - "address": (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 0, 10), - "x_addrstring": "192.168.0.10", - "comment": , - "onlinesecs": 161, - "idlesecs": 0, - "bytespersec": 6580, - "context": , - "identity": , - "recording": false, - "prioritySpeaker": false, - "tcponly": false, - "x_texture": "https://example.com/avatars/mumble/texture.png", - "os": "Win", - "osversion": "5.1.2600.1", - "release": "02071e", - "version": 66051 -} -``` - -* `x_addrstr` or `x_addrstring` shall be a human-readable string format of the address; hostname, dotted IPv4, or colon IPv6 - -#### Full JSON Example - -```json -{ - "x_connecturl": "mumble://mumble.example.com?version=1.2.2", - "x_uptime": 53289, - "root": { - "channels": [ - { - "channels": [], - "x_connecturl": "mumble://mumble.example.com/newtesting?version=1.2.2", - "temporary": false, - "description": "", - "parent": 0, - "position": 0, - "users": [], - "name": "ChannelA", - "links": [], - "id": 6 - }, - { - "channels": [ - { - "channels": [ - { - "channels": [], - "x_connecturl": "mumble://mumble.example.com/testing/htmlsubtesting%20%C3%B6%C3%A4%C3%BC/subsubtesting?version=1.2.2", - "temporary": false, - "description": "", - "parent": 4, - "position": 0, - "users": [], - "name": "subsubtesting", - "links": [], - "id": 5 - } - ], - "x_connecturl": "mumble://mumble.example.com/testing/htmlsubtesting%20%C3%B6%C3%A4%C3%BC?version=1.2.2", - "temporary": false, - "description": "This channel has HTML elements in its description that are evaluated as red bold Fonts!", - "parent": 1, - "position": 0, - "users": [ - { - "comment": "", - "mute": false, - "suppress": false, - "selfDeaf": false, - "x_addrstring": "2001:6f8:108f:1:21f:3cff:wx:yz", - "deaf": false, - "selfMute": true, - "bytespersec": 0, - "session": 1, - "tcponly": false, - "address": [ 32, 1, 6, 248, 16, 143, 0, 1, 2, 31, 60, 255, w, x, y, z ], - "idlesecs": 33, - "identity": "", - "name": "svedrin", - "userid": 1, - "version": 66050, - "context": "", - "release": "1.2.2-2", - "osversion": "Debian GNU/Linux unstable (sid)", - "os": "X11", - "onlinesecs": 35, - "channel": 4 - } - ], - "name": "htmlsubtesting \u00f6\u00e4\u00fc", - "links": [ - 2 - ], - "id": 4 - }, - { - "channels": [ - { - "channels": [], - "x_connecturl": "mumble://mumble.example.com/testing/plainsubtesting/subsubtesting?version=1.2.2", - "temporary": false, - "description": "", - "parent": 2, - "position": 0, - "users": [], - "name": "subsubtesting", - "links": [], - "id": 3 - } - ], - "x_connecturl": "mumble://mumble.example.com/testing/plainsubtesting?version=1.2.2", - "temporary": false, - "description": "This channel has HTML elements in its description that are not evaluated as red bold Fonts!", - "parent": 1, - "position": 0, - "users": [], - "name": "plainsubtesting", - "links": [ - 4 - ], - "id": 2 - } - ], - "x_connecturl": "mumble://mumble.example.com/testing?version=1.2.2", - "temporary": false, - "description": "", - "parent": 0, - "position": 0, - "users": [], - "name": "ChannelB", - "links": [], - "id": 1 - } - ], - "x_connecturl": "mumble://mumble.example.com?version=1.2.2", - "temporary": false, - "description": "", - "parent": -1, - "position": 0, - "users": [], - "name": "Root", - "links": [], - "id": 0 - }, - "name": "The Server Name", - "id": 1 -} -``` - -### XML - -For XML, the same principles apply as for JSON, along with the following encoding principles: - -* Boolean values are represented as "true" or "false" -* Lists (e.g. for the players' IP addresses or the channel links) are space-separated numbers - -The root element (``) shall declare the `xmlns` and `xmlns:xsi` namespace attributes as follows: - -```xml - - -``` - -The following element names shall be used: - -* Server: `` -* Channel: `` -* User: `` - -The User context field value MUST be base64 encoded because in the Mumble server it holds `\0` bytes. - -### Full XML Example - -```xml - - - - - - - - - - - - - - - -``` +--- +title: "Channel Viewer Protocol" +--- + +The Mumble server offers a ZeroC Ice API endpoint that allows programmatic access to the server. + +The Channel Viewer Protocol (“CVP”) is a simpler JSON or XML protocol offered by other applications that bind to the +Mumble server Ice API. + +Multiple provider and consumer / viewer implementations exist. + +The document is encoded in UTF-8. + +## CVP Provider Guidelines + +- Information from the Mumble Server shall be provided as complete and unaltered as reasonably possible +- Custom fields that are not sourced directly from Mumble server shall use a `x_` name prefix to evade name clashes +- Any content-encoding headers shall announce the UTF-8 encoding being used +- Providers, Provider developers, publishers, and hosters MUST take sufficient care regarding user privacy, encryption, + and authentication +- A provider may offer JSON, XML, or both +- Providers that offer JSON shall offer simple JSON responses as well as [JSONP](https://en.wikipedia.org/wiki/JSONP) + with `callback` as the callback parameter + +## CVP Consumer Guidelines + +- A field not recognized by the client shall be silently ignored (forward-compatibility) +- Empty fields shall be interpreted as unset. A consumer shall not rely on a field that exists to have a usable value. + +## Address field, authentication, and user privacy + +User data MUST be protected through adequate means and authentication. + +If the provider does not support delivering users' addresses at all, it shall ignore any authentication data from client +the client. + +Integrations into web and website frameworks and platforms should integrate into their session, authentication, and +permission scheme to ensure deliberate data sharing over unintended leaking of information. + +To ease client implementation, the server shall use a `x_addrstr` text field that contains one of: + +- a fully qualified domain name like `somewhere.example.com` +- an IPv4 address in dotted quad notation like `192.168.0.1` +- an IPv6 address in colon notation like `2001:6f8:108f:1:21f:3cff:wx:yz` + +## Examples + +```text +Root +├── ChannelA +└── ChannelB + ├── htmlsubtesting + │ └── subsubtesting + └── plainsubtesting + └── subsubtesting +``` + +### JSON + +#### Server + +Mandatory server root object fields: + +```json +{ + "id": 1, + "name": "The Server Name", + "root": {} +} +``` + +Optional server fields: + +- `x_uptime`: The number of seconds this server has been running + +```json + "x_connecturl": "mumble://somewhere/", + "x_uptime": 7156 +``` + +#### Channel + +Mandatory channel fields: + +```json +{ + "id": 0, + "parent": -1, + "position": 0, + "name": "Root", + "description": "", + "links": [], + "users": [], + "channels": [], + "temporary": false +} +``` + +The fields `links`, `users`, and `channels` contain IDs of linked channels, users in the channel, and subchannels +respectively. + +Optional channel fields: + +```json +"x_connecturl": "mumble://somewhere/somechannel" +``` + +#### User + +_Take note of the address and privacy notes in the corresponding general section._ + +Mandatory User fields: + +```json +{ + "session": 143, + "userid": 4, + "name": "Yps0", + "channel": 40, + "deaf": false, + "mute": false, + "selfDeaf": false, + "selfMute": false, + "suppress": false +} +``` + +Optional User fields: + +```json +{ + "address": (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 192, 168, 0, 10), + "x_addrstring": "192.168.0.10", + "comment": , + "onlinesecs": 161, + "idlesecs": 0, + "bytespersec": 6580, + "context": , + "identity": , + "recording": false, + "prioritySpeaker": false, + "tcponly": false, + "x_texture": "https://example.com/avatars/mumble/texture.png", + "os": "Win", + "osversion": "5.1.2600.1", + "release": "02071e", + "version": 66051 +} +``` + +- `x_addrstr` or `x_addrstring` shall be a human-readable string format of the address; hostname, dotted IPv4, or colon + IPv6 + +#### Full JSON Example + +```json +{ + "x_connecturl": "mumble://mumble.example.com?version=1.2.2", + "x_uptime": 53289, + "root": { + "channels": [ + { + "channels": [], + "x_connecturl": "mumble://mumble.example.com/newtesting?version=1.2.2", + "temporary": false, + "description": "", + "parent": 0, + "position": 0, + "users": [], + "name": "ChannelA", + "links": [], + "id": 6 + }, + { + "channels": [ + { + "channels": [ + { + "channels": [], + "x_connecturl": "mumble://mumble.example.com/testing/htmlsubtesting%20%C3%B6%C3%A4%C3%BC/subsubtesting?version=1.2.2", + "temporary": false, + "description": "", + "parent": 4, + "position": 0, + "users": [], + "name": "subsubtesting", + "links": [], + "id": 5 + } + ], + "x_connecturl": "mumble://mumble.example.com/testing/htmlsubtesting%20%C3%B6%C3%A4%C3%BC?version=1.2.2", + "temporary": false, + "description": "This channel has HTML elements in its description that are evaluated as red bold Fonts!", + "parent": 1, + "position": 0, + "users": [ + { + "comment": "", + "mute": false, + "suppress": false, + "selfDeaf": false, + "x_addrstring": "2001:6f8:108f:1:21f:3cff:wx:yz", + "deaf": false, + "selfMute": true, + "bytespersec": 0, + "session": 1, + "tcponly": false, + "address": [ 32, 1, 6, 248, 16, 143, 0, 1, 2, 31, 60, 255, w, x, y, z ], + "idlesecs": 33, + "identity": "", + "name": "svedrin", + "userid": 1, + "version": 66050, + "context": "", + "release": "1.2.2-2", + "osversion": "Debian GNU/Linux unstable (sid)", + "os": "X11", + "onlinesecs": 35, + "channel": 4 + } + ], + "name": "htmlsubtesting \u00f6\u00e4\u00fc", + "links": [ + 2 + ], + "id": 4 + }, + { + "channels": [ + { + "channels": [], + "x_connecturl": "mumble://mumble.example.com/testing/plainsubtesting/subsubtesting?version=1.2.2", + "temporary": false, + "description": "", + "parent": 2, + "position": 0, + "users": [], + "name": "subsubtesting", + "links": [], + "id": 3 + } + ], + "x_connecturl": "mumble://mumble.example.com/testing/plainsubtesting?version=1.2.2", + "temporary": false, + "description": "This channel has HTML elements in its description that are not evaluated as red bold Fonts!", + "parent": 1, + "position": 0, + "users": [], + "name": "plainsubtesting", + "links": [ + 4 + ], + "id": 2 + } + ], + "x_connecturl": "mumble://mumble.example.com/testing?version=1.2.2", + "temporary": false, + "description": "", + "parent": 0, + "position": 0, + "users": [], + "name": "ChannelB", + "links": [], + "id": 1 + } + ], + "x_connecturl": "mumble://mumble.example.com?version=1.2.2", + "temporary": false, + "description": "", + "parent": -1, + "position": 0, + "users": [], + "name": "Root", + "links": [], + "id": 0 + }, + "name": "The Server Name", + "id": 1 +} +``` + +### XML + +For XML, the same principles apply as for JSON, along with the following encoding principles: + +- Boolean values are represented as "true" or "false" +- Lists (e.g. for the players' IP addresses or the channel links) are space-separated numbers + +The root element (``) shall declare the `xmlns` and `xmlns:xsi` namespace attributes as follows: + +```xml + + +``` + +The following element names shall be used: + +- Server: `` +- Channel: `` +- User: `` + +The User context field value MUST be base64 encoded because in the Mumble server it holds `\0` bytes. + +### Full XML Example + +```xml + + + + + + + + + + + + + + + +``` diff --git a/hugo/content/documentation/developer/positional-audio/_index.md b/hugo/content/documentation/developer/positional-audio/_index.md index ffe1f5c9..66109b36 100644 --- a/hugo/content/documentation/developer/positional-audio/_index.md +++ b/hugo/content/documentation/developer/positional-audio/_index.md @@ -1,3 +1,3 @@ ---- -title: "Positional Audio" ---- +--- +title: "Positional Audio" +--- diff --git a/hugo/content/documentation/developer/positional-audio/create-plugin/_index.md b/hugo/content/documentation/developer/positional-audio/create-plugin/_index.md index b9105e3a..1c663ba6 100644 --- a/hugo/content/documentation/developer/positional-audio/create-plugin/_index.md +++ b/hugo/content/documentation/developer/positional-audio/create-plugin/_index.md @@ -1,105 +1,153 @@ ---- -title: "Creating a Plugin" ---- -This is an abstract overview of how to add positional audio support; for step-by-step instructions, see the Pluginguide. - -## What is needed for positional audio - -For positional audio, we need two things: Your position in the 3D world, and the direction you are looking in. If you have access to the source code for the game, exporting this to Mumble is easy, just use the Link plugin. If this is a 3rd party game, we'll have to extract the position from the running game. - -If you have any questions regarding the process hit us up in [`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) and we will try to help. - -We also accept new plugins into our codebase as long as you are willing to support them. Be aware however that we might reject plugins for games with short update cycles as our current distribution method makes keeping those working for longer times quite painful. When in doubt please verify with us before puttin in the work. - -## Data - -Hand to coordinate system visualization - -Mumble, like most sound systems, uses a **left handed coordinate system** ([see this for a visual representation](https://docs.microsoft.com/en-us/windows/win32/direct3d9/coordinate-systems)). - -As a visualization of the left handed coordinate system: If you imagine yourself looking over a large empty field; X increases towards your right, Y increases above your head, and Z increases in front of you. In other words, if we place origin in your chest and you stretch your arms out to your sides, your right hand will be `(1,0,0)`, your left hand will be `(-1,0,0)` and your head will be `(0,0.2,0)`. If you then stretch your arms out in front of you instead, they'll become `(0,0,1)`. - -We need three vectors. First is the position vector. This should be in meters, so you may need to scale it. The reason: If it is not in meters, distance attenuation will be different to the other games/plugins, meaning users will have a bad experience with positional audio (audio configuration is dependant on a common distance measurement). - -The next two vectors are the heading. These should be unit vectors (length one), and should be perpendicular (to one another). The first vector is the front vector, which is simply the direction you are looking in. The second is the top vector, which is an imaginary vector pointing straight out the top of your head. If you do not supply a top vector, Mumble will assume you have a “Y-is-up” coordinate system and that the user can not tilt their head, and then compute the top vector based on that. - -## Method 1: Memory Searching - -Warning: Be aware that the tools/methods used in this tutorial might trigger anti cheat protection. Read the sections below carefully before attempting to use them on a game. -Note that Mumble does NOT support cheating of any kind. - -This works well for most games which think of the player as a static object, meaning the data's location in memory is fixed. This is the fastest method, so it's recommended you start with this. - -### Initial setup - -First, start the game, read the documentation, websites, whatever you can find, and see if there is a way to have the game display your current position. If there is then you'll have a much easier time validating your data. - -Then start the game. Try to find a piece of geometry that's aligned along an axis; if there's a compass or minimap, point due north. - -### Finding the position offset - -Start your preferred cheating utility. - -If you don't have it, choose one from the list under [Memory Analysis Tools]({{< relref "memory-analysis-tools" >}}). - -#### If you have the in-game position - -Search for a floating point value around the X value. (IE, if the game reports your position as 357.3, search for a value between 357.2 and 357.4). Move a bit, repeat. When you've narrowed it down to just one possible address (or set of addresses), write them down. - -Repeat for Y and Z. - -#### If you don't have the in-game position - -Make a memory snapshot. Move forward. Search for a floating point value that increased. Move backward. Search for a floating point value that decreased. Repeat. If you don't find any values at all, the game might have reversed the axis; so turn 180 degrees and try again. - -When you find the X value, turn 90 degrees right and search for the Y value, and then the Z value. - -#### When you have the positions - -Based on the addresses you have, we're looking for just one triplet of (XYZ) addresses. They should be right next to each other in memory, ideally 4 or 8 bytes apart. Note down all positions that match. - -Now, and this is important; quit the game, restart your machine and start the game again, but this time do so with a different map, a different character, different graphics settings, different audio; in short, change everything you can but the actual game. - -Start your cheat utility again and go through all the addresses you have. If they still match, you can use this method. If they don't, the game dynamically allocates the position in memory, and you'll have to use another method. - -## Finding the heading - -Once you have the position, you can find the heading with the same method. Since you now know what is the positive direction of the X axis, position yourself so you are looking straight down it. Your 'front' heading should be (1,0,0), so search for a floating point value between 0.7 and 1.05. Turn 180 degrees and search for a value between -0.7 and -1.05. Repeat for Y and Z. - -The top vector is done the exact same way, just look down into the ground when finding X; your head now points along the X axis. Note that some games do not have a top vector; a top vector is only "needed" if the game allows you to tilt your head from side to side. - -## Peeking at the code - -This is the second method, to be used if the first doesn't work. Note that this method requires advanced disassembly knowledge, so if you're capable of doing this, you probably don't need a guide. So, this will be brief. - -### Quality disassembly - -You need a quality disassembler or debugger. A good one is IDA Pro, but it's a tad expensive. - -### Finding the game's positional audio - -The trick we're going to use is this; most games already have positional audio support, so we're looking for their audio code. Their audio code needs the position and heading, so we simply rip that particular piece of data :) - -Note that most games will rotate and move the game world; they will set the listener to always be at origo, looking straight down the Z axis, and then they will rotate and translate all the sound-sources before passing parameters to the sound system (OpenAL/DirectSound/FMOD). We found this out the hard way; we had a really cool plugin which injected into OpenAL and DirectSound and took the position of the speaker from there, but in 90% of the games that gave us origo instead. - -First you need to figure out which sound technology the game uses, and then proceed from there. - -#### FMOD - -If it’s using FMOD, it will say so in the documentation and most likely on the loading screen. FMOD can be statically linked to the application. If it is, you’re going to have a much harder time of things. If it’s a DLL, you can find the import table and backtrack the calls to find the game's audio routines. - -#### OpenAL - -OpenAL will always be loaded dynamically, so just start the game, break it in a debugger and look for the openal, openal32 etc libraries. If it’s there, the game is using OpenAL. - -#### DirectSound - -If the game is using *directsound*, it will load the `dsound.dll`, and will at some point call `DirectSoundCreate8()`. Search for the call, find out where the game stores the object pointer and look for other routines which access it. - -### Using a debugger to speed things up - -You can speed things up considerably by using a debugger and some creative breakpointing. Set a breakpoint on all the functions in the Audio API which set the position of either the listener or the source. The game will break, and the stack backtrace will give you the module offsets for the audio code. - -### What to do when you have the code? - -With a bit of luck, the code for setting the source position includes some fancy matrix multiplication; the matrix being multiplied with is based on your current position and heading, so find the code which computes it and you'll have your ingame position and heading. +--- +title: "Creating a Plugin" +--- + +This is an abstract overview of how to add positional audio support; for step-by-step instructions, see the Pluginguide. + +## What is needed for positional audio + +For positional audio, we need two things: Your position in the 3D world, and the direction you are looking in. If you +have access to the source code for the game, exporting this to Mumble is easy, just use the Link plugin. If this is a +3rd party game, we'll have to extract the position from the running game. + +If you have any questions regarding the process hit us up in +[`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) and we will try to help. + +We also accept new plugins into our codebase as long as you are willing to support them. Be aware however that we might +reject plugins for games with short update cycles as our current distribution method makes keeping those working for +longer times quite painful. When in doubt please verify with us before puttin in the work. + +## Data + +Hand to coordinate system visualization + +Mumble, like most sound systems, uses a **left handed coordinate system** +([see this for a visual representation](https://docs.microsoft.com/en-us/windows/win32/direct3d9/coordinate-systems)). + +As a visualization of the left handed coordinate system: If you imagine yourself looking over a large empty field; X +increases towards your right, Y increases above your head, and Z increases in front of you. In other words, if we place +origin in your chest and you stretch your arms out to your sides, your right hand will be `(1,0,0)`, your left hand will +be `(-1,0,0)` and your head will be `(0,0.2,0)`. If you then stretch your arms out in front of you instead, they'll +become `(0,0,1)`. + +We need three vectors. First is the position vector. This should be in meters, so you may need to scale it. The reason: +If it is not in meters, distance attenuation will be different to the other games/plugins, meaning users will have a bad +experience with positional audio (audio configuration is dependant on a common distance measurement). + +The next two vectors are the heading. These should be unit vectors (length one), and should be perpendicular (to one +another). The first vector is the front vector, which is simply the direction you are looking in. The second is the top +vector, which is an imaginary vector pointing straight out the top of your head. If you do not supply a top vector, +Mumble will assume you have a “Y-is-up” coordinate system and that the user can not tilt their head, and then compute +the top vector based on that. + +## Method 1: Memory Searching + +Warning: Be aware that the tools/methods used in this tutorial might trigger anti cheat protection. Read the sections +below carefully before attempting to use them on a game. +Note that Mumble does NOT support cheating of any kind. + +This works well for most games which think of the player as a static object, meaning the data's location in memory is +fixed. This is the fastest method, so it's recommended you start with this. + +### Initial setup + +First, start the game, read the documentation, websites, whatever you can find, and see if there is a way to have the +game display your current position. If there is then you'll have a much easier time validating your data. + +Then start the game. Try to find a piece of geometry that's aligned along an axis; if there's a compass or minimap, +point due north. + +### Finding the position offset + +Start your preferred cheating utility. + +If you don't have it, choose one from the list under [Memory Analysis Tools]({{< relref "memory-analysis-tools" >}}). + +#### If you have the in-game position + +Search for a floating point value around the X value. (IE, if the game reports your position as 357.3, search for a +value between 357.2 and 357.4). Move a bit, repeat. When you've narrowed it down to just one possible address (or set of +addresses), write them down. + +Repeat for Y and Z. + +#### If you don't have the in-game position + +Make a memory snapshot. Move forward. Search for a floating point value that increased. Move backward. Search for a +floating point value that decreased. Repeat. If you don't find any values at all, the game might have reversed the axis; +so turn 180 degrees and try again. + +When you find the X value, turn 90 degrees right and search for the Y value, and then the Z value. + +#### When you have the positions + +Based on the addresses you have, we're looking for just one triplet of (XYZ) addresses. They should be right next to +each other in memory, ideally 4 or 8 bytes apart. Note down all positions that match. + +Now, and this is important; quit the game, restart your machine and start the game again, but this time do so with a +different map, a different character, different graphics settings, different audio; in short, change everything you can +but the actual game. + +Start your cheat utility again and go through all the addresses you have. If they still match, you can use this method. +If they don't, the game dynamically allocates the position in memory, and you'll have to use another method. + +## Finding the heading + +Once you have the position, you can find the heading with the same method. Since you now know what is the positive +direction of the X axis, position yourself so you are looking straight down it. Your 'front' heading should be (1,0,0), +so search for a floating point value between 0.7 and 1.05. Turn 180 degrees and search for a value between -0.7 and +-1.05. Repeat for Y and Z. + +The top vector is done the exact same way, just look down into the ground when finding X; your head now points along the +X axis. Note that some games do not have a top vector; a top vector is only "needed" if the game allows you to tilt your +head from side to side. + +## Peeking at the code + +This is the second method, to be used if the first doesn't work. Note that this method requires advanced disassembly +knowledge, so if you're capable of doing this, you probably don't need a guide. So, this will be brief. + +### Quality disassembly + +You need a quality disassembler or debugger. A good one is IDA Pro, but it's a tad expensive. + +### Finding the game's positional audio + +The trick we're going to use is this; most games already have positional audio support, so we're looking for their audio +code. Their audio code needs the position and heading, so we simply rip that particular piece of data :) + +Note that most games will rotate and move the game world; they will set the listener to always be at origo, looking +straight down the Z axis, and then they will rotate and translate all the sound-sources before passing parameters to the +sound system (OpenAL/DirectSound/FMOD). We found this out the hard way; we had a really cool plugin which injected into +OpenAL and DirectSound and took the position of the speaker from there, but in 90% of the games that gave us origo +instead. + +First you need to figure out which sound technology the game uses, and then proceed from there. + +#### FMOD + +If it’s using FMOD, it will say so in the documentation and most likely on the loading screen. FMOD can be statically +linked to the application. If it is, you’re going to have a much harder time of things. If it’s a DLL, you can find the +import table and backtrack the calls to find the game's audio routines. + +#### OpenAL + +OpenAL will always be loaded dynamically, so just start the game, break it in a debugger and look for the openal, +openal32 etc libraries. If it’s there, the game is using OpenAL. + +#### DirectSound + +If the game is using _directsound_, it will load the `dsound.dll`, and will at some point call `DirectSoundCreate8()`. +Search for the call, find out where the game stores the object pointer and look for other routines which access it. + +### Using a debugger to speed things up + +You can speed things up considerably by using a debugger and some creative breakpointing. Set a breakpoint on all the +functions in the Audio API which set the position of either the listener or the source. The game will break, and the +stack backtrace will give you the module offsets for the audio code. + +### What to do when you have the code? + +With a bit of luck, the code for setting the source position includes some fancy matrix multiplication; the matrix being +multiplied with is based on your current position and heading, so find the code which computes it and you'll have your +ingame position and heading. diff --git a/hugo/content/documentation/developer/positional-audio/create-plugin/guide/index.md b/hugo/content/documentation/developer/positional-audio/create-plugin/guide/index.md index abef18e9..de3ac2c4 100644 --- a/hugo/content/documentation/developer/positional-audio/create-plugin/guide/index.md +++ b/hugo/content/documentation/developer/positional-audio/create-plugin/guide/index.md @@ -1,584 +1,709 @@ ---- -title: "Guide to Creating a Plugin" ---- -Warning: Be aware that the tools/methods used in this tutorial might trigger anti cheat protection. Read the sections below (e.g. this) carefully before attempting to use them on a game. - -Game positional audio is a feature of Mumble that many users consider very useful. However, creating the game plugin can sometimes be complicated, and for the average person, daunting. This guide will help you understand how a game plugin works, what it does, and how you can make one. - -If you have any questions regarding the process hit us up in [`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) and we will try to help. - -We also accept new plugins into our codebase as long as you are willing to support them. Be aware however that we might reject plugins for games with short update cycles as our current distribution method makes keeping those working for longer times quite painful. When in doubt please verify with us before puttin in the work. - -This guide is supposed to be a step-by-step tutorial for the general case. For a more abstract view and more methodology take a look at [the introduction]({{< relref ".." >}}). - -## Prerequisites - -### Programs needed - -[Analysis Tools]({{< relref "memory-analysis-tools" >}}) - -#### Tools - -C++ IDE and compiler. Read the entire section to know what IDE/Compiler is right for you. - -[MumblePAHelper](http://upload.dbclan.de/MumblePAHelper_VS2010.exe). **This binary is built with MSVC 2010, it doesn't work with plugins built with other compilers or MSVC versions.** -This is a useful tool to quickly see if your plugin is working as it should. Simply place it together with `QtCore4.dll` and `QtGui4.dll` (found in the Mumble directory) in your `%APPDATA%\Mumble` folder and run it while your game is running, and it will show if the plugin is linked, if the positional coordinates are working properly, etc. Note that it will only show the plugins which are present inside %APPDATA%\Mumble\plugins. - -[Notepad++](https://notepad-plus-plus.org/) (optional). After you install Notepad++, start it, go to Preferences -> New Document/Default Directory, and check "Unix" in the Format box. - -### Learn a Little C++ - -Although you do not need to be an expert programmer in order to write a plugin, you do need to understand fundamental data types. Here are a few of the most important: - -float: This is the data type that almost all positional audio game addresses use. They are 32 bit, decimal numbers stored in the memory. A float data type is 4 bytes * 8 = 32 bits. An example of a floating point value would be "1234.0123456". - -byte: This is the smallest data type in Intel x86-based computing. This type of memory address holds 1 byte of information (1 byte * 8 = 8 bits). From this type of memory address, you can get 0-255 base^10 values, or -127 to 128, depending on whether or not you use a signed byte (it has a + or - on the front of the value), or an unsigned byte (no + or -). An example of a byte value would be "12". - -In C++, you must declare a variable before you can use it. If you want to use a float variable, you declare it with - -```cpp -float ; -``` - -If you are pointing to an array, you specify how many addresses are in the array. With a float array, it automatically assumes that each address is 4 bytes away from the other. We can declare a 3 address array using - -```cpp -float [3]; -``` - -declare a byte value using - -```cpp -uint8_t ; -``` - -remember that there is a difference between amount and location. [3] means three addresses, but locations in the memory start from 0. Therefore, the first address in [3] is - -```cpp -[0] -``` - -## How a plugin works - -Below is a standard template that you can use for your plugin making. The code itself will be explained in the comments that follow. - -### Template - -```cpp -// Copyright 2019 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at . - -#include "../mumble_plugin_main.h" // Include standard plugin header. - -static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &identity) { - for (int i=0;i<3;i++) { - avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; - } - - // Boolean values to check if game addresses retrieval is successful and if the player is in-game - bool ok, state; - // Create containers to stuff our raw data into, so we can convert it to Mumble's coordinate system - float avatar_pos_corrector[3], avatar_front_corrector[3], avatar_top_corrector[3]; - - // Peekproc and assign game addresses to our containers, so we can retrieve positional data - ok = peekProc(pModule + 0x, &state, 1) && // Magical state value: 1 when in-game and 0 when in main menu. - peekProc(pModule + 0x, avatar_pos_corrector, 12) && // Avatar Position values (X, Z and Y, respectively). - peekProc(pModule + 0x, avatar_front_corrector, 12) && // Avatar Front Vector values (X, Z and Y, respectively). - peekProc(pModule + 0x, avatar_top_corrector, 12); // Avatar Top Vector values (X, Z and Y, respectively). - - // This prevents the plugin from linking to the game in case something goes wrong during values retrieval from memory addresses. - if (! ok) { - return false; - } - - if (! state) { // If not in-game - context.clear(); // Clear context - identity.clear(); // Clear identity - // Set vectors values to 0. - for (int i=0;i<3;i++) - avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; - - return true; // This tells Mumble to ignore all vectors. - } - - /* - Mumble | Game - X | X - Y | Z - Z | Y - */ - avatar_pos[0] = avatar_pos_corrector[0]; - avatar_pos[1] = avatar_pos_corrector[2]; - avatar_pos[2] = avatar_pos_corrector[1]; - - avatar_front[0] = avatar_front_corrector[0]; - avatar_front[1] = avatar_front_corrector[2]; - avatar_front[2] = avatar_front_corrector[1]; - - avatar_top[0] = avatar_top_corrector[0]; - avatar_top[1] = avatar_top_corrector[2]; - avatar_top[2] = avatar_top_corrector[1]; - - // Sync camera with avatar - for (int i=0;i<3;i++) { - avatar_pos[i]/=32.0f; // Scale to meters - camera_pos[i] = avatar_pos[i]; - camera_front[i] = avatar_front[i]; - camera_top[i] = avatar_top[i]; - } - - return true; -} - -static int trylock(const std::multimap &pids) { - if (! initialize(pids, L".exe")) { // Retrieve game executable's memory address - return false; - } - - // Check if we can get meaningful data from it - float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3]; - std::wstring sidentity; - std::string scontext; - - if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { - return true; - } else { - generic_unlock(); - return false; - } -} - -static const std::wstring longdesc() { - return std::wstring(L"Supports version without context or identity support."); // Plugin long description -} - -static std::wstring description(L" (v)"); // Plugin short description -static std::wstring shortname(L""); // Plugin short name - -static int trylock1() { - return trylock(std::multimap()); -} - -static MumblePlugin plug = { - MUMBLE_PLUGIN_MAGIC, - description, - shortname, - NULL, - NULL, - trylock1, - generic_unlock, - longdesc, - fetch -}; - -static MumblePlugin2 plug2 = { - MUMBLE_PLUGIN_MAGIC_2, - MUMBLE_PLUGIN_VERSION, - trylock -}; - -extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin *getMumblePlugin() { - return &plug; -} - -extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin2 *getMumblePlugin2() { - return &plug2; -} -``` - -#### Explanation - -All that probably looks pretty daunting, right? It isn't really, but even if it does, you actually don't need to understand all of it. You just need to understand the parts that need to be changed in order to make this standard plugin hook to the right game, and fetch the right memory addresses. - -First, you need to understand how C++ assignment and functions work. From the code above, let's look at - -```cpp -peekProc(pModule + 0x, avatar_pos_corrector, 12) -peekProc(pModule + 0x, avatar_front_corrector, 12) -peekProc(pModule + 0x, avatar_top_corrector, 12) -``` - -You see that avatar_pos_corrector is a three address array. You would point this to the first address in your positional coordinate array in the memory. If you found a static address in the memory for "something.dll + 24acf2", then you would put this line in the code: - -```cpp -procptr_t mod=getModuleAddr(L"something.dll"); -``` - -And set your peekProc to - -```cpp -peekProc(mod + 0x024acf2, avatar_pos_corrector, 12) -``` - -If your game doesn't have static memory addresses from its executable, but only from modules, you could set pModule to the module that has most of the addresses: - -```cpp -if (! initialize(pids, L"game.exe", L"client.dll")) -``` - -But, you're still wondering exactly how the plugin uses one address to get several. Well, right here is where the action happens: - -```cpp -ok = peekProc(pModule + 0x, &state, 1) && - peekProc(pModule + 0x, avatar_pos_corrector, 12) & - peekProc(pModule + 0x, avatar_front_corrector, 12) && - peekProc(pModule + 0x, avatar_top_corrector, 12); -``` - -You see, in this statement, we pass the three pointers that we assigned to the peekProc function, and then assign the results to the avatar_pos_corrector array. Let's look at this one part: - -```cpp -peekProc(pModule + 0x, avatar_pos_corrector, 12) -``` - -here is what happens: the peekProc function is called and it is instructed to take the first address and add two more. See the "12" at the end? That's the size of the array. Remember that 4 bytes = one float address. 4 * 3 = 12. This means that peekProc sends back three addresses: - -```cpp -avatar_pos_corrector[0] = pModule + 0x -avatar_pos_corrector[1] = pModule + 0x + 0x4 -avatar_pos_corrector[2] = pModule + 0x + 0x4 + 0x4 -``` - -## Beginning the Hunt - -### Introduction - -CE = Cheat Engine; - -For this game, we will be memory searching the game Alien Arena, an FPS game. If you are trying to create a third-person or camera-based game plugin, you will need to find the avatar positional data and the camera positional data. This is explained further in a few minutes. - -Almost all games will have the positional, front, and top coordinates/vectors you need in arrays. This means that the memory addresses will be sequential, one after the other. For instance, 1234ABC0 = X coordinate, 1234ABC4 = Y coordinate, and 1234ABC8 = Z coordinate. - -Now it's time for a little Cheat Engine tutorial. Note, again, that Mumble does not support cheating in any way, and this guide does in no way try to teach any cheating methods. - -Note that you need to make sure that your server has NO anti-cheat setting enabled, as it might flag Cheat Engine as a hack. NEVER use Cheat Engine on a game that has an anti-cheat method currently engaged, or risk getting banned from that server/game! - -If you find a static address, it will either be static from a module, or static from the game executable. If it is static from the game executable, it will be something like - -``` -something.exe+123ABC -``` - -when you double click on the address. - -### Explanation of Sound and Coordinate Systems - -Mumble, like most sound systems, uses a left handed coordinate system. If you imagine yourself looking over a large empty field; X increases towards your right, Y increases above your head, and Z increases in front of you. In other words, if we place origo in your chest and you strech your arms out to your sides, your right hand will be (1,0,0), your left hand will be (-1,0,0) and your head will be (0,0.2,0). If you then stretch your arms out in front of you instead, they'll become (0,0,1). - -We need three vectors. First is the position vector. This should be in meters, but if it isn't, you may need to scale it. If it is not in meters, distance attenuation will be different for each game, meaning users will have a bad experience with positional audio. - -These three vectors make what is called a **unit vector**. [Here](http://en.wikipedia.org/wiki/Unit_vector) is an excellent explanation of how a unit vector works. It will help you understand how to convert Azimuth and Heading coordinates into a unit vector that Mumble can use, as well. - -The next two vectors are the heading. These should be unit vectors, and should be perpendicular. The first vector is the front vector, which is simply the direction you are looking in. The second is the top vector, which is an imaginary vector pointing straight out the top of your head. If you do not supply a top vector, Mumble will assume you have a "Y-is-up" coordinate system and that the user cannot tilt their head, and then compute the top vector based on that. - -Once you have the position, you need to find the heading. Since you now know what is the positive direction of the X axis, position yourself so you are looking straight down it. Your 'front' heading should be (1,0,0), so search for a floating point value between 0.7 and 1.05. Turn 180 degrees and search for a value between -0.7 and -1.05. Repeat for Y and Z. - -The top vector is done the exact same way, just look down into the ground when finding X; your head now points along the X axis. Note that some games do not have a top vector; a top vector is only "needed" if the game allows you to tilt your head from side to side. - -## Hunt - -### Part 1 - Find the Position Array - -1. First, start your game. If there is a way to make the game windowed, do so. Usually Googling for " windowed mode" will get the results you need. If you can start your own server for the game, that is preferred. Now load into a map. The game needs to change as little as possible, so make sure you don't have bots or artificial intelligence players enabled. -2. Start Cheat Engine. On the main window, you will see a little computer icon, that is flashing red/green/blue. Click it, find your game executable name on the list, and then double click it. In this case, you would click "crx.exe". -3. You are now hooked to the executable. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan type", select "Unknown initial value". Now click "First Scan". Depending on how fast your computer is, this could take from a few seconds to a few minutes. -4. Move ingame a little. Move forwards, backwards, whatever. -5. Open CE, set "Scan type" to "Changed value", then click "Next Scan". -6. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six times. -7. Go back ingame, move a little, and repeat steps 4 to 6. -8. Repeat step 7 a few times. -9. Go back ingame, and look around with your mouse. Do NOT press any WASD keys. Repeat step 6. -10. At this point, you can begin to analyze the addresses that you see on the left. Try to find any addresses that are green. If you can't, it's still ok. This guide found an address with a value of "802.8125", that kept changing when one moved ingame. Now double click the address, and it will be added to the bottom address box. - -So, now you should have a position address. Position addresses are almost always an even number in the memory, in hex, offset by four addresses. So, if you had a memory address of 0x5399010, then click "Add address manually", and in the address field, put 0x53990**14**. 0x5399010 + 4 hex = 0x5399014. Now add 0x53990**18**. - -The second address should also have a similar looking value, and when you move ingame, it should change accordingly. Depending on how the specific game coordinate system works, the first address might be the X value (east to west), the Y value (up and down), or the Z value (north to south). Jump up and down ingame, and see which value changes the most. That address will be your Y coordinate. - -### Part 2 - Find the Front Vector - -Now it's time to search for the front and top coordinates. These are a little bit tricky, so you will need some patience. First, see if you can figure out which direction "north" is for the map you are on. Although this may not apply to all games, generally the textures on a map are lined up north-south and east-west, perfectly. This means that if you look straight down a wall, you will be looking perfectly in any one of the four cardinal directions. - -1. front straight north, or straight down a texture, whichever works for you. -2. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan type", select "Unknown initial value". Now click "First Scan". Depending on how fast your computer is, this could take from a few seconds to a few minutes. -3. Now look a little bit to the left, just move your mouse enough that you can see a change in the pixels. -4. Open CE, set "Scan type" to "Changed value", then click "Next Scan". -5. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six times. -6. Go back ingame, move a little, and repeat steps 4 and 5. -7. Repeat step 6 two or three times. -8. Look straight north or down your wall. Look for a value in the -0.999 or 0.999 range. Move in a circle and see if this decreases or increases, but never gets larger than 0.999, or less than -0.999. By now, the addresses should be narrowed down enough that you should be able to find the right value by just looking through the results list. - -### Part 3 - Find the Top Vector - -In almost any first person game, the top vector will be within 300 hex of your front vector. So, we will set a scan range for CE. Example: front vector pointer is 1234ABC0, so we will make a scan range of 1234A000 to 1234AFFF. In the memory scan options, set your range to these two addresses. - -Go ingame and place yourself looking straight forward. - -1. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan type", select "Unknown initial value". Now click "First Scan". -2. Look a little bit down. -3. Open CE, set "Scan type" to "Changed value", then click "Next Scan". -4. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six times. -5. Look back up, so your are looking straight at the horizon. - -While looking straight toward the horizon, look for a value in the 0.980 to 0.999 range. Now look down at the ground. The value should change to somewhere close to 0 - anywhere between 0.2 and -0.2. Find and add any addresses in that range. - -Now add the addresses from the value that you find. Depending on whether or not the coordinate system is left-handed, this could change. In the game that this guide used, the vector component that changed when looking up and down had an address of 05399038, and it was the last address of the vector. So, to get the complete vector, subtract 4 from each address two times, so you would have the following addresses: - -```text -05399030 -05399034 -05399038 -``` - -### Please Note - -The Position, Front, and Top vectors are very, very oftentimes right next to each other in memory. If you find the position coordinates, chances are, the rotational ones will be within 100 hex of the former. - -Also, note that depending on the game type, all the positional data may be very slightly changing at all times. Therefore, if you cannot find the addresses you are searching for, your game probably falls into this category. If so, you cannot use the "unchanged value" parameter in CE, but must search for relative changes in value. - -### Part 4 - Find a State Value - -This is probably the easiest part. Simple search for a byte value that remains constant, and changes as soon as you load into a map. Assign it using the sample code in Part 6. -Part 5 - Determine the Coordinate System - -So, now you should have the three positional components you need: - -1. The position array -2. The front vector array -3. The top vector array - -But, you will still need to determine how to arrange the coordinates. - -In the left handed coordinate system, the X value will increase, as one vector component remains around 0.999. In Alien Arena, the second address in the position array increases as the second address in the front vector array remains at 0.999. So, we know that this is a centered coordinate system. Therefore, if we spawn at (0,0,0), and we front north, and move one meter, our position coordinate system will be (0,1,0). From that, we determine the following: a left-handed coordinate system uses array of type - -```cpp -address[0] -address[1] -address[2] -``` - -and a center coordinate system uses the same thing, but offset by 2; it uses - -```cpp -address[0] -address[2] -address[1] -``` - -Also, we note that the coordinate system is in Quake units. 1 meter = ~ 32 Quake units, so we will convert it using the following code: - -```cpp -for (int i=0;i<3;i++) - avatar_pos[i]/=32.0f; // Scale to meters -``` - -now we will take all this information, and piece together our final plugin code. - -### Part 6 - Using Pointers - -Unfortunately, not all games have static addresses. If yours does not, you will need to perform a pointer scan. - -1. After you have found your non-static addresses for each of your respective position, front, and top addresses, right click them and click "Pointer scan for this address"; leave the default settings and start the scan. -2. After the pointer scan is completed, click Pointer scanner -> Rescan memory and type in the actual memory address you're trying to find a pointer to, then click OK. -3. Now it comes down to trial and error. Keep the scan window opened, restart the game and hook Cheat Engine to the process. See if there are pointers that still point to the right address and delete the bad ones by repeating step 2. You can find the updated non-static memory address from a working pointer or by doing a new scan in Cheat Engine. Do this more times to be sure that they are reliable and choose one of them. - -After you think you have a reliable pointer, you code it in the fetch() function, above the peekProc part. For example, if I had a pointer of - -```text -Level 1 -> Offset CF -Level 2 -> Offset 250 -Level 3 -> Offset 230 -Level 4 -> something.dll + 242adf -``` - -for my `avatar_pos`, then I would use the following code: - -```cpp -procptr_t avatar_base = peekProcPtr(pModule + 0x0242adf); -if (!avatar_base) return false; -procptr_t avatar_offset_0 = peekProcPtr(avatar_base + 0x230); -if (!avatar_offset_0) return false; -procptr_t avatar_offset_1 = peekProcPtr(avatar_offset_0 + 0x250); -if (!avatar_offset_1) return false; -``` - -And then I would change peekProc to this: - -```cpp -peekProc(avatar_offset_1 + 0xCF, avatar_pos_corrector, 12) -``` - -## Code the Plugin - -The comments are marked in the code. Look it over carefully, and pay close attention to the commenting. - -```cpp -// Copyright 2019 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at . - -#include "../mumble_plugin_main.h" // Include standard plugin header. - -static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &identity) { - for (int i=0;i<3;i++) { - avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; - } - - // Boolean values to check if game addresses retrieval is successful and if the player is in-game - bool ok, state; - // Create containers to stuff our raw data into, so we can convert it to Mumble's coordinate system - float avatar_pos_corrector[3], avatar_front_corrector[3], avatar_top_corrector[3]; - - // Peekproc and assign game addresses to our containers, so we can retrieve positional data - ok = peekProc(pModule + 0x5399000, &state, 1) && // Magical state value: 1 when in-game and 0 when in main menu. - peekProc(pModule + 0x5399010, avatar_pos_corrector, 12) && // Avatar Position values (X, Z and Y, respectively). - peekProc(pModule + 0x5399020, avatar_front_corrector, 12) && // Avatar Front Vector values (X, Z and Y, respectively). - peekProc(pModule + 0x5399030, avatar_top_corrector, 12); // Avatar Top Vector values (X, Z and Y, respectively). - - // This prevents the plugin from linking to the game in case something goes wrong during values retrieval from memory addresses. - if (! ok) { - return false; - } - - if (! state) { // If not in-game - context.clear(); // Clear context - identity.clear(); // Clear identity - // Set vectors values to 0. - for (int i=0;i<3;i++) - avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; - - return true; // This tells Mumble to ignore all vectors. - } - - /* - Mumble | Game - X | X - Y | Z - Z | Y - */ - avatar_pos[0] = avatar_pos_corrector[0]; - avatar_pos[1] = avatar_pos_corrector[2]; - avatar_pos[2] = avatar_pos_corrector[1]; - - avatar_front[0] = avatar_front_corrector[0]; - avatar_front[1] = avatar_front_corrector[2]; - avatar_front[2] = avatar_front_corrector[1]; - - avatar_top[0] = avatar_top_corrector[0]; - avatar_top[1] = avatar_top_corrector[2]; - avatar_top[2] = avatar_top_corrector[1]; - - // Sync camera with avatar - for (int i=0;i<3;i++) { - avatar_pos[i]/=32.0f; // Scale to meters - camera_pos[i] = avatar_pos[i]; - camera_front[i] = avatar_front[i]; - camera_top[i] = avatar_top[i]; - } - - return true; -} - -static int trylock(const std::multimap &pids) { - if (! initialize(pids, L"Game.exe")) { // Retrieve game executable's memory address - return false; - } - - // Check if we can get meaningful data from it - float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3]; - std::wstring sidentity; - std::string scontext; - - if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { - return true; - } else { - generic_unlock(); - return false; - } -} - -static const std::wstring longdesc() { - return std::wstring(L"Supports Game version 1.0 without context or identity support."); // Plugin long description -} - -static std::wstring description(L"Game (v1.0)"); // Plugin short description -static std::wstring shortname(L"Game"); // Plugin short name - -static int trylock1() { - return trylock(std::multimap()); -} - -static MumblePlugin gameplug = { - MUMBLE_PLUGIN_MAGIC, - description, - shortname, - NULL, - NULL, - trylock1, - generic_unlock, - longdesc, - fetch -}; - -static MumblePlugin2 gameplug2 = { - MUMBLE_PLUGIN_MAGIC_2, - MUMBLE_PLUGIN_VERSION, - trylock -}; - -extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin *getMumblePlugin() { - return &gameplug; -} - -extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin2 *getMumblePlugin2() { - return &gameplug2; -} -``` - -## Compile the Plugin - -You can either build the plugin out of tree, meaning without the rest of the mumble environment around it, or as a part of Mumble. Note that to submit the plugin we prefer a patch against our tree with full integration. However we will do that part for you if you don't want to bother. - -### Out of tree build (doesn't need a Mumble build environment) - -Make a folder for your plugin and then make a subfolder, with your plugin's name. Now download [`mumble_plugin.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin.h), [`mumble_plugin_main.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_main.h) and the right platform header ([`mumble_plugin_win32.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_win32.h) or [`mumble_plugin_linux.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_linux.h)). You may also want to download [`mumble_plugin_utils.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_utils.h), which contains useful functions you could need in your plugin. - -Put the files in the first folder and your .cpp game plugin file into the second folder that is inside of the first. - -#### Info on compilers - -Mumble 1.3.x is built with MSVC 2015 (Visual Studio 2015 compiler). - -Mumble 1.2.x is built with MSVC 2010 (Visual Studio 2010 compiler). - -Plugins built with GCC **will not work** with the version of Mumble distributed from the website. - -Warning: Since the plugin API exposes internal details of the C++ library (e.g. std::string), plugins must be built with the same compiler/runtime as the Mumble client itself to work. - -#### Using Qt Creator - -Download the right Qt package version from [Qt.io](https://www.qt.io/download-open-source/#section-2). Qt for MSVC 2010 is discontinued, [this](http://download.qt.io/archive/qt/5.5/5.5.1/qt-opensource-windows-x86-msvc2010-5.5.1.exe) is the latest version that supports it. - -You also have to download [Visual C++ 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) (which contains MSVC 2015, for Mumble 1.3.x) or [MSBuild 4.0](https://www.microsoft.com/en-us/download/details.aspx?id=8279) (MSVC 2010, for Mumble 1.2.x), to install the compiler. - -#### Using Visual Studio - -[Visual Studio 2015 Community](https://go.microsoft.com/fwlink/?LinkId=615448) -[Visual Studio 2010 Express edition](http://download.microsoft.com/download/1/E/5/1E5F1C0A-0D5B-426A-A603-1798B951DDAE/VS2010Express1.iso). Default options, except for the SQL server, which you can uncheck. - -Start Visual Studio and go to File -> New -> Project. Enter a name, then double click "Win32 Project". Click Next, select "DLL" and check "Empty project". Click Finish. Now open the folder that contains your game's cpp plugin file, and drag that file into the "Source Files" folder on the left. Now click Build -> Batch Build... and check the box in the Build column that corresponds to "Release". Click Build and the plugin will compile. Once it is compiled, go to [My] Documents\Visual Studio 2010\Projects\\Release. You can take .dll and put it in %AppData%\Mumble\plugins, and when you start Mumble, the plugin will load and you can test it. - -### In tree build - -If you do not have a working build environment yet follow the [BuildingWindows](https://wiki.mumble.info/wiki/BuildingWindows) or [BuildingLinux](https://wiki.mumble.info/wiki/BuildingLinux) guide to create one. Once you successfully built Mumble (client suffices) perform the following steps: - -* Create a new sub-directory for your plugin in `plugins/` named after your plugin (e.g. bf2 for Battlefield 2). -* Name your your primary source file the same as the newly created directory and put it in there. -* Create a `.pro` file in the new directory. You can use an existing plugin's pro file (e.g. bf2/bf2.pro) as a template. -* Add your plugin sub-directory to the list in `plugins/plugins.pro` -* Add your plugin to the installer in `installer/Plugins.wxs` (top and bottom) -* Reconfigure mumble with `-recursive` and rebuild. - -The plugin should now be built as part of mumble. +--- +title: "Guide to Creating a Plugin" +--- + +Warning: Be aware that the tools/methods used in this tutorial might trigger anti cheat protection. Read the sections +below (e.g. this) carefully before attempting to use them on a game. + +Game positional audio is a feature of Mumble that many users consider very useful. However, creating the game plugin can +sometimes be complicated, and for the average person, daunting. This guide will help you understand how a game plugin +works, what it does, and how you can make one. + +If you have any questions regarding the process hit us up in +[`#mumble-dev:matrix.org`](https://matrix.to/#/#mumble-dev:matrix.org) and we will try to help. + +We also accept new plugins into our codebase as long as you are willing to support them. Be aware however that we might +reject plugins for games with short update cycles as our current distribution method makes keeping those working for +longer times quite painful. When in doubt please verify with us before puttin in the work. + +This guide is supposed to be a step-by-step tutorial for the general case. For a more abstract view and more methodology +take a look at [the introduction]({{< relref ".." >}}). + +## Prerequisites + +### Programs needed + +[Analysis Tools]({{< relref "memory-analysis-tools" >}}) + +#### Tools + +C++ IDE and compiler. Read the entire section to know what IDE/Compiler is right for you. + +[MumblePAHelper](http://upload.dbclan.de/MumblePAHelper_VS2010.exe). **This binary is built with MSVC 2010, it doesn't +work with plugins built with other compilers or MSVC versions.** This is a useful tool to quickly see if your plugin is +working as it should. Simply place it together with `QtCore4.dll` and `QtGui4.dll` (found in the Mumble directory) in +your `%APPDATA%\Mumble` folder and run it while your game is running, and it will show if the plugin is linked, if the +positional coordinates are working properly, etc. Note that it will only show the plugins which are present inside +%APPDATA%\Mumble\plugins. + +[Notepad++](https://notepad-plus-plus.org/) (optional). After you install Notepad++, start it, go to Preferences -> New +Document/Default Directory, and check "Unix" in the Format box. + +### Learn a Little C++ + +Although you do not need to be an expert programmer in order to write a plugin, you do need to understand fundamental +data types. Here are a few of the most important: + +float: This is the data type that almost all positional audio game addresses use. They are 32 bit, decimal numbers +stored in the memory. A float data type is 4 bytes \* 8 = 32 bits. An example of a floating point value would be +"1234.0123456". + +byte: This is the smallest data type in Intel x86-based computing. This type of memory address holds 1 byte of +information (1 byte \* 8 = 8 bits). From this type of memory address, you can get 0-255 base^10 values, or -127 to 128, +depending on whether or not you use a signed byte (it has a + or - on the front of the value), or an unsigned byte (no + +or -). An example of a byte value would be "12". + +In C++, you must declare a variable before you can use it. If you want to use a float variable, you declare it with + +```cpp +float ; +``` + +If you are pointing to an array, you specify how many addresses are in the array. With a float array, it automatically +assumes that each address is 4 bytes away from the other. We can declare a 3 address array using + +```cpp +float [3]; +``` + +declare a byte value using + +```cpp +uint8_t ; +``` + +remember that there is a difference between amount and location. [3] means three addresses, but locations in the memory +start from 0. Therefore, the first address in [3] is + +```cpp +[0] +``` + +## How a plugin works + +Below is a standard template that you can use for your plugin making. The code itself will be explained in the comments +that follow. + +### Template + +```cpp +// Copyright 2019 The Mumble Developers. All rights reserved. +// Use of this source code is governed by a BSD-style license +// that can be found in the LICENSE file at the root of the +// Mumble source tree or at . + +#include "../mumble_plugin_main.h" // Include standard plugin header. + +static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &identity) { + for (int i=0;i<3;i++) { + avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; + } + + // Boolean values to check if game addresses retrieval is successful and if the player is in-game + bool ok, state; + // Create containers to stuff our raw data into, so we can convert it to Mumble's coordinate system + float avatar_pos_corrector[3], avatar_front_corrector[3], avatar_top_corrector[3]; + + // Peekproc and assign game addresses to our containers, so we can retrieve positional data + ok = peekProc(pModule + 0x, &state, 1) && // Magical state value: 1 when in-game and 0 when in main menu. + peekProc(pModule + 0x, avatar_pos_corrector, 12) && // Avatar Position values (X, Z and Y, respectively). + peekProc(pModule + 0x, avatar_front_corrector, 12) && // Avatar Front Vector values (X, Z and Y, respectively). + peekProc(pModule + 0x, avatar_top_corrector, 12); // Avatar Top Vector values (X, Z and Y, respectively). + + // This prevents the plugin from linking to the game in case something goes wrong during values retrieval from memory addresses. + if (! ok) { + return false; + } + + if (! state) { // If not in-game + context.clear(); // Clear context + identity.clear(); // Clear identity + // Set vectors values to 0. + for (int i=0;i<3;i++) + avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; + + return true; // This tells Mumble to ignore all vectors. + } + + /* + Mumble | Game + X | X + Y | Z + Z | Y + */ + avatar_pos[0] = avatar_pos_corrector[0]; + avatar_pos[1] = avatar_pos_corrector[2]; + avatar_pos[2] = avatar_pos_corrector[1]; + + avatar_front[0] = avatar_front_corrector[0]; + avatar_front[1] = avatar_front_corrector[2]; + avatar_front[2] = avatar_front_corrector[1]; + + avatar_top[0] = avatar_top_corrector[0]; + avatar_top[1] = avatar_top_corrector[2]; + avatar_top[2] = avatar_top_corrector[1]; + + // Sync camera with avatar + for (int i=0;i<3;i++) { + avatar_pos[i]/=32.0f; // Scale to meters + camera_pos[i] = avatar_pos[i]; + camera_front[i] = avatar_front[i]; + camera_top[i] = avatar_top[i]; + } + + return true; +} + +static int trylock(const std::multimap &pids) { + if (! initialize(pids, L".exe")) { // Retrieve game executable's memory address + return false; + } + + // Check if we can get meaningful data from it + float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3]; + std::wstring sidentity; + std::string scontext; + + if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { + return true; + } else { + generic_unlock(); + return false; + } +} + +static const std::wstring longdesc() { + return std::wstring(L"Supports version without context or identity support."); // Plugin long description +} + +static std::wstring description(L" (v)"); // Plugin short description +static std::wstring shortname(L""); // Plugin short name + +static int trylock1() { + return trylock(std::multimap()); +} + +static MumblePlugin plug = { + MUMBLE_PLUGIN_MAGIC, + description, + shortname, + NULL, + NULL, + trylock1, + generic_unlock, + longdesc, + fetch +}; + +static MumblePlugin2 plug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + +extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin *getMumblePlugin() { + return &plug; +} + +extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin2 *getMumblePlugin2() { + return &plug2; +} +``` + +#### Explanation + +All that probably looks pretty daunting, right? It isn't really, but even if it does, you actually don't need to +understand all of it. You just need to understand the parts that need to be changed in order to make this standard +plugin hook to the right game, and fetch the right memory addresses. + +First, you need to understand how C++ assignment and functions work. From the code above, let's look at + +```cpp +peekProc(pModule + 0x, avatar_pos_corrector, 12) +peekProc(pModule + 0x, avatar_front_corrector, 12) +peekProc(pModule + 0x, avatar_top_corrector, 12) +``` + +You see that avatar_pos_corrector is a three address array. You would point this to the first address in your positional +coordinate array in the memory. If you found a static address in the memory for "something.dll + 24acf2", then you would +put this line in the code: + +```cpp +procptr_t mod=getModuleAddr(L"something.dll"); +``` + +And set your peekProc to + +```cpp +peekProc(mod + 0x024acf2, avatar_pos_corrector, 12) +``` + +If your game doesn't have static memory addresses from its executable, but only from modules, you could set pModule to +the module that has most of the addresses: + +```cpp +if (! initialize(pids, L"game.exe", L"client.dll")) +``` + +But, you're still wondering exactly how the plugin uses one address to get several. Well, right here is where the action +happens: + +```cpp +ok = peekProc(pModule + 0x, &state, 1) && + peekProc(pModule + 0x, avatar_pos_corrector, 12) & + peekProc(pModule + 0x, avatar_front_corrector, 12) && + peekProc(pModule + 0x, avatar_top_corrector, 12); +``` + +You see, in this statement, we pass the three pointers that we assigned to the peekProc function, and then assign the +results to the avatar_pos_corrector array. Let's look at this one part: + +```cpp +peekProc(pModule + 0x, avatar_pos_corrector, 12) +``` + +here is what happens: the peekProc function is called and it is instructed to take the first address and add two more. +See the "12" at the end? That's the size of the array. Remember that 4 bytes = one float address. 4 \* 3 = 12. This +means that peekProc sends back three addresses: + +```cpp +avatar_pos_corrector[0] = pModule + 0x +avatar_pos_corrector[1] = pModule + 0x + 0x4 +avatar_pos_corrector[2] = pModule + 0x + 0x4 + 0x4 +``` + +## Beginning the Hunt + +### Introduction + +CE = Cheat Engine; + +For this game, we will be memory searching the game Alien Arena, an FPS game. If you are trying to create a third-person +or camera-based game plugin, you will need to find the avatar positional data and the camera positional data. This is +explained further in a few minutes. + +Almost all games will have the positional, front, and top coordinates/vectors you need in arrays. This means that the +memory addresses will be sequential, one after the other. For instance, 1234ABC0 = X coordinate, 1234ABC4 = Y +coordinate, and 1234ABC8 = Z coordinate. + +Now it's time for a little Cheat Engine tutorial. Note, again, that Mumble does not support cheating in any way, and +this guide does in no way try to teach any cheating methods. + +Note that you need to make sure that your server has NO anti-cheat setting enabled, as it might flag Cheat Engine as a +hack. NEVER use Cheat Engine on a game that has an anti-cheat method currently engaged, or risk getting banned from that +server/game! + +If you find a static address, it will either be static from a module, or static from the game executable. If it is +static from the game executable, it will be something like + +``` +something.exe+123ABC +``` + +when you double click on the address. + +### Explanation of Sound and Coordinate Systems + +Mumble, like most sound systems, uses a left handed coordinate system. If you imagine yourself looking over a large +empty field; X increases towards your right, Y increases above your head, and Z increases in front of you. In other +words, if we place origo in your chest and you strech your arms out to your sides, your right hand will be (1,0,0), your +left hand will be (-1,0,0) and your head will be (0,0.2,0). If you then stretch your arms out in front of you instead, +they'll become (0,0,1). + +We need three vectors. First is the position vector. This should be in meters, but if it isn't, you may need to scale +it. If it is not in meters, distance attenuation will be different for each game, meaning users will have a bad +experience with positional audio. + +These three vectors make what is called a **unit vector**. [Here](http://en.wikipedia.org/wiki/Unit_vector) is an +excellent explanation of how a unit vector works. It will help you understand how to convert Azimuth and Heading +coordinates into a unit vector that Mumble can use, as well. + +The next two vectors are the heading. These should be unit vectors, and should be perpendicular. The first vector is the +front vector, which is simply the direction you are looking in. The second is the top vector, which is an imaginary +vector pointing straight out the top of your head. If you do not supply a top vector, Mumble will assume you have a +"Y-is-up" coordinate system and that the user cannot tilt their head, and then compute the top vector based on that. + +Once you have the position, you need to find the heading. Since you now know what is the positive direction of the X +axis, position yourself so you are looking straight down it. Your 'front' heading should be (1,0,0), so search for a +floating point value between 0.7 and 1.05. Turn 180 degrees and search for a value between -0.7 and -1.05. Repeat for Y +and Z. + +The top vector is done the exact same way, just look down into the ground when finding X; your head now points along the +X axis. Note that some games do not have a top vector; a top vector is only "needed" if the game allows you to tilt your +head from side to side. + +## Hunt + +### Part 1 - Find the Position Array + +1. First, start your game. If there is a way to make the game windowed, do so. Usually Googling for " + windowed mode" will get the results you need. If you can start your own server for the game, that is preferred. Now + load into a map. The game needs to change as little as possible, so make sure you don't have bots or artificial + intelligence players enabled. +2. Start Cheat Engine. On the main window, you will see a little computer icon, that is flashing red/green/blue. Click + it, find your game executable name on the list, and then double click it. In this case, you would click "crx.exe". +3. You are now hooked to the executable. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan + type", select "Unknown initial value". Now click "First Scan". Depending on how fast your computer is, this could + take from a few seconds to a few minutes. +4. Move ingame a little. Move forwards, backwards, whatever. +5. Open CE, set "Scan type" to "Changed value", then click "Next Scan". +6. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six + times. +7. Go back ingame, move a little, and repeat steps 4 to 6. +8. Repeat step 7 a few times. +9. Go back ingame, and look around with your mouse. Do NOT press any WASD keys. Repeat step 6. +10. At this point, you can begin to analyze the addresses that you see on the left. Try to find any addresses that are + green. If you can't, it's still ok. This guide found an address with a value of "802.8125", that kept changing when + one moved ingame. Now double click the address, and it will be added to the bottom address box. + +So, now you should have a position address. Position addresses are almost always an even number in the memory, in hex, +offset by four addresses. So, if you had a memory address of 0x5399010, then click "Add address manually", and in the +address field, put 0x53990**14**. 0x5399010 + 4 hex = 0x5399014. Now add 0x53990**18**. + +The second address should also have a similar looking value, and when you move ingame, it should change accordingly. +Depending on how the specific game coordinate system works, the first address might be the X value (east to west), the Y +value (up and down), or the Z value (north to south). Jump up and down ingame, and see which value changes the most. +That address will be your Y coordinate. + +### Part 2 - Find the Front Vector + +Now it's time to search for the front and top coordinates. These are a little bit tricky, so you will need some +patience. First, see if you can figure out which direction "north" is for the map you are on. Although this may not +apply to all games, generally the textures on a map are lined up north-south and east-west, perfectly. This means that +if you look straight down a wall, you will be looking perfectly in any one of the four cardinal directions. + +1. front straight north, or straight down a texture, whichever works for you. +2. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan type", select "Unknown initial value". Now + click "First Scan". Depending on how fast your computer is, this could take from a few seconds to a few minutes. +3. Now look a little bit to the left, just move your mouse enough that you can see a change in the pixels. +4. Open CE, set "Scan type" to "Changed value", then click "Next Scan". +5. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six + times. +6. Go back ingame, move a little, and repeat steps 4 and 5. +7. Repeat step 6 two or three times. +8. Look straight north or down your wall. Look for a value in the -0.999 or 0.999 range. Move in a circle and see if + this decreases or increases, but never gets larger than 0.999, or less than -0.999. By now, the addresses should be + narrowed down enough that you should be able to find the right value by just looking through the results list. + +### Part 3 - Find the Top Vector + +In almost any first person game, the top vector will be within 300 hex of your front vector. So, we will set a scan +range for CE. Example: front vector pointer is 1234ABC0, so we will make a scan range of 1234A000 to 1234AFFF. In the +memory scan options, set your range to these two addresses. + +Go ingame and place yourself looking straight forward. + +1. In the main Cheat Engine window, set "Value type" to "Float" and on "Scan type", select "Unknown initial value". Now + click "First Scan". +2. Look a little bit down. +3. Open CE, set "Scan type" to "Changed value", then click "Next Scan". +4. Set "Scan type" to "Unchanged value". Wait a little while (10-20 seconds), then click Click "Next Scan" five or six + times. +5. Look back up, so your are looking straight at the horizon. + +While looking straight toward the horizon, look for a value in the 0.980 to 0.999 range. Now look down at the ground. +The value should change to somewhere close to 0 - anywhere between 0.2 and -0.2. Find and add any addresses in that +range. + +Now add the addresses from the value that you find. Depending on whether or not the coordinate system is left-handed, +this could change. In the game that this guide used, the vector component that changed when looking up and down had an +address of 05399038, and it was the last address of the vector. So, to get the complete vector, subtract 4 from each +address two times, so you would have the following addresses: + +```text +05399030 +05399034 +05399038 +``` + +### Please Note + +The Position, Front, and Top vectors are very, very oftentimes right next to each other in memory. If you find the +position coordinates, chances are, the rotational ones will be within 100 hex of the former. + +Also, note that depending on the game type, all the positional data may be very slightly changing at all times. +Therefore, if you cannot find the addresses you are searching for, your game probably falls into this category. If so, +you cannot use the "unchanged value" parameter in CE, but must search for relative changes in value. + +### Part 4 - Find a State Value + +This is probably the easiest part. Simple search for a byte value that remains constant, and changes as soon as you load +into a map. Assign it using the sample code in Part 6. Part 5 - Determine the Coordinate System + +So, now you should have the three positional components you need: + +1. The position array +2. The front vector array +3. The top vector array + +But, you will still need to determine how to arrange the coordinates. + +In the left handed coordinate system, the X value will increase, as one vector component remains around 0.999. In Alien +Arena, the second address in the position array increases as the second address in the front vector array remains at +0.999. So, we know that this is a centered coordinate system. Therefore, if we spawn at (0,0,0), and we front north, and +move one meter, our position coordinate system will be (0,1,0). From that, we determine the following: a left-handed +coordinate system uses array of type + +```cpp +address[0] +address[1] +address[2] +``` + +and a center coordinate system uses the same thing, but offset by 2; it uses + +```cpp +address[0] +address[2] +address[1] +``` + +Also, we note that the coordinate system is in Quake units. 1 meter = ~ 32 Quake units, so we will convert it using the +following code: + +```cpp +for (int i=0;i<3;i++) + avatar_pos[i]/=32.0f; // Scale to meters +``` + +now we will take all this information, and piece together our final plugin code. + +### Part 6 - Using Pointers + +Unfortunately, not all games have static addresses. If yours does not, you will need to perform a pointer scan. + +1. After you have found your non-static addresses for each of your respective position, front, and top addresses, right + click them and click "Pointer scan for this address"; leave the default settings and start the scan. +2. After the pointer scan is completed, click Pointer scanner -> Rescan memory and type in the actual memory address + you're trying to find a pointer to, then click OK. +3. Now it comes down to trial and error. Keep the scan window opened, restart the game and hook Cheat Engine to the + process. See if there are pointers that still point to the right address and delete the bad ones by repeating step 2. + You can find the updated non-static memory address from a working pointer or by doing a new scan in Cheat Engine. Do + this more times to be sure that they are reliable and choose one of them. + +After you think you have a reliable pointer, you code it in the fetch() function, above the peekProc part. For example, +if I had a pointer of + +```text +Level 1 -> Offset CF +Level 2 -> Offset 250 +Level 3 -> Offset 230 +Level 4 -> something.dll + 242adf +``` + +for my `avatar_pos`, then I would use the following code: + +```cpp +procptr_t avatar_base = peekProcPtr(pModule + 0x0242adf); +if (!avatar_base) return false; +procptr_t avatar_offset_0 = peekProcPtr(avatar_base + 0x230); +if (!avatar_offset_0) return false; +procptr_t avatar_offset_1 = peekProcPtr(avatar_offset_0 + 0x250); +if (!avatar_offset_1) return false; +``` + +And then I would change peekProc to this: + +```cpp +peekProc(avatar_offset_1 + 0xCF, avatar_pos_corrector, 12) +``` + +## Code the Plugin + +The comments are marked in the code. Look it over carefully, and pay close attention to the commenting. + +```cpp +// Copyright 2019 The Mumble Developers. All rights reserved. +// Use of this source code is governed by a BSD-style license +// that can be found in the LICENSE file at the root of the +// Mumble source tree or at . + +#include "../mumble_plugin_main.h" // Include standard plugin header. + +static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &identity) { + for (int i=0;i<3;i++) { + avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; + } + + // Boolean values to check if game addresses retrieval is successful and if the player is in-game + bool ok, state; + // Create containers to stuff our raw data into, so we can convert it to Mumble's coordinate system + float avatar_pos_corrector[3], avatar_front_corrector[3], avatar_top_corrector[3]; + + // Peekproc and assign game addresses to our containers, so we can retrieve positional data + ok = peekProc(pModule + 0x5399000, &state, 1) && // Magical state value: 1 when in-game and 0 when in main menu. + peekProc(pModule + 0x5399010, avatar_pos_corrector, 12) && // Avatar Position values (X, Z and Y, respectively). + peekProc(pModule + 0x5399020, avatar_front_corrector, 12) && // Avatar Front Vector values (X, Z and Y, respectively). + peekProc(pModule + 0x5399030, avatar_top_corrector, 12); // Avatar Top Vector values (X, Z and Y, respectively). + + // This prevents the plugin from linking to the game in case something goes wrong during values retrieval from memory addresses. + if (! ok) { + return false; + } + + if (! state) { // If not in-game + context.clear(); // Clear context + identity.clear(); // Clear identity + // Set vectors values to 0. + for (int i=0;i<3;i++) + avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; + + return true; // This tells Mumble to ignore all vectors. + } + + /* + Mumble | Game + X | X + Y | Z + Z | Y + */ + avatar_pos[0] = avatar_pos_corrector[0]; + avatar_pos[1] = avatar_pos_corrector[2]; + avatar_pos[2] = avatar_pos_corrector[1]; + + avatar_front[0] = avatar_front_corrector[0]; + avatar_front[1] = avatar_front_corrector[2]; + avatar_front[2] = avatar_front_corrector[1]; + + avatar_top[0] = avatar_top_corrector[0]; + avatar_top[1] = avatar_top_corrector[2]; + avatar_top[2] = avatar_top_corrector[1]; + + // Sync camera with avatar + for (int i=0;i<3;i++) { + avatar_pos[i]/=32.0f; // Scale to meters + camera_pos[i] = avatar_pos[i]; + camera_front[i] = avatar_front[i]; + camera_top[i] = avatar_top[i]; + } + + return true; +} + +static int trylock(const std::multimap &pids) { + if (! initialize(pids, L"Game.exe")) { // Retrieve game executable's memory address + return false; + } + + // Check if we can get meaningful data from it + float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3]; + std::wstring sidentity; + std::string scontext; + + if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { + return true; + } else { + generic_unlock(); + return false; + } +} + +static const std::wstring longdesc() { + return std::wstring(L"Supports Game version 1.0 without context or identity support."); // Plugin long description +} + +static std::wstring description(L"Game (v1.0)"); // Plugin short description +static std::wstring shortname(L"Game"); // Plugin short name + +static int trylock1() { + return trylock(std::multimap()); +} + +static MumblePlugin gameplug = { + MUMBLE_PLUGIN_MAGIC, + description, + shortname, + NULL, + NULL, + trylock1, + generic_unlock, + longdesc, + fetch +}; + +static MumblePlugin2 gameplug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + +extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin *getMumblePlugin() { + return &gameplug; +} + +extern "C" MUMBLE_PLUGIN_EXPORT MumblePlugin2 *getMumblePlugin2() { + return &gameplug2; +} +``` + +## Compile the Plugin + +You can either build the plugin out of tree, meaning without the rest of the mumble environment around it, or as a part +of Mumble. Note that to submit the plugin we prefer a patch against our tree with full integration. However we will do +that part for you if you don't want to bother. + +### Out of tree build (doesn't need a Mumble build environment) + +Make a folder for your plugin and then make a subfolder, with your plugin's name. Now download +[`mumble_plugin.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin.h), +[`mumble_plugin_main.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_main.h) and the right +platform header +([`mumble_plugin_win32.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_win32.h) or +[`mumble_plugin_linux.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_linux.h)). You may +also want to download +[`mumble_plugin_utils.h`](https://github.com/mumble-voip/mumble/blob/master/plugins/mumble_plugin_utils.h), which +contains useful functions you could need in your plugin. + +Put the files in the first folder and your .cpp game plugin file into the second folder that is inside of the first. + +#### Info on compilers + +Mumble 1.3.x is built with MSVC 2015 (Visual Studio 2015 compiler). + +Mumble 1.2.x is built with MSVC 2010 (Visual Studio 2010 compiler). + +Plugins built with GCC **will not work** with the version of Mumble distributed from the website. + +Warning: Since the plugin API exposes internal details of the C++ library (e.g. std::string), plugins must be built with +the same compiler/runtime as the Mumble client itself to work. + +#### Using Qt Creator + +Download the right Qt package version from [Qt.io](https://www.qt.io/download-open-source/#section-2). Qt for MSVC 2010 +is discontinued, [this](http://download.qt.io/archive/qt/5.5/5.5.1/qt-opensource-windows-x86-msvc2010-5.5.1.exe) is the +latest version that supports it. + +You also have to download [Visual C++ 2015 Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) +(which contains MSVC 2015, for Mumble 1.3.x) or +[MSBuild 4.0](https://www.microsoft.com/en-us/download/details.aspx?id=8279) (MSVC 2010, for Mumble 1.2.x), to install +the compiler. + +#### Using Visual Studio + +[Visual Studio 2015 Community](https://go.microsoft.com/fwlink/?LinkId=615448) +[Visual Studio 2010 Express edition](http://download.microsoft.com/download/1/E/5/1E5F1C0A-0D5B-426A-A603-1798B951DDAE/VS2010Express1.iso). Default +options, except for the SQL server, which you can uncheck. + +Start Visual Studio and go to File -> New -> Project. Enter a name, then double click "Win32 Project". Click Next, +select "DLL" and check "Empty project". Click Finish. Now open the folder that contains your game's cpp plugin file, and +drag that file into the "Source Files" folder on the left. Now click Build -> Batch Build... and check the box in the +Build column that corresponds to "Release". Click Build and the plugin will compile. Once it is compiled, go to [My] +Documents\Visual Studio 2010\Projects\\Release. You can take .dll and put it in +%AppData%\Mumble\plugins, and when you start Mumble, the plugin will load and you can test it. + +### In tree build + +If you do not have a working build environment yet follow the +[BuildingWindows](https://wiki.mumble.info/wiki/BuildingWindows) or +[BuildingLinux](https://wiki.mumble.info/wiki/BuildingLinux) guide to create one. Once you successfully built Mumble +(client suffices) perform the following steps: + +- Create a new sub-directory for your plugin in `plugins/` named after your plugin (e.g. bf2 for Battlefield 2). +- Name your your primary source file the same as the newly created directory and put it in there. +- Create a `.pro` file in the new directory. You can use an existing plugin's pro file (e.g. bf2/bf2.pro) as + a template. +- Add your plugin sub-directory to the list in `plugins/plugins.pro` +- Add your plugin to the installer in `installer/Plugins.wxs` (top and bottom) +- Reconfigure mumble with `-recursive` and rebuild. + +The plugin should now be built as part of mumble. diff --git a/hugo/content/documentation/developer/positional-audio/create-plugin/memory-analysis-tools.md b/hugo/content/documentation/developer/positional-audio/create-plugin/memory-analysis-tools.md index 871989fd..5c7bf6bd 100644 --- a/hugo/content/documentation/developer/positional-audio/create-plugin/memory-analysis-tools.md +++ b/hugo/content/documentation/developer/positional-audio/create-plugin/memory-analysis-tools.md @@ -1,17 +1,23 @@ ---- -title: "Memory Analysis Tools" ---- -Warning: Be aware that most of these are tools used to create and execute hacks and might trigger anti cheat protection. -Note that Mumble does NOT support cheating of any kind. We use these utilities because the interface is easy to use and they fit our purposes; they are simply memory searching tools, required to find the positional addresses in the game. - -## Windows - -* [Cheat Engine](http://www.cheatengine.org): Very comfortable, easy to use program to gather addresses. It has everything you need, and more! -* [UsaMimi Hurricane](http://hp.vector.co.jp/authors/VA028184/english/index.html): No description -* [ArtMoney](http://www.artmoney.ru): No description - -## Linux - -* [Cheat Engine server](http://www.cheatengine.org/downloads.php): This server allows you to scan a Linux process through the network using Cheat Engine on Windows. If you don't have a Windows machine, you can use Wine to run Cheat Engine and connect to the server on Linux. -* [GameConqueror/scanmem](https://github.com/scanmem/scanmem): It's basically the Linux counterpart of Cheat Engine. -* [PINCE](https://github.com/korcankaraokcu/PINCE): It has more advanced features than GameConqueror, but it doesn't scan memory addresses yet. +--- +title: "Memory Analysis Tools" +--- + +Warning: Be aware that most of these are tools used to create and execute hacks and might trigger anti cheat protection. +Note that Mumble does NOT support cheating of any kind. We use these utilities because the interface is easy to use and +they fit our purposes; they are simply memory searching tools, required to find the positional addresses in the game. + +## Windows + +- [Cheat Engine](http://www.cheatengine.org): Very comfortable, easy to use program to gather addresses. It has + everything you need, and more! +- [UsaMimi Hurricane](http://hp.vector.co.jp/authors/VA028184/english/index.html): No description +- [ArtMoney](http://www.artmoney.ru): No description + +## Linux + +- [Cheat Engine server](http://www.cheatengine.org/downloads.php): This server allows you to scan a Linux process + through the network using Cheat Engine on Windows. If you don't have a Windows machine, you can use Wine to run Cheat + Engine and connect to the server on Linux. +- [GameConqueror/scanmem](https://github.com/scanmem/scanmem): It's basically the Linux counterpart of Cheat Engine. +- [PINCE](https://github.com/korcankaraokcu/PINCE): It has more advanced features than GameConqueror, but it doesn't + scan memory addresses yet. diff --git a/hugo/content/documentation/developer/positional-audio/link-plugin/_index.md b/hugo/content/documentation/developer/positional-audio/link-plugin/_index.md index 07d2dc96..5f311e4e 100644 --- a/hugo/content/documentation/developer/positional-audio/link-plugin/_index.md +++ b/hugo/content/documentation/developer/positional-audio/link-plugin/_index.md @@ -1,196 +1,234 @@ ---- -title: "Integrate Mumble Positional Audio Through the Link Plugin" ---- -If you want to add Mumble positional audio support to a game or game mod you have source code access to you can provide positional data natively to Mumble with some *initialization*, *game session update* and *frame position update* logic. - -Supporting Mumble positional audio natively will ensure it remain functional across game updates. Native game support makes use of Mumble’s *Link plugin*. - -**Note:** If you add native support to your game or game mod please inform us so we can update our documentation accordingly. You can also send in a change request updating it yourself. - -If you are looking for just source code you can find that further down below. - -## Coordinate system - -Mumble, like most sound systems, uses a **left handed coordinate system** ([see this for a visual representation](https://docs.microsoft.com/en-us/windows/win32/direct3d9/coordinate-systems)). - -As a visualization of the left handed coordinate system: If you imagine yourself looking over a large empty field; X increases towards your right, Y increases above your head, and Z increases in front of you. In other words, if we place origin in your chest and you stretch your arms out to your sides, your right hand will be `(1,0,0)`, your left hand will be `(-1,0,0)` and your head will be `(0,0.2,0)`. If you then stretch your arms out in front of you instead, they'll become `(0,0,1)`. - -## Positional Data - -The positional data is made up of positiona and orientation. The orientation is defined by a front- and upwards-facing unit vector. The position is defined by a vector in meters. - -### Position - -Mumble interprets the values as meters for consistency between positional audio applications. If you are using a different unit for your actor positions you may have to convert them to meters. - -First is the **position vector**. This should be in meters, so you may need to scale it. The reason: If it is not in meters, distance attenuation will be different to the other games/plugins, meaning users will have a bad experience with positional audio (audio configuration is dependant on a common distance measurement). - -### Orientation - -The next two vectors define the orientation. These should be [unit vectors (length one)](https://en.wikipedia.org/wiki/Unit_vector), and should be perpendicular to one another. The first vector is the front vector, which is simply the direction you are looking at. The second is the top vector, which is an imaginary vector pointing straight out the top of your head. If you do not supply a top vector, Mumble will assume you have a “Y-is-up” coordinate system and that the user can not tilt their head, and then compute the top vector based on that. - -**Tip:** If your game uses a 3D positional audio API such as OpenAL you may want to take a look at the code where the listener gets updated since these APIs usually require the same vectors. - -### Context - -**Note:** The context does **not** need to be updated every single frame. It **shouldn’t** change more than a few times per second if at all during a game. - -The context string is used to determine which users on a Mumble server should hear each other positionally. If context between two Mumble users does not match then the positional data is stripped server-side and voice will be received as non-positional. - -Accordingly the context should only match for players on the same server in the same game on the same map. Whether to include things like team in this string depends on the game itself. When in doubt err on the side of including less. This gives more flexibility later on. - -### Identity - -**Note:** The identity does **not** need to be updated every single frame. It **shouldn’t** change more than a few times per second if at all during a game. - -Identity should contain a string which uniquely identifies the player in the given context. This is usually satisfied by a player ID (player- or connection-ID on the server, or a global ID). - -Additionally the identity can contain any additional information about the player that might be interesting for the Mumble server (for routing, moving or approving users). - -For example by including team information in the identity a script on the Mumble server can move players into team channels automatically. Additional information like squad number, squad leader status and so on can be used to trigger even more behavior like automatically maintaining a leadership structure inside Mumble which is kept in-sync with in-game state. E.g. someone is elected squad leader and now can whisper to all other squad leaders and the team leader. For an example of such a server-side script see the [Battlefield 2 mumo plugin](https://github.com/mumble-voip/mumo/blob/master/modules/bf2.py). - -We recommend using an easily parseable format like JSON or CSV for encoding the information but this is up to the game. Remember that the link structures only allow for 256 characters of identity data. - -## Source Code - -All code listed below is put into the **public domain** and can be used, shared or modified freely. You can consider it an example, reference, or code to be integrated directly into your application as-is. - -### Initialization - -Within your game initialization, add the following initialization code: - -```c -#ifdef _WIN32 - #include -#else - #include - #include /* For O_* constants */ -#endif // _WIN32 - -struct LinkedMem { -#ifdef _WIN32 - UINT32 uiVersion; - DWORD uiTick; -#else - uint32_t uiVersion; - uint32_t uiTick; -#endif - float fAvatarPosition[3]; - float fAvatarFront[3]; - float fAvatarTop[3]; - wchar_t name[256]; - float fCameraPosition[3]; - float fCameraFront[3]; - float fCameraTop[3]; - wchar_t identity[256]; -#ifdef _WIN32 - UINT32 context_len; -#else - uint32_t context_len; -#endif - unsigned char context[256]; - wchar_t description[2048]; -}; - -LinkedMem *lm = NULL; - -void initMumble() { - -#ifdef _WIN32 - HANDLE hMapObject = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink"); - if (hMapObject == NULL) - return; - - lm = (LinkedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(LinkedMem)); - if (lm == NULL) { - CloseHandle(hMapObject); - hMapObject = NULL; - return; - } -#else - char memname[256]; - snprintf(memname, 256, "/MumbleLink.%d", getuid()); - - int shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR); - - if (shmfd < 0) { - return; - } - - lm = (LinkedMem *)(mmap(NULL, sizeof(struct LinkedMem), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,0)); - - if (lm == (void *)(-1)) { - lm = NULL; - return; - } -#endif -} -``` - -### Data Update - -For each frame, use the following to update position and camera information: - -```c -void updateMumble() { - if (! lm) - return; - - if(lm->uiVersion != 2) { - wcsncpy(lm->name, L"TestLink", 256); - wcsncpy(lm->description, L"TestLink is a test of the Link plugin.", 2048); - lm->uiVersion = 2; - } - lm->uiTick++; - - // Left handed coordinate system. - // X positive towards "right". - // Y positive towards "up". - // Z positive towards "front". - // - // 1 unit = 1 meter - - // Unit vector pointing out of the avatar's eyes aka "At"-vector. - lm->fAvatarFront[0] = 0.0f; - lm->fAvatarFront[1] = 0.0f; - lm->fAvatarFront[2] = 1.0f; - - // Unit vector pointing out of the top of the avatar's head aka "Up"-vector (here Top points straight up). - lm->fAvatarTop[0] = 0.0f; - lm->fAvatarTop[1] = 1.0f; - lm->fAvatarTop[2] = 0.0f; - - // Position of the avatar (here standing slightly off the origin) - lm->fAvatarPosition[0] = 0.001f; - lm->fAvatarPosition[1] = 0.0f; - lm->fAvatarPosition[2] = 0.5f; - - // Same as avatar but for the camera. - lm->fCameraPosition[0] = 0.0f; - lm->fCameraPosition[1] = 0.0f; - lm->fCameraPosition[2] = 0.0f; - - lm->fCameraFront[0] = 0.0f; - lm->fCameraFront[1] = 0.0f; - lm->fCameraFront[2] = 1.0f; - - lm->fCameraTop[0] = 0.0f; - lm->fCameraTop[1] = 1.0f; - lm->fCameraTop[2] = 0.0f; - - // Identifier which uniquely identifies a certain player in a context (e.g. the ingame name). - wcsncpy(lm->identity, L"Unique ID", 256); - // Context should be equal for players which should be able to hear each other positional and - // differ for those who shouldn't (e.g. it could contain the server+port and team) - memcpy(lm->context, "ContextBlob\x00\x01\x02\x03\x04", 16); - lm->context_len = 16; -} -``` - -#### `f`* variables - -`fAvatarPosition` should be the player position in 3D space, to disable the transmission of positional information alongside audio without unlinking the plugin set x,y,z of the tuple to zero. `fAvatarTop` and `fAvatarFront` should be the orientation. The coordinate system is a left-handed one, and the units are in meters. - -`fCameraPosition`, `fCameraTop`, and `fCameraFront` contain the player camera position and orientation. If the camera of your game is not independent of the avatar be sure to copy the avatar values over to the variables. If the camera moves independent of the avatar these values should contain the position, top- and front-vector of the *camera*. - -**Note:** Mumble fetches these values 50 times a second, so please update them every frame. +--- +title: "Integrate Mumble Positional Audio Through the Link Plugin" +--- + +If you want to add Mumble positional audio support to a game or game mod you have source code access to you can provide +positional data natively to Mumble with some _initialization_, _game session update_ and _frame position update_ logic. + +Supporting Mumble positional audio natively will ensure it remain functional across game updates. Native game support +makes use of Mumble’s _Link plugin_. + +**Note:** If you add native support to your game or game mod please inform us so we can update our documentation +accordingly. You can also send in a change request updating it yourself. + +If you are looking for just source code you can find that further down below. + +## Coordinate system + +Mumble, like most sound systems, uses a **left handed coordinate system** +([see this for a visual representation](https://docs.microsoft.com/en-us/windows/win32/direct3d9/coordinate-systems)). + +As a visualization of the left handed coordinate system: If you imagine yourself looking over a large empty field; X +increases towards your right, Y increases above your head, and Z increases in front of you. In other words, if we place +origin in your chest and you stretch your arms out to your sides, your right hand will be `(1,0,0)`, your left hand will +be `(-1,0,0)` and your head will be `(0,0.2,0)`. If you then stretch your arms out in front of you instead, they'll +become `(0,0,1)`. + +## Positional Data + +The positional data is made up of positiona and orientation. The orientation is defined by a front- and upwards-facing +unit vector. The position is defined by a vector in meters. + +### Position + +Mumble interprets the values as meters for consistency between positional audio applications. If you are using a +different unit for your actor positions you may have to convert them to meters. + +First is the **position vector**. This should be in meters, so you may need to scale it. The reason: If it is not in +meters, distance attenuation will be different to the other games/plugins, meaning users will have a bad experience with +positional audio (audio configuration is dependant on a common distance measurement). + +### Orientation + +The next two vectors define the orientation. These should be +[unit vectors (length one)](https://en.wikipedia.org/wiki/Unit_vector), and should be perpendicular to one another. The +first vector is the front vector, which is simply the direction you are looking at. The second is the top vector, which +is an imaginary vector pointing straight out the top of your head. If you do not supply a top vector, Mumble will assume +you have a “Y-is-up” coordinate system and that the user can not tilt their head, and then compute the top vector based +on that. + +**Tip:** If your game uses a 3D positional audio API such as OpenAL you may want to take a look at the code where the +listener gets updated since these APIs usually require the same vectors. + +### Context + +**Note:** The context does **not** need to be updated every single frame. It **shouldn’t** change more than a few times +per second if at all during a game. + +The context string is used to determine which users on a Mumble server should hear each other positionally. If context +between two Mumble users does not match then the positional data is stripped server-side and voice will be received as +non-positional. + +Accordingly the context should only match for players on the same server in the same game on the same map. Whether to +include things like team in this string depends on the game itself. When in doubt err on the side of including less. +This gives more flexibility later on. + +### Identity + +**Note:** The identity does **not** need to be updated every single frame. It **shouldn’t** change more than a few times +per second if at all during a game. + +Identity should contain a string which uniquely identifies the player in the given context. This is usually satisfied by +a player ID (player- or connection-ID on the server, or a global ID). + +Additionally the identity can contain any additional information about the player that might be interesting for the +Mumble server (for routing, moving or approving users). + +For example by including team information in the identity a script on the Mumble server can move players into team +channels automatically. Additional information like squad number, squad leader status and so on can be used to trigger +even more behavior like automatically maintaining a leadership structure inside Mumble which is kept in-sync with +in-game state. E.g. someone is elected squad leader and now can whisper to all other squad leaders and the team leader. +For an example of such a server-side script see the +[Battlefield 2 mumo plugin](https://github.com/mumble-voip/mumo/blob/master/modules/bf2.py). + +We recommend using an easily parseable format like JSON or CSV for encoding the information but this is up to the game. +Remember that the link structures only allow for 256 characters of identity data. + +## Source Code + +All code listed below is put into the **public domain** and can be used, shared or modified freely. You can consider it +an example, reference, or code to be integrated directly into your application as-is. + +### Initialization + +Within your game initialization, add the following initialization code: + +```c +#ifdef _WIN32 + #include +#else + #include + #include /* For O_* constants */ +#endif // _WIN32 + +struct LinkedMem { +#ifdef _WIN32 + UINT32 uiVersion; + DWORD uiTick; +#else + uint32_t uiVersion; + uint32_t uiTick; +#endif + float fAvatarPosition[3]; + float fAvatarFront[3]; + float fAvatarTop[3]; + wchar_t name[256]; + float fCameraPosition[3]; + float fCameraFront[3]; + float fCameraTop[3]; + wchar_t identity[256]; +#ifdef _WIN32 + UINT32 context_len; +#else + uint32_t context_len; +#endif + unsigned char context[256]; + wchar_t description[2048]; +}; + +LinkedMem *lm = NULL; + +void initMumble() { + +#ifdef _WIN32 + HANDLE hMapObject = OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, L"MumbleLink"); + if (hMapObject == NULL) + return; + + lm = (LinkedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(LinkedMem)); + if (lm == NULL) { + CloseHandle(hMapObject); + hMapObject = NULL; + return; + } +#else + char memname[256]; + snprintf(memname, 256, "/MumbleLink.%d", getuid()); + + int shmfd = shm_open(memname, O_RDWR, S_IRUSR | S_IWUSR); + + if (shmfd < 0) { + return; + } + + lm = (LinkedMem *)(mmap(NULL, sizeof(struct LinkedMem), PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,0)); + + if (lm == (void *)(-1)) { + lm = NULL; + return; + } +#endif +} +``` + +### Data Update + +For each frame, use the following to update position and camera information: + +```c +void updateMumble() { + if (! lm) + return; + + if(lm->uiVersion != 2) { + wcsncpy(lm->name, L"TestLink", 256); + wcsncpy(lm->description, L"TestLink is a test of the Link plugin.", 2048); + lm->uiVersion = 2; + } + lm->uiTick++; + + // Left handed coordinate system. + // X positive towards "right". + // Y positive towards "up". + // Z positive towards "front". + // + // 1 unit = 1 meter + + // Unit vector pointing out of the avatar's eyes aka "At"-vector. + lm->fAvatarFront[0] = 0.0f; + lm->fAvatarFront[1] = 0.0f; + lm->fAvatarFront[2] = 1.0f; + + // Unit vector pointing out of the top of the avatar's head aka "Up"-vector (here Top points straight up). + lm->fAvatarTop[0] = 0.0f; + lm->fAvatarTop[1] = 1.0f; + lm->fAvatarTop[2] = 0.0f; + + // Position of the avatar (here standing slightly off the origin) + lm->fAvatarPosition[0] = 0.001f; + lm->fAvatarPosition[1] = 0.0f; + lm->fAvatarPosition[2] = 0.5f; + + // Same as avatar but for the camera. + lm->fCameraPosition[0] = 0.0f; + lm->fCameraPosition[1] = 0.0f; + lm->fCameraPosition[2] = 0.0f; + + lm->fCameraFront[0] = 0.0f; + lm->fCameraFront[1] = 0.0f; + lm->fCameraFront[2] = 1.0f; + + lm->fCameraTop[0] = 0.0f; + lm->fCameraTop[1] = 1.0f; + lm->fCameraTop[2] = 0.0f; + + // Identifier which uniquely identifies a certain player in a context (e.g. the ingame name). + wcsncpy(lm->identity, L"Unique ID", 256); + // Context should be equal for players which should be able to hear each other positional and + // differ for those who shouldn't (e.g. it could contain the server+port and team) + memcpy(lm->context, "ContextBlob\x00\x01\x02\x03\x04", 16); + lm->context_len = 16; +} +``` + +#### `f`\* variables + +`fAvatarPosition` should be the player position in 3D space, to disable the transmission of positional information +alongside audio without unlinking the plugin set x,y,z of the tuple to zero. `fAvatarTop` and `fAvatarFront` should be +the orientation. The coordinate system is a left-handed one, and the units are in meters. + +`fCameraPosition`, `fCameraTop`, and `fCameraFront` contain the player camera position and orientation. If the camera of +your game is not independent of the avatar be sure to copy the avatar values over to the variables. If the camera moves +independent of the avatar these values should contain the position, top- and front-vector of the _camera_. + +**Note:** Mumble fetches these values 50 times a second, so please update them every frame. diff --git a/hugo/content/documentation/developer/translation.md b/hugo/content/documentation/developer/translation.md index e7a504b8..c24dd663 100644 --- a/hugo/content/documentation/developer/translation.md +++ b/hugo/content/documentation/developer/translation.md @@ -1,166 +1,194 @@ ---- -title: Developer Translation Documentation -date: 2021-03-14 -lastmod: 2021-03-14 -aliases: - - "/documentation/translation/" ---- -Mumble makes use of the Qt framework. This is also the case for translations. We follow the Qt tools and translation workflow. - -Translators can translate our project in our [Mumble Weblate project](https://hosted.weblate.org/projects/mumble/mumble-client/) without a need for Git, Code, or programs other than their web browser. - -The `.ts` translation files are located in the Mumble repository in `src/mumble/mumble_*.ts`. - -We currently version a `mumble_en.ts` as a reference file for translations, and individual files for each locale we support (which each holds the source strings too anyway). - -Qt supports both an [ID-based approach](https://doc.qt.io/qt-5/linguist-id-based-i18n.html) as well as a source + translated text approach. Weblate calls the ID based approach monolingual (a ts file does not contain the source text) and bilingual (a ts files contains both source and translated text). - -We effectively work with the bilingual file approach, but have the Weblate project set up as if it were ID based. _This is for historic reasons and should be changed in the future._ - -## Adding a language - -To add a new language the ts file is created with `lupdate`, and a file reference is added to the `ts_files` variable in `src/mumble/CMakeLists.txt`. - -## Creating translatable strings - -In Qt translation strings have a context – a class context. The fallback is the QApplication context. But any `Q_OBJECT` class introduces their own context. In the `ts` file texts are grouped by context. - -Literal text is translated (“marked”), typically through the [`QObject::tr`](https://doc.qt.io/qt-5/qobject.html#tr) method, which in turn calls [QCoreApplication::translate](https://doc.qt.io/qt-5/qcoreapplication.html#translate) with an adequate. - -NOTE: To provide structure to the many translation strings, `tr` should be called on the most reasonably specific class. *(Calling it on the base `QObject` will make it fall back to the generic `QApplication` context.)* - -Classes not extending from QObject [can also be extended with the `tr` context functionality](https://doc.qt.io/qt-5/i18n-source-translation.html#translating-non-qt-classes). - -See also upstream documentation [Using tr() for All Literal Text](https://doc.qt.io/qt-5/i18n-source-translation.html#using-tr-for-all-literal-text) (and the context around it). - -### Numbers and Dates - -Special care has to be taken for formatting date and time and numbers. The format of these differs by locale, and may be disassociated from the language a user uses too. - -See also QLocale and other Qt classes for date, time and numbers. - -* [Using tr() to Localize Numbers](https://doc.qt.io/qt-5/i18n-source-translation.html#using-tr-to-localize-numbers) (shows only one case/may not be the best approach) - -### Disambiguation - -Identical text in the same context can be disambiguated with an additional identifying string. - -```c++ - QLabel *senderLabel = new QLabel(tr("Name:", "sender")); - QLabel *recipientLabel = new QLabel(tr("Name:", "recipient")); -``` - -### Plurals - -Plurals have special handling in general and between languages. Depending on the locale/language, a plural (word) may differ between 0, 1, 2. And they may differ in different ways. - -Numbered plurals are marked with a `(s)` word postfix like `%n word(s)`. - -Notably this will not show up as `word(s)` in the program, but as `word` or `words` depending on the parameter value. - -The translation files (ts files) may have any number of `` elements as translations, rather than just one translation text. - -```xml - - Ban List - %n Ban(s) - - Bannliste - %n Bann - Bannliste - %n Bann(s) - - -``` - -Other languages may have three forms. - -[Handling Plurals](https://doc.qt.io/qt-5/i18n-source-translation.html#handling-plurals) -[Translation Rules for Plurals](https://doc.qt.io/qt-5/i18n-plural-rules.html) - -### Numbered Arguments (Ordered) - -The order of arguments within a string may change with a text translation. Numbering them and passing values with `arg()` will allow translators to change the order as they see fit. - -```c++ - label.setText(tr("%1 of %2 files copied.\nCopying: %3") - .arg(done) - .arg(total) - .arg(currentFile)); -``` - -A translator comment may help them identify parameters if not obvious from the source text. - -### Mnemonics - -Programs typically show these while holding down ALT, and single characters can be used to activate controls allowing for keyboard-based usage of GUI applications. While ALT is pressed the mnemonic key is usually underlined. - -The typical ampersand `&` markers are used to define mnemonics on a control text. - -For example: - -* `E&xit` would lead to `x` being the mnemonic -* `&Exit` would lead to `e` being the mnemonic - -In both cases, the displayed text on the control will be `Exit`. - -### Accelerator Values - -Use [`QKeySequence`](https://doc.qt.io/qt-5/qkeysequence.html) to use keyboard shortcuts so they are translatable too. - -```c++ -exitAct = new QAction(tr("E&xit"), this); -exitAct->setShortcuts(QKeySequence::Quit); -``` - -* [Using QKeySequence() for Accelerator Values](https://doc.qt.io/qt-5/i18n-source-translation.html#using-qkeysequence-for-accelerator-values) - -### Translating text outside of classes - -Classes provide code structure. Yet sometimes text may end up outside of classes and Qt classes, and reasonably so. - -Then `tr` can be called as a public static method on an appropriate class the text belongs to. Or `QCoreApplication::translate` can be called directly. - -For text without context the `QT_TR_NOOP` and `QT_TRANSLATE_NOOP` macros can be used. - -### Translator Comments - -Translating text often requires context. It can be difficult to grasp a texts context from just the source string. Without the program or source code open and next to the source string, it can be impossible to grasp the context. - -Translator comments can help provide context to a source string. - -```c++ -//: This name refers to a host name. -hostNameLabel->setText(tr("Name:")); - -/*: This text refers to a C++ code example. */ -QString example = tr("Example"); -``` - -* [Translator Comments](https://doc.qt.io/qt-5/i18n-source-translation.html#translator-comments) - -### Metadata - -Additional metadata can be attached to translatable text for advanced behavior, also further down the line on translation platforms. - -* [Qt: Adding Meta-Data to Strings](https://doc.qt.io/qt-5/i18n-source-translation.html#adding-meta-data-to-strings) -* [Weblate: Customizing behavior using flags](https://docs.weblate.org/en/latest/admin/checks.html#custom-checks) - -## CMake integration - -We make use of [`qt5_create_translation`](https://doc.qt.io/qt-5/qtlinguist-cmake-qt5-create-translation.html). This will call `lupdate` and `lrelease`. - -The ts translation files are stripped of unrelated, unused texts (they contain text for multiple platforms while the program is compiled for just one), and then packaged into the application (through the Qt resource system; qrc definition file). - -Regarding Qt resources see [The Qt Resource System](https://doc.qt.io/qt-5/resources.html). - -## Upstream Qt Resources - -* [Qt Linguist Manual: Developers](https://doc.qt.io/qt-5/linguist-programmers.html) -* [Qt Linguist Manual](https://doc.qt.io/qt-5/qtlinguist-index.html) -* [Writing Source Code for Translation](https://doc.qt.io/qt-5/i18n-source-translation.html) -* [Qt Linguist Manual: Text ID Based Translations](https://doc.qt.io/qt-5/linguist-id-based-i18n.html) -* [Qt Linguist Manual: Release Manager](https://doc.qt.io/qt-5/linguist-manager.html) -* [Qt Linguist Manual: Translators](https://doc.qt.io/qt-5/linguist-translators.html) - -* [Weblate supported formats](https://docs.weblate.org/en/latest/formats.html#formats) -* [Weblate Qt ts file support](https://docs.weblate.org/en/latest/formats.html#qt-linguist-ts) -* [Weblate bilingual and monolingual formats](https://docs.weblate.org/en/latest/formats.html#bimono) -* [Weblate Translation types capabilities](https://docs.weblate.org/en/latest/formats.html#translation-types-capabilities) +--- +title: Developer Translation Documentation +date: 2021-03-14 +lastmod: 2021-03-14 +aliases: + - "/documentation/translation/" +--- + +Mumble makes use of the Qt framework. This is also the case for translations. We follow the Qt tools and translation +workflow. + +Translators can translate our project in our +[Mumble Weblate project](https://hosted.weblate.org/projects/mumble/mumble-client/) without a need for Git, Code, or +programs other than their web browser. + +The `.ts` translation files are located in the Mumble repository in `src/mumble/mumble_*.ts`. + +We currently version a `mumble_en.ts` as a reference file for translations, and individual files for each locale we +support (which each holds the source strings too anyway). + +Qt supports both an [ID-based approach](https://doc.qt.io/qt-5/linguist-id-based-i18n.html) as well as a source + +translated text approach. Weblate calls the ID based approach monolingual (a ts file does not contain the source text) +and bilingual (a ts files contains both source and translated text). + +We effectively work with the bilingual file approach, but have the Weblate project set up as if it were ID based. _This +is for historic reasons and should be changed in the future._ + +## Adding a language + +To add a new language the ts file is created with `lupdate`, and a file reference is added to the `ts_files` variable in +`src/mumble/CMakeLists.txt`. + +## Creating translatable strings + +In Qt translation strings have a context – a class context. The fallback is the QApplication context. But any `Q_OBJECT` +class introduces their own context. In the `ts` file texts are grouped by context. + +Literal text is translated (“marked”), typically through the [`QObject::tr`](https://doc.qt.io/qt-5/qobject.html#tr) +method, which in turn calls [QCoreApplication::translate](https://doc.qt.io/qt-5/qcoreapplication.html#translate) with +an adequate. + +NOTE: To provide structure to the many translation strings, `tr` should be called on the most reasonably specific class. +_(Calling it on the base `QObject` will make it fall back to the generic `QApplication` context.)_ + +Classes not extending from QObject +[can also be extended with the `tr` context functionality](https://doc.qt.io/qt-5/i18n-source-translation.html#translating-non-qt-classes). + +See also upstream documentation +[Using tr() for All Literal Text](https://doc.qt.io/qt-5/i18n-source-translation.html#using-tr-for-all-literal-text) +(and the context around it). + +### Numbers and Dates + +Special care has to be taken for formatting date and time and numbers. The format of these differs by locale, and may be +disassociated from the language a user uses too. + +See also QLocale and other Qt classes for date, time and numbers. + +- [Using tr() to Localize Numbers](https://doc.qt.io/qt-5/i18n-source-translation.html#using-tr-to-localize-numbers) + (shows only one case/may not be the best approach) + +### Disambiguation + +Identical text in the same context can be disambiguated with an additional identifying string. + +```c++ + QLabel *senderLabel = new QLabel(tr("Name:", "sender")); + QLabel *recipientLabel = new QLabel(tr("Name:", "recipient")); +``` + +### Plurals + +Plurals have special handling in general and between languages. Depending on the locale/language, a plural (word) may +differ between 0, 1, 2. And they may differ in different ways. + +Numbered plurals are marked with a `(s)` word postfix like `%n word(s)`. + +Notably this will not show up as `word(s)` in the program, but as `word` or `words` depending on the parameter value. + +The translation files (ts files) may have any number of `` elements as translations, rather than just one +translation text. + +```xml + + Ban List - %n Ban(s) + + Bannliste - %n Bann + Bannliste - %n Bann(s) + + +``` + +Other languages may have three forms. + +[Handling Plurals](https://doc.qt.io/qt-5/i18n-source-translation.html#handling-plurals) +[Translation Rules for Plurals](https://doc.qt.io/qt-5/i18n-plural-rules.html) + +### Numbered Arguments (Ordered) + +The order of arguments within a string may change with a text translation. Numbering them and passing values with +`arg()` will allow translators to change the order as they see fit. + +```c++ + label.setText(tr("%1 of %2 files copied.\nCopying: %3") + .arg(done) + .arg(total) + .arg(currentFile)); +``` + +A translator comment may help them identify parameters if not obvious from the source text. + +### Mnemonics + +Programs typically show these while holding down ALT, and single characters can be used to activate controls allowing +for keyboard-based usage of GUI applications. While ALT is pressed the mnemonic key is usually underlined. + +The typical ampersand `&` markers are used to define mnemonics on a control text. + +For example: + +- `E&xit` would lead to `x` being the mnemonic +- `&Exit` would lead to `e` being the mnemonic + +In both cases, the displayed text on the control will be `Exit`. + +### Accelerator Values + +Use [`QKeySequence`](https://doc.qt.io/qt-5/qkeysequence.html) to use keyboard shortcuts so they are translatable too. + +```c++ +exitAct = new QAction(tr("E&xit"), this); +exitAct->setShortcuts(QKeySequence::Quit); +``` + +- [Using QKeySequence() for Accelerator Values](https://doc.qt.io/qt-5/i18n-source-translation.html#using-qkeysequence-for-accelerator-values) + +### Translating text outside of classes + +Classes provide code structure. Yet sometimes text may end up outside of classes and Qt classes, and reasonably so. + +Then `tr` can be called as a public static method on an appropriate class the text belongs to. Or +`QCoreApplication::translate` can be called directly. + +For text without context the `QT_TR_NOOP` and `QT_TRANSLATE_NOOP` macros can be used. + +### Translator Comments + +Translating text often requires context. It can be difficult to grasp a texts context from just the source string. +Without the program or source code open and next to the source string, it can be impossible to grasp the context. + +Translator comments can help provide context to a source string. + +```c++ +//: This name refers to a host name. +hostNameLabel->setText(tr("Name:")); + +/*: This text refers to a C++ code example. */ +QString example = tr("Example"); +``` + +- [Translator Comments](https://doc.qt.io/qt-5/i18n-source-translation.html#translator-comments) + +### Metadata + +Additional metadata can be attached to translatable text for advanced behavior, also further down the line on +translation platforms. + +- [Qt: Adding Meta-Data to Strings](https://doc.qt.io/qt-5/i18n-source-translation.html#adding-meta-data-to-strings) +- [Weblate: Customizing behavior using flags](https://docs.weblate.org/en/latest/admin/checks.html#custom-checks) + +## CMake integration + +We make use of [`qt5_create_translation`](https://doc.qt.io/qt-5/qtlinguist-cmake-qt5-create-translation.html). This +will call `lupdate` and `lrelease`. + +The ts translation files are stripped of unrelated, unused texts (they contain text for multiple platforms while the +program is compiled for just one), and then packaged into the application (through the Qt resource system; qrc +definition file). + +Regarding Qt resources see [The Qt Resource System](https://doc.qt.io/qt-5/resources.html). + +## Upstream Qt Resources + +- [Qt Linguist Manual: Developers](https://doc.qt.io/qt-5/linguist-programmers.html) +- [Qt Linguist Manual](https://doc.qt.io/qt-5/qtlinguist-index.html) +- [Writing Source Code for Translation](https://doc.qt.io/qt-5/i18n-source-translation.html) +- [Qt Linguist Manual: Text ID Based Translations](https://doc.qt.io/qt-5/linguist-id-based-i18n.html) +- [Qt Linguist Manual: Release Manager](https://doc.qt.io/qt-5/linguist-manager.html) +- [Qt Linguist Manual: Translators](https://doc.qt.io/qt-5/linguist-translators.html) + +- [Weblate supported formats](https://docs.weblate.org/en/latest/formats.html#formats) +- [Weblate Qt ts file support](https://docs.weblate.org/en/latest/formats.html#qt-linguist-ts) +- [Weblate bilingual and monolingual formats](https://docs.weblate.org/en/latest/formats.html#bimono) +- [Weblate Translation types capabilities](https://docs.weblate.org/en/latest/formats.html#translation-types-capabilities) diff --git a/hugo/content/documentation/html-and-css.md b/hugo/content/documentation/html-and-css.md index 54ef3102..af917abb 100644 --- a/hugo/content/documentation/html-and-css.md +++ b/hugo/content/documentation/html-and-css.md @@ -1,12 +1,13 @@ ---- -title: "HTML and CSS in Mumble" ---- -HTML and CSS can be used for rich text markup, formatting, and styling in Mumble's rich text fields: - -* The welcome message of a server (server setting `welcometext`) -* User comments -* Channel descriptions -* Text messages - -Mumble uses Qt rich text controls. -The subset of allowed and interpreted HTML and CSS declarations can be found in the [Qt documentation *Supported HTML Subset*](https://doc.qt.io/qt-5/richtext-html-subset.html). +--- +title: "HTML and CSS in Mumble" +--- + +HTML and CSS can be used for rich text markup, formatting, and styling in Mumble's rich text fields: + +- The welcome message of a server (server setting `welcometext`) +- User comments +- Channel descriptions +- Text messages + +Mumble uses Qt rich text controls. The subset of allowed and interpreted HTML and CSS declarations can be found in the +[Qt documentation _Supported HTML Subset_](https://doc.qt.io/qt-5/richtext-html-subset.html). diff --git a/hugo/content/documentation/mumble-server/_index.md b/hugo/content/documentation/mumble-server/_index.md index 1761bd49..9f159bb1 100644 --- a/hugo/content/documentation/mumble-server/_index.md +++ b/hugo/content/documentation/mumble-server/_index.md @@ -1,3 +1,3 @@ ---- -title: "Mumble Server Documentation" ---- +--- +title: "Mumble Server Documentation" +--- diff --git a/hugo/content/documentation/mumble-server/scripting/_index.md b/hugo/content/documentation/mumble-server/scripting/_index.md index ff45cd0b..0cd5c0d4 100644 --- a/hugo/content/documentation/mumble-server/scripting/_index.md +++ b/hugo/content/documentation/mumble-server/scripting/_index.md @@ -1,24 +1,27 @@ ---- -title: Mumble Server Scripting -date: 2019-10-27 ---- -The Mumble Server can listen to commands from other applications to allow scripting specific actions and functionality on triggers. - -For example: - -* {{< wiki "3rd_Party_Applications#Authenticators" "Authenticators" />}} can be used to authenticate connecting users through an existing database (for example Active Directory, a Forum Database, Website Database, etc) -* Context Menu extensions can provide additional context menu (right click) actions to users -* Adjust user state -* Channel Viewers (online users) - * Connected directly - * Making use of {{< wiki "Channel Viewer Protocol" "Channel Viewer Protocol" />}} provider -* Management of server, user or database state, for example with webinterface/website - -Different technologies can be used for scripting. Ice is the most stable and complete one. - -| Technology | State | Documentation | -|---|---|---| -| Ice | Stable | [Ice Scripting]({{< relref "ice" >}}), [Slice Types Docs](/documentation/slice/) | -| CLI | Stable | {{< wiki "RPC subcommand" />}} | -| DBus | Obsolete, Incomplete | {{}} | -| GRPC | Unreleased, Buildable, Incomplete | {{< wiki GRPC />}} | +--- +title: Mumble Server Scripting +date: 2019-10-27 +--- + +The Mumble Server can listen to commands from other applications to allow scripting specific actions and functionality +on triggers. + +For example: + +- {{< wiki "3rd_Party_Applications#Authenticators" "Authenticators" />}} can be used to authenticate connecting users + through an existing database (for example Active Directory, a Forum Database, Website Database, etc) +- Context Menu extensions can provide additional context menu (right click) actions to users +- Adjust user state +- Channel Viewers (online users) + - Connected directly + - Making use of {{< wiki "Channel Viewer Protocol" "Channel Viewer Protocol" />}} provider +- Management of server, user or database state, for example with webinterface/website + +Different technologies can be used for scripting. Ice is the most stable and complete one. + +| Technology | State | Documentation | +| ----------------------------------------------- | --------------------------------- | -------------------------------------------------------------------------------- | +| Ice | Stable | [Ice Scripting]({{< relref "ice" >}}), [Slice Types Docs](/documentation/slice/) | +| CLI | Stable | {{< wiki "RPC subcommand" />}} | +| DBus | Obsolete, Incomplete | {{}} | +| GRPC | Unreleased, Buildable, Incomplete | {{< wiki GRPC />}} | diff --git a/hugo/content/documentation/mumble-server/scripting/ice/_index.md b/hugo/content/documentation/mumble-server/scripting/ice/_index.md index 23d0d2e4..65921281 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/_index.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/_index.md @@ -1,21 +1,29 @@ ---- -title: Mumble Server Scripting with Ice -date: 2019-10-27 ---- -The Mumble Server supports remote scripting using the [ZeroC Ice](https://zeroc.com/products/ice) RPC protocol and framework. - -There are bindings (libraries) for C++, Java, .NET, Python, PHP and Ruby, and this is supported on all our platforms (Win32, Linux and OSX). Ice works locally and also over a network. This means you can create a web application that interfaces with a Murmur process running on the same or other machines. - -Note that after you have ICE set up on your machine, you can install a {{< wiki "3rd_Party_Applications#Web-Interfaces" "web interface" />}}. - -## Developing for the Murmur Ice interface - -How to use Ice differs from language to language. The parameters and method names will remain the same, but the syntax will naturally be different. Murmur will, by default, open up an adapter on port `6502` (or `10000` for homedir installs), which has a single accessible object named `Meta`. This is the Meta server, and from it you can retrieve adapters for any configured server. (One server process can run multiple Mumble servers.) - -The ice interface is fully documented, and you can browse the [generated documentation](/documentation/slice/). - -Further detailed, feature and language specific documentation is available in subpages. - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Mumble Server Scripting with Ice +date: 2019-10-27 +--- + +The Mumble Server supports remote scripting using the [ZeroC Ice](https://zeroc.com/products/ice) RPC protocol and +framework. + +There are bindings (libraries) for C++, Java, .NET, Python, PHP and Ruby, and this is supported on all our platforms +(Win32, Linux and OSX). Ice works locally and also over a network. This means you can create a web application that +interfaces with a Murmur process running on the same or other machines. + +Note that after you have ICE set up on your machine, you can install a +{{< wiki "3rd_Party_Applications#Web-Interfaces" "web interface" />}}. + +## Developing for the Murmur Ice interface + +How to use Ice differs from language to language. The parameters and method names will remain the same, but the syntax +will naturally be different. Murmur will, by default, open up an adapter on port `6502` (or `10000` for homedir +installs), which has a single accessible object named `Meta`. This is the Meta server, and from it you can retrieve +adapters for any configured server. (One server process can run multiple Mumble servers.) + +The ice interface is fully documented, and you can browse the [generated documentation](/documentation/slice/). + +Further detailed, feature and language specific documentation is available in subpages. + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/mumble-server/scripting/ice/compiling.md b/hugo/content/documentation/mumble-server/scripting/ice/compiling.md index b025deb2..da9b2c0a 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/compiling.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/compiling.md @@ -1,89 +1,95 @@ ---- -title: Compiling Ice -date: 2019-10-27 -weight: 10 ---- -On some platforms there are no officially supported binaries available. In that case you will either have to change your platform or compile Ice yourself. - -## Building Ice on Redhat/CentOS machines - -**Note: 3.3.1 is no longer the current version of Ice. Feel free to try this guide with the new version and update it if it works, or fix it if it does not.** - -### 1. Download and unpack ICE - -```bash -wget http://www.zeroc.com/download/Ice/3.3/Ice-3.3.1.tar.gz -tar -xzf Ice-3.3.1.tar.gz -``` - -### 2. Compile the ICE CPP bindings - -(these are required for all other bindings) - -You will need `mcpp-devel` from the Zeroc website installed to compile. - - Ctrl-F and look for `mcpp-devel`. There is a big package of various Ice RPMs to download. You will install a few dependencies, along with the `mcpp-devel package`. - -```bash -cd Ice-3.3.1/cpp -make -``` - -(wait 20 minutes) - -```bash -sudo make install -``` - -### 3. Compile and install the Ice bindings for your preferred language - -For example, to install Ruby bindings: - -```bash -cd ../rb -make -sudo make install -``` - -### 4. Export the paths for your newly-installed libraries - -These will be different for each language - check the `INSTALL` or `README` files in each language’s subdirectory for exact instructions. - -For Ruby: - -```bash -export RUBYLIB=/opt/Ice-3.3.1/ruby:$RUBYLIB -export LD_LIBRARY_PATH=/opt/Ice-3.3.1/lib:LD_LIBRARY_PATH -``` - -If you don't want to always have to keep running those export lines, also add them to your ~/.bashrc: - -```bash -export RUBYLIB=/opt/Ice-3.3.1/ruby:$RUBYLIB -export LD_LIBRARY_PATH=/opt/Ice-3.3.1/lib:LD_LIBRARY_PATH -``` - -### Verifying - -At this point, Ice should be available to your language (in this case, Ruby): - -```bash -$ irb -irb(main):001:0> require 'Ice' -=> true -``` - -### Generate the Slice file for your language - -To generate it for ruby, we use the `slice2rb` program, which is in the `Ice/cpp/bin` directory. Similar binaries for your language of choice will be there, too. - -```bash -wget -O Murmur.ice "https://raw.github.com/mumble-voip/mumble/master/src/murmur/Murmur.ice" -../cpp/bin/slice2rb Murmur.ice -cp Murmur.rb #{MANAGER_ROOT}/vendor/ice -``` - -Congratulations! Ice should be set up and fully functional. - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Compiling Ice +date: 2019-10-27 +weight: 10 +--- + +On some platforms there are no officially supported binaries available. In that case you will either have to change your +platform or compile Ice yourself. + +## Building Ice on Redhat/CentOS machines + +**Note: 3.3.1 is no longer the current version of Ice. Feel free to try this guide with the new version and update it if +it works, or fix it if it does not.** + +### 1. Download and unpack ICE + +```bash +wget http://www.zeroc.com/download/Ice/3.3/Ice-3.3.1.tar.gz +tar -xzf Ice-3.3.1.tar.gz +``` + +### 2. Compile the ICE CPP bindings + +(these are required for all other bindings) + +You will need `mcpp-devel` from the Zeroc website installed to compile. - Ctrl-F +and look for `mcpp-devel`. There is a big package of various Ice RPMs to download. You will install a few dependencies, +along with the `mcpp-devel package`. + +```bash +cd Ice-3.3.1/cpp +make +``` + +(wait 20 minutes) + +```bash +sudo make install +``` + +### 3. Compile and install the Ice bindings for your preferred language + +For example, to install Ruby bindings: + +```bash +cd ../rb +make +sudo make install +``` + +### 4. Export the paths for your newly-installed libraries + +These will be different for each language - check the `INSTALL` or `README` files in each language’s subdirectory for +exact instructions. + +For Ruby: + +```bash +export RUBYLIB=/opt/Ice-3.3.1/ruby:$RUBYLIB +export LD_LIBRARY_PATH=/opt/Ice-3.3.1/lib:LD_LIBRARY_PATH +``` + +If you don't want to always have to keep running those export lines, also add them to your ~/.bashrc: + +```bash +export RUBYLIB=/opt/Ice-3.3.1/ruby:$RUBYLIB +export LD_LIBRARY_PATH=/opt/Ice-3.3.1/lib:LD_LIBRARY_PATH +``` + +### Verifying + +At this point, Ice should be available to your language (in this case, Ruby): + +```bash +$ irb +irb(main):001:0> require 'Ice' +=> true +``` + +### Generate the Slice file for your language + +To generate it for ruby, we use the `slice2rb` program, which is in the `Ice/cpp/bin` directory. Similar binaries for +your language of choice will be there, too. + +```bash +wget -O Murmur.ice "https://raw.github.com/mumble-voip/mumble/master/src/murmur/Murmur.ice" +../cpp/bin/slice2rb Murmur.ice +cp Murmur.rb #{MANAGER_ROOT}/vendor/ice +``` + +Congratulations! Ice should be set up and fully functional. + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/mumble-server/scripting/ice/glacier2.md b/hugo/content/documentation/mumble-server/scripting/ice/glacier2.md index e2b15e00..48f275d1 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/glacier2.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/glacier2.md @@ -1,88 +1,100 @@ ---- -title: Using Glacier2 with Ice -date: 2019-10-27 -weight: 100 ---- -**NOTE: Since Mumble 1.2.2 you can set `icesecretread` and `icesecretwrite` in your server configuration and use it as a password. This is a lot easier to set up and use than Glacier2.** - -**Glacier2** is a Ice **routing and firewall utility**, and allows you to securely run the server on one machine and murmur on another. Note that if both server and client are on a secure LAN, you can just use `iptables` to protect the Ice port, which is a lot easier than setting up Glacier2. - -The examples here assume that `1.2.3.4` is the public IP address of the server running Murmur. We're going to use the username `magic` with the password `pink`. - -## Configuring Glacier2 - -Create a config file called `config.glacier2` and put the following in it: - -```ini -Glacier2.Client.Endpoints=tcp -h 1.2.3.4 -p 4063 -Glacier2.SessionTimeout=60 -Glacier2.CryptPasswords=passwords.txt -``` - -Your endpoint host should be the public IP that you are running Glacier on. If you don't specify a client via `-h`, then Glacier will bind to all listening interfaces. - -Then, create a password hash using the OpenSSL utility. - -```bash -openssl passwd pink -``` - -this will spit out a hash, which looks something like `CTThafhdv9Lz2` - -Create a file called `passwords.txt` containing: - -```bash -magic CTThafhdv9Lz2 -``` - -Start glacier2 as this: - -```bash -glacier2router --Ice.Config=config.glacier2 -``` - -You will need to have Ice installed ([download](https://zeroc.com/downloads/ice)). `glacier2router` is a binary that is located in `/bin/glacier2router.exe`. - -## Configuring Murmur - -There is nothing to do in murmur. Seriously. Leave the default setting of binding to `127.0.0.1` alone. - -## Configuring Client (PHP) - -This is where it starts getting slightly ugly. Note that this requires Ice >= 3.3.1, as Ice 3.3.0 has a bug in it which prevents this from working. The following is the adaptation necessary to `weblist.php` to get it to work: - -```php -try { - $router = $ICE->stringToProxy("Glacier2/router:tcp -p 4063 -h 1.2.3.4"); - $router = $router->ice_uncheckedCast("::Glacier2::Router")->ice_router(null); - $session = $router->createSession("magic", "pink"); - $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502")->ice_router($router); - $meta = $base->ice_checkedCast("::Murmur::Meta")->ice_router($router); - … -``` - -For each object you get a proxy to (including the return from `$meta->getServer`), you need to add `->ice_router($router)` - -## Configuring Client (Ruby) - -There is a set of classes for easily working with Ice directly and through Glacier [available at GitHub](https://github.com/cheald/murmur-manager/tree/master/interfaces/). However, if you want to do it manually, it’s not too hard. - -```ini -glacierHost = "example.com" -glacierPort = 1234 -user = "glacieruser" -pass = "glacierpass" -server_id = 1 - -prx = ic.stringToProxy("Glacier2/router:tcp -h #{glacierHost} -p #{glacierPort}") -router = ::Glacier2::RouterPrx::uncheckedCast(prx).ice_router(nil) -router.createSession(user, pass) -meta = Murmur::MetaPrx::checkedCast(ic.stringToProxy("Meta:tcp -h #{host} -p #{port}")).ice_router(router) -server = meta.getServer(server_id).ice_router(router) -``` - -For each object you get a proxy to (including the return from `Murmur::MetaPrx::getServer`), you need to add `#ice_router(router)`. - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Using Glacier2 with Ice +date: 2019-10-27 +weight: 100 +--- + +**NOTE: Since Mumble 1.2.2 you can set `icesecretread` and `icesecretwrite` in your server configuration and use it as a +password. This is a lot easier to set up and use than Glacier2.** + +**Glacier2** is a Ice **routing and firewall utility**, and allows you to securely run the server on one machine and +murmur on another. Note that if both server and client are on a secure LAN, you can just use `iptables` to protect the +Ice port, which is a lot easier than setting up Glacier2. + +The examples here assume that `1.2.3.4` is the public IP address of the server running Murmur. We're going to use the +username `magic` with the password `pink`. + +## Configuring Glacier2 + +Create a config file called `config.glacier2` and put the following in it: + +```ini +Glacier2.Client.Endpoints=tcp -h 1.2.3.4 -p 4063 +Glacier2.SessionTimeout=60 +Glacier2.CryptPasswords=passwords.txt +``` + +Your endpoint host should be the public IP that you are running Glacier on. If you don't specify a client via `-h`, then +Glacier will bind to all listening interfaces. + +Then, create a password hash using the OpenSSL utility. + +```bash +openssl passwd pink +``` + +this will spit out a hash, which looks something like `CTThafhdv9Lz2` + +Create a file called `passwords.txt` containing: + +```bash +magic CTThafhdv9Lz2 +``` + +Start glacier2 as this: + +```bash +glacier2router --Ice.Config=config.glacier2 +``` + +You will need to have Ice installed ([download](https://zeroc.com/downloads/ice)). `glacier2router` is a binary that is +located in `/bin/glacier2router.exe`. + +## Configuring Murmur + +There is nothing to do in murmur. Seriously. Leave the default setting of binding to `127.0.0.1` alone. + +## Configuring Client (PHP) + +This is where it starts getting slightly ugly. Note that this requires Ice >= 3.3.1, as Ice 3.3.0 has a bug in it which +prevents this from working. The following is the adaptation necessary to `weblist.php` to get it to work: + +```php +try { + $router = $ICE->stringToProxy("Glacier2/router:tcp -p 4063 -h 1.2.3.4"); + $router = $router->ice_uncheckedCast("::Glacier2::Router")->ice_router(null); + $session = $router->createSession("magic", "pink"); + $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502")->ice_router($router); + $meta = $base->ice_checkedCast("::Murmur::Meta")->ice_router($router); + … +``` + +For each object you get a proxy to (including the return from `$meta->getServer`), you need to add +`->ice_router($router)` + +## Configuring Client (Ruby) + +There is a set of classes for easily working with Ice directly and through Glacier +[available at GitHub](https://github.com/cheald/murmur-manager/tree/master/interfaces/). However, if you want to do it +manually, it’s not too hard. + +```ini +glacierHost = "example.com" +glacierPort = 1234 +user = "glacieruser" +pass = "glacierpass" +server_id = 1 + +prx = ic.stringToProxy("Glacier2/router:tcp -h #{glacierHost} -p #{glacierPort}") +router = ::Glacier2::RouterPrx::uncheckedCast(prx).ice_router(nil) +router.createSession(user, pass) +meta = Murmur::MetaPrx::checkedCast(ic.stringToProxy("Meta:tcp -h #{host} -p #{port}")).ice_router(router) +server = meta.getServer(server_id).ice_router(router) +``` + +For each object you get a proxy to (including the return from `Murmur::MetaPrx::getServer`), you need to add +`#ice_router(router)`. + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/mumble-server/scripting/ice/php/_index.md b/hugo/content/documentation/mumble-server/scripting/ice/php/_index.md index 6ec3f927..0ee9ba93 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/php/_index.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/php/_index.md @@ -1,41 +1,46 @@ ---- -title: Mumble Server Ice Scripting with PHP -date: 2019-10-27 -weight: -30 ---- -Setup documentation that you may want to check out prior to this article: [PHP Setup]({{< relref "setup" >}}), [Ice]({{< relref ".." >}}) - -With IcePHP establishing the connection to the interface **differs** between the Ice versions 3.3 and prior and 3.4 and later. - -## Ice <= 3.3 - -There's an example script using the '''Ice 3.3''' approach (defining the ice.slice directive in the PHP settings) included in the source; have a look at `/mumble/blob/1.2.4/scripts/icedemo.php`. - -The establishing, minimum code, is: - -```php -Ice_loadProfile(); -// initialize ice connection -global $ICE; -$base = $ICE->stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502'); -$meta = $base->ice_checkedCast("::Murmur::Meta"); -``` - -## Ice >= 3.4 - -First, you will have to **generate PHP code** from the slice definitions `.ice` file. With Ice >= 3.4 installed, use the `slice2php` executable to generate it. - -For your PHP code, you’ll have to have the Ice.php and other libs (scripts provided by zeroc) in your PHPs include path to include them. - -```php -require_once 'Ice.php'; -require_once 'Murmur.php'; -$ICE = Ice_initialize(); -$meta = Murmur_MetaPrxHelper::checkedCast($ICE->stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502')); -``` - -Where `Murmur.php` is the generated file. - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Mumble Server Ice Scripting with PHP +date: 2019-10-27 +weight: -30 +--- + +Setup documentation that you may want to check out prior to this article: [PHP Setup]({{< relref "setup" >}}), [Ice]({{< relref ".." >}}) + +With IcePHP establishing the connection to the interface **differs** between the Ice versions 3.3 and prior and 3.4 and +later. + +## Ice <= 3.3 + +There's an example script using the '''Ice 3.3''' approach (defining the ice.slice directive in the PHP settings) +included in the source; have a look at `/mumble/blob/1.2.4/scripts/icedemo.php`. + +The establishing, minimum code, is: + +```php +Ice_loadProfile(); +// initialize ice connection +global $ICE; +$base = $ICE->stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502'); +$meta = $base->ice_checkedCast("::Murmur::Meta"); +``` + +## Ice >= 3.4 + +First, you will have to **generate PHP code** from the slice definitions `.ice` file. With Ice >= 3.4 installed, use the +`slice2php` executable to generate it. + +For your PHP code, you’ll have to have the Ice.php and other libs (scripts provided by zeroc) in your PHPs include path +to include them. + +```php +require_once 'Ice.php'; +require_once 'Murmur.php'; +$ICE = Ice_initialize(); +$meta = Murmur_MetaPrxHelper::checkedCast($ICE->stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502')); +``` + +Where `Murmur.php` is the generated file. + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/mumble-server/scripting/ice/php/setup.md b/hugo/content/documentation/mumble-server/scripting/ice/php/setup.md index 989b5187..e651380f 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/php/setup.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/php/setup.md @@ -1,327 +1,352 @@ ---- -title: Mumble Server Ice Scripting with PHP - Setup -date: 2019-10-27 -weight: -10 -license: cc-by-sa 2.5 -basedon: https://wiki.mumble.info/wiki/Ice ---- -Note: This documentation is quite old and may need some verification or updating. - -How to convert Murmur.ice to Murmur.php for Ice >= 3.4.0 : - -## How to setup Ice 3.4 for PHP with Apache on Linux (general) - -If your Linux distribution offers a binary packet for Ice with PHP (usually the name contains Ice and php) you can skip everything but naming the Murmur.ice slice file in the php.ini (see below). If there is no prepared package you'll have to try to find binaries for your system or {{< wiki "Ice#Compiling_Ice" "compile" />}} Ice yourself and add the extension to PHP and tell PHP where to find the Murmur.ice file. - -To add the IcePHP extension to PHP, first check that the file IcePHP.so for linux is in your php extensions folder specified in your php.ini as - -```ini -extension_dir = /usr/lib/php5/extensions -``` - -If it is not, get the corresponding files from [ZeroC's downloads page](http://www.zeroc.com/download.html). - -Then either in your php.ini file or in your `/etc/php.d` or `/etc/php5/conf.d` folder in `ice.ini`, add the line - -```ini -extension=IcePHP.so -``` - -At least the Linux RPMs will do this automatically, so check that you're not doing it a second time. - -Second, you have to tell the PHP parser where to find the slice file. - -Add - -```ini -ice.slice = /path/to/Murmur.ice -``` - -to your `php.ini` or other config file (e.g. `ice.ini`). - -### Troubleshooting - -If you encounter problems, check your Apache log. - -If it tells you the PHP extension was compiled on an older api, you have to compile the IcePHP.so from source. - -Download `Ice-3.4.2.tar.gz` from [ZeroCs downloads page](http://www.zeroc.com/download.html), untar, cd into PHP, as written in the `INSTALL` file export the `ICE_HOME` environment variable pointing to your Ice install dir. If you installed it with an RPM, type - -```bash -export ICE_HOME=/usr -``` - -then `make`, and in the `lib` folder, there will be your `IcePHP.so` file. - -One common error is - -```text -PHP Warning: PHP Startup: skipping dictionary ::Murmur::UserInfoMap - unsupported key type in Unknown on line 0 -``` - -This is caused because the `.ice` file is slightly incompatible with older versions of php-ice. Edit the `Murmur.ice` file and find the following lines - -```ice -/** User information map. - * Older versions of ice-php can't handle enums as keys. If you are using one of these, replace 'UserInfo' with 'byte'. - */ - ``` - -and perform the substitution mentioned. - -## How to Setup Ice for PHP with Apache on Debian/Ubuntu == - -**Note:** For PHP Ice, there are major differences between the Ice versions 3.3 and 3.4. In more detail: 3.3 uses `.ice` definition files while 3.4 uses generated PHP files. - -Thus, depending on the version you are installing, you will have to follow different configuration steps. - -At the moment (2012-05-06) the current Debian stable is `squeeze`, for which the official repositories provide Ice 3.3. For Ubuntu on the other hand, the current stable version 12.04 (LTS) provides Ice 3.4 in its repositories. So make sure you follow the matching instructions. - -### Short, expert version - -* If `php-zeroc-ice` version >= `3.4`: `apt-get install php-zeroc-ice`, then add `/usr/share/Ice-3.4.2/php/lib` to your PHPs include path. -* If `php-zeroc-ice` version <= `3.3`: `apt-get install php-zeroc-ice`, then add the `ice.slice` parameter to with value `/murmur.ice` to your PHPs configuration. - -### Setup - -For the following guide, a set up Apache2 and PHP environment, and a working install of Murmur is assumed. - -#### Step 1 - PHP Ice extension - -First we need to install the Ice library for PHP. Execute the following in a root shell: - -```bash -apt-get update -apt-get install php-zeroc-ice -``` - -#### Step 2 - PHP Setup - -Now we need to tell PHP to load the IcePHP extension. -Open the file ''/etc/php5/apache2/php.ini'' for editing: - -```bash -vim /etc/php5/apache2/php.ini -``` - -OR: - -```bash -nano -w /etc/php5/apache2/php.ini -``` - -Paste the folowing in the dynamic extensions section of the file: - -```ini -extension=IcePHP.so -``` - -#### Step 3 - Reload and Check - -Everything should be set up so let's restart the servers so they load the updated config files. - -Restart your Apache2 daemon: - -```bash -/etc/init.d/apache2 restart -``` - -Make a file named `phpinfo.php` in your web root and paste the following: - -```php - -``` - -Open the page in your browser, you should be greeted with PHP's information page. Search the page for `Ice version` to verify that the `IcePHP` extension has loaded. - -If you don't see `IcePHP`’s version and config info on this page, verify that the file `IcePHP.so` exists in PHP’s `extension_dir` (this will also be in your PHP info page). Once you’re sure that the IcePHP extension has loaded, delete the `phpinfo.php` file for security reasons. - -Now we will take a look in the mumble-server log to see if Murmur's Ice interface is listening: - -```bash -tail -n10 /var/log/mumble-server/mumble-server.log -``` - -If you find a line similar to the following everything is fine and you can now communicate to Murmur via its Ice interface. - -```text -2012-03-24 13:37:11.316 MurmurIce: Endpoint "tcp -h 127.0.0.1 -p 6502" running -``` - -#### Step 4 - Setting up Murmur to provide Ice interface - -Now open the file ''/etc/mumble-server.ini'' for editing: - -```bash -vim /etc/mumble-server.ini -``` - -OR: - -```bash -nano -w /etc/mumble-server.ini -``` - -Comment the following line to disable {{< wiki DBus />}}: - -```ini -#dbus=system -``` - -Uncomment or paste the following line to enable the Ice interface: - -```ini -ice="tcp -h 127.0.0.1 -p 6502" -``` - -Restart your Mumble server: - -```bash -/etc/init.d/mumble-server restart -``` - -After restarting the daemon Murmur will now listen for Ice requests. - -Now you can install and use any of the PHP based [[3rd Party Applications]] compatible with IcePHP version 3.4. - -## How to setup Ice for PHP with XAMPP on Windows - -### Pre Setup - -Download and install the following packages: - -* XAMPP for Windows -* ZeroC Ice - -Now configure and start XAMPP. - -### Create developer environment for Windows - -* Open System in Control Panel -* On the Advanced tab, click Environment Variables -* Add the Ice Path to `%PATH%` - -Select the name `PATH` on user variables and edit. If the name `PATH` does not exist, select new. Enter now the `PATH` to your Ice installation dir. - -For example: `%PROGRAMFILES(x86)%\ZeroC\Ice-3.4.0\bin;%PATH%` - -Now logout from Windows or restart. After reboot check if included Ice in our environment. Open the CMD and try - -```batch -slice2php -``` - -The Output return the `slice2php` help. - -### Configure XAMPP/PHP - -Copy the File php_ice.dll from `\ZeroC\Ice-3.4.0\bin` to `\xampplite\php\ext` - -Edit the `php.ini` in `\xampplite\php` and add - -```ini -extension=php_ice.dll -ice.slice=\Murmur.ice -``` - -Now start XAMPP and check the `phpinfo()`. - -## Using different ice.slice on same host - -Sometimes you run two servers of mumble on the same host and you cannot load two slices with different mumble versions on the same time. - -The solution is to use ICE profiles, that will require extra files and unfortunately modification of scripts that run the default profile. - -Description on Debian etch with apache2, PHP as fcgid and cli. - -### Creating profiles - -* Lets create profile directory (as root/superuser user), I have created mine at - `/etc/php5/ice/` -* Then create directories per profile (it will make life easier later) - `/etc/php5/ice/murmur.1.1.x` - `/etc/php5/ice/murmur.1.2.x` -* To each of the corresponding directory I have placed the `Murmur.ice` file provided with the installs. You will notice that later upgrades will just consist of copying new files (instead of renaming). -* time to make profiles.ini file that ICE will use: `vi /etc/php5/ice/profiles.ini` -* Insert there below code: - -```ini -[Murmur11x] -slice=/etc/php5/ice/murmur.1.1.x/Murmur.ice - -[Murmur12x] -slice=/etc/php5/ice/murmur.1.2.x/Murmur.ice -``` - -This way you got two profiles, first (`Murmur11x`) is loading slice file for older murmur setups, and the other (`Murmurm12x`) loads newer slices. Below example of directory structure: - -```text -/etc/php5/ice -|-- murmur.1.1.x -| `-- Murmur.ice -|-- murmur.1.2.x -| `-- Murmur.ice -`-- profiles.ini -``` - -### `IcePHP.ini` - -* Now time to alter `/etc/php5/cgi/conf.d/IcePHP.ini`, so it will look like this - -```ini -extension = IcePHP.so -ice.profiles=/etc/php5/ice/profiles.ini -``` - -Notice that we are adding ice.profile setting, so that ice knows where to search for profiles. - -Default profile is named `__default__` and you better avoid to make it. - -I got no idea about setting up default ice.slice entry (experience told me to force editing php files anyway, read below) - -#### Changing PHP scripts - -Next alter the source code of the php scripts you use. It consists of just altering the one function that tells ICE to load profile. By default the function is ran without parameter, and it looks like: - -```php -Ice_loadProfile(); -``` - -Now we will tell that function to load specific profile that it was designed for. Below example modifications to load different profiles for given ice profile: -for older mumble: - -```php -Ice_loadProfile('Murmur11x'); // load profile for scripts that talk with murmur 1.1.x -``` - -or for new mumble: - -```php -Ice_loadProfile('Murmur12x'); // load profile for scripts that talk with murmur 1.2.x -``` - -Notice that single quotes are required. - -### Checking out if it works - -Remember to restart apache (your configuration may require it) - -See php/apache error logs when something goes wrong. - -If you get error like `unknown operation getUsers invoked on proxy of type ::Murmur::Server` then it means you use old `Murmur.ice` file. This happens when you try to connect using `Murmur.ice` from version 1.1.x to Murmur server 1.2.x, which require `Murmur.ice` 1.2.x. Update `Murmur.ice` on web server and restart it and then it should work. - -### Further steps - -I suggest you do the same with `/etc/php5/cli/conf.d` file and scripts that you run from console (crontab). - -Altering `php.ini` `error_reporting` is advised to disable generating massive amount of warning messages: - -```ini -error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING -``` - -You can also set up config files for those profile - more info at - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Mumble Server Ice Scripting with PHP - Setup +date: 2019-10-27 +weight: -10 +license: cc-by-sa 2.5 +basedon: https://wiki.mumble.info/wiki/Ice +--- + +Note: This documentation is quite old and may need some verification or updating. + +How to convert Murmur.ice to Murmur.php for Ice >= 3.4.0 : + + +## How to setup Ice 3.4 for PHP with Apache on Linux (general) + +If your Linux distribution offers a binary packet for Ice with PHP (usually the name contains Ice and php) you can skip +everything but naming the Murmur.ice slice file in the php.ini (see below). If there is no prepared package you'll have +to try to find binaries for your system or {{< wiki "Ice#Compiling_Ice" "compile" />}} Ice yourself and add the +extension to PHP and tell PHP where to find the Murmur.ice file. + +To add the IcePHP extension to PHP, first check that the file IcePHP.so for linux is in your php extensions folder +specified in your php.ini as + +```ini +extension_dir = /usr/lib/php5/extensions +``` + +If it is not, get the corresponding files from [ZeroC's downloads page](http://www.zeroc.com/download.html). + +Then either in your php.ini file or in your `/etc/php.d` or `/etc/php5/conf.d` folder in `ice.ini`, add the line + +```ini +extension=IcePHP.so +``` + +At least the Linux RPMs will do this automatically, so check that you're not doing it a second time. + +Second, you have to tell the PHP parser where to find the slice file. + +Add + +```ini +ice.slice = /path/to/Murmur.ice +``` + +to your `php.ini` or other config file (e.g. `ice.ini`). + +### Troubleshooting + +If you encounter problems, check your Apache log. + +If it tells you the PHP extension was compiled on an older api, you have to compile the IcePHP.so from source. + +Download `Ice-3.4.2.tar.gz` from [ZeroCs downloads page](http://www.zeroc.com/download.html), untar, cd into PHP, as +written in the `INSTALL` file export the `ICE_HOME` environment variable pointing to your Ice install dir. If you +installed it with an RPM, type + +```bash +export ICE_HOME=/usr +``` + +then `make`, and in the `lib` folder, there will be your `IcePHP.so` file. + +One common error is + +```text +PHP Warning: PHP Startup: skipping dictionary ::Murmur::UserInfoMap - unsupported key type in Unknown on line 0 +``` + +This is caused because the `.ice` file is slightly incompatible with older versions of php-ice. Edit the `Murmur.ice` +file and find the following lines + +```ice +/** User information map. + * Older versions of ice-php can't handle enums as keys. If you are using one of these, replace 'UserInfo' with 'byte'. + */ +``` + +and perform the substitution mentioned. + +## How to Setup Ice for PHP with Apache on Debian/Ubuntu == + +**Note:** For PHP Ice, there are major differences between the Ice versions 3.3 and 3.4. In more detail: 3.3 uses `.ice` +definition files while 3.4 uses generated PHP files. + +Thus, depending on the version you are installing, you will have to follow different configuration steps. + +At the moment (2012-05-06) the current Debian stable is `squeeze`, for which the official repositories provide Ice 3.3. +For Ubuntu on the other hand, the current stable version 12.04 (LTS) provides Ice 3.4 in its repositories. So make sure +you follow the matching instructions. + +### Short, expert version + +- If `php-zeroc-ice` version >= `3.4`: `apt-get install php-zeroc-ice`, then add `/usr/share/Ice-3.4.2/php/lib` to your + PHPs include path. +- If `php-zeroc-ice` version <= `3.3`: `apt-get install php-zeroc-ice`, then add the `ice.slice` parameter to with value + `/murmur.ice` to your PHPs configuration. + +### Setup + +For the following guide, a set up Apache2 and PHP environment, and a working install of Murmur is assumed. + +#### Step 1 - PHP Ice extension + +First we need to install the Ice library for PHP. Execute the following in a root shell: + +```bash +apt-get update +apt-get install php-zeroc-ice +``` + +#### Step 2 - PHP Setup + +Now we need to tell PHP to load the IcePHP extension. Open the file ''/etc/php5/apache2/php.ini'' for editing: + +```bash +vim /etc/php5/apache2/php.ini +``` + +OR: + +```bash +nano -w /etc/php5/apache2/php.ini +``` + +Paste the folowing in the dynamic extensions section of the file: + +```ini +extension=IcePHP.so +``` + +#### Step 3 - Reload and Check + +Everything should be set up so let's restart the servers so they load the updated config files. + +Restart your Apache2 daemon: + +```bash +/etc/init.d/apache2 restart +``` + +Make a file named `phpinfo.php` in your web root and paste the following: + +```php + +``` + +Open the page in your browser, you should be greeted with PHP's information page. Search the page for `Ice version` to +verify that the `IcePHP` extension has loaded. + +If you don't see `IcePHP`’s version and config info on this page, verify that the file `IcePHP.so` exists in PHP’s +`extension_dir` (this will also be in your PHP info page). Once you’re sure that the IcePHP extension has loaded, delete +the `phpinfo.php` file for security reasons. + +Now we will take a look in the mumble-server log to see if Murmur's Ice interface is listening: + +```bash +tail -n10 /var/log/mumble-server/mumble-server.log +``` + +If you find a line similar to the following everything is fine and you can now communicate to Murmur via its Ice +interface. + +```text +2012-03-24 13:37:11.316 MurmurIce: Endpoint "tcp -h 127.0.0.1 -p 6502" running +``` + +#### Step 4 - Setting up Murmur to provide Ice interface + +Now open the file ''/etc/mumble-server.ini'' for editing: + +```bash +vim /etc/mumble-server.ini +``` + +OR: + +```bash +nano -w /etc/mumble-server.ini +``` + +Comment the following line to disable {{< wiki DBus />}}: + +```ini +#dbus=system +``` + +Uncomment or paste the following line to enable the Ice interface: + +```ini +ice="tcp -h 127.0.0.1 -p 6502" +``` + +Restart your Mumble server: + +```bash +/etc/init.d/mumble-server restart +``` + +After restarting the daemon Murmur will now listen for Ice requests. + +Now you can install and use any of the PHP based [[3rd Party Applications]] compatible with IcePHP version 3.4. + +## How to setup Ice for PHP with XAMPP on Windows + +### Pre Setup + +Download and install the following packages: + +- XAMPP for Windows +- ZeroC Ice + +Now configure and start XAMPP. + +### Create developer environment for Windows + +- Open System in Control Panel +- On the Advanced tab, click Environment Variables +- Add the Ice Path to `%PATH%` + +Select the name `PATH` on user variables and edit. If the name `PATH` does not exist, select new. Enter now the `PATH` +to your Ice installation dir. + +For example: `%PROGRAMFILES(x86)%\ZeroC\Ice-3.4.0\bin;%PATH%` + +Now logout from Windows or restart. After reboot check if included Ice in our environment. Open the CMD and try + +```batch +slice2php +``` + +The Output return the `slice2php` help. + +### Configure XAMPP/PHP + +Copy the File php_ice.dll from `\ZeroC\Ice-3.4.0\bin` to `\xampplite\php\ext` + +Edit the `php.ini` in `\xampplite\php` and add + +```ini +extension=php_ice.dll +ice.slice=\Murmur.ice +``` + +Now start XAMPP and check the `phpinfo()`. + +## Using different ice.slice on same host + +Sometimes you run two servers of mumble on the same host and you cannot load two slices with different mumble versions +on the same time. + +The solution is to use ICE profiles, that will require extra files and unfortunately modification of scripts that run +the default profile. + +Description on Debian etch with apache2, PHP as fcgid and cli. + +### Creating profiles + +- Lets create profile directory (as root/superuser user), I have created mine at `/etc/php5/ice/` +- Then create directories per profile (it will make life easier later) `/etc/php5/ice/murmur.1.1.x` + `/etc/php5/ice/murmur.1.2.x` +- To each of the corresponding directory I have placed the `Murmur.ice` file provided with the installs. You will notice + that later upgrades will just consist of copying new files (instead of renaming). +- time to make profiles.ini file that ICE will use: `vi /etc/php5/ice/profiles.ini` +- Insert there below code: + +```ini +[Murmur11x] +slice=/etc/php5/ice/murmur.1.1.x/Murmur.ice + +[Murmur12x] +slice=/etc/php5/ice/murmur.1.2.x/Murmur.ice +``` + +This way you got two profiles, first (`Murmur11x`) is loading slice file for older murmur setups, and the other +(`Murmurm12x`) loads newer slices. Below example of directory structure: + +```text +/etc/php5/ice +|-- murmur.1.1.x +| `-- Murmur.ice +|-- murmur.1.2.x +| `-- Murmur.ice +`-- profiles.ini +``` + +### `IcePHP.ini` + +- Now time to alter `/etc/php5/cgi/conf.d/IcePHP.ini`, so it will look like this + +```ini +extension = IcePHP.so +ice.profiles=/etc/php5/ice/profiles.ini +``` + +Notice that we are adding ice.profile setting, so that ice knows where to search for profiles. + +Default profile is named `__default__` and you better avoid to make it. + +I got no idea about setting up default ice.slice entry (experience told me to force editing php files anyway, read +below) + +#### Changing PHP scripts + +Next alter the source code of the php scripts you use. It consists of just altering the one function that tells ICE to +load profile. By default the function is ran without parameter, and it looks like: + +```php +Ice_loadProfile(); +``` + +Now we will tell that function to load specific profile that it was designed for. Below example modifications to load +different profiles for given ice profile: for older mumble: + +```php +Ice_loadProfile('Murmur11x'); // load profile for scripts that talk with murmur 1.1.x +``` + +or for new mumble: + +```php +Ice_loadProfile('Murmur12x'); // load profile for scripts that talk with murmur 1.2.x +``` + +Notice that single quotes are required. + +### Checking out if it works + +Remember to restart apache (your configuration may require it) + +See php/apache error logs when something goes wrong. + +If you get error like `unknown operation getUsers invoked on proxy of type ::Murmur::Server` then it means you use old +`Murmur.ice` file. This happens when you try to connect using `Murmur.ice` from version 1.1.x to Murmur server 1.2.x, +which require `Murmur.ice` 1.2.x. Update `Murmur.ice` on web server and restart it and then it should work. + +### Further steps + +I suggest you do the same with `/etc/php5/cli/conf.d` file and scripts that you run from console (crontab). + +Altering `php.ini` `error_reporting` is advised to disable generating massive amount of warning messages: + +```ini +error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING +``` + +You can also set up config files for those profile - more info at + + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/mumble-server/scripting/ice/server-setup.md b/hugo/content/documentation/mumble-server/scripting/ice/server-setup.md index 48c1051d..7732f007 100644 --- a/hugo/content/documentation/mumble-server/scripting/ice/server-setup.md +++ b/hugo/content/documentation/mumble-server/scripting/ice/server-setup.md @@ -1,42 +1,45 @@ ---- -title: Mumble Server Configuration to Enable Ice -date: 2019-10-27 -weight: -100 ---- -To enable the Ice interface in your `murmur.ini` configuration file, we recommend to first disable DBus by commenting out: - -```ini -dbus=session -``` - -Then enable Ice for ''localhost'' on port ''6502'' by adding or uncommenting: - -```ini -ice="tcp -h 127.0.0.1 -p 6502" -``` - -Now restart Murmur so the change takes effect. - -To check if Ice in fact does listen, on UNIX type: - -```bash -netstat -apn | grep 6502 -``` - -and on Windows type: - -```batch -netstat -an -``` - -and look for the process listening on port `6502`. - -If the port is not being listened on, check Murmurs log. It should state enabling ice on startup. If it does not, something of your configuration went wrong. - -```text -MurmurIce: Endpoint "tcp -h 127.0.0.1 -p 6502" running -``` - -{{< aside >}} -This content released under [Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This content is based on {{< wiki Ice />}}. -{{< /aside >}} +--- +title: Mumble Server Configuration to Enable Ice +date: 2019-10-27 +weight: -100 +--- + +To enable the Ice interface in your `murmur.ini` configuration file, we recommend to first disable DBus by commenting +out: + +```ini +dbus=session +``` + +Then enable Ice for ''localhost'' on port ''6502'' by adding or uncommenting: + +```ini +ice="tcp -h 127.0.0.1 -p 6502" +``` + +Now restart Murmur so the change takes effect. + +To check if Ice in fact does listen, on UNIX type: + +```bash +netstat -apn | grep 6502 +``` + +and on Windows type: + +```batch +netstat -an +``` + +and look for the process listening on port `6502`. + +If the port is not being listened on, check Murmurs log. It should state enabling ice on startup. If it does not, +something of your configuration went wrong. + +```text +MurmurIce: Endpoint "tcp -h 127.0.0.1 -p 6502" running +``` + +{{< aside >}} This content released under +[Creative Commons Attribution Share Alike](http://creativecommons.org/licenses/by-sa/2.5/) unless otherwise noted. This +content is based on {{< wiki Ice />}}. {{< /aside >}} diff --git a/hugo/content/documentation/user/_index.md b/hugo/content/documentation/user/_index.md index aeb20561..84e859e3 100644 --- a/hugo/content/documentation/user/_index.md +++ b/hugo/content/documentation/user/_index.md @@ -1,3 +1,3 @@ ---- -title: "Mumble User Documentation" ---- +--- +title: "Mumble User Documentation" +--- diff --git a/hugo/content/documentation/user/audio-settings/index.md b/hugo/content/documentation/user/audio-settings/index.md index 75814c38..02c9e63b 100644 --- a/hugo/content/documentation/user/audio-settings/index.md +++ b/hugo/content/documentation/user/audio-settings/index.md @@ -1,101 +1,143 @@ ---- -title: "Mumble Audio Settings" ---- -The Mumble settings window can be opened through the menu items Configure -> Settings. - -In the settings dialog window the Audio Input and Audio Output sections provide options to customize audio input and output behavior. - -## Audio Input - -![Screenshot of Audio Input Settings](audio-input.png) - -### Interface - -* System: The sound system between the audio device driver and applications. For Windows, this is typically WASAPI. On Linux it may be Pulseaudio. Alternatives can be JACK and ASIO. -* Device: *Default Device* will use the system's currently set default device.\ - Users would typically set the system default device to the one they use. In such cases, there is no need to set a specific device. -* Exclusive: Give Mumble exclusive access to the microphone. This means no other application will be able to use it while Mumble is running. In turn, Mumble will immediately receive all incoming input audio data.\ - For most users, this setting is not necessary and can lead to confusion if other applications can not use a microphone. - -### Transmission - -* Transmit: How Mumble determines which audio to potentially transmit. *(Audio Processing conditions apply; see the respective section)* - * Voice Activity: The user's voice shall be transmitted. Which incoming audio is a voice can be determined through an *amplitude* (loudness) or *Signal to Noise ratio* approach. - * Push To Talk: Transmit through explicit key presses.\ - Most users will use a "transmit while holding the talk key" approach. If enabled, a double press can keep transmission active until canceled. The hold time can extend how long transmission remains active when you let go of the press. - * Continuous: Incoming input audio will always be transmitted.\ - Most users will not want to use this mode. Continuous would often transmit background noise, speaker audio output, or other unintended sound and voice/talk. - -### Compression - -The compression settings allow you to influence the weighing between audible audio quality, latency, and bandwidth use. - -* Quality: kb/s to use - higher means higher audio quality - not necessarily audible in not-low ranges -* Audio per packet: The physical continuous audio is packaged into transferred packages of this size. Lower means lower delay at the cost of bandwidth use. Higher means higher delays but lowered bandwidth use.\ - Note that some audio device drivers have issues with very small 10 ms audio packets. Using 20 ms gives a very low delay without the risk of audible audio device driver issues. See also Audio Output Jitter Buffer setting. -* Allow low delay mode: This only applies to audio with Quality 64 kb/s or higher. This is an Opus audio codec setting. Reduces latency by ~15 ms. May require higher Quality bitrate to preserve the same audio quality. - -### Audio Processing - -* Maximum Amplification: If your microphone input volume is too low Mumble amplifies it in an attempt to volume normalization (so others can hear you clearly). See the extended help for more information (? in Window and click, or when focused SHIFT+F1). -* Echo Cancellation: Attempt to identify when others talking is picked up through the Microphone again. (Echo is common with a speaker setup. Not so much with headphones, although bad insulation with close proximity of the microphone vs output cables can lead to echo.) - * Disabled: Do not use echo cancellation - * Mixed: Mixed has low CPU impact, but only works well if the speakers are equally loud - when you sit/your microphone in the center of multiple speakers. - * Multichannel: Much better echo cancellation than *Mixed* at the cost of CPU usage. -* Noise Suppression: Attempt to identify noise / background noise and filter it out. - * Disabled - * Speex: Algorithm approach, provided by Speex / the Speex codec. - * RNNoise: Recurrent neural network for audio noise reduction *([GitHub project reference](https://github.com/xiph/rnnoise), [Mozilla Research announcement](https://hacks.mozilla.org/2017/09/rnnoise-deep-learning-noise-suppression/))* - * Both - -### Misc - -* Audio cue: Use sounds - default or your own selection - to indicate that audio transmission becomes active or inactive.\ - When using push-to-talk lack of sound cues can help you notice when you intend to talk but are muted.\ - When using voice activation the lack of sound cues can help you notice being muted or voice activation levels not identifying correctly when you talk (due to different microphone or head position or settings that need adjustments for quite voice etc). -* Mute cue: Play a sound when Mumble would transmit audio (push-to-talk or voice activation) but you are currently muted. -* Idle action: Automatically mute or deafen yourself when inactive for a specified amount of time. - -## Audio Output - -![Screenshot of Audio Output Settings](audio-output.png) - -### Interface - -* System: The sound system between the audio device driver and applications. For Windows, this is typically WASAPI. On Linux it may be Pulseaudio. Alternatives can be JACK and ASIO. -* Device: *Default Device* will use the system's currently set default device.\ - Users would typically set the system default device to the one they use. In such cases, there is no need to set a specific device. -* Exclusive: Give Mumble exclusive access to the audio device. This means no other application will be able to use it while Mumble is running. In turn, audio Mumble puts out will immediately be passed on by the audio system.\ - For most users, this setting is not necessary and can lead to confusion if other applications can not use the audio device. - -### Audio Output - -* Default Jitter Buffer: Before playback collect this amount of incoming audio to reduce jittery audio. Lower reduces latency. If you hear audible jitter when people start talking then increase this value. -* Volume: Output Volume: Most users will use their OS / sound system volume settings to adjust volume - even for individual applications. Otherwise, this setting can be used to adjust Mumbles output volume. -* Output Delay: Amount of audio time to buffer before output. Lower reduces latency. Too low (for the audio driver or device) may cause audible rapid jittering. If that is the case, increase it. - -### Attenuation - -With attenuation, Mumble can adjust the volume of other applications while you or others or Priority Speakers talk.\ -This is intended to reduce noise being picked up while you talk, and you being able to hear others talking better over other audio playback. - -### Positional Audio - -When enabled and when in-game with others, [Positional Audio]({{< relref "/documentation/user/positional-audio" >}}) allows you to hear them from the direction and distance they are in in-game. - -When people stand right next to you will hear them at full volume. The bloom setting defines how much directional audio blooms into other directions. If they stand to your right, the bloom will make it so you also hear a bit of them to your left. (Which makes sense when they are very close.) - -Through minimum and maximum distance you can configure how the volume behaves relative to distance. People closer than the minimum distance are full volume. People at maximum distance are at minimum volume. - -Most users will want a minimum volume so they can hear people talking even if they are far away in the game world. Setting the minimum volume to 0 % means you will not hear them when they are farther than the maximum distance away. - -## Loopback Test - -Used for testing. - -* Local: Audio input that would be transmitted to others is played back to you locally. Useful for testing and verifying input and output settings. (Can you hear yourself? Is the volume fine?) -* Server: Audio input that would be transmitted to others is sent to the server and back. With *Local* verified, useful for testing networking. (Are my network packets being lost? Between me and the server?) - -When you verified both Local and Server loopbacks work fine for you, others not hearing you must be on them (or an advanced permission system). - -As an additional note: Others light up when you receive their audio data. This can be a useful indicator of whether data is received fine. +--- +title: "Mumble Audio Settings" +--- + +The Mumble settings window can be opened through the menu items Configure -> Settings. + +In the settings dialog window the Audio Input and Audio Output sections provide options to customize audio input and +output behavior. + +## Audio Input + +![Screenshot of Audio Input Settings](audio-input.png) + +### Interface + +- System: The sound system between the audio device driver and applications. For Windows, this is typically WASAPI. On + Linux it may be Pulseaudio. Alternatives can be JACK and ASIO. +- Device: _Default Device_ will use the system's currently set default device.\ + Users would typically set the system default device to the one they use. In such cases, there is no need to set a + specific device. +- Exclusive: Give Mumble exclusive access to the microphone. This means no other application will be able to use it + while Mumble is running. In turn, Mumble will immediately receive all incoming input audio data.\ + For most users, this setting is not necessary and can lead to confusion if other applications can not use a + microphone. + +### Transmission + +- Transmit: How Mumble determines which audio to potentially transmit. _(Audio Processing conditions apply; see the + respective section)_ + - Voice Activity: The user's voice shall be transmitted. Which incoming audio is a voice can be determined through an + _amplitude_ (loudness) or _Signal to Noise ratio_ approach. + - Push To Talk: Transmit through explicit key presses.\ + Most users will use a "transmit while holding the talk key" approach. If enabled, a double press can keep + transmission active until canceled. The hold time can extend how long transmission remains active when you let go of + the press. + - Continuous: Incoming input audio will always be transmitted.\ + Most users will not want to use this mode. Continuous would often transmit background noise, speaker audio output, + or other unintended sound and voice/talk. + +### Compression + +The compression settings allow you to influence the weighing between audible audio quality, latency, and bandwidth use. + +- Quality: kb/s to use - higher means higher audio quality - not necessarily audible in not-low ranges +- Audio per packet: The physical continuous audio is packaged into transferred packages of this size. Lower means lower + delay at the cost of bandwidth use. Higher means higher delays but lowered bandwidth use.\ + Note that some audio device drivers have issues with very small 10 ms audio packets. Using 20 ms gives a very low + delay without the risk of audible audio device driver issues. See also Audio Output Jitter Buffer setting. +- Allow low delay mode: This only applies to audio with Quality 64 kb/s or higher. This is an Opus audio codec setting. + Reduces latency by ~15 ms. May require higher Quality bitrate to preserve the same audio quality. + +### Audio Processing + +- Maximum Amplification: If your microphone input volume is too low Mumble amplifies it in an attempt to volume + normalization (so others can hear you clearly). See the extended help for more information (? in Window and click, or + when focused SHIFT+F1). +- Echo Cancellation: Attempt to identify when others talking is picked up through the Microphone again. (Echo is common + with a speaker setup. Not so much with headphones, although bad insulation with close proximity of the microphone vs + output cables can lead to echo.) + - Disabled: Do not use echo cancellation + - Mixed: Mixed has low CPU impact, but only works well if the speakers are equally loud - when you sit/your microphone + in the center of multiple speakers. + - Multichannel: Much better echo cancellation than _Mixed_ at the cost of CPU usage. +- Noise Suppression: Attempt to identify noise / background noise and filter it out. + - Disabled + - Speex: Algorithm approach, provided by Speex / the Speex codec. + - RNNoise: Recurrent neural network for audio noise reduction + _([GitHub project reference](https://github.com/xiph/rnnoise), + [Mozilla Research announcement](https://hacks.mozilla.org/2017/09/rnnoise-deep-learning-noise-suppression/))_ + - Both + +### Misc + +- Audio cue: Use sounds - default or your own selection - to indicate that audio transmission becomes active or + inactive.\ + When using push-to-talk lack of sound cues can help you notice when you intend to talk but are muted.\ + When using voice activation the lack of sound cues can help you notice being muted or voice activation levels not + identifying correctly when you talk (due to different microphone or head position or settings that need adjustments + for quite voice etc). +- Mute cue: Play a sound when Mumble would transmit audio (push-to-talk or voice activation) but you are currently + muted. +- Idle action: Automatically mute or deafen yourself when inactive for a specified amount of time. + +## Audio Output + +![Screenshot of Audio Output Settings](audio-output.png) + +### Interface + +- System: The sound system between the audio device driver and applications. For Windows, this is typically WASAPI. On + Linux it may be Pulseaudio. Alternatives can be JACK and ASIO. +- Device: _Default Device_ will use the system's currently set default device.\ + Users would typically set the system default device to the one they use. In such cases, there is no need to set a + specific device. +- Exclusive: Give Mumble exclusive access to the audio device. This means no other application will be able to use it + while Mumble is running. In turn, audio Mumble puts out will immediately be passed on by the audio system.\ + For most users, this setting is not necessary and can lead to confusion if other applications can not use the audio + device. + +### Audio Output + +- Default Jitter Buffer: Before playback collect this amount of incoming audio to reduce jittery audio. Lower reduces + latency. If you hear audible jitter when people start talking then increase this value. +- Volume: Output Volume: Most users will use their OS / sound system volume settings to adjust volume - even for + individual applications. Otherwise, this setting can be used to adjust Mumbles output volume. +- Output Delay: Amount of audio time to buffer before output. Lower reduces latency. Too low (for the audio driver or + device) may cause audible rapid jittering. If that is the case, increase it. + +### Attenuation + +With attenuation, Mumble can adjust the volume of other applications while you or others or Priority Speakers talk.\ +This is intended to reduce noise being picked up while you talk, and you being able to hear others talking better over +other audio playback. + +### Positional Audio + +When enabled and when in-game with others, [Positional Audio]({{< relref "/documentation/user/positional-audio" >}}) allows +you to hear them from the direction and distance they are in in-game. + +When people stand right next to you will hear them at full volume. The bloom setting defines how much directional audio +blooms into other directions. If they stand to your right, the bloom will make it so you also hear a bit of them to your +left. (Which makes sense when they are very close.) + +Through minimum and maximum distance you can configure how the volume behaves relative to distance. People closer than +the minimum distance are full volume. People at maximum distance are at minimum volume. + +Most users will want a minimum volume so they can hear people talking even if they are far away in the game world. +Setting the minimum volume to 0 % means you will not hear them when they are farther than the maximum distance away. + +## Loopback Test + +Used for testing. + +- Local: Audio input that would be transmitted to others is played back to you locally. Useful for testing and verifying + input and output settings. (Can you hear yourself? Is the volume fine?) +- Server: Audio input that would be transmitted to others is sent to the server and back. With _Local_ verified, useful + for testing networking. (Are my network packets being lost? Between me and the server?) + +When you verified both Local and Server loopbacks work fine for you, others not hearing you must be on them (or an +advanced permission system). + +As an additional note: Others light up when you receive their audio data. This can be a useful indicator of whether data +is received fine. diff --git a/hugo/content/documentation/user/in-game-overlay/_index.md b/hugo/content/documentation/user/in-game-overlay/_index.md index 569135f2..cbb89685 100644 --- a/hugo/content/documentation/user/in-game-overlay/_index.md +++ b/hugo/content/documentation/user/in-game-overlay/_index.md @@ -1,80 +1,85 @@ ---- -title: "Mumble in-game Overlay Documentation" ---- -Mumble overlay screenshot - -Mumble can show information within rendered applications; most notably videogames which are typically used with full screen rendering. - -Mumble can show connected and/or talking voice participants as well as current FPS and/or the clock time. - -The overlay can give users feedback about who is connected or who is talking when the application would otherwise obscure this information. Even if the user has Mumble open on a second monitor, the overlay may be a useful addition as it can be placed freely on the primarily focused on monitor. - -Mumble hooks into 3D rendering technology. On **Windows** it currently **supports Direct3D 9/10/11 and OpenGL**. On **Linux and macOS** it supports **OpenGL**. Both 32- and 64-bit applications are supported. - -## Support Tables - -
- - - - - - - - - - - - - - - -
Windows
x64 (64-bit) Applications
API Support
Vulkan since 1.3.0
OpenGL since 1.3.0
Direct3D 12 does not display
Direct3D 11 since 1.3.0
Direct3D 10 since 1.3.0
Direct3D 9exsince 1.3.0
Direct3D 9 since 1.3.0
- - - - - - - - - - - - - - - -
Windows
x86 (32-bit) Applications
API Support
Vulkan since 1.3.0
OpenGL supported
Direct3D 12 does not display
Direct3D 11 supported
Direct3D 10 supported
Direct3D 9exsupported
Direct3D 9 supported
- - - - - - - - - - -
Linux and macOS
x64 + x86 (64- and 32-bit)
API Support
Vulkan since 1.3.0
OpenGL supported
- -
- -### Incompatible Games - -The following games are known to have issues with the Mumble overlay: - - - - - - - - - - - - - - -
GameLast UpdatedAPICommentsFixed in
Combat Arms unknownoverlay causes CA to crash after map changes; overlay will not display unless one joins a server and then leaves itunknown
Vanguard unknowncrashes to desktop when overlay is enabledunknown
Call of Duty 4 unknownPunkBuster kick playing onlineunknown
Call of Duty 2 unknownPunkBuster kick playing onlineunknown
Killing Floor unknownthe game will crash when changing resolutions or going into fullscreen modeunknown
Red Orchestra unknownthe game will crash when changing resolutions or going into fullscreen modeunknown
H1Z1 unknowngame crashes at startupunknown
+--- +title: "Mumble in-game Overlay Documentation" +--- + +Mumble overlay screenshot + +Mumble can show information within rendered applications; most notably videogames which are typically used with full +screen rendering. + +Mumble can show connected and/or talking voice participants as well as current FPS and/or the clock time. + +The overlay can give users feedback about who is connected or who is talking when the application would otherwise +obscure this information. Even if the user has Mumble open on a second monitor, the overlay may be a useful addition as +it can be placed freely on the primarily focused on monitor. + +Mumble hooks into 3D rendering technology. On **Windows** it currently **supports Direct3D 9/10/11 and OpenGL**. On +**Linux and macOS** it supports **OpenGL**. Both 32- and 64-bit applications are supported. + +## Support Tables + +
+ + + + + + + + + + + + + + + +
Windows
x64 (64-bit) Applications
API Support
Vulkan since 1.3.0
OpenGL since 1.3.0
Direct3D 12 does not display
Direct3D 11 since 1.3.0
Direct3D 10 since 1.3.0
Direct3D 9exsince 1.3.0
Direct3D 9 since 1.3.0
+ + + + + + + + + + + + + + + +
Windows
x86 (32-bit) Applications
API Support
Vulkan since 1.3.0
OpenGL supported
Direct3D 12 does not display
Direct3D 11 supported
Direct3D 10 supported
Direct3D 9exsupported
Direct3D 9 supported
+ + + + + + + + + + +
Linux and macOS
x64 + x86 (64- and 32-bit)
API Support
Vulkan since 1.3.0
OpenGL supported
+ +
+ +### Incompatible Games + +The following games are known to have issues with the Mumble overlay: + + + + + + + + + + + + + + +
GameLast UpdatedAPICommentsFixed in
Combat Arms unknownoverlay causes CA to crash after map changes; overlay will not display unless one joins a server and then leaves itunknown
Vanguard unknowncrashes to desktop when overlay is enabledunknown
Call of Duty 4 unknownPunkBuster kick playing onlineunknown
Call of Duty 2 unknownPunkBuster kick playing onlineunknown
Killing Floor unknownthe game will crash when changing resolutions or going into fullscreen modeunknown
Red Orchestra unknownthe game will crash when changing resolutions or going into fullscreen modeunknown
H1Z1 unknowngame crashes at startupunknown
diff --git a/hugo/content/documentation/user/in-game-overlay/configuration/index.md b/hugo/content/documentation/user/in-game-overlay/configuration/index.md index b7018955..fb9ff772 100644 --- a/hugo/content/documentation/user/in-game-overlay/configuration/index.md +++ b/hugo/content/documentation/user/in-game-overlay/configuration/index.md @@ -1,16 +1,18 @@ ---- -title: "Mumble Overlay Configuration" ---- -The Mumble settings have an Overlay category which allows you to configure how and what the overlay displays as well as in what applications it displays. - -## Configuring in what applications it displays - -The *Overlay Exceptions* define in what applications the overlay will display. - -| Mode | Description | -| --------------- | ----------- | -| Launcher Filter | Supports launchers where child processes will show an overlay (e.g. Steam, Origin, etc. launch a game) | -| Whitelist | Overlay is disabled by default. The specified applications will show the overlay. | -| Blacklist | Overlay is enabled by default (for any applications using rendering). The specified applications will not show the overlay. | -| `nooverlay` file | If a file named `nooverlay` (no file extension) is placed next to an application executable, the overlay will not show. | -| `debugoverlay` file | If a file named `debugoverlay` (no file extension) is placed next to an application executable, the more debug information messages are logged to the debug log. | +--- +title: "Mumble Overlay Configuration" +--- + +The Mumble settings have an Overlay category which allows you to configure how and what the overlay displays as well as +in what applications it displays. + +## Configuring in what applications it displays + +The _Overlay Exceptions_ define in what applications the overlay will display. + +| Mode | Description | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Launcher Filter | Supports launchers where child processes will show an overlay (e.g. Steam, Origin, etc. launch a game) | +| Whitelist | Overlay is disabled by default. The specified applications will show the overlay. | +| Blacklist | Overlay is enabled by default (for any applications using rendering). The specified applications will not show the overlay. | +| `nooverlay` file | If a file named `nooverlay` (no file extension) is placed next to an application executable, the overlay will not show. | +| `debugoverlay` file | If a file named `debugoverlay` (no file extension) is placed next to an application executable, the more debug information messages are logged to the debug log. | diff --git a/hugo/content/documentation/user/in-game-overlay/linux.md b/hugo/content/documentation/user/in-game-overlay/linux.md index e605d56c..4baffc22 100644 --- a/hugo/content/documentation/user/in-game-overlay/linux.md +++ b/hugo/content/documentation/user/in-game-overlay/linux.md @@ -1,14 +1,15 @@ ---- -title: "Mumble Overlay on Linux" ---- -To use the Overlay in an application you start that appliaction through the mumble-overlay binary: - -```bash -mumble-overlay gameexecutable -``` - -The mumble-overlay binary is a utility for an *LD preload* which you can also execute manually: - -```bash -LD_PRELOAD=/path/to/libmumble.so.1.1 gameexecutable -``` +--- +title: "Mumble Overlay on Linux" +--- + +To use the Overlay in an application you start that appliaction through the mumble-overlay binary: + +```bash +mumble-overlay gameexecutable +``` + +The mumble-overlay binary is a utility for an _LD preload_ which you can also execute manually: + +```bash +LD_PRELOAD=/path/to/libmumble.so.1.1 gameexecutable +``` diff --git a/hugo/content/documentation/user/logitech-g-keys/index.md b/hugo/content/documentation/user/logitech-g-keys/index.md index 3346023d..37dc068a 100644 --- a/hugo/content/documentation/user/logitech-g-keys/index.md +++ b/hugo/content/documentation/user/logitech-g-keys/index.md @@ -1,46 +1,49 @@ -+++ -title = "Logitech G-Keys" -+++ -The G-keys available on many Logitech keyboards can be used as keyboard shortcuts in Mumble 1.3.0 and later. - -## First-time setup - -Install the [Logitech Gaming Software (LGS)](http://support.logitech.com/en_ca/software/gaming-software). - -If it is already installed, ensure it is at least version 8.55. - -1\. Launch LGS - -2\. Launch or restart Mumble. - -3\. Open the LGS window - -![Screenshot](Open-lgs.png) - -5\. Open the G-keys view - -Screenshot - -6\. You should see that a "mumble" profile has been created - -Screenshot - -![Screenshot](Mumble-profile-detail.png) - -7\. Right click the mumble profile and select **"Set as Default"** or **"Set as Persistent"**. - -This is required due to limitations of the Logitech G-key API, since it was designed for use only with games in mind. - -*We recommend setting the mumble profile as default.* - -*For more information, see "What are persistent and default profiles?" in the LGS help by clicking on the "?" icon on the LGS window, or in [the online manual (PDF)(page 54)](http://www.logitech.com/assets/51813/3/lgs-guide.pdf).* - -*If mumble is not set as the default or persistent profile, then your keys will not be active unless mumble is the active window.* - -Screenshot - -![Screenshot](Set-as-default-detail.png) - -8\. In Mumble, you should now be able to set G-keys as your shortcut keys - -![Screenshot](Mumble-gkey-shortcuts.png) ++++ +title = "Logitech G-Keys" ++++ + +The G-keys available on many Logitech keyboards can be used as keyboard shortcuts in Mumble 1.3.0 and later. + +## First-time setup + +Install the [Logitech Gaming Software (LGS)](http://support.logitech.com/en_ca/software/gaming-software). + +If it is already installed, ensure it is at least version 8.55. + +1\. Launch LGS + +2\. Launch or restart Mumble. + +3\. Open the LGS window + +![Screenshot](Open-lgs.png) + +5\. Open the G-keys view + +Screenshot + +6\. You should see that a "mumble" profile has been created + +Screenshot + +![Screenshot](Mumble-profile-detail.png) + +7\. Right click the mumble profile and select **"Set as Default"** or **"Set as Persistent"**. + +This is required due to limitations of the Logitech G-key API, since it was designed for use only with games in mind. + +_We recommend setting the mumble profile as default._ + +_For more information, see "What are persistent and default profiles?" in the LGS help by clicking on the "?" icon on +the LGS window, or in [the online manual (PDF)(page 54)](http://www.logitech.com/assets/51813/3/lgs-guide.pdf)._ + +_If mumble is not set as the default or persistent profile, then your keys will not be active unless mumble is the +active window._ + +Screenshot + +![Screenshot](Set-as-default-detail.png) + +8\. In Mumble, you should now be able to set G-keys as your shortcut keys + +![Screenshot](Mumble-gkey-shortcuts.png) diff --git a/hugo/content/documentation/user/macos/overlay-on-macos/index.md b/hugo/content/documentation/user/macos/overlay-on-macos/index.md index 4a5730e7..9fb17b1e 100644 --- a/hugo/content/documentation/user/macos/overlay-on-macos/index.md +++ b/hugo/content/documentation/user/macos/overlay-on-macos/index.md @@ -1,12 +1,14 @@ ---- -title: "Mumble Overlay on macOS" ---- -The Mumble in-game Overlay allows you to see who is talking, the game's FPS, and the current time within videogames. - -Mumble installs on macOS without administrative rights. But the Overlay requires administrative rights to be able to show up within games. Consequently, an additional setup step is necessary. - -To install the Mumble Overlay: - -1. Launch Mumble -2. Open the Settings window and open the Overlay section -3. Install the overlay from here +--- +title: "Mumble Overlay on macOS" +--- + +The Mumble in-game Overlay allows you to see who is talking, the game's FPS, and the current time within videogames. + +Mumble installs on macOS without administrative rights. But the Overlay requires administrative rights to be able to +show up within games. Consequently, an additional setup step is necessary. + +To install the Mumble Overlay: + +1. Launch Mumble +2. Open the Settings window and open the Overlay section +3. Install the overlay from here diff --git a/hugo/content/documentation/user/mumble-url/index.md b/hugo/content/documentation/user/mumble-url/index.md index 32f60e30..60a59b80 100644 --- a/hugo/content/documentation/user/mumble-url/index.md +++ b/hugo/content/documentation/user/mumble-url/index.md @@ -1,95 +1,105 @@ ---- -title: "Mumble URL" ---- -Mumble defines it's own `mumble://` URL scheme to share links to servers and channels and to be able to connect to them directly. - -On Windows the installer will register `mumble://` links to be opened with Mumble. - -Mumble links can be opened on the command line by passing them to mumble.exe too: - -``` -mumble.exe mumble://example.com/ -``` - -or with a channel path: - -``` -mumble.exe mumble://example.com/ChanA/ChanB -``` - -You can get get a URL in the Channel context menu (right click): - -![Screenshot of Mumble channel context menu Copy URL item](screenshot-chan-copy-url.jpg) - -## Connect Behavior - -When opening a Mumble link the Mumble client will connect to the server. - -* If you are already registered you will connect with your account -* If the URL contains a username that username will be used -* If no username is determined, the client will ask with what name you want to connect with - -## URL Format - -``` -mumble://[username[:password]@]
[:port]/[channelpath][?title=][&url=] -``` - -* optional `username` and `password` -* mandatory `address`; a hostname, IPv4, or IPv6 address -* optional `port`; defaults to 64738 -* optional `channelpath`; specifies a channel subtree to join; special characters must be [URL-encoded](https://en.wikipedia.org/wiki/URL_encoding); if the Mumble client can join the server but not the channel it will stay in the default channel -* optional `servername` and `serverurl`; only used if the user drags the link and drops it in the server browser in Mumble for filling the server name and URL - -"Special" non-ASCII characters must be %-encoded. Most utilities should do this for you. For more information see [Wikipedia - URL encoding](https://en.wikipedia.org/wiki/URL_encoding). - -Simple form: - -``` -mumble://
:/ -``` - -Examples: - -``` -mumble://mumble.example.com/ -mumble://172.16.31.199/ -mumble://example.com:23840/ -mumble://172.16.31.199:2000/ -``` - -## Server Password - -A server password can be specified without a username: - -``` -mumble://:mypassword@example.com/ -``` - -## URL Handler Installation - -A manual handler installation should not be necessary for normal users. - -### Linux Gnome - -```bash -gconftool-2 -s -t string /desktop/gnome/url-handlers/mumble/command 'mumble "%s"' -gconftool-2 -s -t bool /desktop/gnome/url-handlers/mumble/enabled true -``` - -If the `mumble` command is not globally accessible through the `PATH` environment variable you must specify the full path to the mumble executable. - -## version parameter - -``` -mumble://mumble.example.com/?version=1.2.0 -``` - -The `version` parameter is only necessary for client installations prior to the long-past Mumble version 1.2.4. -Note that 1.2.0 stands for the protocol and will work for any client and server with higher versions too. - -Mumble 1.2.0 introduced a protocol incompatibility which made it necessary for links to differentiate between a pre-1.2.0 server and a 1.2.0 (and above) server. The linked server would then be opened in the pre-1.2.0 compatibility client or the new client. - -Since version 1.2.4 - released in 2014 - URLs without the `version` attribute are considered to be for the new protocol. - -We do not expect such very old clients or servers to still be in use. We suggest you not include the `version` parameter for simpler URLs. +--- +title: "Mumble URL" +--- + +Mumble defines it's own `mumble://` URL scheme to share links to servers and channels and to be able to connect to them +directly. + +On Windows the installer will register `mumble://` links to be opened with Mumble. + +Mumble links can be opened on the command line by passing them to mumble.exe too: + +``` +mumble.exe mumble://example.com/ +``` + +or with a channel path: + +``` +mumble.exe mumble://example.com/ChanA/ChanB +``` + +You can get get a URL in the Channel context menu (right click): + +![Screenshot of Mumble channel context menu Copy URL item](screenshot-chan-copy-url.jpg) + +## Connect Behavior + +When opening a Mumble link the Mumble client will connect to the server. + +- If you are already registered you will connect with your account +- If the URL contains a username that username will be used +- If no username is determined, the client will ask with what name you want to connect with + +## URL Format + +``` +mumble://[username[:password]@]
[:port]/[channelpath][?title=][&url=] +``` + +- optional `username` and `password` +- mandatory `address`; a hostname, IPv4, or IPv6 address +- optional `port`; defaults to 64738 +- optional `channelpath`; specifies a channel subtree to join; special characters must be + [URL-encoded](https://en.wikipedia.org/wiki/URL_encoding); if the Mumble client can join the server but not the + channel it will stay in the default channel +- optional `servername` and `serverurl`; only used if the user drags the link and drops it in the server browser in + Mumble for filling the server name and URL + +"Special" non-ASCII characters must be %-encoded. Most utilities should do this for you. For more information see +[Wikipedia - URL encoding](https://en.wikipedia.org/wiki/URL_encoding). + +Simple form: + +``` +mumble://
:/ +``` + +Examples: + +``` +mumble://mumble.example.com/ +mumble://172.16.31.199/ +mumble://example.com:23840/ +mumble://172.16.31.199:2000/ +``` + +## Server Password + +A server password can be specified without a username: + +``` +mumble://:mypassword@example.com/ +``` + +## URL Handler Installation + +A manual handler installation should not be necessary for normal users. + +### Linux Gnome + +```bash +gconftool-2 -s -t string /desktop/gnome/url-handlers/mumble/command 'mumble "%s"' +gconftool-2 -s -t bool /desktop/gnome/url-handlers/mumble/enabled true +``` + +If the `mumble` command is not globally accessible through the `PATH` environment variable you must specify the full +path to the mumble executable. + +## version parameter + +``` +mumble://mumble.example.com/?version=1.2.0 +``` + +The `version` parameter is only necessary for client installations prior to the long-past Mumble version 1.2.4. Note +that 1.2.0 stands for the protocol and will work for any client and server with higher versions too. + +Mumble 1.2.0 introduced a protocol incompatibility which made it necessary for links to differentiate between a +pre-1.2.0 server and a 1.2.0 (and above) server. The linked server would then be opened in the pre-1.2.0 compatibility +client or the new client. + +Since version 1.2.4 - released in 2014 - URLs without the `version` attribute are considered to be for the new protocol. + +We do not expect such very old clients or servers to still be in use. We suggest you not include the `version` parameter +for simpler URLs. diff --git a/hugo/content/documentation/user/positional-audio/_index.md b/hugo/content/documentation/user/positional-audio/_index.md index a19e8777..34e7ae6d 100644 --- a/hugo/content/documentation/user/positional-audio/_index.md +++ b/hugo/content/documentation/user/positional-audio/_index.md @@ -1,52 +1,67 @@ ---- -title: "Mumble Positional Audio Documentation" ---- -**Please note that Mumble works with all games as a regular voice chat application.** - -This page documents the positional audio (“PA”) feature specifically, where you hear participating users according to their position in your game world. - -## What is Positional Audio - -Positional Audio is a feature of Mumble that places the people talking to you in a certain position relative to your own depending on their actual position in the game you are playing. This way you can hear the person as if their actual avatar in-game was talking to you. - -Visualization of positional audio - -If someone is NOT using Positional Audio, you hear them normal, not from a specific direction or location. - -If someone uses Positional Audio, and is in the same context (game session) you will hear them from the direction they are in and with varying volume depending on how close they are. - -The variance of the system, like maximum distance you hear people, or minimum volume, can be configured in the Mumble PA settings. - -## How Mumble gets information about the virtual positions of the participants - -Mumble can get the position information and context in two ways: - -1. The Game itself shares context and position information -2. A Mumble plugin is created and installed that reads the game’s memory for context and position information - -Because the second process reads from a games memory, any game update may require updates to the plugin too. How robust the plugin is against new versions and memory layout changes depends on the plugin implementation. - -If a plugin becomes outdated (it no longer works) please [check for an existing ticket for it, and create one in our issue tracker](https://github.com/mumble-voip/mumble/issues) if it does not exist yet. Providing version information or offering help updating will help implementing support for the updated version. - -### PA Data - -* Position and orientation of your avatar in-game -* Position and orientation of the in-game camera -* A so called “context” uniquely identifying the game session and possibly team *(as in server or realm, or server + team)* -* A so called “identity” uniquely identifying the client amongst other clients within the same "context", possibly with additional information like class or team - -The server will only transmit positional audio data to clients with a matching context. Users with a different context will be heard normally. The context and identity information are not forwarded to the other clients, but can be used by server side applications which can, for example, place players in different channels/groups depending on the server or team they are currently playing on/in. - -## Positional Audio Settings - -### Plugin Configuration - -A plugin may have configuration options. If it does the Configure button will open a dialog for the selected plugin. - -Currently the only Plugin that has such a page is the “Manual Positional Audio” Plugin. - -See [Manual Plugin]({{< relref "/documentation/user/positional-audio/manual-plugin" >}}) - -## Supported Engines, Games and Game Mods - -See the [list of supported engines, games and game mods]({{< relref "supported-games" >}}) +--- +title: "Mumble Positional Audio Documentation" +--- + +**Please note that Mumble works with all games as a regular voice chat application.** + +This page documents the positional audio (“PA”) feature specifically, where you hear participating users according to +their position in your game world. + +## What is Positional Audio + +Positional Audio is a feature of Mumble that places the people talking to you in a certain position relative to your own +depending on their actual position in the game you are playing. This way you can hear the person as if their actual +avatar in-game was talking to you. + +Visualization of positional audio + +If someone is NOT using Positional Audio, you hear them normal, not from a specific direction or location. + +If someone uses Positional Audio, and is in the same context (game session) you will hear them from the direction they +are in and with varying volume depending on how close they are. + +The variance of the system, like maximum distance you hear people, or minimum volume, can be configured in the Mumble PA +settings. + +## How Mumble gets information about the virtual positions of the participants + +Mumble can get the position information and context in two ways: + +1. The Game itself shares context and position information +2. A Mumble plugin is created and installed that reads the game’s memory for context and position information + +Because the second process reads from a games memory, any game update may require updates to the plugin too. How robust +the plugin is against new versions and memory layout changes depends on the plugin implementation. + +If a plugin becomes outdated (it no longer works) please +[check for an existing ticket for it, and create one in our issue tracker](https://github.com/mumble-voip/mumble/issues) +if it does not exist yet. Providing version information or offering help updating will help implementing support for the +updated version. + +### PA Data + +- Position and orientation of your avatar in-game +- Position and orientation of the in-game camera +- A so called “context” uniquely identifying the game session and possibly team _(as in server or realm, or server + + team)_ +- A so called “identity” uniquely identifying the client amongst other clients within the same "context", possibly with + additional information like class or team + +The server will only transmit positional audio data to clients with a matching context. Users with a different context +will be heard normally. The context and identity information are not forwarded to the other clients, but can be used by +server side applications which can, for example, place players in different channels/groups depending on the server or +team they are currently playing on/in. + +## Positional Audio Settings + +### Plugin Configuration + +A plugin may have configuration options. If it does the Configure button will open a dialog for the selected plugin. + +Currently the only Plugin that has such a page is the “Manual Positional Audio” Plugin. + +See [Manual Plugin]({{< relref "/documentation/user/positional-audio/manual-plugin" >}}) + +## Supported Engines, Games and Game Mods + +See the [list of supported engines, games and game mods]({{< relref "supported-games" >}}) diff --git a/hugo/content/documentation/user/positional-audio/manual-plugin/index.md b/hugo/content/documentation/user/positional-audio/manual-plugin/index.md index ea8deb99..0700a71d 100644 --- a/hugo/content/documentation/user/positional-audio/manual-plugin/index.md +++ b/hugo/content/documentation/user/positional-audio/manual-plugin/index.md @@ -1,17 +1,22 @@ ---- -title: "Manual Positional Audio Plugin" ---- -In addition to the mentioned plugins, there is a special plugin called manual placement plugin. It does not require a game. Instead you can configure the plugin itself to set your own position from which other people in the same channel who set up the same context can hear you. - -![Configuration Steps Screenshot](manual-plugin-setup.jpg) - -1. Set yourself on the canvas from where others should hear you. Make sure to choose a position other than 0, 0, 0 or you won't hear or send positionally. -2. Set your own orientation where you want your virtual avatar to look at on a 360° Scale. -3. Set your own azimuth (if you look up or down while you talk). -4. Set the context of your avatar. Only the people with the same context will hear you positionally. -5. Set the identity. -6. Link or unlink the plugin to transfer the settings to the server for processing. -7. Enable or disable the plugin. -8. Separate the plugin settings window. This is useful to change the positional audio settings without keeping the Mumble settings window opened. -9. Reset values for all settings. -10. Close the window. +--- +title: "Manual Positional Audio Plugin" +--- + +In addition to the mentioned plugins, there is a special plugin called manual placement plugin. It does not require a +game. Instead you can configure the plugin itself to set your own position from which other people in the same channel +who set up the same context can hear you. + +![Configuration Steps Screenshot](manual-plugin-setup.jpg) + +1. Set yourself on the canvas from where others should hear you. Make sure to choose a position other than 0, 0, 0 or + you won't hear or send positionally. +2. Set your own orientation where you want your virtual avatar to look at on a 360° Scale. +3. Set your own azimuth (if you look up or down while you talk). +4. Set the context of your avatar. Only the people with the same context will hear you positionally. +5. Set the identity. +6. Link or unlink the plugin to transfer the settings to the server for processing. +7. Enable or disable the plugin. +8. Separate the plugin settings window. This is useful to change the positional audio settings without keeping the + Mumble settings window opened. +9. Reset values for all settings. +10. Close the window. diff --git a/hugo/content/documentation/user/positional-audio/supported-games.md b/hugo/content/documentation/user/positional-audio/supported-games.md index 777c1cc9..6766c0e6 100644 --- a/hugo/content/documentation/user/positional-audio/supported-games.md +++ b/hugo/content/documentation/user/positional-audio/supported-games.md @@ -1,119 +1,122 @@ ---- -title: "Games, Engines, and Game Mods supporting Mumble Positional Audio" ---- -**NOTE:** Plugins for 64-bit games only work with Mumble x64! - -*Note for Linux users:* Windows plugins work on Wine! - -The following tables display which games positional audio is available for, from which game version on (/for which version), for what platform and if extended support is available. - -Mumble version 1.2 introduced additional, extended positional audio features. Tooltips on this column’s content may indicate more information on what data is provided. - -## Native Support - -Games and game engines that provide native support remain functional across game updates. - -*Developer reference: [See developer integration documentation]({{< relref "/documentation/developer/positional-audio/link-plugin" >}})* - -### 3D/Game Engines With Native Support - - - - - - - - - - -
EngineVersionAction requiredPlatformExtended support (Context, identity)
ioquake3>= commit 0ee3960225 (2008)Set cl_useMumble to 1AnyNo
Source Engine>= ?NoAnyYes*
YEngine Next Generation
(if using Y.mumble)
>= commit b4011706e7NoLinuxYes
- -### Games with native support - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GameVersionAction requiredPlatformExtended support
(Context, identity)
ArmA 2: Operation Arrowhead>= 1.60Install the dedicated modWindowsYes
ArmA 3>= 0.5Install the dedicated modAnyYes
Black MesaAnyNoAnyYes*
Counter-Strike: Global Offensive>= Aug 27 2014NoAnyYes
Counter-Strike: Source>= Feb 5 2013NoAnyYes
Day of Defeat: Source>= 1.0.0.46 (01:24:57 Oct 26 2012 (5101))NoAnyYes
ezQuake>= 2.0 alphaNoAnyNo
Guild Wars 2>= Build 2/26/13 Official Wiki pageNoAnyYes
Half-Life 2: Deathmatch>= 1.0.0.37 (01:24:57 Oct 26 2012 (5101))NoAnyYes
Insurgency?NoAnyYes
Minecraft>= Beta 1.3Install the mod for Forge or Fabric.AnyYes (moddable)
MinetestAnyInstall the dedicated modAnyYes
Miscreated>= Patch #34NoAnyYes
Nuclear Dawn>= 6.9NoAnyYes
Open Arena>= commit 0ee3960225Set cl_useMumble to 1AnyYes
Red EclipseAnyNoAnyYes
Regnum-Online?NoAnyNo
ReactionAnySet cl_useMumble to 1AnyYes
Revenge of the Cats: Ethernet>= prototype 1.6NoAnyNo
Rigs of Rods>= 0.38.20NoAnyYes
Sauerbraten>= 2008_06_17_ctf_editionNoAnyNo
Team Fortress 2>= 1.2.3.5 (01:24:57 Oct 26 2012 (5101))NoAnyYes
Tesseract>= First EditionNoAnyYes
UFO: Alien Invasion>= 2.5Set snd_mumble to 1AnyContext only
UnvanquishedAnySet cl_useMumble to 1AnyYes
Warsow>= 0.6
Improved >= 1.0
Set cl_mumble to 1AnyNo
- -## Support Through Plugin - -Outdated plugins are marked in yellow. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GameVersionAction requiredPlatformExtended support
(Context, identity)
Age of ChivalryBuild 4104NoWindowsContext only
ArmA 21.08 while the latest is 1.10NoWindowsNo
Battlefield 11.0.49.52296NoWindowsYes*
Battlefield 19421.61bNoWindowsNo
Battlefield 21.50NoWindowsYes*
Battlefield 21421.51NoWindowsYes*
Battlefield 3Build 1147186 - End Game DLCNoWindowsYes*
Battlefield 41.8.2.48475NoWindowsYes*
Battlefield Bad Company 2Build 795745NoWindowsNo
Battlefield Heroes?NoWindowsNo
Borderlands1.4.0 while the latest is 1.4.1NoWindowsContext only*
Borderlands 21.8.3 while the latest is 1.8.4NoWindowsIdentity only*
Breach1.1.0NoWindowsNo
Call of Duty 21.3NoWindowsNo
Call of Duty 4: Modern Warfare1.7.568NoWindowsContext only*
Call of Duty: Modern Warfare 2 Multiplayer1.2.208NoWindowsNo
Call of Duty: Modern Warfare 2 Special Ops1.1NoWindowsNo
Call of Duty: World at War1.7.1263NoWindowsNo
Counter-Strike 1.61.6NoWindowsContext only*
DystopiaBuild 4104NoWindowsContext only*
Enemy Territory: Quake Wars1.50NoWindowsContext only*
Final Fantasy XIV2016.11.11.0000.0000NoWindowsYes*
Garry's Mod 11Build 5692NoWindowsContext only*
Grand Theft Auto IV1.0.7.0NoWindowsNo
Grand Theft Auto: San Andreas1.0NoWindowsNo
Grand Theft Auto V1.50 (Steam) 1.38 (Retail)NoWindowsIdentity only*
Guild WarsBuild 36001NoWindowsPartial context only*
Insurgency: Modern Infantry CombatBuild 4044NoWindowsContext only*
Just Cause 21.0.0.2NoWindowsNo
League of Legends1.0.0.145NoWindowsContext only*
Left 4 Dead1.0.3.1NoWindowsYes*
Left 4 Dead 22.1.4.6NoWindows, LinuxYes*
Lord of the Rings OnlineUpdate 4 while the latest is Update 18NoWindowsPartial context only*
Quake Live1069NoWindowsYes*
Rocket League1.42NoWindows, LinuxNo
StaxelAnyNoWindowsYes
Sub Rosa0.07bNoWindowsNo
Unreal Tournament (UT99)436NoWindowsPartial context only*
Unreal Tournament 2004Build 3369NoWindowsNo
Unreal Tournament 32.1NoWindowsNo
Wolfenstein: Enemy Territory2.60bNoWindowsContext only*
World of Warcraft7.0.3.22810NoWindowsYes*
+--- +title: "Games, Engines, and Game Mods supporting Mumble Positional Audio" +--- + +**NOTE:** Plugins for 64-bit games only work with Mumble x64! + +_Note for Linux users:_ Windows plugins work on Wine! + +The following tables display which games positional audio is available for, from which game version on (/for which +version), for what platform and if extended support is available. + +Mumble version 1.2 introduced additional, extended positional audio features. Tooltips on this column’s content may +indicate more information on what data is provided. + +## Native Support + +Games and game engines that provide native support remain functional across game updates. + +_Developer reference: [See developer integration documentation]({{< relref "/documentation/developer/positional-audio/link-plugin" >}})_ + +### 3D/Game Engines With Native Support + + + + + + + + + + +
EngineVersionAction requiredPlatformExtended support (Context, identity)
ioquake3>= commit 0ee3960225 (2008)Set cl_useMumble to 1AnyNo
Source Engine>= ?NoAnyYes*
YEngine Next Generation
(if using Y.mumble)
>= commit b4011706e7NoLinuxYes
+ +### Games with native support + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GameVersionAction requiredPlatformExtended support
(Context, identity)
ArmA 2: Operation Arrowhead>= 1.60Install the dedicated modWindowsYes
ArmA 3>= 0.5Install the dedicated modAnyYes
Black MesaAnyNoAnyYes*
Counter-Strike: Global Offensive>= Aug 27 2014NoAnyYes
Counter-Strike: Source>= Feb 5 2013NoAnyYes
Day of Defeat: Source>= 1.0.0.46 (01:24:57 Oct 26 2012 (5101))NoAnyYes
ezQuake>= 2.0 alphaNoAnyNo
Guild Wars 2>= Build 2/26/13 Official Wiki pageNoAnyYes
Half-Life 2: Deathmatch>= 1.0.0.37 (01:24:57 Oct 26 2012 (5101))NoAnyYes
Insurgency?NoAnyYes
Minecraft>= Beta 1.3Install the mod for Forge or Fabric.AnyYes (moddable)
MinetestAnyInstall the dedicated modAnyYes
Miscreated>= Patch #34NoAnyYes
Nuclear Dawn>= 6.9NoAnyYes
Open Arena>= commit 0ee3960225Set cl_useMumble to 1AnyYes
Red EclipseAnyNoAnyYes
Regnum-Online?NoAnyNo
ReactionAnySet cl_useMumble to 1AnyYes
Revenge of the Cats: Ethernet>= prototype 1.6NoAnyNo
Rigs of Rods>= 0.38.20NoAnyYes
Sauerbraten>= 2008_06_17_ctf_editionNoAnyNo
Team Fortress 2>= 1.2.3.5 (01:24:57 Oct 26 2012 (5101))NoAnyYes
Tesseract>= First EditionNoAnyYes
UFO: Alien Invasion>= 2.5Set snd_mumble to 1AnyContext only
UnvanquishedAnySet cl_useMumble to 1AnyYes
Warsow>= 0.6
Improved >= 1.0
Set cl_mumble to 1AnyNo
+ +## Support Through Plugin + +Outdated plugins are marked in yellow. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GameVersionAction requiredPlatformExtended support
(Context, identity)
Age of ChivalryBuild 4104NoWindowsContext only
ArmA 21.08 while the latest is 1.10NoWindowsNo
Battlefield 11.0.49.52296NoWindowsYes*
Battlefield 19421.61bNoWindowsNo
Battlefield 21.50NoWindowsYes*
Battlefield 21421.51NoWindowsYes*
Battlefield 3Build 1147186 - End Game DLCNoWindowsYes*
Battlefield 41.8.2.48475NoWindowsYes*
Battlefield Bad Company 2Build 795745NoWindowsNo
Battlefield Heroes?NoWindowsNo
Borderlands1.4.0 while the latest is 1.4.1NoWindowsContext only*
Borderlands 21.8.3 while the latest is 1.8.4NoWindowsIdentity only*
Breach1.1.0NoWindowsNo
Call of Duty 21.3NoWindowsNo
Call of Duty 4: Modern Warfare1.7.568NoWindowsContext only*
Call of Duty: Modern Warfare 2 Multiplayer1.2.208NoWindowsNo
Call of Duty: Modern Warfare 2 Special Ops1.1NoWindowsNo
Call of Duty: World at War1.7.1263NoWindowsNo
Counter-Strike 1.61.6NoWindowsContext only*
DystopiaBuild 4104NoWindowsContext only*
Enemy Territory: Quake Wars1.50NoWindowsContext only*
Final Fantasy XIV2016.11.11.0000.0000NoWindowsYes*
Garry's Mod 11Build 5692NoWindowsContext only*
Grand Theft Auto IV1.0.7.0NoWindowsNo
Grand Theft Auto: San Andreas1.0NoWindowsNo
Grand Theft Auto V1.50 (Steam) 1.38 (Retail)NoWindowsIdentity only*
Guild WarsBuild 36001NoWindowsPartial context only*
Insurgency: Modern Infantry CombatBuild 4044NoWindowsContext only*
Just Cause 21.0.0.2NoWindowsNo
League of Legends1.0.0.145NoWindowsContext only*
Left 4 Dead1.0.3.1NoWindowsYes*
Left 4 Dead 22.1.4.6NoWindows, LinuxYes*
Lord of the Rings OnlineUpdate 4 while the latest is Update 18NoWindowsPartial context only*
Quake Live1069NoWindowsYes*
Rocket League1.42NoWindows, LinuxNo
StaxelAnyNoWindowsYes
Sub Rosa0.07bNoWindowsNo
Unreal Tournament (UT99)436NoWindowsPartial context only*
Unreal Tournament 2004Build 3369NoWindowsNo
Unreal Tournament 32.1NoWindowsNo
Wolfenstein: Enemy Territory2.60bNoWindowsContext only*
World of Warcraft7.0.3.22810NoWindowsYes*
diff --git a/hugo/content/documentation/user/settings-storage-location/index.md b/hugo/content/documentation/user/settings-storage-location/index.md index 0fd11729..4de1c885 100644 --- a/hugo/content/documentation/user/settings-storage-location/index.md +++ b/hugo/content/documentation/user/settings-storage-location/index.md @@ -1,22 +1,23 @@ ---- -title: "Mumble Settings Storage Location" ---- -The Mumble client uses two different locations for storing data: - -1. A database that contains the server list, server certificates, favorites, friends, access tokens, comments, etc. -2. Settings for the client configuration - -## Windows - -1. Database: `%APPDATA%\Mumble\mumble.sqlite` -2. Settings: In the Windows registry under `HKEY_CURRENT_USER\Software\Mumble\Mumble` - -## Mac OS X - -1. Database: `$HOME/Library/Application Support/Mumble/Mumble/.mumble.sqlite` -2. Settings: `$HOME/Library/Preferences/net.sourceforge.mumble.Mumble.plist` - -## Linux - -1. Database `$HOME/.local/share/Mumble/Mumble/mumble.sqlite` -2. Settings `$HOME/.config/Mumble/Mumble.conf` +--- +title: "Mumble Settings Storage Location" +--- + +The Mumble client uses two different locations for storing data: + +1. A database that contains the server list, server certificates, favorites, friends, access tokens, comments, etc. +2. Settings for the client configuration + +## Windows + +1. Database: `%APPDATA%\Mumble\mumble.sqlite` +2. Settings: In the Windows registry under `HKEY_CURRENT_USER\Software\Mumble\Mumble` + +## Mac OS X + +1. Database: `$HOME/Library/Application Support/Mumble/Mumble/.mumble.sqlite` +2. Settings: `$HOME/Library/Preferences/net.sourceforge.mumble.Mumble.plist` + +## Linux + +1. Database `$HOME/.local/share/Mumble/Mumble/mumble.sqlite` +2. Settings `$HOME/.config/Mumble/Mumble.conf` diff --git a/hugo/content/downloads.md b/hugo/content/downloads.md index 63ee2c96..053d4f6c 100644 --- a/hugo/content/downloads.md +++ b/hugo/content/downloads.md @@ -1,17 +1,17 @@ --- title: Downloads --- -We provide downloads for the official client and server programs. A Linux distribution may provide their own packages and have their own maintainer, -which we will describe below. We also link to some third party projects. -Version **1.5.634** is the latest stable version of Mumble and was released on May 19th, 2024. +We provide downloads for the official client and server programs. A Linux distribution may provide their own packages +and have their own maintainer, which we will describe below. We also link to some third party projects. -Note that we are no longer able to support macOS < 10.13 since [Qt does not support](https://doc.qt.io/qt-5/macos.html#supported-versions) these -versions anymore. +Version **1.5.634** is the latest stable version of Mumble and was released on May 19th, 2024. -Note also when you upgrade from Mumble <= 1.3.x, you have to **uninstall Mumble manually** before installing 1.5, since the **upgrade path is unfixably broken**. See -[here](https://github.com/mumble-voip/mumble/issues/5076) for more info. +Note that we are no longer able to support macOS < 10.13 since +[Qt does not support](https://doc.qt.io/qt-5/macos.html#supported-versions) these versions anymore. +Note also when you upgrade from Mumble <= 1.3.x, you have to **uninstall Mumble manually** before installing 1.5, since +the **upgrade path is unfixably broken**. See [here](https://github.com/mumble-voip/mumble/issues/5076) for more info. ## Suggested Mumble Version @@ -74,7 +74,8 @@ document.getElementById('suggested-download').innerHTML = getPlatformContent(get ## Manual Download -*Note: On Windows Microsoft Visual C++ 2022 Redistributable (x64 download is required to be installed.* +_Note: On Windows Microsoft Visual C++ 2022 Redistributable +(x64 download is required to be installed._ {{< content-layout/downloads >}} {{< content-layout/download name="Windows client (x64)" href="https://dl.mumble.info/latest/stable/client-windows-x64" osclass="windows">}} @@ -96,22 +97,26 @@ document.getElementById('suggested-download').innerHTML = getPlatformContent(get {{< content-layout/downloads >}} {{< content-layout/download name="Static macOS server (x64)" href="https://dl.mumble.info/latest/stable/server-macos-x64" osclass="mac">}} + + {{< /content-layout/downloads >}} -Server note: *Depending on the context and packager our server program is called “mumble-server” or “Murmur”* +Server note: _Depending on the context and packager our server program is called “mumble-server” or “Murmur”_ -For the individual files and for a zipped sources file see the [1.5.634 GitHub release page](https://github.com/mumble-voip/mumble/releases/tag/v1.5.634). +For the individual files and for a zipped sources file see the +[1.5.634 GitHub release page](https://github.com/mumble-voip/mumble/releases/tag/v1.5.634). -Instructions on [verifying GPG signatures of Mumble downloads](https://github.com/mumble-voip/mumble-gpg-signatures/blob/master/gpg.txt) can be found -in the linked document. +Instructions on +[verifying GPG signatures of Mumble downloads](https://github.com/mumble-voip/mumble-gpg-signatures/blob/master/gpg.txt) +can be found in the linked document. ## Linux -Your distribution probably provides official packages for Mumble. Please refer to your OS packages. Distributions with official packages include -Debian, Ubuntu, Fedora, openSUSE, Arch Linux, Mandriva/ROSA/Unity. +Your distribution probably provides official packages for Mumble. Please refer to your OS packages. Distributions with +official packages include Debian, Ubuntu, Fedora, openSUSE, Arch Linux, Mandriva/ROSA/Unity. ### Snap/Snapcraft @@ -119,7 +124,8 @@ A Snap package is published and maintained by the third party Snapcraft communit ### Flatpak -A Flatpak Package is published and maintained by the third party Flatpak community at +A Flatpak Package is published and maintained by the third party Flatpak community at + ## Mobile Clients @@ -131,22 +137,23 @@ A Flatpak Package is published and maintained by the third party Flatpak communi ### Android (third party) -We do not currently provide an official Android client. However, you can use one of the third party clients (that we do not develop or support -ourselves). +We do not currently provide an official Android client. However, you can use one of the third party clients (that we do +not develop or support ourselves). -{{< content-layout/downloads >}} -{{% content-layout/download-ext osclass="android" %}}Mumla ([Play](https://play.google.com/store/apps/details?id=se.lublin.mumla),
[Play-Donate](https://play.google.com/store/apps/details?id=se.lublin.mumla.donation), [F-Droid](https://f-droid.org/packages/se.lublin.mumla)){{%/ content-layout/download-ext %}} +{{< content-layout/downloads >}} {{% content-layout/download-ext osclass="android" %}}Mumla +([Play](https://play.google.com/store/apps/details?id=se.lublin.mumla),
[Play-Donate](https://play.google.com/store/apps/details?id=se.lublin.mumla.donation), +[F-Droid](https://f-droid.org/packages/se.lublin.mumla)){{%/ content-layout/download-ext %}} {{< /content-layout/downloads >}} ## Development snapshots -Development snapshots contain unreleased features and changes that will eventually be available in the next stable release. Please report any problems -you encounter on [our issue tracker](https://github.com/mumble-voip/mumble/issues). +Development snapshots contain unreleased features and changes that will eventually be available in the next stable +release. Please report any problems you encounter on [our issue tracker](https://github.com/mumble-voip/mumble/issues). -The most recent snapshot version is the third release candidate for Mumble 1.5.x -([Release Announcement]({{< relref "/blog/2024-04-14-mumble-1-5-629" >}})). +The most recent snapshot version is the third release candidate for Mumble 1.5.x ([Release Announcement]({{< relref "/blog/2024-04-14-mumble-1-5-629" >}})). -Note that we are currently not able to provide static server binaries for Linux nor are we able to provide a snapshot PPA for Linux just yet. +Note that we are currently not able to provide static server binaries for Linux nor are we able to provide a snapshot +PPA for Linux just yet. {{< content-layout/downloads >}} {{< content-layout/download name="Client for Windows (x64)" href="https://dl.mumble.info/latest/snapshot/client-windows-x64" osclass="windows">}} @@ -158,8 +165,8 @@ Note that we are currently not able to provide static server binaries for Linux {{< content-layout/download name="Server for macOS >= 10.13 (x64)" href="https://dl.mumble.info/latest/snapshot/server-macos-x64" osclass="mac">}} {{< /content-layout/downloads >}} -Note that we are no longer able to support macOS < 10.13 since [Qt does not support](https://doc.qt.io/qt-5/macos.html#supported-versions) these -versions anymore. +Note that we are no longer able to support macOS < 10.13 since +[Qt does not support](https://doc.qt.io/qt-5/macos.html#supported-versions) these versions anymore. ## Source Code @@ -167,4 +174,3 @@ As a free software project the source code is publicly readable and under a perm Our Mumble project source code is hosted on GitHub as [`mumble`](https://github.com/mumble-voip/mumble). The iOS app as [`mumble-iphoneos`](https://github.com/mumble-voip/mumble-iphoneos). - diff --git a/hugo/content/feature-requests/index.md b/hugo/content/feature-requests/index.md index b2b215f8..8a06fe60 100644 --- a/hugo/content/feature-requests/index.md +++ b/hugo/content/feature-requests/index.md @@ -1,7 +1,10 @@ ---- -title: "Mumble Feature Requests" -layout: "feature-requests" ---- -The feature requests are submitted, voted on, discussed, and managed [in our issue tracker](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc+). - -Don’t see a feature request for something that you would love to see? [Create a new feature request for it!](https://github.com/mumble-voip/mumble/issues/new?assignees=&labels=&template=feature_request.md&title=) +--- +title: "Mumble Feature Requests" +layout: "feature-requests" +--- + +The feature requests are submitted, voted on, discussed, and managed +[in our issue tracker](https://github.com/mumble-voip/mumble/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc+). + +Don’t see a feature request for something that you would love to see? +[Create a new feature request for it!](https://github.com/mumble-voip/mumble/issues/new?assignees=&labels=&template=feature_request.md&title=) diff --git a/hugo/content/privacy.md b/hugo/content/privacy.md index a97237fb..0413745e 100644 --- a/hugo/content/privacy.md +++ b/hugo/content/privacy.md @@ -1,41 +1,53 @@ --- title: Privacy --- + This privacy policy describes our various services and products and how we handle data within their context. ## This Website at `www.mumble.info` The webserver may log non-person specific information. -As the website itself has no form of user input, we do not handle any user and personal information beyond simple and non-associated access logging. +As the website itself has no form of user input, we do not handle any user and personal information beyond simple and +non-associated access logging. -Contributors to the website source code (content and technical) contributors will committed to the source code history in the form the contributor submits. be shown as such under the names they identify themselves as and contribute as. Contributors may be shown on individual webpages for attribution. +Contributors to the website source code (content and technical) contributors will committed to the source code history +in the form the contributor submits. be shown as such under the names they identify themselves as and contribute as. +Contributors may be shown on individual webpages for attribution. ## The Documentation Wiki at `wiki.mumble.info` -The Mumble documentation wiki makes use of Google Analytics for website usage statistics. A cookie with name `_ga` specific to our domain is used for tracking. Please refer to [this Google page for more information](https://support.google.com/analytics/answer/6004245). +The Mumble documentation wiki makes use of Google Analytics for website usage statistics. A cookie with name `_ga` +specific to our domain is used for tracking. Please refer to +[this Google page for more information](https://support.google.com/analytics/answer/6004245). The webserver may log non-person specific information. -Users registering and account and making changes to the wiki content will do so under the specified name, account and license. They will be listed in a pages history as a contributor along with their contribution. +Users registering and account and making changes to the wiki content will do so under the specified name, account and +license. They will be listed in a pages history as a contributor along with their contribution. ## Mumble Client ### Optional Anonymous Usage Statistics -When a user decides to support us by submitting anonymous usage statistics some general usage and environment information will be sent to us. This includes operating system, ip address (for country information), Mumble version, and some other information. For the current specifics the client source code can be inspected. +When a user decides to support us by submitting anonymous usage statistics some general usage and environment +information will be sent to us. This includes operating system, ip address (for country information), Mumble version, +and some other information. For the current specifics the client source code can be inspected. ### Optional Update Checks -If enabled the client will automatically check for available application updates. It will only send the required information to be able to do so: the application version and the operating system/type of application. +If enabled the client will automatically check for available application updates. It will only send the required +information to be able to do so: the application version and the operating system/type of application. -If enabled the positional audio plugin and overlay update check will send the corresponding version and operating system type in a similar fashion for this purpose. +If enabled the positional audio plugin and overlay update check will send the corresponding version and operating system +type in a similar fashion for this purpose. The settings are located in the client applications settings dialog: Settings ➡ Network ➡ Privacy section. ### Public Server List -When opening the public server list in the connect dialog, the client will request this list from our server. Only the data required for doing so is sent. +When opening the public server list in the connect dialog, the client will request this list from our server. Only the +data required for doing so is sent. This functionality can be disabled through a hidden configuration setting (not visible in the user interface). @@ -43,14 +55,19 @@ This functionality can be disabled through a hidden configuration setting (not v While this is not data being sent to us we want to mention this for completeness. -When you see servers listed in the connect dialog a “ping” request packet will be sent to it in order to display the ping (connection latency) and user count as you will see them in the user interface. +When you see servers listed in the connect dialog a “ping” request packet will be sent to it in order to display the +ping (connection latency) and user count as you will see them in the user interface. -When connecting to a server the technically required data is sent to and received from the server. Please refer to the server providers privacy policy for details. +When connecting to a server the technically required data is sent to and received from the server. Please refer to the +server providers privacy policy for details. -The user can prevent sending OS information to servers they connect to in the Settings ➡ Network ➡ Privacy section; Do not send OS information to Mumble and web servers. +The user can prevent sending OS information to servers they connect to in the Settings ➡ Network ➡ Privacy section; Do +not send OS information to Mumble and web servers. ## Mumble Server (previously called “Murmur”) -When the server is configured to register with our public server list ([`register*` settings][1]) the configured or automatically determined information (as described in the configuration documentation) is sent to us and consequently being listed publicly on our public server list. +When the server is configured to register with our public server list ([`register*` settings][1]) the configured or +automatically determined information (as described in the configuration documentation) is sent to us and consequently +being listed publicly on our public server list. - [1]: https://wiki.mumble.info/wiki/Murmur.ini#Server_Registration +[1]: https://wiki.mumble.info/wiki/Murmur.ini#Server_Registration diff --git a/hugo/content/security/Mumble-SA-2014-001.md b/hugo/content/security/Mumble-SA-2014-001.md index 525bfd1e..ec3f1d87 100644 --- a/hugo/content/security/Mumble-SA-2014-001.md +++ b/hugo/content/security/Mumble-SA-2014-001.md @@ -3,23 +3,25 @@ title: Mumble Security Advisory 2014-001 date: 2016-01-10 --- -ID: Mumble-SA-2014-001 ([txt](../Mumble-SA-2014-001.txt), [sig](../Mumble-SA-2014-001.txt.sig), [Blog post](/blog/mumble-1.2.5/)) +ID: Mumble-SA-2014-001 ([txt](../Mumble-SA-2014-001.txt), [sig](../Mumble-SA-2014-001.txt.sig), +[Blog post](/blog/mumble-1.2.5/)) -Date: February 2014 +Date: February 2014 -CVE Reference: CVE-2014-0044 +CVE Reference: CVE-2014-0044 -Product: Mumble +Product: Mumble -Mumble Website: http://mumble.info +Mumble Website: http://mumble.info -Permalink: http://mumble.info/security/Mumble-SA-2014-001.txt +Permalink: http://mumble.info/security/Mumble-SA-2014-001.txt -Last Updated: 05-02-2014 +Last Updated: 05-02-2014 ## Vulnerability -A malformed Opus voice packet sent to a Mumble client could trigger a NULL pointer dereference or an out-of-bounds array access, leading to a crash (Denial of Service). +A malformed Opus voice packet sent to a Mumble client could trigger a NULL pointer dereference or an out-of-bounds array +access, leading to a crash (Denial of Service). This can be triggered remotely by an entity participating in a Mumble voice chat. @@ -27,41 +29,59 @@ This can be triggered remotely by an entity participating in a Mumble voice chat Mumble 1.2.4 in its default configuration is vulnerable. This is the only stable release that is vulnerable. -Pre-release snapshots released prior to 1.2.4 (these are named 1.2.3--g) that include Opus support are potentially vulnerable. +Pre-release snapshots released prior to 1.2.4 (these are named 1.2.3--g) that include Opus support are +potentially vulnerable. Pre-release snapshots released after 1.2.4 (these are named 1.2.4--g) are vulnerable. -Some distributions (such as Debian and Ubuntu) ship a pre-release snapshot in their stable distributions. This snapshot is version 1.2.3-349-g315b5f5, and it is also vulnerable. +Some distributions (such as Debian and Ubuntu) ship a pre-release snapshot in their stable distributions. This snapshot +is version 1.2.3-349-g315b5f5, and it is also vulnerable. ## Mitigation A Mumble client built without Opus support is not vulnerable to this issue. -Opus is enabled in the default build configuration for Mumble, but can be disabled by passing CONFIG+=no-opus to the qmake program when building the Mumble client. (Note that Mumble might still enable Opus support if an installed version of Opus is found via pkg-config. To avoid this, you will need to pass CONFIG+="bundled-opus no-opus" to qmake to also disable the pkg-config querying.) +Opus is enabled in the default build configuration for Mumble, but can be disabled by passing CONFIG+=no-opus to the +qmake program when building the Mumble client. (Note that Mumble might still enable Opus support if an installed version +of Opus is found via pkg-config. To avoid this, you will need to pass CONFIG+="bundled-opus no-opus" to qmake to also +disable the pkg-config querying.) -Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should not be affected by this issue. +Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of +Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should +not be affected by this issue. -Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed Opus packets to be sent to clients of its choosing, thus triggering this issue. +Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed +Opus packets to be sent to clients of its choosing, thus triggering this issue. ## Details -Mumble's Opus voice packets are serialized as a buffer with a length-prefix using Mumble's internal PacketDataStream serialization format. +Mumble's Opus voice packets are serialized as a buffer with a length-prefix using Mumble's internal PacketDataStream +serialization format. Mumble failed to properly validate the length prefix of received Opus voice packets. -If an Opus packet with a length prefix of zero was received, the Mumble client would attempt to extract an Opus buffer of size 0 by calling the dataBlock() method on a PacketDataStream object. In this case the dataBlock() method would return a QByteArray that uses the result of malloc(0) as its internal buffer. +If an Opus packet with a length prefix of zero was received, the Mumble client would attempt to extract an Opus buffer +of size 0 by calling the dataBlock() method on a PacketDataStream object. In this case the dataBlock() method would +return a QByteArray that uses the result of malloc(0) as its internal buffer. -Depending on the system's implementation of malloc this call may return either NULL, or a non-NULL pointer that points to a zero-length buffer. +Depending on the system's implementation of malloc this call may return either NULL, or a non-NULL pointer that points +to a zero-length buffer. -The QByteArray's internal buffer is later used in a call to the opus_packet_get_samples_per_frame() function, which attempts to read the first byte of the passed-in buffer to calculate its return value. This can either cause a NULL pointer dereference, or a read outside the bounds of the zero-sized heap-allocated buffer. +The QByteArray's internal buffer is later used in a call to the opus_packet_get_samples_per_frame() function, which +attempts to read the first byte of the passed-in buffer to calculate its return value. This can either cause a NULL +pointer dereference, or a read outside the bounds of the zero-sized heap-allocated buffer. -Similarly, if the Mumble client received an Opus packet with a length prefix that is negative, or larger than the encapsulating packet, the dataBlock() method of the PacketDataStream object would return a QByteArray constructed by the QByteArray class's default constructor. That is, a 'null' QByteArray where the internal buffer is a NULL pointer. +Similarly, if the Mumble client received an Opus packet with a length prefix that is negative, or larger than the +encapsulating packet, the dataBlock() method of the PacketDataStream object would return a QByteArray constructed by the +QByteArray class's default constructor. That is, a 'null' QByteArray where the internal buffer is a NULL pointer. -This NULL buffer is then passed to the opus_packet_get_samples_per_frame() function which will dereference it when attempting to read the first byte of the buffer. +This NULL buffer is then passed to the opus_packet_get_samples_per_frame() function which will dereference it when +attempting to read the first byte of the buffer. ## Credits -This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was reported by Wesley Wolfe on January 25, 2014. +This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was +reported by Wesley Wolfe on January 25, 2014. ## Fix diff --git a/hugo/content/security/Mumble-SA-2014-002.md b/hugo/content/security/Mumble-SA-2014-002.md index de266e64..117be102 100644 --- a/hugo/content/security/Mumble-SA-2014-002.md +++ b/hugo/content/security/Mumble-SA-2014-002.md @@ -3,23 +3,25 @@ title: Mumble Security Advisory 2014-002 date: 2014-02-05 --- -ID: Mumble-SA-2014-002 ([txt](../Mumble-SA-2014-002.txt), [sig](../Mumble-SA-2014-002.txt.sig), [Blog post](/blog/mumble-1.2.5/)) +ID: Mumble-SA-2014-002 ([txt](../Mumble-SA-2014-002.txt), [sig](../Mumble-SA-2014-002.txt.sig), +[Blog post](/blog/mumble-1.2.5/)) -Date: February 2014 +Date: February 2014 -CVE Reference: CVE-2014-0045 +CVE Reference: CVE-2014-0045 -Product: Mumble +Product: Mumble -Mumble Website: http://mumble.info +Mumble Website: http://mumble.info -Permalink: http://mumble.info/security/Mumble-SA-2014-002.txt +Permalink: http://mumble.info/security/Mumble-SA-2014-002.txt -Last Updated: 05-02-2014 +Last Updated: 05-02-2014 ## Vulnerability -A malformed Opus voice packet sent to a Mumble client could trigger a heap-based buffer overflow. This causes a client crash (Denial of Service) and can potentially be used to execute arbitrary code, though this is unconfirmed. +A malformed Opus voice packet sent to a Mumble client could trigger a heap-based buffer overflow. This causes a client +crash (Denial of Service) and can potentially be used to execute arbitrary code, though this is unconfirmed. This issue can be triggered remotely by an entity participating in a Mumble voice chat. @@ -27,40 +29,56 @@ This issue can be triggered remotely by an entity participating in a Mumble voic Mumble 1.2.4 in its default configuration is vulnerable. This is the only stable release that is vulnerable. -Pre-release snapshots released prior to 1.2.4 (these are named 1.2.3--g) that include Opus support are potentially vulnerable. +Pre-release snapshots released prior to 1.2.4 (these are named 1.2.3--g) that include Opus support are +potentially vulnerable. Pre-release snapshots released after 1.2.4 (these are named 1.2.4--g) are vulnerable. -Some distributions (such as Debian and Ubuntu) ship a pre-release snapshot in their stable distributions. This snapshot is version 1.2.3-349-g315b5f5, and it is also vulnerable. +Some distributions (such as Debian and Ubuntu) ship a pre-release snapshot in their stable distributions. This snapshot +is version 1.2.3-349-g315b5f5, and it is also vulnerable. ## Mitigation A Mumble client built without Opus support is not vulnerable to this issue. -Opus is enabled in the default build configuration for Mumble, but can be disabled by passing CONFIG+=no-opus to the qmake program when building the Mumble client. (Note that Mumble might still enable Opus support if an installed version of Opus is found via pkg-config. To avoid this, you will need to pass CONFIG+="bundled-opus no-opus" to qmake to also disable the pkg-config querying.) +Opus is enabled in the default build configuration for Mumble, but can be disabled by passing CONFIG+=no-opus to the +qmake program when building the Mumble client. (Note that Mumble might still enable Opus support if an installed version +of Opus is found via pkg-config. To avoid this, you will need to pass CONFIG+="bundled-opus no-opus" to qmake to also +disable the pkg-config querying.) -Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should not be affected by this - issue. +Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of +Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should +not be affected by this issue. -Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed Opus packets to be sent to clients of its choosing, thus triggering this issue. +Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed +Opus packets to be sent to clients of its choosing, thus triggering this issue. ## Details -Mumble failed to properly check the return value of a call to the opus_decode_float() function in Mumble's AudioOutputSpeech::needSamples() method. +Mumble failed to properly check the return value of a call to the opus_decode_float() function in Mumble's +AudioOutputSpeech::needSamples() method. When opus_decode_float() encounters an error, it returns a negative integer signalling the error condition it met. -Instead of catching these errors, Mumble would assign the negative values to a variable denoting the amount of decoded samples (decodedSamples) by the call to the opus_decode_float() function and continue its processing. +Instead of catching these errors, Mumble would assign the negative values to a variable denoting the amount of decoded +samples (decodedSamples) by the call to the opus_decode_float() function and continue its processing. -Later on in the AudioOutputSpeech::needSamples() method, the decodedSamples variable is converted to a pair of unsigned integers: inlen and outlen. The inlen variable's value becomes close to UINT_MAX, since the error codes returned by opus_decode_float() are small negative integers. The outlen variable's value is bounded by a sample rate calculation, which causes the value to be somewhere around UINT_MAX / 48000, depending on the Opus error code and the current sample rate being used by the Mumble client. +Later on in the AudioOutputSpeech::needSamples() method, the decodedSamples variable is converted to a pair of unsigned +integers: inlen and outlen. The inlen variable's value becomes close to UINT_MAX, since the error codes returned by +opus_decode_float() are small negative integers. The outlen variable's value is bounded by a sample rate calculation, +which causes the value to be somewhere around UINT_MAX / 48000, depending on the Opus error code and the current sample +rate being used by the Mumble client. -Following this, these two unsigned integers are then used as buffer lengths in calls to speex_resampler_process_float() and in a memory-copying "for"-loop at the top of the AudioOutputSpeech::needSamples() method. +Following this, these two unsigned integers are then used as buffer lengths in calls to speex_resampler_process_float() +and in a memory-copying "for"-loop at the top of the AudioOutputSpeech::needSamples() method. -The inadvertently large buffer lengths cause the two cases above to perform reads and writes outside the bounds of their heap-allocated buffers. +The inadvertently large buffer lengths cause the two cases above to perform reads and writes outside the bounds of their +heap-allocated buffers. ## Credits -This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was reported by Wesley Wolfe on January 25, 2014. +This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was +reported by Wesley Wolfe on January 25, 2014. ## Fix @@ -70,7 +88,8 @@ A fix is also available in the master branch of Mumble's Git repository. A patch which can be applied to previous vulnerable versions can be found in-line below. -(Note: this patch does not apply to Debian and Ubuntu's 1.2.3-349-g315b5f5 version due to whitespace changes of the code above the inserted "if"-statement in the first hunk of the patch. It is, however, trivially applied or fixed by hand.) +(Note: this patch does not apply to Debian and Ubuntu's 1.2.3-349-g315b5f5 version due to whitespace changes of the code +above the inserted "if"-statement in the first hunk of the patch. It is, however, trivially applied or fixed by hand.) ``` --- ./src/mumble/AudioOutputSpeech.cpp diff --git a/hugo/content/security/Mumble-SA-2014-003.md b/hugo/content/security/Mumble-SA-2014-003.md index 5bd813bd..b6eb8148 100644 --- a/hugo/content/security/Mumble-SA-2014-003.md +++ b/hugo/content/security/Mumble-SA-2014-003.md @@ -3,29 +3,32 @@ title: Mumble Security Advisory 2014-003 date: 2014-02-05 --- -ID: Mumble-SA-2014-003 ([txt](../Mumble-SA-2014-003.txt), [sig](../Mumble-SA-2014-003.txt.sig), [Blog post](/blog/mumble-for-ios-1.2.3/)) +ID: Mumble-SA-2014-003 ([txt](../Mumble-SA-2014-003.txt), [sig](../Mumble-SA-2014-003.txt.sig), +[Blog post](/blog/mumble-for-ios-1.2.3/)) -Date: February 2014 +Date: February 2014 -CVE Reference: Not assigned +CVE Reference: Not assigned -Product: MumbleKit, Mumble for iOS +Product: MumbleKit, Mumble for iOS -Mumble Website: http://mumble.info +Mumble Website: http://mumble.info -Permalink: http://mumble.info/security/Mumble-SA-2014-003.txt +Permalink: http://mumble.info/security/Mumble-SA-2014-003.txt -Last Updated: 05-02-2014 +Last Updated: 05-02-2014 ## Vulnerability -A malformed Opus voice packet sent to a MumbleKit client (such as Mumble for iOS) could trigger a NULL pointer dereference. This causes a client crash (Denial of Service). +A malformed Opus voice packet sent to a MumbleKit client (such as Mumble for iOS) could trigger a NULL pointer +dereference. This causes a client crash (Denial of Service). This can be triggered remotely by an entity participating in a Mumble voice chat. ## Affected versions and configurations -All versions of MumbleKit with Opus support are affected unless they include the fix for this issue, which is available in the MumbleKit Git repository as commit fd190328a9b24d37382b269a5674b0c0c7a7e36d. +All versions of MumbleKit with Opus support are affected unless they include the fix for this issue, which is available +in the MumbleKit Git repository as commit fd190328a9b24d37382b269a5674b0c0c7a7e36d. Mumble for iOS version 1.1 through 1.2.2 are vulnerable, as they use vulnerable versions of MumbleKit. @@ -33,31 +36,41 @@ Mumble for iOS version 1.1 through 1.2.2 are vulnerable, as they use vulnerable No known mitigation strategy for this issue exists. -Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should not be affected by this - issue. +Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of +Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should +not be affected by this issue. -Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed Opus packets to be sent to clients of its choosing, thus triggering this issue. +Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed +Opus packets to be sent to clients of its choosing, thus triggering this issue. ## Details -Mumble's Opus voice packets are serialized as a buffer with a length-prefix using Mumble's internal PacketDataStream serialization format. +Mumble's Opus voice packets are serialized as a buffer with a length-prefix using Mumble's internal PacketDataStream +serialization format. MumbleKit failed to properly validate the length prefix of received Opus voice packets. -If an Opus packet with an invalid length prefix was received, MumbleKit would attempt to extract it using an MKPacketDataStream object's copyDataBlock: method. +If an Opus packet with an invalid length prefix was received, MumbleKit would attempt to extract it using an +MKPacketDataStream object's copyDataBlock: method. -When the copyDataBlock: method is successful, it returns a valid NSData object. When an error occurs, it instead returns nil, and sets an error flag in the MKPacketDataStream object (which can be queired using the 'valid' method.) +When the copyDataBlock: method is successful, it returns a valid NSData object. When an error occurs, it instead returns +nil, and sets an error flag in the MKPacketDataStream object (which can be queired using the 'valid' method.) -Instead of performing proper error checking, MumbleKit used the returned NSData object as-is, without first checking whether it was nil, or whether the MKPacketDataStream object had its error flag set. +Instead of performing proper error checking, MumbleKit used the returned NSData object as-is, without first checking +whether it was nil, or whether the MKPacketDataStream object had its error flag set. -When the returned NSData object is nil, MumbleKit calls the Opus functions opus_packet_get_nb_frames() and opus_packet_get_samples_per_frame() with a NULL pointer as the packet buffer. This causes the functions to dereference the NULL pointer. +When the returned NSData object is nil, MumbleKit calls the Opus functions opus_packet_get_nb_frames() and +opus_packet_get_samples_per_frame() with a NULL pointer as the packet buffer. This causes the functions to dereference +the NULL pointer. ## Credits -This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was reported by Wesley Wolfe on January 25, 2014. +This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was +reported by Wesley Wolfe on January 25, 2014. ## Fix A fix for this issue has beeen released in Mumble for iOS 1.2.3. -Other users of MumbleKit should make sure they are using a version of MumbleKit that includes the fixed commit, which is fd190328a9b24d37382b269a5674b0c0c7a7e36d. +Other users of MumbleKit should make sure they are using a version of MumbleKit that includes the fixed commit, which is +fd190328a9b24d37382b269a5674b0c0c7a7e36d. diff --git a/hugo/content/security/Mumble-SA-2014-004.md b/hugo/content/security/Mumble-SA-2014-004.md index a8d934c8..d6a883ac 100644 --- a/hugo/content/security/Mumble-SA-2014-004.md +++ b/hugo/content/security/Mumble-SA-2014-004.md @@ -3,29 +3,33 @@ title: Mumble Security Advisory 2014-004 date: 2014-02-05 --- -ID: Mumble-SA-2014-004 ([txt](../Mumble-SA-2014-004.txt), [sig](../Mumble-SA-2014-004.txt.sig), [Blog post](/blog/mumble-for-ios-1.2.3/)) +ID: Mumble-SA-2014-004 ([txt](../Mumble-SA-2014-004.txt), [sig](../Mumble-SA-2014-004.txt.sig), +[Blog post](/blog/mumble-for-ios-1.2.3/)) -Date: February 2014 +Date: February 2014 -CVE Reference: Not assigned +CVE Reference: Not assigned -Product: MumbleKit, Mumble for iOS +Product: MumbleKit, Mumble for iOS -Mumble Website: http://mumble.info +Mumble Website: http://mumble.info -Permalink: http://mumble.info/security/mumble-sa-2014-004 +Permalink: http://mumble.info/security/mumble-sa-2014-004 -Last Updated: 05-02-2014 +Last Updated: 05-02-2014 ## Vulnerability -A malformed Opus voice packet sent to a MumbleKit client (such as Mumble for iOS) could trigger a heap-based buffer overflow. This causes a client crash (Denial of Service) and can potentially be used to execute arbitrary code, though this is unconfirmed. +A malformed Opus voice packet sent to a MumbleKit client (such as Mumble for iOS) could trigger a heap-based buffer +overflow. This causes a client crash (Denial of Service) and can potentially be used to execute arbitrary code, though +this is unconfirmed. This issue can be triggered remotely by an entity participating in a Mumble voice chat. ## Affected versions and configurations -All versions of MumbleKit with Opus support are affected unless they include the fix for this issue, which is available in the MumbleKit Git repository as commit fd190328a9b24d37382b269a5674b0c0c7a7e36d. +All versions of MumbleKit with Opus support are affected unless they include the fix for this issue, which is available +in the MumbleKit Git repository as commit fd190328a9b24d37382b269a5674b0c0c7a7e36d. Mumble for iOS version 1.1 through 1.2.2 are vulnerable, as they use vulnerable versions of MumbleKit. @@ -33,31 +37,43 @@ Mumble for iOS version 1.1 through 1.2.2 are vulnerable, as they use vulnerable No known mitigation strategy for this issue exists. -Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should not be affected by this - issue. +Version 1.2.3 and prior of Mumble's server component ('Murmur' or 'mumble-server') does not allow the transmission of +Opus packets, and as such a vulnerable client connected to a stock Murmur server that runs version 1.2.3 or prior should +not be affected by this issue. -Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed Opus packets to be sent to clients of its choosing, thus triggering this issue. +Note however that since Mumble is a centralized VoIP system, a modified server could potentially also trigger malformed +Opus packets to be sent to clients of its choosing, thus triggering this issue. ## Details -Mumble failed to properly check the return value of a call to the opus_decode_float() function in Mumble's MKAudioOutputSpeech#needSamples: method. +Mumble failed to properly check the return value of a call to the opus_decode_float() function in Mumble's +MKAudioOutputSpeech#needSamples: method. When opus_decode_float() encounters an error, it returns a negative integer signalling the error condition it met. -Instead of catching these errors, Mumble would assign the negative values to a variable denoting the amount of decoded samples (decodedSamples) by the call to the opus_decode_float() function and continue its processing. +Instead of catching these errors, Mumble would assign the negative values to a variable denoting the amount of decoded +samples (decodedSamples) by the call to the opus_decode_float() function and continue its processing. -Later on in the MKAudioOutputSpeech#needSamples: method, the decodedSamples variable is converted to a pair of unsigned integers: inlen and outlen. The inlen variable's value becomes close to UINT_MAX, since the error codes returned by opus_decode_float() are small negative integers. The outlen variable's value is bounded by a sample rate calculation, which causes the value to be somewhere around UINT_MAX / 48000, depending on the Opus error code and the current sample rate being used by the Mumble client. +Later on in the MKAudioOutputSpeech#needSamples: method, the decodedSamples variable is converted to a pair of unsigned +integers: inlen and outlen. The inlen variable's value becomes close to UINT_MAX, since the error codes returned by +opus_decode_float() are small negative integers. The outlen variable's value is bounded by a sample rate calculation, +which causes the value to be somewhere around UINT_MAX / 48000, depending on the Opus error code and the current sample +rate being used by the Mumble client. -Following this, these two unsigned integers are then used as buffer lengths in calls to speex_resampler_process_float() and in a memory-copying "for"-loop at the top of the MKAudioOutputSpeech#needSamples: method. +Following this, these two unsigned integers are then used as buffer lengths in calls to speex_resampler_process_float() +and in a memory-copying "for"-loop at the top of the MKAudioOutputSpeech#needSamples: method. -The inadvertently large buffer lengths cause the two cases above to perform reads and writes outside the bounds of their heap-allocated buffers. +The inadvertently large buffer lengths cause the two cases above to perform reads and writes outside the bounds of their +heap-allocated buffers. ## Credits -This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was reported by Wesley Wolfe on January 25, 2014. +This issue was discovered by the Mumble team after a reproducible crash that happened when transmitting audio was +reported by Wesley Wolfe on January 25, 2014. ## Fix A fix for this issue has been released in Mumble for iOS 1.2.3. -Other users of MumbleKit should make sure they are using a version of MumbleKit that includes the fixed commit, which is fd190328a9b24d37382b269a5674b0c0c7a7e36d. +Other users of MumbleKit should make sure they are using a version of MumbleKit that includes the fixed commit, which is +fd190328a9b24d37382b269a5674b0c0c7a7e36d. diff --git a/hugo/content/security/Mumble-SA-2014-005.md b/hugo/content/security/Mumble-SA-2014-005.md index ab170e6b..1e188b8c 100644 --- a/hugo/content/security/Mumble-SA-2014-005.md +++ b/hugo/content/security/Mumble-SA-2014-005.md @@ -1,63 +1,72 @@ ---- -title: Mumble Security Advisory 2014-005 -date: 2014-05-14 ---- - -ID: Mumble-SA-2014-005 ([txt](../Mumble-SA-2014-005.txt), [sig](../Mumble-SA-2014-005.txt.sig), [patch](../Mumble-SA-2014-005.patch), [patch sig](../Mumble-SA-2014-005.patch.sig), [Blog post](/blog/mumble-1.2.6/)) - -Date: May 2014 - -CVE Reference: Not assigned - -Product: Mumble - -Mumble Website: http://mumble.info - -Permalink: http://mumble.info/security/mumble-sa-2014-005 - -Last Updated: 2014-05-14 - -## Vulnerability - -The Mumble client is vulnerable to a Denial of Service attack when rendering crafted SVG files that contain references to files on the local computer. - -This can cause the Mumble client to hang and/or become resource exhausted. - -This issue can be triggered remotely by an entity participating in a Mumble voice chat. Triggering the issue remotely can be done using text messages, channel comments, user comments and user textures/avatars. - -## Affected versions and configurations - -All 1.2.x versions of Mumble are affected. - -## Mitigation - -This issue can be mitigated by using a build of Qt that does not include the QSvg module. - -However, since Mumble uses SVGs for some of its UI graphics, this might not be a satisfactory solution. - -## Details - -Qt's QSvg module's SVG renderer will follow file references found in SVG's image tag and XML stylesheet references. - -For image tags, Qt tries to load the referenced file using QImage's constructor that takes a file path. Further processing is then delegated to an image format plugin. - -For XML stylsheets, Qt will attempt to open the referenced file using QFile followed by a call to the readAll(), which will read the file until EOF. - -These two possibilities makes it easy to cause a Mumble client to hang by reading a file or file-like object that is exposed using the filesystem namespace that QFile can access. - -## Credits - -This issue was reported to the Mumble team by Tim Cooper on April 16, 2014. - -## Fix - -A fix for this issue has been released in Mumble 1.2.6. - -The fix for Mumble 1.2.6 addresses this issue by removing the Mumble client's ability to render SVG files received from external sources. The binary releases of the Mumble client for Windows and OS X also contain a patched version of Qt that removes the code paths in QSvg that can trigger local file access. - -A patch that applies on top of Mumble 1.2.5 can be found at http://mumble.info/security/Mumble-SA-2014-005.patch (for a detached PGP signature, append '.sig'). - -The fix is also available in the Mumble git repo as c7aecb2956f214cd83b7a862a4fcf15cc76c4450 (on the v1.2.6 branch). - -The patch has been applied to Mumble's Qt tree is available in the mumble-developers-qt tre as - 2147fa767980fe27a14f018b1528dbf880b96814. +--- +title: Mumble Security Advisory 2014-005 +date: 2014-05-14 +--- + +ID: Mumble-SA-2014-005 ([txt](../Mumble-SA-2014-005.txt), [sig](../Mumble-SA-2014-005.txt.sig), +[patch](../Mumble-SA-2014-005.patch), [patch sig](../Mumble-SA-2014-005.patch.sig), [Blog post](/blog/mumble-1.2.6/)) + +Date: May 2014 + +CVE Reference: Not assigned + +Product: Mumble + +Mumble Website: http://mumble.info + +Permalink: http://mumble.info/security/mumble-sa-2014-005 + +Last Updated: 2014-05-14 + +## Vulnerability + +The Mumble client is vulnerable to a Denial of Service attack when rendering crafted SVG files that contain references +to files on the local computer. + +This can cause the Mumble client to hang and/or become resource exhausted. + +This issue can be triggered remotely by an entity participating in a Mumble voice chat. Triggering the issue remotely +can be done using text messages, channel comments, user comments and user textures/avatars. + +## Affected versions and configurations + +All 1.2.x versions of Mumble are affected. + +## Mitigation + +This issue can be mitigated by using a build of Qt that does not include the QSvg module. + +However, since Mumble uses SVGs for some of its UI graphics, this might not be a satisfactory solution. + +## Details + +Qt's QSvg module's SVG renderer will follow file references found in SVG's image tag and XML stylesheet references. + +For image tags, Qt tries to load the referenced file using QImage's constructor that takes a file path. Further +processing is then delegated to an image format plugin. + +For XML stylsheets, Qt will attempt to open the referenced file using QFile followed by a call to the readAll(), which +will read the file until EOF. + +These two possibilities makes it easy to cause a Mumble client to hang by reading a file or file-like object that is +exposed using the filesystem namespace that QFile can access. + +## Credits + +This issue was reported to the Mumble team by Tim Cooper on April 16, 2014. + +## Fix + +A fix for this issue has been released in Mumble 1.2.6. + +The fix for Mumble 1.2.6 addresses this issue by removing the Mumble client's ability to render SVG files received from +external sources. The binary releases of the Mumble client for Windows and OS X also contain a patched version of Qt +that removes the code paths in QSvg that can trigger local file access. + +A patch that applies on top of Mumble 1.2.5 can be found at http://mumble.info/security/Mumble-SA-2014-005.patch (for a +detached PGP signature, append '.sig'). + +The fix is also available in the Mumble git repo as c7aecb2956f214cd83b7a862a4fcf15cc76c4450 (on the v1.2.6 branch). + +The patch has been applied to Mumble's Qt tree is available in the mumble-developers-qt tre as +2147fa767980fe27a14f018b1528dbf880b96814. diff --git a/hugo/content/security/Mumble-SA-2014-006.md b/hugo/content/security/Mumble-SA-2014-006.md index 00c3f2b0..871a7de7 100644 --- a/hugo/content/security/Mumble-SA-2014-006.md +++ b/hugo/content/security/Mumble-SA-2014-006.md @@ -1,59 +1,69 @@ ---- -title: Mumble Security Advisory 2014-006 -date: 2014-05-14 ---- - -ID: Mumble-SA-2014-006 ([txt](../Mumble-SA-2014-005.txt), [sig](../Mumble-SA-2014-005.txt.sig), [patch](../Mumble-SA-2014-005.patch), [patch sig](../Mumble-SA-2014-005.patch.sig), [Blog post](/blog/mumble-1.2.6/)) - -Date: May 2014 - -CVE Reference: Not assigned - -Product: Mumble - -Mumble Website: http://mumble.info - -Permalink: http://mumble.info/security/mumble-sa-2014-006 - -Last Updated: 2014-05-14 - -## Vulnerability - -The Mumble client did not properly HTML-escape some external strings before using them in a rich-text (HTML) context. - -In some situations, this could be abused to perform a Denial of Service attack (hang and/or resource exhaustion) on a Mumble client by causing it to load external files via the HTML. - -## Affected versions and configurations - -All 1.2.x versions of Mumble are affected. - -## Mitigation - -No known mitigation strategies exist for this issue. - -## Details - -By default, many Qt widgets sniff their text content to determine whether or not to use to render the text as HTML. However, in some places, the Mumble client neglected to properly escape external strings when used rich-text enabled Qt widgets. - -One case where this was an issue was when including user and channel names in Qt dialogs. However, this vector is automatically mitigated if using the default channel- and username regular expressions, since angle brackets are disallowed by it. - -Another case where this issue could be triggered was in the Certificate Wizard, where the subject common name and email addresses were not properly escaped. - -A similar problem exists with the tooltip for servers in the Mumble server list, where the server name was not properly escaped. - -While finding and fixing the above issues, any other instances where an explicit HTML-escape was deemed appropriate had one inserted. - -In some cases, instead of performing explicit HTML escapes, Qt widgets that were determined not to ever contain HTML content were changed to only be able to render plain text. - -## Credits - -This issue was originally fixed in the Mumble git repo by various commits from Tim Cooper and Mikkel Krautz. - -## Fix - -A fix for this issue has been released in Mumble 1.2.6. - -A patch that applies on top of Mumble 1.2.5 can be found at http://mumble.info/security/Mumble-SA-2014-006.patch - (for a detached PGP signature, append '.sig'). - -The fix is also available in the Mumble git repo as e30d7acda6c04b667618ac86f49786cf966a08fb (on the v1.2.6 branch). +--- +title: Mumble Security Advisory 2014-006 +date: 2014-05-14 +--- + +ID: Mumble-SA-2014-006 ([txt](../Mumble-SA-2014-005.txt), [sig](../Mumble-SA-2014-005.txt.sig), +[patch](../Mumble-SA-2014-005.patch), [patch sig](../Mumble-SA-2014-005.patch.sig), [Blog post](/blog/mumble-1.2.6/)) + +Date: May 2014 + +CVE Reference: Not assigned + +Product: Mumble + +Mumble Website: http://mumble.info + +Permalink: http://mumble.info/security/mumble-sa-2014-006 + +Last Updated: 2014-05-14 + +## Vulnerability + +The Mumble client did not properly HTML-escape some external strings before using them in a rich-text (HTML) context. + +In some situations, this could be abused to perform a Denial of Service attack (hang and/or resource exhaustion) on a +Mumble client by causing it to load external files via the HTML. + +## Affected versions and configurations + +All 1.2.x versions of Mumble are affected. + +## Mitigation + +No known mitigation strategies exist for this issue. + +## Details + +By default, many Qt widgets sniff their text content to determine whether or not to use to render the text as HTML. +However, in some places, the Mumble client neglected to properly escape external strings when used rich-text enabled Qt +widgets. + +One case where this was an issue was when including user and channel names in Qt dialogs. However, this vector is +automatically mitigated if using the default channel- and username regular expressions, since angle brackets are +disallowed by it. + +Another case where this issue could be triggered was in the Certificate Wizard, where the subject common name and email +addresses were not properly escaped. + +A similar problem exists with the tooltip for servers in the Mumble server list, where the server name was not properly +escaped. + +While finding and fixing the above issues, any other instances where an explicit HTML-escape was deemed appropriate had +one inserted. + +In some cases, instead of performing explicit HTML escapes, Qt widgets that were determined not to ever contain HTML +content were changed to only be able to render plain text. + +## Credits + +This issue was originally fixed in the Mumble git repo by various commits from Tim Cooper and Mikkel Krautz. + +## Fix + +A fix for this issue has been released in Mumble 1.2.6. + +A patch that applies on top of Mumble 1.2.5 can be found at http://mumble.info/security/Mumble-SA-2014-006.patch (for a +detached PGP signature, append '.sig'). + +The fix is also available in the Mumble git repo as e30d7acda6c04b667618ac86f49786cf966a08fb (on the v1.2.6 branch). diff --git a/hugo/content/security/Mumble-SA-2016-001.md b/hugo/content/security/Mumble-SA-2016-001.md index ee3672ba..cad40e1e 100644 --- a/hugo/content/security/Mumble-SA-2016-001.md +++ b/hugo/content/security/Mumble-SA-2016-001.md @@ -3,29 +3,33 @@ title: Mumble Security Advisory 2016-001 date: 2016-01-10 --- -ID: Mumble-SA-2016-001 ([txt](../Mumble-SA-2016-001.txt), [sig](../Mumble-SA-2016-001.txt.sig), [Blog post](/blog/mumble-1.2.13/)) +ID: Mumble-SA-2016-001 ([txt](../Mumble-SA-2016-001.txt), [sig](../Mumble-SA-2016-001.txt.sig), +[Blog post](/blog/mumble-1.2.13/)) -Date: January 2016 +Date: January 2016 -CVE Reference: Not assigned +CVE Reference: Not assigned -Product: Murmur +Product: Murmur -Mumble Website: https://www.mumble.info +Mumble Website: https://www.mumble.info -Permalink: https://www.mumble.info/security/mumble-sa-2016-001 +Permalink: https://www.mumble.info/security/mumble-sa-2016-001 -Last Updated: 2016-01-10 +Last Updated: 2016-01-10 ## Vulnerability It is possible to cause Murmur on Windows to stop receiving UDP packets by sending a crafted UDP packet. ## Affected versions and configurations + All 1.2.x versions of Murmur are affected when running on a Windows system. ## Mitigation -It is possible to mitigate this issue by disallowing UDP packets of length 0 to reach Murmur, for example via a firewall. + +It is possible to mitigate this issue by disallowing UDP packets of length 0 to reach Murmur, for example via a +firewall. ## Details @@ -35,18 +39,25 @@ On Unix-like systems, the UDP receive path is inside a loop. On Windows, it is not directly inside a loop. -However, the code path that handles error cases from the "recvfrom()" function is written to expect a loop, by making use of "break" and "continue". This code is shared between both Windows and Unix-like systems. +However, the code path that handles error cases from the "recvfrom()" function is written to expect a loop, by making +use of "break" and "continue". This code is shared between both Windows and Unix-like systems. -Because of this mismatch, it was possible to make Murmur on Windows break out of the outermost loop in the function that handles receiving UDP packets. The outermost loop is the main loop of the UDP receive code path in Murmur. Breaking out of this loop would cause all UDP processing to terminate. +Because of this mismatch, it was possible to make Murmur on Windows break out of the outermost loop in the function that +handles receiving UDP packets. The outermost loop is the main loop of the UDP receive code path in Murmur. Breaking out +of this loop would cause all UDP processing to terminate. A Murmur server that cannot receive UDP packets will lose two pieces of functionality: -- The ability to route voice packets between users via UDP. This means that clients cannot use UDP for voice communication. This can lead to temporary loss of service until the connected clients determine that no UDP transport is available. When no UDP connectivity is available, Mumble clients will fall back and use the TCP/TLS as a voice transport instead. Once clients have done this, service is restored. +- The ability to route voice packets between users via UDP. This means that clients cannot use UDP for voice + communication. This can lead to temporary loss of service until the connected clients determine that no UDP transport + is available. When no UDP connectivity is available, Mumble clients will fall back and use the TCP/TLS as a voice + transport instead. Once clients have done this, service is restored. -- The ability to respond to ping packets. - This means that users cannot see the ping time or user count when viewing the server in Mumble's connection dialog. +- The ability to respond to ping packets. This means that users cannot see the ping time or user count when viewing the + server in Mumble's connection dialog. -It is possible to regain the ability to receive UDP packets when a new user connects to the server. This is because a new client connection causes Murmur to ensure the UDP receive loop is running if it is not already. +It is possible to regain the ability to receive UDP packets when a new user connects to the server. This is because a +new client connection causes Murmur to ensure the UDP receive loop is running if it is not already. ## Credits diff --git a/hugo/content/security/_index.md b/hugo/content/security/_index.md index c31d6628..b52b2077 100644 --- a/hugo/content/security/_index.md +++ b/hugo/content/security/_index.md @@ -7,7 +7,8 @@ contentonly: true We always support our latest stable feature version. -Depending on the state of the project, version and environments we may patch older versions or support multiple feature versions. +Depending on the state of the project, version and environments we may patch older versions or support multiple feature +versions. ## Reporting a Vulnerability @@ -21,18 +22,25 @@ We will do our best to respond, verify them and resolve them as quickly as possi ### January -- [Mumble-SA-2016-001](/security/mumble-sa-2016-001/) ([txt](Mumble-SA-2016-001.txt), [sig](Mumble-SA-2016-001.txt.sig)), [Blog post](/blog/mumble-1.2.13/) +- [Mumble-SA-2016-001](/security/mumble-sa-2016-001/) ([txt](Mumble-SA-2016-001.txt), + [sig](Mumble-SA-2016-001.txt.sig)), [Blog post](/blog/mumble-1.2.13/) ## 2014 ### February -- [Mumble-SA-2014-001](/security/mumble-sa-2014-001/) ([txt](Mumble-SA-2014-001.txt), [sig](Mumble-SA-2014-001.txt.sig)), [Blog post](/blog/mumble-1.2.5/) -- [Mumble-SA-2014-002](/security/mumble-sa-2014-002/) ([txt](Mumble-SA-2014-002.txt), [sig](Mumble-SA-2014-002.txt.sig)), [Blog post](/blog/mumble-1.2.5/) -- [Mumble-SA-2014-003](/security/mumble-sa-2014-003/) ([txt](Mumble-SA-2014-003.txt), [sig](Mumble-SA-2014-003.txt.sig)), [Blog post](/blog/mumble-for-ios-1.2.3/) -- [Mumble-SA-2014-004](/security/mumble-sa-2014-004/) ([txt](Mumble-SA-2014-004.txt), [sig](Mumble-SA-2014-004.txt.sig)), [Blog post](/blog/mumble-for-ios-1.2.3/) +- [Mumble-SA-2014-001](/security/mumble-sa-2014-001/) ([txt](Mumble-SA-2014-001.txt), + [sig](Mumble-SA-2014-001.txt.sig)), [Blog post](/blog/mumble-1.2.5/) +- [Mumble-SA-2014-002](/security/mumble-sa-2014-002/) ([txt](Mumble-SA-2014-002.txt), + [sig](Mumble-SA-2014-002.txt.sig)), [Blog post](/blog/mumble-1.2.5/) +- [Mumble-SA-2014-003](/security/mumble-sa-2014-003/) ([txt](Mumble-SA-2014-003.txt), + [sig](Mumble-SA-2014-003.txt.sig)), [Blog post](/blog/mumble-for-ios-1.2.3/) +- [Mumble-SA-2014-004](/security/mumble-sa-2014-004/) ([txt](Mumble-SA-2014-004.txt), + [sig](Mumble-SA-2014-004.txt.sig)), [Blog post](/blog/mumble-for-ios-1.2.3/) ### May -- [Mumble-SA-2014-005](/security/mumble-sa-2014-005/) ([txt](Mumble-SA-2014-005.txt), [sig](Mumble-SA-2014-005.txt.sig), [patch](Mumble-SA-2014-005.patch), [patch sig](Mumble-SA-2014-005.patch.sig)), [Blog post](/blog/mumble-1.2.6/) -- [Mumble-SA-2014-006](/security/mumble-sa-2014-006/) ([txt](Mumble-SA-2014-006.txt), [sig](Mumble-SA-2014-006.txt.sig), [patch](Mumble-SA-2014-006.patch), [patch sig](Mumble-SA-2014-006.patch.sig)), [Blog post](/blog/mumble-1.2.6/) +- [Mumble-SA-2014-005](/security/mumble-sa-2014-005/) ([txt](Mumble-SA-2014-005.txt), [sig](Mumble-SA-2014-005.txt.sig), + [patch](Mumble-SA-2014-005.patch), [patch sig](Mumble-SA-2014-005.patch.sig)), [Blog post](/blog/mumble-1.2.6/) +- [Mumble-SA-2014-006](/security/mumble-sa-2014-006/) ([txt](Mumble-SA-2014-006.txt), [sig](Mumble-SA-2014-006.txt.sig), + [patch](Mumble-SA-2014-006.patch), [patch sig](Mumble-SA-2014-006.patch.sig)), [Blog post](/blog/mumble-1.2.6/) diff --git a/hugo/content/sponsors/index.md b/hugo/content/sponsors/index.md index 3bd1492b..9852e003 100644 --- a/hugo/content/sponsors/index.md +++ b/hugo/content/sponsors/index.md @@ -1,21 +1,23 @@ --- title: Sponsors --- + Our infrastructure is made possible thanks to the help of the following sponsors: ## Fastly {{< sponsors/logosvg "logos/fastly.svg" "Fastly’s logo" >}} -Thanks to [Fastly](https://www.fastly.com)’s CDN, only ~5% of the traffic hits our servers. The rest of the traffic is served by their insanely fast network. +Thanks to [Fastly](https://www.fastly.com)’s CDN, only ~5% of the traffic hits our servers. The rest of the traffic is +served by their insanely fast network. This service provides us quite a few important advantages, such as: -* Caching. This allowed our websites to be reachable during server(s) maintenance. -* High speed. Very important, especially for our download server. -* Lower bandwidth costs (our servers are not sponsored). -* IPv6 support, even for IPv4-only backends. -* DDoS protection. +- Caching. This allowed our websites to be reachable during server(s) maintenance. +- High speed. Very important, especially for our download server. +- Lower bandwidth costs (our servers are not sponsored). +- IPv6 support, even for IPv4-only backends. +- DDoS protection. Also, we haven’t experienced a single downtime in many years. @@ -25,17 +27,21 @@ Also, we haven’t experienced a single downtime in many years. Oregon State University has an [Open Source Lab](https://osuosl.org) which supports projects like ours. -They're providing us access to a performant ARM64/AArch64 instance that we can use to build and test for that architecture. +They're providing us access to a performant ARM64/AArch64 instance that we can use to build and test for that +architecture. ## MacStadium {{< sponsors/logosvg "logos/macstadium.svg" "MacStadium’s logo" >}} -Thanks to [MacStadium](https://www.macstadium.com) we can maintain support for macOS. They provide us access to a Mac Mini. +Thanks to [MacStadium](https://www.macstadium.com) we can maintain support for macOS. They provide us access to a Mac +Mini. -Before that, the only member of our team who owns a Mac used to do all the macOS-related work, until he unfortunately had no time to dedicate to the project anymore. +Before that, the only member of our team who owns a Mac used to do all the macOS-related work, until he unfortunately +had no time to dedicate to the project anymore. -We’re very happy with the service so far. *Slightly* less happy with macOS, but that’s another story (and unrelated to the service itself). +We’re very happy with the service so far. _Slightly_ less happy with macOS, but that’s another story (and unrelated to +the service itself). ## 1Password @@ -47,9 +53,10 @@ A team member had already been using their service for a while, so we decided to Fast forward to today and we can say for sure that we couldn't be happier. -* The web interface is great. Navigating between multiple vaults and managing the organization is intuitive. -* The password generator is excellent, it outputs passwords that can be easily typed. -* No trackers. This is very important, especially when dealing with credentials. -* 2FA is supported, allowing us to use it for shared accounts. +- The web interface is great. Navigating between multiple vaults and managing the organization is intuitive. +- The password generator is excellent, it outputs passwords that can be easily typed. +- No trackers. This is very important, especially when dealing with credentials. +- 2FA is supported, allowing us to use it for shared accounts. -They are now offering us their service for free! For reference: https://github.com/1Password/1password-teams-open-source/pull/243 +They are now offering us their service for free! For reference: +https://github.com/1Password/1password-teams-open-source/pull/243 diff --git a/hugo/content/www-test/shortcode-wiki/index.md b/hugo/content/www-test/shortcode-wiki/index.md index 859126c4..caaff65e 100644 --- a/hugo/content/www-test/shortcode-wiki/index.md +++ b/hugo/content/www-test/shortcode-wiki/index.md @@ -1,38 +1,38 @@ ---- -title: "wiki Shortcode Test Page" -draft: true ---- - -# The `{{}}` Shortcode - -## Home - -Shortcode | Result -----------|-------- -`{{}}` | {{< wiki />}} - -## Positional parameters - -Shortcode | Result -----------|-------- -`{{}}` | {{< wiki Skinning />}} -`{{}}` | {{< wiki "ACL Tutorial/Deutsch" />}} -`{{}}` | {{< wiki Skins MyTitle />}} -`{{}}` | {{< wiki Skins "MyTitle Spaced" />}} -`{{}}` | {{< wiki "ACL Tutorial/Deutsch" "Spa ced" />}} - -## Named Parameters - -Shortcode | Result -----------|-------- -`{{}}` | {{< wiki path="Contributing" />}} -`{{}}` | {{< wiki path="ACL Tutorial/Deutsch" />}} -`{{}}` | {{< wiki path="ACL_Tutorial/Deutsch" />}} -`{{}}Contr.{{}}` | {{< wiki path="Contributing" >}}Contr.{{}} -`{{}}Tut DE{{}}` | {{< wiki path="ACL Tutorial/Deutsch" >}}Tut DE{{< /wiki >}} - -# Test - -Within {{< wiki "Test" />}} Text. - -No{{< wiki "Test" />}}Space. +--- +title: "wiki Shortcode Test Page" +draft: true +--- + +# The `{{}}` Shortcode + +## Home + +| Shortcode | Result | +| ------------------- | ------------- | +| `{{}}` | {{< wiki />}} | + +## Positional parameters + +| Shortcode | Result | +| ---------------------------------------------------- | ---------------------------------------------- | +| `{{}}` | {{< wiki Skinning />}} | +| `{{}}` | {{< wiki "ACL Tutorial/Deutsch" />}} | +| `{{}}` | {{< wiki Skins MyTitle />}} | +| `{{}}` | {{< wiki Skins "MyTitle Spaced" />}} | +| `{{}}` | {{< wiki "ACL Tutorial/Deutsch" "Spa ced" />}} | + +## Named Parameters + +| Shortcode | Result | +| --------------------------------------------------------------------- | ----------------------------------------------------------- | +| `{{}}` | {{< wiki path="Contributing" />}} | +| `{{}}` | {{< wiki path="ACL Tutorial/Deutsch" />}} | +| `{{}}` | {{< wiki path="ACL_Tutorial/Deutsch" />}} | +| `{{}}Contr.{{}}` | {{< wiki path="Contributing" >}}Contr.{{}} | +| `{{}}Tut DE{{}}` | {{< wiki path="ACL Tutorial/Deutsch" >}}Tut DE{{< /wiki >}} | + +# Test + +Within {{< wiki "Test" />}} Text. + +No{{< wiki "Test" />}}Space. diff --git a/hugo/static/css/github-markdown.css b/hugo/static/css/github-markdown.css index 3af07e34..bdaa053d 100644 --- a/hugo/static/css/github-markdown.css +++ b/hugo/static/css/github-markdown.css @@ -3,7 +3,8 @@ @font-face { font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff'); + src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) + format("woff"); } .markdown-body { @@ -380,11 +381,11 @@ content: ""; } -.markdown-body>*:first-child { +.markdown-body > *:first-child { margin-top: 0 !important; } -.markdown-body>*:last-child { +.markdown-body > *:last-child { margin-bottom: 0 !important; } @@ -429,11 +430,11 @@ border-left: 0.25em solid #dfe2e5; } -.markdown-body blockquote>:first-child { +.markdown-body blockquote > :first-child { margin-top: 0; } -.markdown-body blockquote>:last-child { +.markdown-body blockquote > :last-child { margin-bottom: 0; } @@ -538,11 +539,11 @@ word-wrap: break-all; } -.markdown-body li>p { +.markdown-body li > p { margin-top: 16px; } -.markdown-body li+li { +.markdown-body li + li { margin-top: 0.25em; } @@ -594,11 +595,11 @@ background-color: #fff; } -.markdown-body img[align=right] { +.markdown-body img[align="right"] { padding-left: 20px; } -.markdown-body img[align=left] { +.markdown-body img[align="left"] { padding-right: 20px; } @@ -606,7 +607,7 @@ padding: 0.2em 0.4em; margin: 0; font-size: 85%; - background-color: rgba(27,31,35,0.05); + background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; } @@ -614,7 +615,7 @@ word-wrap: normal; } -.markdown-body pre>code { +.markdown-body pre > code { padding: 0; margin: 0; font-size: 100%; @@ -663,7 +664,13 @@ .markdown-body kbd { display: inline-block; padding: 3px 5px; - font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font: + 11px "SFMono-Regular", + Consolas, + "Liberation Mono", + Menlo, + Courier, + monospace; line-height: 10px; color: #444d56; vertical-align: middle; @@ -674,7 +681,7 @@ box-shadow: inset 0 -1px 0 #c6cbd1; } -.markdown-body :checked+.radio-label { +.markdown-body :checked + .radio-label { position: relative; z-index: 1; border-color: #0366d6; @@ -684,7 +691,7 @@ list-style-type: none; } -.markdown-body .task-list-item+.task-list-item { +.markdown-body .task-list-item + .task-list-item { margin-top: 3px; } diff --git a/hugo/static/css/reset.css b/hugo/static/css/reset.css index ed11813c..3675e645 100644 --- a/hugo/static/css/reset.css +++ b/hugo/static/css/reset.css @@ -3,46 +3,127 @@ License: none (public domain) */ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; } body { - line-height: 1; + line-height: 1; } -ol, ul { - list-style: none; +ol, +ul { + list-style: none; } -blockquote, q { - quotes: none; +blockquote, +q { + quotes: none; } -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; } table { - border-collapse: collapse; - border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } diff --git a/hugo/static/icons/SOURCE+LICENSE.md b/hugo/static/icons/SOURCE+LICENSE.md index c68dc1ae..a9b1b205 100644 --- a/hugo/static/icons/SOURCE+LICENSE.md +++ b/hugo/static/icons/SOURCE+LICENSE.md @@ -1,7 +1,7 @@ -# File Sources and Licenses - -## Feed-icon.svg - -https://commons.wikimedia.org/wiki/File:Feed-icon.svg - -MPL / GPL / LGPL tri-license +# File Sources and Licenses + +## Feed-icon.svg + +https://commons.wikimedia.org/wiki/File:Feed-icon.svg + +MPL / GPL / LGPL tri-license