summaryrefslogtreecommitdiff
path: root/docs/main_8cpp_source.html
blob: c0000ee64e22862ed7f610bc3e3a1f382b2569ab (plain)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>AudioManager: AudioManagerDaemon/src/main.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">AudioManager
   &#160;<span id="projectnumber">7.6.6</span>
   </div>
   <div id="projectbrief">Native Application Runtime Environment</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('main_8cpp_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">main.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="main_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;audiomanagerconfig.h&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#ifdef WITH_CAPI_WRAPPER</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">    #include &quot;<a class="code" href="CAmCommonAPIWrapper_8h.html">CAmCommonAPIWrapper.h</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#ifdef WITH_DBUS_WRAPPER</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">    #include &quot;<a class="code" href="CAmDbusWrapper_8h.html">CAmDbusWrapper.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#ifdef WITH_SYSTEMD_WATCHDOG</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">    #include &quot;<a class="code" href="CAmWatchdog_8h.html">CAmWatchdog.h</a>&quot;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;sys/resource.h&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &lt;csignal&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;cstdio&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#include &lt;new&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmRouter_8h.html">CAmRouter.h</a>&quot;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmControlSender_8h.html">CAmControlSender.h</a>&quot;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmCommandSender_8h.html">CAmCommandSender.h</a>&quot;</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmRoutingSender_8h.html">CAmRoutingSender.h</a>&quot;</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmRoutingReceiver_8h.html">CAmRoutingReceiver.h</a>&quot;</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmCommandReceiver_8h.html">CAmCommandReceiver.h</a>&quot;</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmControlReceiver_8h.html">CAmControlReceiver.h</a>&quot;</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmDltWrapper_8h.html">CAmDltWrapper.h</a>&quot;</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmSocketHandler_8h.html">CAmSocketHandler.h</a>&quot;</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmCommandLineSingleton_8h.html">CAmCommandLineSingleton.h</a>&quot;</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="CAmDatabaseHandlerMap_8h.html">CAmDatabaseHandlerMap.h</a>&quot;</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#ifndef AUDIOMANGER_APP_ID</span></div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="main_8cpp.html#af7d5e0e2048b13686c69caeb0725b5d9">   64</a></span>&#160;<span class="preprocessor">    #define AUDIOMANGER_APP_ID &quot;AUDI&quot;</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="preprocessor">#ifndef AUDIOMANGER_APP_DESCRIPTION</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="main_8cpp.html#a705ab796e3da5af624720a7f8ea39402">   68</a></span>&#160;<span class="preprocessor">    #define AUDIOMANGER_APP_DESCRIPTION &quot;AudioManager&quot;</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceam.html">am</a>;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment">//we need these because we parse them beforehand.</span></div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="main_8cpp.html#acf9448b8681363c06fcc6fa2fe67f6a1">   75</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="main_8cpp.html#acf9448b8681363c06fcc6fa2fe67f6a1">listCommandPluginDirs</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="main_8cpp.html#a2f8343120dfa1adbb5fa439c4a915b5f">   76</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="main_8cpp.html#a2f8343120dfa1adbb5fa439c4a915b5f">listRoutingPluginDirs</a>;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment">// List of signals to be handled with signalfd</span></div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="main_8cpp.html#a94173f0fcddf0ddf80beacba2ef9c914">   79</a></span>&#160;std::vector&lt;uint8_t&gt; <a class="code" href="main_8cpp.html#a94173f0fcddf0ddf80beacba2ef9c914">listOfSignalsFD</a> = {SIGHUP, SIGTERM, SIGCHLD};</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment">//commandline options used by the Audiomanager itself</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#a9651ad77ac5b1ea702db1fba38dbb25a">controllerPlugin</a>(<span class="stringliteral">&quot;c&quot;</span>,<span class="stringliteral">&quot;controllerPlugin&quot;</span>,<span class="stringliteral">&quot;use controllerPlugin full path with .so ending&quot;</span>,<span class="keyword">false</span>,CONTROLLER_PLUGIN_DIR,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#a852c05eb5ba04abd0c9007ebc04f34da">additionalCommandPluginDirs</a>(<span class="stringliteral">&quot;L&quot;</span>,<span class="stringliteral">&quot;additionalCommandPluginDirs&quot;</span>,<span class="stringliteral">&quot;additional path for looking for command plugins, can be used after -l option&quot;</span>,<span class="keyword">false</span>,<span class="stringliteral">&quot; &quot;</span>,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#ab5b77ba1f3bcc145415fb472684fdb87">additionalRoutingPluginDirs</a>(<span class="stringliteral">&quot;R&quot;</span>,<span class="stringliteral">&quot;additionalRoutingPluginDirs&quot;</span>,<span class="stringliteral">&quot;additional path for looking for routing plugins, can be used after -r option &quot;</span>,<span class="keyword">false</span>,<span class="stringliteral">&quot; &quot;</span>,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#adaa5dd304567dc8e32b2cbc1eb048f7e">routingPluginDir</a>(<span class="stringliteral">&quot;r&quot;</span>,<span class="stringliteral">&quot;RoutingPluginDir&quot;</span>,<span class="stringliteral">&quot;path for looking for routing plugins&quot;</span>,<span class="keyword">false</span>,<span class="stringliteral">&quot; &quot;</span>,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#a45c5c45bad7cd6af4b436bae93c16f6e">commandPluginDir</a>(<span class="stringliteral">&quot;l&quot;</span>,<span class="stringliteral">&quot;CommandPluginDir&quot;</span>,<span class="stringliteral">&quot;path for looking for command plugins&quot;</span>,<span class="keyword">false</span>,<span class="stringliteral">&quot; &quot;</span>,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;TCLAP::ValueArg&lt;std::string&gt; <a class="code" href="main_8cpp.html#af300dd02580ca5f086d5903e5145e300">dltLogFilename</a>(<span class="stringliteral">&quot;F&quot;</span>,<span class="stringliteral">&quot;dltLogFilename&quot;</span>,<span class="stringliteral">&quot;the name of the logfile, absolute path. Only if logging is et to file&quot;</span>,<span class="keyword">false</span>,<span class="stringliteral">&quot; &quot;</span>,<span class="stringliteral">&quot;string&quot;</span>);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;TCLAP::ValueArg&lt;unsigned int&gt; <a class="code" href="main_8cpp.html#a371632b96db9def1ac720a43326272c9">dltOutput</a> (<span class="stringliteral">&quot;O&quot;</span>,<span class="stringliteral">&quot;dltOutput&quot;</span>,<span class="stringliteral">&quot;defines where logs are written. 0=dlt-daemon(default), 1=command line, 2=file &quot;</span>,<span class="keyword">false</span>,0,<span class="stringliteral">&quot;int&quot;</span>);</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;TCLAP::SwitchArg <a class="code" href="main_8cpp.html#afa960755d9057786161060f83ef27897">dltEnable</a> (<span class="stringliteral">&quot;e&quot;</span>,<span class="stringliteral">&quot;dltEnable&quot;</span>,<span class="stringliteral">&quot;Enables or disables dlt logging. Default = enabled&quot;</span>,<span class="keyword">true</span>);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;TCLAP::SwitchArg <a class="code" href="main_8cpp.html#a7920a189875bb1a97c86506493483355">dbusWrapperTypeBool</a> (<span class="stringliteral">&quot;T&quot;</span>,<span class="stringliteral">&quot;dbusType&quot;</span>,<span class="stringliteral">&quot;DbusType to be used by CAmDbusWrapper: if option is selected, DBUS_SYSTEM is used otherwise DBUS_SESSION&quot;</span>,<span class="keyword">false</span>);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;TCLAP::SwitchArg <a class="code" href="main_8cpp.html#a89176a3c961e9f408ca3c42c29d7e105">currentSettings</a>(<span class="stringliteral">&quot;i&quot;</span>,<span class="stringliteral">&quot;currentSettings&quot;</span>,<span class="stringliteral">&quot;print current settings and exit&quot;</span>,<span class="keyword">false</span>);</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;TCLAP::SwitchArg <a class="code" href="main_8cpp.html#a89ab9082caaf2543afc60151c9801702">daemonizeAM</a>(<span class="stringliteral">&quot;d&quot;</span>,<span class="stringliteral">&quot;daemonize&quot;</span>,<span class="stringliteral">&quot;daemonize Audiomanager. Better use systemd...&quot;</span>,<span class="keyword">false</span>);</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">   94</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="main_8cpp.html#a16290b108a943e54375f08cb9ad5fc5a">fd0</a>, <a class="code" href="main_8cpp.html#ac62faf1ed925a0da21ba52b228cb9a47">fd1</a>, <a class="code" href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">fd2</a>;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="preprocessor">#ifdef WITH_DBUS_WRAPPER</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    DBusBusType dbusWrapperType=DBUS_BUS_SESSION;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="main_8cpp.html#acc628ca4f61759495f09289b8418d358">  103</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="main_8cpp.html#acc628ca4f61759495f09289b8418d358">OutOfMemoryHandler</a>()</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;{</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;No more memory - bye&quot;</span>);</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">throw</span> std::runtime_error(std::string(<span class="stringliteral">&quot;SocketHandler::start_listenting ppoll returned with error.&quot;</span>));</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="main_8cpp.html#a869452f0c0952acd39230fcf0ef89c1e">  112</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="main_8cpp.html#a869452f0c0952acd39230fcf0ef89c1e">daemonize</a>()</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;{</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    umask(0);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    std::string dir = <span class="stringliteral">&quot;/&quot;</span>;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    rlimit rl;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keywordflow">if</span> (getrlimit(RLIMIT_NOFILE, &amp;rl) &lt; 0)</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    {</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;can&#39;t get file limit &quot;</span>);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    }</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    pid_t pid;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">if</span> ((pid = fork()) &lt; 0)</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    {</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;cannot fork!&quot;</span>);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    }</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid != 0)</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    {</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        exit(0);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    }</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    setsid();</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordflow">if</span> (!dir.empty() &amp;&amp; chdir(dir.c_str()) &lt; 0)</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    {</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;couldn&#39;t chdir to the new directory&quot;</span>);</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    }</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="keywordflow">if</span> (rl.rlim_max == RLIM_INFINITY)</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    {</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        rl.rlim_max = 1024;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    }</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; rl.rlim_max; i++)</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        close(i);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    }</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <a class="code" href="main_8cpp.html#a16290b108a943e54375f08cb9ad5fc5a">fd0</a> = open(<span class="stringliteral">&quot;/dev/null&quot;</span>, O_RDONLY);</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <a class="code" href="main_8cpp.html#ac62faf1ed925a0da21ba52b228cb9a47">fd1</a> = open(<span class="stringliteral">&quot;/dev/null&quot;</span>, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <a class="code" href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">fd2</a> = open(<span class="stringliteral">&quot;/dev/null&quot;</span>, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#a16290b108a943e54375f08cb9ad5fc5a">fd0</a> != STDIN_FILENO || <a class="code" href="main_8cpp.html#ac62faf1ed925a0da21ba52b228cb9a47">fd1</a> != STDOUT_FILENO || <a class="code" href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">fd2</a> != STDERR_FILENO)</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    {</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;new standard file descriptors were not opened&quot;</span>);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    }</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;}</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="main_8cpp.html#a20381c995d4b9c2fe11a65df9700fb76">  162</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="main_8cpp.html#a20381c995d4b9c2fe11a65df9700fb76">printCmdInformation</a>()</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;{</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    printf(<span class="stringliteral">&quot;\n\n\nCurrent settings:\n\n&quot;</span>);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    printf(<span class="stringliteral">&quot;\tAudioManagerDaemon Version:\t\t%s\n&quot;</span>, DAEMONVERSION);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    printf(<span class="stringliteral">&quot;\tControllerPlugin: \t\t\t%s\n&quot;</span>, <a class="code" href="main_8cpp.html#a9651ad77ac5b1ea702db1fba38dbb25a">controllerPlugin</a>.getValue().c_str());</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    printf(<span class="stringliteral">&quot;\tDirectories of CommandPlugins: \t\t\n&quot;</span>);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    std::vector&lt;std::string&gt;::const_iterator dirIter = listCommandPluginDirs.begin();</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    std::vector&lt;std::string&gt;::const_iterator dirIterEnd = listCommandPluginDirs.end();</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="keywordflow">for</span> (; dirIter &lt; dirIterEnd; ++dirIter)</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    {</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        printf(<span class="stringliteral">&quot;\t                              \t\t%s\n&quot;</span>, dirIter-&gt;c_str());</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    }</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    printf(<span class="stringliteral">&quot;\tDirectories of RoutingPlugins: \t\t\n&quot;</span>);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    dirIter = listRoutingPluginDirs.begin();</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    dirIterEnd = listRoutingPluginDirs.end();</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordflow">for</span> (; dirIter &lt; dirIterEnd; ++dirIter)</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    {</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        printf(<span class="stringliteral">&quot;\t                              \t\t%s\n&quot;</span>, dirIter-&gt;c_str());</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    }</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    exit(0);</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> signalHandler(<span class="keywordtype">int</span> sig, siginfo_t *siginfo, <span class="keywordtype">void</span> *context)</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    (void) sig;</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    (void) siginfo;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    (void) context;</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    <a class="code" href="namespaceam.html#a47d650dc91db97c1f9323b4ed5cf4fd6">logInfo</a>(<span class="stringliteral">&quot;signal handler was called, signal&quot;</span>,sig);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">switch</span> (sig)</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    {</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        <span class="comment">/*ctl +c lets call direct controllerRundown, because we might be blocked at the moment.</span></div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<span class="comment">        But there is the risk of interrupting something important */</span></div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="keywordflow">case</span> SIGINT:</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;            <a class="code" href="classam_1_1CAmControlSender.html#a347a2af727aeb11657f145329dd23dd8">CAmControlSender::CallsetControllerRundown</a>(sig);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        <span class="comment">/* huch- we are getting killed. Better take the fast but risky way: */</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="keywordflow">case</span> SIGQUIT:</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;            <a class="code" href="classam_1_1CAmControlSender.html#a347a2af727aeb11657f145329dd23dd8">CAmControlSender::CallsetControllerRundown</a>(sig);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    }</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;}</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="main_8cpp.html#a2f6e0286f1ab9c12d22605627f8bf07e">  216</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="main_8cpp.html#a2f6e0286f1ab9c12d22605627f8bf07e">mainProgram</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;{</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="comment">//initialize the commandline parser, and add all neccessary commands</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        TCLAP::CmdLine* cmd(<a class="code" href="classam_1_1CAmCommandLineSingleton.html#a40a0445d4c7fef4aebdcc46676b33850">CAmCommandLineSingleton::instanciateOnce</a>(<span class="stringliteral">&quot;The team of the AudioManager wishes you a nice day!&quot;</span>,<span class="charliteral">&#39; &#39;</span>,DAEMONVERSION,<span class="keyword">true</span>));</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a9651ad77ac5b1ea702db1fba38dbb25a">controllerPlugin</a>);</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a852c05eb5ba04abd0c9007ebc04f34da">additionalCommandPluginDirs</a>);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a45c5c45bad7cd6af4b436bae93c16f6e">commandPluginDir</a>);</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#ab5b77ba1f3bcc145415fb472684fdb87">additionalRoutingPluginDirs</a>);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#adaa5dd304567dc8e32b2cbc1eb048f7e">routingPluginDir</a>);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a89176a3c961e9f408ca3c42c29d7e105">currentSettings</a>);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a89ab9082caaf2543afc60151c9801702">daemonizeAM</a>);</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#afa960755d9057786161060f83ef27897">dltEnable</a>);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#af300dd02580ca5f086d5903e5145e300">dltLogFilename</a>);</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a371632b96db9def1ac720a43326272c9">dltOutput</a>);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="preprocessor">#ifdef WITH_DBUS_WRAPPER</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        cmd-&gt;add(<a class="code" href="main_8cpp.html#a7920a189875bb1a97c86506493483355">dbusWrapperTypeBool</a>);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    }</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <span class="keywordflow">catch</span> (TCLAP::ArgException &amp;e)  <span class="comment">// catch any exceptions</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    { std::cerr &lt;&lt; <span class="stringliteral">&quot;error: &quot;</span> &lt;&lt; e.error() &lt;&lt; <span class="stringliteral">&quot; for arg &quot;</span> &lt;&lt; e.argId() &lt;&lt; std::endl; }</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    <span class="comment">//hen and egg. We need to parse a part of the commandline options to get the paths of the controller and the plugins.</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <span class="comment">//So we do some little parsing first and the real parsing later so that the plugins can profit from that.</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <a class="code" href="classam_1_1CAmCommandLineSingleton.html#ab3296f24eaef2d80370ee9eaaa3b0577">CAmCommandLineSingleton::instance</a>()-&gt;preparse(argc,argv);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#a89ab9082caaf2543afc60151c9801702">daemonizeAM</a>.getValue())</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;    {</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <a class="code" href="main_8cpp.html#a869452f0c0952acd39230fcf0ef89c1e">daemonize</a>();</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    }</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <a class="code" href="classam_1_1CAmDltWrapper.html#ade4bf08f260e648ce3036d055fde0c10">CAmDltWrapper::instanctiateOnce</a>(<a class="code" href="main_8cpp.html#af7d5e0e2048b13686c69caeb0725b5d9">AUDIOMANGER_APP_ID</a>, <a class="code" href="main_8cpp.html#a705ab796e3da5af624720a7f8ea39402">AUDIOMANGER_APP_DESCRIPTION</a> ,<a class="code" href="main_8cpp.html#afa960755d9057786161060f83ef27897">dltEnable</a>.getValue(),<span class="keyword">static_cast&lt;</span><a class="code" href="classam_1_1CAmDltWrapper.html#aff17466b9effa921b51540e2b13d9499">am::CAmDltWrapper::logDestination</a><span class="keyword">&gt;</span>(<a class="code" href="main_8cpp.html#a371632b96db9def1ac720a43326272c9">dltOutput</a>.getValue()),<a class="code" href="main_8cpp.html#af300dd02580ca5f086d5903e5145e300">dltLogFilename</a>.getValue());</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="comment">//Instantiate all classes. Keep in same order !</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <a class="code" href="classam_1_1CAmSocketHandler.html">CAmSocketHandler</a> iSocketHandler;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keywordflow">if</span>(iSocketHandler.fatalErrorOccurred())</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    {</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(std::string(<span class="stringliteral">&quot;CAmSocketHandler: Could not create pipe or file descriptor is invalid.&quot;</span>));</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    }</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="namespaceam.html#aa3dcb70029da317d661b6f422de1b4cea796d4cc86cd1605f4307478c128eee36">E_OK</a> != iSocketHandler.listenToSignals(listOfSignalsFD))</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;      <a class="code" href="namespaceam.html#a8d6015cc712615bbe2fc1cd7d8b94d15">logWarning</a>(<span class="stringliteral">&quot;CAmSocketHandler failed to register itself as signal handler.&quot;</span>);</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    }</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="comment">//Register signal handler</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <a class="code" href="namespaceam.html#af782e2735b1adf1e43a9d530cee340aa">sh_pollHandle_t</a> signalHandler;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    iSocketHandler.addSignalHandler([&amp;](<span class="keyword">const</span> <a class="code" href="namespaceam.html#af782e2735b1adf1e43a9d530cee340aa">sh_pollHandle_t</a> handle, <span class="keyword">const</span> signalfd_siginfo &amp; info, <span class="keywordtype">void</span>* userData){</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="keywordtype">unsigned</span> sig = info.ssi_signo;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="keywordtype">unsigned</span> user = info.ssi_uid;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        <a class="code" href="namespaceam.html#a47d650dc91db97c1f9323b4ed5cf4fd6">logInfo</a>(<span class="stringliteral">&quot;signal handler was called from user&quot;</span>, user, <span class="stringliteral">&quot;with signal &quot;</span>,sig);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="keywordflow">switch</span> (sig)</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        {</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;            <span class="comment">/* more friendly here assuming systemd wants to stop us, so we can use the mainloop */</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;            <span class="keywordflow">case</span> SIGTERM:</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;                <a class="code" href="classam_1_1CAmControlSender.html#a6c0d99f14b5c80aa0e0f937c92abc023">CAmControlSender::CallsetControllerRundownSafe</a>(sig);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;            <span class="comment">/* looks friendly, too, so lets take the long run */</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;            <span class="keywordflow">case</span> SIGHUP:</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;                <a class="code" href="classam_1_1CAmControlSender.html#a6c0d99f14b5c80aa0e0f937c92abc023">CAmControlSender::CallsetControllerRundownSafe</a>(sig);</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;            <span class="keywordflow">default</span>:</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;                <span class="keywordflow">break</span>;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        }</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    },signalHandler,NULL);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="main_8cpp.html#a45c5c45bad7cd6af4b436bae93c16f6e">commandPluginDir</a>.isSet())</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        listCommandPluginDirs.clear();</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        listCommandPluginDirs.push_back(<a class="code" href="main_8cpp.html#a45c5c45bad7cd6af4b436bae93c16f6e">commandPluginDir</a>.getValue());</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    }</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#a852c05eb5ba04abd0c9007ebc04f34da">additionalCommandPluginDirs</a>.isSet())</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        listCommandPluginDirs.push_back(<a class="code" href="main_8cpp.html#a852c05eb5ba04abd0c9007ebc04f34da">additionalCommandPluginDirs</a>.getValue());</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    }</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="keywordflow">if</span>(<a class="code" href="main_8cpp.html#adaa5dd304567dc8e32b2cbc1eb048f7e">routingPluginDir</a>.isSet())</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    {</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        listRoutingPluginDirs.clear();</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        listRoutingPluginDirs.push_back(<a class="code" href="main_8cpp.html#adaa5dd304567dc8e32b2cbc1eb048f7e">routingPluginDir</a>.getValue());</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    }</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#ab5b77ba1f3bcc145415fb472684fdb87">additionalRoutingPluginDirs</a>.isSet())</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    {</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;        listRoutingPluginDirs.push_back(<a class="code" href="main_8cpp.html#ab5b77ba1f3bcc145415fb472684fdb87">additionalRoutingPluginDirs</a>.getValue());</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    }</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="comment">//in this place, the plugins can get the gloval commandlineparser via CAmCommandLineSingleton::instance() and add their options to the commandline</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">//this must be done in the constructor.</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="comment">//later when the plugins are started, the commandline is already parsed and the objects defined before can be used to get the neccesary information</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    </div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    <a class="code" href="classam_1_1CAmDatabaseHandlerMap.html">CAmDatabaseHandlerMap</a> iDatabaseHandler;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <a class="code" href="classam_1_1IAmDatabaseHandler.html">IAmDatabaseHandler</a> *pDatabaseHandler = <span class="keyword">dynamic_cast&lt;</span><a class="code" href="classam_1_1IAmDatabaseHandler.html">IAmDatabaseHandler</a>*<span class="keyword">&gt;</span>( &amp;iDatabaseHandler );</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <a class="code" href="classam_1_1CAmRoutingSender.html">CAmRoutingSender</a> iRoutingSender(listRoutingPluginDirs,pDatabaseHandler);</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <a class="code" href="classam_1_1CAmCommandSender.html">CAmCommandSender</a> iCommandSender(listCommandPluginDirs, &amp;iSocketHandler);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <a class="code" href="classam_1_1CAmControlSender.html">CAmControlSender</a> iControlSender(<a class="code" href="main_8cpp.html#a9651ad77ac5b1ea702db1fba38dbb25a">controllerPlugin</a>.getValue(),&amp;iSocketHandler);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    {</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        <span class="comment">//parse the commandline options</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;        <a class="code" href="classam_1_1CAmCommandLineSingleton.html#ab3296f24eaef2d80370ee9eaaa3b0577">CAmCommandLineSingleton::instance</a>()-&gt;reset();</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <a class="code" href="classam_1_1CAmCommandLineSingleton.html#ab3296f24eaef2d80370ee9eaaa3b0577">CAmCommandLineSingleton::instance</a>()-&gt;parse(argc,argv);</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#a89176a3c961e9f408ca3c42c29d7e105">currentSettings</a>.getValue())</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;        {</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;            <a class="code" href="main_8cpp.html#a20381c995d4b9c2fe11a65df9700fb76">printCmdInformation</a>();</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        }</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    }</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="keywordflow">catch</span> (TCLAP::ArgException &amp;e)  <span class="comment">// catch any exceptions</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    { std::cerr &lt;&lt; <span class="stringliteral">&quot;error: &quot;</span> &lt;&lt; e.error() &lt;&lt; <span class="stringliteral">&quot; for arg &quot;</span> &lt;&lt; e.argId() &lt;&lt; std::endl; }</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <a class="code" href="namespaceam.html#a47d650dc91db97c1f9323b4ed5cf4fd6">logInfo</a>(<span class="stringliteral">&quot;The Audiomanager is started&quot;</span>);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <a class="code" href="namespaceam.html#a47d650dc91db97c1f9323b4ed5cf4fd6">logInfo</a>(<span class="stringliteral">&quot;The version of the Audiomanager&quot;</span>, DAEMONVERSION);</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="preprocessor">#ifdef WITH_CAPI_WRAPPER</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="comment">//We instantiate a singleton with the current socket handler, which loads the common-api runtime.</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <a class="code" href="classam_1_1CAmCommonAPIWrapper.html">CAmCommonAPIWrapper</a> *pCAPIWrapper = <a class="code" href="classam_1_1CAmCommonAPIWrapper.html#a008a684395e96b7204e726b6c835fc7b">CAmCommonAPIWrapper::instantiateOnce</a>(&amp;iSocketHandler, <span class="stringliteral">&quot;AudioManager&quot;</span>);</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*WITH_CAPI_WRAPPER */</span><span class="preprocessor"></span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="preprocessor">#ifdef WITH_DBUS_WRAPPER</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="main_8cpp.html#a7920a189875bb1a97c86506493483355">dbusWrapperTypeBool</a>.getValue())</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;        dbusWrapperType=DBUS_BUS_SYSTEM;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <a class="code" href="classam_1_1CAmDbusWrapper.html">CAmDbusWrapper</a> iDBusWrapper(&amp;iSocketHandler,dbusWrapperType);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*WITH_DBUS_WRAPPER */</span><span class="preprocessor"></span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="preprocessor">#ifdef WITH_SYSTEMD_WATCHDOG</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <a class="code" href="classam_1_1CAmWatchdog.html">CAmWatchdog</a> iWatchdog(&amp;iSocketHandler);</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*WITH_SYSTEMD_WATCHDOG*/</span><span class="preprocessor"></span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<a class="code" href="classam_1_1CAmRouter.html">CAmRouter</a> iRouter(pDatabaseHandler, &amp;iControlSender);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="preprocessor">#ifdef WITH_DBUS_WRAPPER</span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <a class="code" href="classam_1_1CAmCommandReceiver.html">CAmCommandReceiver</a> iCommandReceiver(pDatabaseHandler, &amp;iControlSender, &amp;iSocketHandler, &amp;iDBusWrapper);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <a class="code" href="classam_1_1CAmRoutingReceiver.html">CAmRoutingReceiver</a> iRoutingReceiver(pDatabaseHandler, &amp;iRoutingSender, &amp;iControlSender, &amp;iSocketHandler, &amp;iDBusWrapper);</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="preprocessor">#else </span><span class="comment">/*WITH_DBUS_WRAPPER*/</span><span class="preprocessor"></span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;        <a class="code" href="classam_1_1CAmCommandReceiver.html">CAmCommandReceiver</a> iCommandReceiver(pDatabaseHandler,&amp;iControlSender,&amp;iSocketHandler);</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;        <a class="code" href="classam_1_1CAmRoutingReceiver.html">CAmRoutingReceiver</a> iRoutingReceiver(pDatabaseHandler,&amp;iRoutingSender,&amp;iControlSender,&amp;iSocketHandler);</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*WITH_DBUS_WRAPPER*/</span><span class="preprocessor"></span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<a class="code" href="classam_1_1CAmControlReceiver.html">CAmControlReceiver</a> iControlReceiver(pDatabaseHandler,&amp;iRoutingSender,&amp;iCommandSender,&amp;iSocketHandler, &amp;iRouter);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;iDatabaseHandler.<a class="code" href="classam_1_1CAmDatabaseHandlerMap.html#afb5fd5d175e1fb3d285c7959d2628c47">registerObserver</a>(&amp;iRoutingSender);</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;iDatabaseHandler.<a class="code" href="classam_1_1CAmDatabaseHandlerMap.html#afb5fd5d175e1fb3d285c7959d2628c47">registerObserver</a>(&amp;iCommandSender);</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;iDatabaseHandler.<a class="code" href="classam_1_1CAmDatabaseHandlerMap.html#afb5fd5d175e1fb3d285c7959d2628c47">registerObserver</a>(&amp;iRouter);</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="comment">//startup all the Plugins and Interfaces</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="comment">//at this point, commandline arguments can be parsed</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;iControlSender.startupController(&amp;iControlReceiver);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;iCommandSender.<a class="code" href="classam_1_1CAmCommandSender.html#a2840ea18547bbbdbaad153ab61637990">startupInterfaces</a>(&amp;iCommandReceiver);</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;iRoutingSender.<a class="code" href="classam_1_1CAmRoutingSender.html#aa988328ad34d96283b7488b1c45e139c">startupInterfaces</a>(&amp;iRoutingReceiver);</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="comment">//when the routingInterface is done, all plugins are loaded:</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;iControlSender.setControllerReady();</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="preprocessor">#ifdef WITH_SYSTEMD_WATCHDOG</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    iWatchdog.<a class="code" href="classam_1_1CAmWatchdog.html#a4379a7449325044199d4703a99039b9c">startWatchdog</a>();</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/*WITH_SYSTEMD_WATCHDOG*/</span><span class="preprocessor"></span></div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="comment">//start the mainloop here....</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    iSocketHandler.start_listenting();</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;}</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="main_8cpp.html#af9f20e08914b990ce83431d5dc6df07b">  388</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="main_8cpp.html#af9f20e08914b990ce83431d5dc6df07b">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[], <span class="keywordtype">char</span>** envp)</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;{</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    (void) envp;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    listCommandPluginDirs.push_back(std::string(DEFAULT_PLUGIN_COMMAND_DIR));</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    listRoutingPluginDirs.push_back(std::string(DEFAULT_PLUGIN_ROUTING_DIR));</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;    <span class="comment">//critical signals are registered here:</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <span class="keyword">struct </span>sigaction signalAction;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    memset(&amp;signalAction, <span class="charliteral">&#39;\0&#39;</span>, <span class="keyword">sizeof</span>(signalAction));</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    signalAction.sa_sigaction = &amp;signalHandler;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    signalAction.sa_flags = SA_SIGINFO;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    sigaction(SIGINT, &amp;signalAction, NULL);</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    sigaction(SIGQUIT, &amp;signalAction, NULL);</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    </div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="comment">//register new out of memory handler</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    std::set_new_handler(&amp;<a class="code" href="main_8cpp.html#acc628ca4f61759495f09289b8418d358">OutOfMemoryHandler</a>);</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    sigset_t signal_mask;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    sigemptyset(&amp;signal_mask);</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it : listOfSignalsFD)</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    {</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;        sigaddset(&amp;signal_mask, it);</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    }</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    {</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        <span class="keywordflow">if</span> (pthread_sigmask(SIG_BLOCK, &amp;signal_mask, NULL) != 0)</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        {</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;            <span class="keywordflow">throw</span> std::runtime_error(std::string(<span class="stringliteral">&quot;Couldn&#39;t set mask for potential future threads&quot;</span>));</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;        }</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;        <span class="comment">//we do this to catch all exceptions and have a graceful ending just in case</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;        <a class="code" href="main_8cpp.html#a2f6e0286f1ab9c12d22605627f8bf07e">mainProgram</a>(argc,argv);</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    }</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keywordflow">catch</span> (std::exception&amp; exc)</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    {</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;        <a class="code" href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">logError</a>(<span class="stringliteral">&quot;The AudioManager ended by throwing the exception&quot;</span>, exc.what());</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        std::cerr&lt;&lt;<span class="stringliteral">&quot;The AudioManager ended by throwing an exception &quot;</span>&lt;&lt;exc.what()&lt;&lt;std::endl;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;        exit(EXIT_FAILURE);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    }</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    close(<a class="code" href="main_8cpp.html#a16290b108a943e54375f08cb9ad5fc5a">fd0</a>);</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    close(<a class="code" href="main_8cpp.html#ac62faf1ed925a0da21ba52b228cb9a47">fd1</a>);</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    close(<a class="code" href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">fd2</a>);</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    exit(0);</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;}</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;</div><div class="ttc" id="classam_1_1CAmRoutingSender_html"><div class="ttname"><a href="classam_1_1CAmRoutingSender.html">am::CAmRoutingSender</a></div><div class="ttdoc">Implements the RoutingSendInterface. </div><div class="ttdef"><b>Definition:</b> <a href="CAmRoutingSender_8h_source.html#l00045">CAmRoutingSender.h:45</a></div></div>
<div class="ttc" id="main_8cpp_html_a16290b108a943e54375f08cb9ad5fc5a"><div class="ttname"><a href="main_8cpp.html#a16290b108a943e54375f08cb9ad5fc5a">fd0</a></div><div class="ttdeci">int fd0</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00094">main.cpp:94</a></div></div>
<div class="ttc" id="classam_1_1CAmCommandReceiver_html"><div class="ttname"><a href="classam_1_1CAmCommandReceiver.html">am::CAmCommandReceiver</a></div><div class="ttdoc">This class realizes the command Interface. </div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandReceiver_8h_source.html#l00040">CAmCommandReceiver.h:40</a></div></div>
<div class="ttc" id="CAmCommonAPIWrapper_8h_html"><div class="ttname"><a href="CAmCommonAPIWrapper_8h.html">CAmCommonAPIWrapper.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="main_8cpp_html_a45c5c45bad7cd6af4b436bae93c16f6e"><div class="ttname"><a href="main_8cpp.html#a45c5c45bad7cd6af4b436bae93c16f6e">commandPluginDir</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; commandPluginDir(&quot;l&quot;,&quot;CommandPluginDir&quot;,&quot;path for looking for command plugins&quot;, false,&quot; &quot;,&quot;string&quot;)</div></div>
<div class="ttc" id="namespaceam_html_a8d6015cc712615bbe2fc1cd7d8b94d15"><div class="ttname"><a href="namespaceam.html#a8d6015cc712615bbe2fc1cd7d8b94d15">am::logWarning</a></div><div class="ttdeci">void logWarning(T value, TArgs...args)</div><div class="ttdoc">logs given values with warninglevel with the default context </div><div class="ttdef"><b>Definition:</b> <a href="CAmDltWrapper_8h_source.html#l00442">CAmDltWrapper.h:442</a></div></div>
<div class="ttc" id="namespaceam_html"><div class="ttname"><a href="namespaceam.html">am</a></div><div class="ttdoc">A Common-API wrapper class, which loads the common-api runtime and instantiates all necessary objects...</div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandReceiver_8h_source.html#l00029">CAmCommandReceiver.h:29</a></div></div>
<div class="ttc" id="classam_1_1CAmCommandSender_html_a2840ea18547bbbdbaad153ab61637990"><div class="ttname"><a href="classam_1_1CAmCommandSender.html#a2840ea18547bbbdbaad153ab61637990">am::CAmCommandSender::startupInterfaces</a></div><div class="ttdeci">am_Error_e startupInterfaces(CAmCommandReceiver *iCommandReceiver)</div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandSender_8cpp_source.html#l00265">CAmCommandSender.cpp:265</a></div></div>
<div class="ttc" id="main_8cpp_html_af9f20e08914b990ce83431d5dc6df07b"><div class="ttname"><a href="main_8cpp.html#af9f20e08914b990ce83431d5dc6df07b">main</a></div><div class="ttdeci">int main(int argc, char *argv[], char **envp)</div><div class="ttdoc">main </div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00388">main.cpp:388</a></div></div>
<div class="ttc" id="main_8cpp_html_a869452f0c0952acd39230fcf0ef89c1e"><div class="ttname"><a href="main_8cpp.html#a869452f0c0952acd39230fcf0ef89c1e">daemonize</a></div><div class="ttdeci">void daemonize()</div><div class="ttdoc">daemonizes the AudioManager </div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00112">main.cpp:112</a></div></div>
<div class="ttc" id="namespaceam_html_a47d650dc91db97c1f9323b4ed5cf4fd6"><div class="ttname"><a href="namespaceam.html#a47d650dc91db97c1f9323b4ed5cf4fd6">am::logInfo</a></div><div class="ttdeci">void logInfo(T value, TArgs...args)</div><div class="ttdoc">logs given values with infolevel with the default context </div><div class="ttdef"><b>Definition:</b> <a href="CAmDltWrapper_8h_source.html#l00420">CAmDltWrapper.h:420</a></div></div>
<div class="ttc" id="classam_1_1CAmCommonAPIWrapper_html"><div class="ttname"><a href="classam_1_1CAmCommonAPIWrapper.html">am::CAmCommonAPIWrapper</a></div><div class="ttdef"><b>Definition:</b> <a href="CAmCommonAPIWrapper_8h_source.html#l00049">CAmCommonAPIWrapper.h:49</a></div></div>
<div class="ttc" id="classam_1_1CAmRouter_html"><div class="ttname"><a href="classam_1_1CAmRouter.html">am::CAmRouter</a></div><div class="ttdoc">Implements autorouting algorithm for connecting sinks and sources via different audio domains...</div><div class="ttdef"><b>Definition:</b> <a href="CAmRouter_8h_source.html#l00159">CAmRouter.h:159</a></div></div>
<div class="ttc" id="main_8cpp_html_a852c05eb5ba04abd0c9007ebc04f34da"><div class="ttname"><a href="main_8cpp.html#a852c05eb5ba04abd0c9007ebc04f34da">additionalCommandPluginDirs</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; additionalCommandPluginDirs(&quot;L&quot;,&quot;additionalCommandPluginDirs&quot;,&quot;additional path for looking for command plugins, can be used after -l option&quot;, false,&quot; &quot;,&quot;string&quot;)</div></div>
<div class="ttc" id="classam_1_1CAmControlReceiver_html"><div class="ttname"><a href="classam_1_1CAmControlReceiver.html">am::CAmControlReceiver</a></div><div class="ttdoc">This class is used to receive all commands from the control interface. </div><div class="ttdef"><b>Definition:</b> <a href="CAmControlReceiver_8h_source.html#l00042">CAmControlReceiver.h:42</a></div></div>
<div class="ttc" id="classam_1_1CAmCommonAPIWrapper_html_a008a684395e96b7204e726b6c835fc7b"><div class="ttname"><a href="classam_1_1CAmCommonAPIWrapper.html#a008a684395e96b7204e726b6c835fc7b">am::CAmCommonAPIWrapper::instantiateOnce</a></div><div class="ttdeci">static CAmCommonAPIWrapper * instantiateOnce(CAmSocketHandler *socketHandler, const std::string &amp;applicationName=&quot;&quot;)</div><div class="ttdoc">Creates a singleton instance attached to the provided socket handler object. </div><div class="ttdef"><b>Definition:</b> <a href="CAmCommonAPIWrapper_8cpp_source.html#l00083">CAmCommonAPIWrapper.cpp:83</a></div></div>
<div class="ttc" id="classam_1_1CAmSocketHandler_html"><div class="ttname"><a href="classam_1_1CAmSocketHandler.html">am::CAmSocketHandler</a></div><div class="ttdoc">The am::CAmSocketHandler implements a mainloop for the AudioManager. </div><div class="ttdef"><b>Definition:</b> <a href="CAmSocketHandler_8h_source.html#l00216">CAmSocketHandler.h:216</a></div></div>
<div class="ttc" id="classam_1_1CAmDltWrapper_html_ade4bf08f260e648ce3036d055fde0c10"><div class="ttname"><a href="classam_1_1CAmDltWrapper.html#ade4bf08f260e648ce3036d055fde0c10">am::CAmDltWrapper::instanctiateOnce</a></div><div class="ttdeci">static CAmDltWrapper * instanctiateOnce(const char *appid, const char *description, const bool debugEnabled=true, const logDestination logDest=logDestination::DAEMON, const std::string Filename=&quot;&quot;, bool onlyError=false)</div><div class="ttdoc">Instanciate the Dlt Wrapper. </div><div class="ttdef"><b>Definition:</b> <a href="CAmDltWrapper_8cpp_source.html#l00150">CAmDltWrapper.cpp:150</a></div></div>
<div class="ttc" id="CAmRoutingReceiver_8h_html"><div class="ttname"><a href="CAmRoutingReceiver_8h.html">CAmRoutingReceiver.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="classam_1_1CAmCommandLineSingleton_html_ab3296f24eaef2d80370ee9eaaa3b0577"><div class="ttname"><a href="classam_1_1CAmCommandLineSingleton.html#ab3296f24eaef2d80370ee9eaaa3b0577">am::CAmCommandLineSingleton::instance</a></div><div class="ttdeci">static TCLAP::CmdLine * instance()</div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandLineSingleton_8cpp_source.html#l00041">CAmCommandLineSingleton.cpp:41</a></div></div>
<div class="ttc" id="classam_1_1CAmWatchdog_html"><div class="ttname"><a href="classam_1_1CAmWatchdog.html">am::CAmWatchdog</a></div><div class="ttdoc">Implements the watchdog of the AudioManager with the help of systemd. </div><div class="ttdef"><b>Definition:</b> <a href="CAmWatchdog_8h_source.html#l00035">CAmWatchdog.h:35</a></div></div>
<div class="ttc" id="main_8cpp_html_a20381c995d4b9c2fe11a65df9700fb76"><div class="ttname"><a href="main_8cpp.html#a20381c995d4b9c2fe11a65df9700fb76">printCmdInformation</a></div><div class="ttdeci">void printCmdInformation()</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00162">main.cpp:162</a></div></div>
<div class="ttc" id="main_8cpp_html_a705ab796e3da5af624720a7f8ea39402"><div class="ttname"><a href="main_8cpp.html#a705ab796e3da5af624720a7f8ea39402">AUDIOMANGER_APP_DESCRIPTION</a></div><div class="ttdeci">#define AUDIOMANGER_APP_DESCRIPTION</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00068">main.cpp:68</a></div></div>
<div class="ttc" id="namespaceam_html_af782e2735b1adf1e43a9d530cee340aa"><div class="ttname"><a href="namespaceam.html#af782e2735b1adf1e43a9d530cee340aa">am::sh_pollHandle_t</a></div><div class="ttdeci">uint16_t sh_pollHandle_t</div><div class="ttdoc">this is a handle for a filedescriptor to be used with the SocketHandler </div><div class="ttdef"><b>Definition:</b> <a href="CAmSocketHandler_8h_source.html#l00051">CAmSocketHandler.h:51</a></div></div>
<div class="ttc" id="CAmDltWrapper_8h_html"><div class="ttname"><a href="CAmDltWrapper_8h.html">CAmDltWrapper.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="CAmWatchdog_8h_html"><div class="ttname"><a href="CAmWatchdog_8h.html">CAmWatchdog.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="main_8cpp_html_af65d853335a6d8ffc28a26269ade6e5d"><div class="ttname"><a href="main_8cpp.html#af65d853335a6d8ffc28a26269ade6e5d">fd2</a></div><div class="ttdeci">int fd2</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00094">main.cpp:94</a></div></div>
<div class="ttc" id="classam_1_1CAmRoutingReceiver_html"><div class="ttname"><a href="classam_1_1CAmRoutingReceiver.html">am::CAmRoutingReceiver</a></div><div class="ttdoc">Implements the Receiving side of the RoutingPlugins. </div><div class="ttdef"><b>Definition:</b> <a href="CAmRoutingReceiver_8h_source.html#l00041">CAmRoutingReceiver.h:41</a></div></div>
<div class="ttc" id="main_8cpp_html_ac62faf1ed925a0da21ba52b228cb9a47"><div class="ttname"><a href="main_8cpp.html#ac62faf1ed925a0da21ba52b228cb9a47">fd1</a></div><div class="ttdeci">int fd1</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00094">main.cpp:94</a></div></div>
<div class="ttc" id="CAmRouter_8h_html"><div class="ttname"><a href="CAmRouter_8h.html">CAmRouter.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="CAmControlReceiver_8h_html"><div class="ttname"><a href="CAmControlReceiver_8h.html">CAmControlReceiver.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="main_8cpp_html_acc628ca4f61759495f09289b8418d358"><div class="ttname"><a href="main_8cpp.html#acc628ca4f61759495f09289b8418d358">OutOfMemoryHandler</a></div><div class="ttdeci">void OutOfMemoryHandler()</div><div class="ttdoc">the out of memory handler </div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00103">main.cpp:103</a></div></div>
<div class="ttc" id="CAmCommandReceiver_8h_html"><div class="ttname"><a href="CAmCommandReceiver_8h.html">CAmCommandReceiver.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="CAmDatabaseHandlerMap_8h_html"><div class="ttname"><a href="CAmDatabaseHandlerMap_8h.html">CAmDatabaseHandlerMap.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="classam_1_1CAmCommandLineSingleton_html_a40a0445d4c7fef4aebdcc46676b33850"><div class="ttname"><a href="classam_1_1CAmCommandLineSingleton.html#a40a0445d4c7fef4aebdcc46676b33850">am::CAmCommandLineSingleton::instanciateOnce</a></div><div class="ttdeci">static TCLAP::CmdLine * instanciateOnce(const std::string &amp;message, const char delimiter= ' ', const std::string &amp;version=&quot;none&quot;, bool helpAndVersion=true)</div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandLineSingleton_8cpp_source.html#l00029">CAmCommandLineSingleton.cpp:29</a></div></div>
<div class="ttc" id="main_8cpp_html_af7d5e0e2048b13686c69caeb0725b5d9"><div class="ttname"><a href="main_8cpp.html#af7d5e0e2048b13686c69caeb0725b5d9">AUDIOMANGER_APP_ID</a></div><div class="ttdeci">#define AUDIOMANGER_APP_ID</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00064">main.cpp:64</a></div></div>
<div class="ttc" id="classam_1_1CAmDltWrapper_html_aff17466b9effa921b51540e2b13d9499"><div class="ttname"><a href="classam_1_1CAmDltWrapper.html#aff17466b9effa921b51540e2b13d9499">am::CAmDltWrapper::logDestination</a></div><div class="ttdeci">logDestination</div><div class="ttdef"><b>Definition:</b> <a href="CAmDltWrapper_8h_source.html#l00127">CAmDltWrapper.h:127</a></div></div>
<div class="ttc" id="main_8cpp_html_adaa5dd304567dc8e32b2cbc1eb048f7e"><div class="ttname"><a href="main_8cpp.html#adaa5dd304567dc8e32b2cbc1eb048f7e">routingPluginDir</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; routingPluginDir(&quot;r&quot;,&quot;RoutingPluginDir&quot;,&quot;path for looking for routing plugins&quot;, false,&quot; &quot;,&quot;string&quot;)</div></div>
<div class="ttc" id="CAmCommandLineSingleton_8h_html"><div class="ttname"><a href="CAmCommandLineSingleton_8h.html">CAmCommandLineSingleton.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="main_8cpp_html_a7920a189875bb1a97c86506493483355"><div class="ttname"><a href="main_8cpp.html#a7920a189875bb1a97c86506493483355">dbusWrapperTypeBool</a></div><div class="ttdeci">TCLAP::SwitchArg dbusWrapperTypeBool(&quot;T&quot;,&quot;dbusType&quot;,&quot;DbusType to be used by CAmDbusWrapper: if option is selected, DBUS_SYSTEM is used otherwise DBUS_SESSION&quot;, false)</div></div>
<div class="ttc" id="main_8cpp_html_ab5b77ba1f3bcc145415fb472684fdb87"><div class="ttname"><a href="main_8cpp.html#ab5b77ba1f3bcc145415fb472684fdb87">additionalRoutingPluginDirs</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; additionalRoutingPluginDirs(&quot;R&quot;,&quot;additionalRoutingPluginDirs&quot;,&quot;additional path for looking for routing plugins, can be used after -r option &quot;, false,&quot; &quot;,&quot;string&quot;)</div></div>
<div class="ttc" id="main_8cpp_html_afa960755d9057786161060f83ef27897"><div class="ttname"><a href="main_8cpp.html#afa960755d9057786161060f83ef27897">dltEnable</a></div><div class="ttdeci">TCLAP::SwitchArg dltEnable(&quot;e&quot;,&quot;dltEnable&quot;,&quot;Enables or disables dlt logging. Default = enabled&quot;, true)</div></div>
<div class="ttc" id="classam_1_1CAmControlSender_html"><div class="ttname"><a href="classam_1_1CAmControlSender.html">am::CAmControlSender</a></div><div class="ttdoc">sends data to the commandInterface, takes the file of the library that needs to be loaded ...</div><div class="ttdef"><b>Definition:</b> <a href="CAmControlSender_8h_source.html#l00041">CAmControlSender.h:41</a></div></div>
<div class="ttc" id="classam_1_1IAmDatabaseHandler_html"><div class="ttname"><a href="classam_1_1IAmDatabaseHandler.html">am::IAmDatabaseHandler</a></div><div class="ttdoc">This class handles and abstracts the database. </div><div class="ttdef"><b>Definition:</b> <a href="IAmDatabaseHandler_8h_source.html#l00055">IAmDatabaseHandler.h:55</a></div></div>
<div class="ttc" id="CAmRoutingSender_8h_html"><div class="ttname"><a href="CAmRoutingSender_8h.html">CAmRoutingSender.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="classam_1_1CAmDatabaseHandlerMap_html_afb5fd5d175e1fb3d285c7959d2628c47"><div class="ttname"><a href="classam_1_1CAmDatabaseHandlerMap.html#afb5fd5d175e1fb3d285c7959d2628c47">am::CAmDatabaseHandlerMap::registerObserver</a></div><div class="ttdeci">bool registerObserver(IAmDatabaseObserver *iObserver)</div><div class="ttdef"><b>Definition:</b> <a href="CAmDatabaseHandlerMap_8cpp_source.html#l03394">CAmDatabaseHandlerMap.cpp:3394</a></div></div>
<div class="ttc" id="main_8cpp_html_a94173f0fcddf0ddf80beacba2ef9c914"><div class="ttname"><a href="main_8cpp.html#a94173f0fcddf0ddf80beacba2ef9c914">listOfSignalsFD</a></div><div class="ttdeci">std::vector&lt; uint8_t &gt; listOfSignalsFD</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00079">main.cpp:79</a></div></div>
<div class="ttc" id="classam_1_1CAmWatchdog_html_a4379a7449325044199d4703a99039b9c"><div class="ttname"><a href="classam_1_1CAmWatchdog.html#a4379a7449325044199d4703a99039b9c">am::CAmWatchdog::startWatchdog</a></div><div class="ttdeci">void startWatchdog()</div><div class="ttdoc">starts the watchdog by sending ready to systemD </div><div class="ttdef"><b>Definition:</b> <a href="CAmWatchdog_8cpp_source.html#l00095">CAmWatchdog.cpp:95</a></div></div>
<div class="ttc" id="CAmSocketHandler_8h_html"><div class="ttname"><a href="CAmSocketHandler_8h.html">CAmSocketHandler.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="classam_1_1CAmControlSender_html_a6c0d99f14b5c80aa0e0f937c92abc023"><div class="ttname"><a href="classam_1_1CAmControlSender.html#a6c0d99f14b5c80aa0e0f937c92abc023">am::CAmControlSender::CallsetControllerRundownSafe</a></div><div class="ttdeci">static void CallsetControllerRundownSafe(int16_t signal)</div><div class="ttdef"><b>Definition:</b> <a href="CAmControlSender_8h_source.html#l00133">CAmControlSender.h:133</a></div></div>
<div class="ttc" id="main_8cpp_html_a371632b96db9def1ac720a43326272c9"><div class="ttname"><a href="main_8cpp.html#a371632b96db9def1ac720a43326272c9">dltOutput</a></div><div class="ttdeci">TCLAP::ValueArg&lt; unsigned int &gt; dltOutput(&quot;O&quot;,&quot;dltOutput&quot;,&quot;defines where logs are written. 0=dlt-daemon(default), 1=command line, 2=file &quot;, false, 0,&quot;int&quot;)</div></div>
<div class="ttc" id="classam_1_1CAmRoutingSender_html_aa988328ad34d96283b7488b1c45e139c"><div class="ttname"><a href="classam_1_1CAmRoutingSender.html#aa988328ad34d96283b7488b1c45e139c">am::CAmRoutingSender::startupInterfaces</a></div><div class="ttdeci">am_Error_e startupInterfaces(CAmRoutingReceiver *iRoutingReceiver)</div><div class="ttdef"><b>Definition:</b> <a href="CAmRoutingSender_8cpp_source.html#l00224">CAmRoutingSender.cpp:224</a></div></div>
<div class="ttc" id="main_8cpp_html_a89176a3c961e9f408ca3c42c29d7e105"><div class="ttname"><a href="main_8cpp.html#a89176a3c961e9f408ca3c42c29d7e105">currentSettings</a></div><div class="ttdeci">TCLAP::SwitchArg currentSettings(&quot;i&quot;,&quot;currentSettings&quot;,&quot;print current settings and exit&quot;, false)</div></div>
<div class="ttc" id="namespaceam_html_ab00ba22db19413e2040c2ab246f220c6"><div class="ttname"><a href="namespaceam.html#ab00ba22db19413e2040c2ab246f220c6">am::logError</a></div><div class="ttdeci">void logError(T value, TArgs...args)</div><div class="ttdoc">logs given values with errorlevel with the default context </div><div class="ttdef"><b>Definition:</b> <a href="CAmDltWrapper_8h_source.html#l00431">CAmDltWrapper.h:431</a></div></div>
<div class="ttc" id="main_8cpp_html_a2f8343120dfa1adbb5fa439c4a915b5f"><div class="ttname"><a href="main_8cpp.html#a2f8343120dfa1adbb5fa439c4a915b5f">listRoutingPluginDirs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; listRoutingPluginDirs</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00076">main.cpp:76</a></div></div>
<div class="ttc" id="main_8cpp_html_a89ab9082caaf2543afc60151c9801702"><div class="ttname"><a href="main_8cpp.html#a89ab9082caaf2543afc60151c9801702">daemonizeAM</a></div><div class="ttdeci">TCLAP::SwitchArg daemonizeAM(&quot;d&quot;,&quot;daemonize&quot;,&quot;daemonize Audiomanager. Better use systemd...&quot;, false)</div></div>
<div class="ttc" id="classam_1_1CAmDbusWrapper_html"><div class="ttname"><a href="classam_1_1CAmDbusWrapper.html">am::CAmDbusWrapper</a></div><div class="ttdoc">This wraps dbus and provides everything needed to anyone who wants to use dbus (including plugins)...</div><div class="ttdef"><b>Definition:</b> <a href="CAmDbusWrapper_8h_source.html#l00037">CAmDbusWrapper.h:37</a></div></div>
<div class="ttc" id="CAmCommandSender_8h_html"><div class="ttname"><a href="CAmCommandSender_8h.html">CAmCommandSender.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="namespaceam_html_aa3dcb70029da317d661b6f422de1b4cea796d4cc86cd1605f4307478c128eee36"><div class="ttname"><a href="namespaceam.html#aa3dcb70029da317d661b6f422de1b4cea796d4cc86cd1605f4307478c128eee36">am::E_OK</a></div><div class="ttdoc">no error - positive reply </div><div class="ttdef"><b>Definition:</b> <a href="audiomanagertypes_8h_source.html#l00342">audiomanagertypes.h:342</a></div></div>
<div class="ttc" id="CAmControlSender_8h_html"><div class="ttname"><a href="CAmControlSender_8h.html">CAmControlSender.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="classam_1_1CAmControlSender_html_a347a2af727aeb11657f145329dd23dd8"><div class="ttname"><a href="classam_1_1CAmControlSender.html#a347a2af727aeb11657f145329dd23dd8">am::CAmControlSender::CallsetControllerRundown</a></div><div class="ttdeci">static void CallsetControllerRundown(int16_t signal)</div><div class="ttdef"><b>Definition:</b> <a href="CAmControlSender_8h_source.html#l00126">CAmControlSender.h:126</a></div></div>
<div class="ttc" id="main_8cpp_html_af300dd02580ca5f086d5903e5145e300"><div class="ttname"><a href="main_8cpp.html#af300dd02580ca5f086d5903e5145e300">dltLogFilename</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; dltLogFilename(&quot;F&quot;,&quot;dltLogFilename&quot;,&quot;the name of the logfile, absolute path. Only if logging is et to file&quot;, false,&quot; &quot;,&quot;string&quot;)</div></div>
<div class="ttc" id="main_8cpp_html_acf9448b8681363c06fcc6fa2fe67f6a1"><div class="ttname"><a href="main_8cpp.html#acf9448b8681363c06fcc6fa2fe67f6a1">listCommandPluginDirs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; listCommandPluginDirs</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00075">main.cpp:75</a></div></div>
<div class="ttc" id="main_8cpp_html_a2f6e0286f1ab9c12d22605627f8bf07e"><div class="ttname"><a href="main_8cpp.html#a2f6e0286f1ab9c12d22605627f8bf07e">mainProgram</a></div><div class="ttdeci">void mainProgram(int argc, char *argv[])</div><div class="ttdef"><b>Definition:</b> <a href="main_8cpp_source.html#l00216">main.cpp:216</a></div></div>
<div class="ttc" id="classam_1_1CAmCommandSender_html"><div class="ttname"><a href="classam_1_1CAmCommandSender.html">am::CAmCommandSender</a></div><div class="ttdoc">This class is used to send data to the CommandInterface. </div><div class="ttdef"><b>Definition:</b> <a href="CAmCommandSender_8h_source.html#l00046">CAmCommandSender.h:46</a></div></div>
<div class="ttc" id="classam_1_1CAmDatabaseHandlerMap_html"><div class="ttname"><a href="classam_1_1CAmDatabaseHandlerMap.html">am::CAmDatabaseHandlerMap</a></div><div class="ttdoc">This class handles and abstracts the database. </div><div class="ttdef"><b>Definition:</b> <a href="CAmDatabaseHandlerMap_8h_source.html#l00064">CAmDatabaseHandlerMap.h:64</a></div></div>
<div class="ttc" id="CAmDbusWrapper_8h_html"><div class="ttname"><a href="CAmDbusWrapper_8h.html">CAmDbusWrapper.h</a></div><div class="ttdoc">SPDX license identifier: MPL-2.0. </div></div>
<div class="ttc" id="main_8cpp_html_a9651ad77ac5b1ea702db1fba38dbb25a"><div class="ttname"><a href="main_8cpp.html#a9651ad77ac5b1ea702db1fba38dbb25a">controllerPlugin</a></div><div class="ttdeci">TCLAP::ValueArg&lt; std::string &gt; controllerPlugin(&quot;c&quot;,&quot;controllerPlugin&quot;,&quot;use controllerPlugin full path with .so ending&quot;, false, CONTROLLER_PLUGIN_DIR,&quot;string&quot;)</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_a59cc4145c80bc78c66b8523e9dc461d.html">AudioManagerDaemon</a></li><li class="navelem"><a class="el" href="dir_0ae934c8b133f39bc9dfcd657890ab56.html">src</a></li><li class="navelem"><a class="el" href="main_8cpp.html">main.cpp</a></li>
    <li class="footer">Generated on Fri Feb 9 2018 14:50:29 for AudioManager by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.11 </li>
  </ul>
</div>
</body>
</html>