File: client_settings.hpp

package info (click to toggle)
snapcast 0.34.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,252 kB
  • sloc: cpp: 40,067; python: 3,260; sh: 455; makefile: 16
file content (131 lines) | stat: -rw-r--r-- 3,527 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/***
    This file is part of snapcast
    Copyright (C) 2014-2025  Johannes Pohl

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
***/

#pragma once

// local headers
#include "common/sample_format.hpp"
#include "common/stream_uri.hpp"
#include "player/pcm_device.hpp"

// standard headers
#include <filesystem>
#include <optional>
#include <string>


/// Snapclient settings
struct ClientSettings
{
    /// Sharing mode for audio device
    enum class SharingMode : char
    {
        unspecified, ///< unspecified
        exclusive,   ///< exclusice access
        shared       ///< shared access
    };

    /// Mixer settings
    struct Mixer
    {
        /// Mixer mode
        enum class Mode : char
        {
            hardware, ///< hardware mixer
            software, ///< software mixer
            script,   ///< run a mixer script
            none      ///< no mixer
        };

        /// the configured mixer mode
        Mode mode{Mode::software};
        /// mixer parameter
        std::string parameter;
    };

    /// Server settings
    struct Server
    {
        /// Auth info
        struct Auth
        {
            /// the scheme (Basic, Plain, bearer, ...)
            std::string scheme;
            /// the param (base64 encoded "<user>:<password>", "<user>:<password>", token, ...)
            std::string param;
        };

        /// Server host
        StreamUri uri;
        /// auth info
        std::optional<Auth> auth;
        /// server certificate
        std::optional<std::filesystem::path> server_certificate;
        /// Certificate file
        std::filesystem::path certificate;
        /// Private key file
        std::filesystem::path certificate_key;
        /// Password for encrypted key file
        std::string key_password;
        /// Is ssl in use?
        bool isSsl() const
        {
            return (uri.scheme == "wss");
        }
    };

    /// The audio player (DAC)
    struct Player
    {
        /// name of the player
        std::string player_name;
        /// player parameters
        std::string parameter;
        /// additional latency of the DAC [ms]
        int latency{0};
        /// the DAC
        player::PcmDevice pcm_device;
        /// Sampleformat to be uses, i.e. 48000:16:2
        SampleFormat sample_format;
        /// The sharing mode
        SharingMode sharing_mode{SharingMode::unspecified};
        /// Mixer settings
        Mixer mixer;
    };

    /// Log settings
    struct Logging
    {
        /// The log sink (null,system,stdout,stderr,file)
        std::string sink;
        /// Log filter
        std::string filter{"*:info"};
    };

    /// The snapclient process instance
    size_t instance{1};
    /// The host id, presented to the server
    std::string host_id;

    /// Server settings
    Server server;
    /// Player settings
    Player player;
    /// Logging settings
    Logging logging;
};