This file is indexed.

/usr/share/proton-0.14.0/docs/api-c/messenger_8h_source.html is in libqpid-proton8-dev-doc 0.14.0-5.1ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>proton: /build/qpid-proton-4llz2H/qpid-proton-0.14.0/proton-c/include/proton/messenger.h 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="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>
<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">proton
   &#160;<span id="projectnumber">0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- 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 id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_3d7fee5163f29235853f3037db69c226.html">proton-c</a></li><li class="navelem"><a class="el" href="dir_ca4610195e991eb8124aba7312da0967.html">include</a></li><li class="navelem"><a class="el" href="dir_819e9c3ec552076ba9984156db77a62b.html">proton</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">messenger.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="messenger_8h.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;<span class="preprocessor">#ifndef PROTON_MESSENGER_H</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="preprocessor">#define PROTON_MESSENGER_H 1</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;</div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * under the License.</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="import__export_8h.html">proton/import_export.h</a>&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="message_8h.html">proton/message.h</a>&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="selectable_8h.html">proton/selectable.h</a>&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="condition_8h.html">proton/condition.h</a>&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="terminus_8h.html">proton/terminus.h</a>&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="link_8h.html">proton/link.h</a>&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="transport_8h.html">proton/transport.h</a>&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="ssl_8h.html">proton/ssl.h</a>&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> * @file</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"> * The messenger API provides a high level interface for sending and</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment"> * receiving AMQP messages.</span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"> * @defgroup messenger Messenger</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"> * @{</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment"> * A ::pn_messenger_t provides a high level interface for sending and</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="comment"> * receiving messages (See ::pn_message_t).</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment"> * Every messenger contains a single logical queue of incoming</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="comment"> * messages and a single logical queue of outgoing messages. The</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="comment"> * messages in these queues may be destined for, or originate from, a</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="comment"> * variety of addresses.</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"> * The messenger interface is single-threaded. All methods except one</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment"> * (::pn_messenger_interrupt()) are intended to be used by one thread</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment"> * at a time.</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment"> * Address Syntax</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment"> * ==============</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment"> * An address has the following form::</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment"> *   [ amqp[s]:// ] [user[:password]@] domain [/[name]]</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment"> * Where domain can be one of::</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment"> *   host | host:port | ip | ip:port | name</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"> * The following are valid examples of addresses:</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment"> *  - example.org</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment"> *  - example.org:1234</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment"> *  - amqp://example.org</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment"> *  - amqps://example.org</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="comment"> *  - example.org/incoming</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="comment"> *  - amqps://example.org/outgoing</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="comment"> *  - amqps://fred:trustno1@example.org</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="comment"> *  - 127.0.0.1:1234</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="comment"> *  - amqps://127.0.0.1:1234</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="comment"> * Sending &amp; Receiving Messages</span></div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;<span class="comment"> * ============================</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment"> * The messenger API works in conjuction with the ::pn_message_t API.</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment"> * A ::pn_message_t is a mutable holder of message content.</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment"> * The ::pn_messenger_put() operation copies content from the supplied</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment"> * ::pn_message_t to the outgoing queue, and may send queued messages</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment"> * if it can do so without blocking. The ::pn_messenger_send()</span></div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="comment"> * operation blocks until it has sent the requested number of</span></div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="comment"> * messages, or until a timeout interrupts the attempt.</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="comment"> *   pn_messenger_t *messenger = pn_messenger(NULL);</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="comment"> *   pn_message_t *message = pn_message();</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;<span class="comment"> *   char subject[1024];</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="comment"> *   for (int i = 0; i &lt; 3; i++) {</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="comment"> *     pn_message_set_address(message, &quot;amqp://host/queue&quot;);</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="comment"> *     sprintf(subject, &quot;Hello World! %i&quot;, i);</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment"> *     pn_message_set_subject(message, subject);</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment"> *     pn_messenger_put(messenger, message)</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment"> *   pn_messenger_send(messenger);</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment"> * Similarly, the ::pn_messenger_recv() method receives messages into</span></div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment"> * the incoming queue, and may block as it attempts to receive up to</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="comment"> * the requested number of messages, or until the timeout is reached.</span></div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="comment"> * It may receive fewer than the requested number. The</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="comment"> * ::pn_messenger_get() method pops the eldest message off the</span></div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="comment"> * incoming queue and copies its content into the supplied</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="comment"> * ::pn_message_t object. It will not block.</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;<span class="comment"> *   pn_messenger_t *messenger = pn_messenger(NULL);</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="comment"> *   pn_message_t *message = pn_message()</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="comment"> *   pn_messenger_recv(messenger):</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment"> *   while (pn_messenger_incoming(messenger) &gt; 0) {</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment"> *     pn_messenger_get(messenger, message);</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment"> *     printf(&quot;%s&quot;, message.subject);</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="comment"> *   }</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment"> *   Output:</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="comment"> *     Hello World 0</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment"> *     Hello World 1</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment"> *     Hello World 2</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment"> * The blocking flag allows you to turn off blocking behavior</span></div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;<span class="comment"> * entirely, in which case ::pn_messenger_send() and</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="comment"> * ::pn_messenger_recv() will do whatever they can without blocking,</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment"> * and then return. You can then look at the number of incoming and</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment"> * outgoing messages to see how much outstanding work still remains.</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment"> * Authentication Mechanims</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment"> * ========================</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment"> * The messenger API authenticates using some specific mechanisms. In prior versions</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment"> * of Proton the only authentication mechanism available was the PLAIN mechanism</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment"> * which transports the user&#39;s password over the network unencrypted. The Proton versions</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment"> * 0.10 and newer support other more secure mechanisms which avoid sending the users&#39;s</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment"> * password over the network unencrypted. For backwards compatibility the 0.10 version</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment"> * of the messenger API will also allow the use of the unencrypted PLAIN mechanism. From the</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment"> * 0.11 version and onwards you will need to set the flag PN_FLAGS_ALLOW_INSECURE_MECHS to</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment"> * carry on using the unencrypted PLAIN mechanism.</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment"> * The code for this looks like:</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="comment"> *   ...</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="comment"> *   pn_messenger_set_flags(messenger, PN_FLAGS_ALLOW_INSECURE_MECHS);</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="comment"> *   ...</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="comment"> * Note that the use of the PLAIN mechanism over an SSL connection is allowed as the</span></div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="comment"> * password is not sent unencrypted.</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">  157</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> <a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a>;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment"> * A subscription is a request for incoming messages.</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment"> * @todo currently the subscription API is under developed, this</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment"> * should allow more explicit control over subscription properties and</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"> * behaviour</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">  166</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> <a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a>;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="comment"> * Trackers provide a lightweight handle used to track the status of</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="comment"> * incoming and outgoing deliveries.</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="group__messenger.html#gab1173cfe4bcaa0a530c8035dc75f42c7">  172</a></span>&#160;<span class="keyword">typedef</span> int64_t <a class="code" href="group__messenger.html#gab1173cfe4bcaa0a530c8035dc75f42c7">pn_tracker_t</a>;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment"> * Describes all the possible states for a message associated with a</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="comment"> * given tracker.</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="group__messenger.html#ga242e4ee54b9c0a416443c7da5f6e045b">  178</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba0b46b1041679460baaba2ddcdb2173f2">  179</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba0b46b1041679460baaba2ddcdb2173f2">PN_STATUS_UNKNOWN</a> = 0, <span class="comment">/**&lt; The tracker is unknown. */</span></div><div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba4b0354a77173cd75c69159e15c23f611">  180</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba4b0354a77173cd75c69159e15c23f611">PN_STATUS_PENDING</a> = 1, <span class="comment">/**&lt; The message is in flight. For outgoing</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment">                            messages, use ::pn_messenger_buffered to</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment">                            see if it has been sent or not. */</span></div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba693fd9044a50a4f02e842d04a4bf1467">  183</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba693fd9044a50a4f02e842d04a4bf1467">PN_STATUS_ACCEPTED</a> = 2, <span class="comment">/**&lt; The message was accepted. */</span></div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045baf109df703952744009b3547f3b8f32bf">  184</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045baf109df703952744009b3547f3b8f32bf">PN_STATUS_REJECTED</a> = 3, <span class="comment">/**&lt; The message was rejected. */</span></div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba67079750477effb7935df83381c47852">  185</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba67079750477effb7935df83381c47852">PN_STATUS_RELEASED</a> = 4, <span class="comment">/**&lt; The message was released. */</span></div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba77d94a6b6b745eef9307f144b57e81e8">  186</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba77d94a6b6b745eef9307f144b57e81e8">PN_STATUS_MODIFIED</a> = 5, <span class="comment">/**&lt; The message was modified. */</span></div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1239e8ada7eabe2aeab98f2c881cd2ee">  187</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1239e8ada7eabe2aeab98f2c881cd2ee">PN_STATUS_ABORTED</a> = 6, <span class="comment">/**&lt; The message was aborted. */</span></div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1181bc7f51502ae11ed240866cd64583">  188</a></span>&#160;  <a class="code" href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1181bc7f51502ae11ed240866cd64583">PN_STATUS_SETTLED</a> = 7 <span class="comment">/**&lt; The remote party has settled the message. */</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;} <a class="code" href="group__messenger.html#ga242e4ee54b9c0a416443c7da5f6e045b">pn_status_t</a>;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;<span class="comment"> * Construct a new ::pn_messenger_t with the given name. The name is</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="comment"> * global. If a NULL name is supplied, a UUID based name will be</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;<span class="comment"> * chosen.</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="comment"> * @param[in] name the name of the messenger or NULL</span></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="comment"> * @return pointer to a new ::pn_messenger_t</span></div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *<a class="code" href="group__messenger.html#ga5770958f2ad363cbce4e49ddde2f0249">pn_messenger</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name);</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment"> * Get the name of a messenger.</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment"> * @return the name of the messenger</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#gaa300a232e25dbe6be6dca3949da82145">pn_messenger_name</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment"> * Sets the path that will be used to get the certificate that will be</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="comment"> * used to identify this messenger to its peers. The validity of the</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment"> * path is not checked by this function.</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="comment"> * @param[in] certificate a path to a certificate file</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="comment"> * @return an error code of zero if there is no error</span></div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga310d7de19eb8943a2818f53d9b45cfc9">pn_messenger_set_certificate</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *certificate);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="comment"> * Get the certificate path. This value may be set by</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="comment"> * pn_messenger_set_certificate. The default certificate path is null.</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;<span class="comment"> * @return the certificate file path</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#gaca5d33643cc6db452d4dd456f774f936">pn_messenger_get_certificate</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment"> * Set path to the private key that was used to sign the certificate.</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="comment"> * See ::pn_messenger_set_certificate</span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="comment"> * @param[in] private_key a path to a private key file</span></div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="comment"> * @return an error code of zero if there is no error</span></div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gaac399276ec13c5bb2755b55aeddbc3cb">pn_messenger_set_private_key</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *private_key);</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment"> * Gets the private key file for a messenger.</span></div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="comment"> * @return the messenger&#39;s private key file path</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#gaa5e3ea6839e156d22afe0e8254e47b2d">pn_messenger_get_private_key</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="comment"> * Sets the private key password for a messenger.</span></div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="comment"> * @param[in] password the password for the private key file</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="comment"> * @return an error code of zero if there is no error</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga9b1e530ba6d77b9e1f3a6e1e44cb7cf0">pn_messenger_set_password</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *password);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="comment"> * Gets the private key file password for a messenger.</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="comment"> * @return password for the private key file</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#gaca818b10d8ab415ff21b2df30e645588">pn_messenger_get_password</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;<span class="comment"> * Sets the trusted certificates database for a messenger.</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="comment"> * The messenger will use this database to validate the certificate</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="comment"> * provided by the peer.</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment"> * @param[in] cert_db a path to the certificates database</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="comment"> * @return an error code of zero if there is no error</span></div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga91d3800c61ab27f32c8c0fc513ef085c">pn_messenger_set_trusted_certificates</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *cert_db);</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="comment"> * Gets the trusted certificates database for a messenger.</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;<span class="comment"> * @return path to the trusted certificates database</span></div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#ga21ab008d0e2218de2bb2ff19d66e214c">pn_messenger_get_trusted_certificates</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;<span class="comment"> * Set the default timeout for a messenger.</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;<span class="comment"> * Any messenger call that blocks during execution will stop blocking</span></div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;<span class="comment"> * and return control when this timeout is reached, if you have set it</span></div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="comment"> * to a value greater than zero. The timeout is expressed in</span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="comment"> * milliseconds.</span></div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="comment"> * @param[in] timeout a new timeout for the messenger, in milliseconds</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment"> * @return an error code or zero if there is no error</span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga621e7edf471c5cf32d7251ed0a468877">pn_messenger_set_timeout</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">int</span> timeout);</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment"> * Gets the timeout for a messenger object.</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment"> * See ::pn_messenger_set_timeout() for details.</span></div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;<span class="comment"> * @return the timeout for the messenger, in milliseconds</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga873eea2b97af52a138a2e1db7f4556e2">pn_messenger_get_timeout</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="comment"> * Check if a messenger is in blocking mode.</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;<span class="comment"> * @return true if blocking has been enabled, false otherwise</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">bool</span> <a class="code" href="group__messenger.html#gaf95b3b54f4ee2a97db09e83ea5a0f8c3">pn_messenger_is_blocking</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="comment"> * Enable or disable blocking behavior for a messenger during calls to</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="comment"> * ::pn_messenger_send and ::pn_messenger_recv.</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="comment"> * @param[in] blocking the value of the blocking flag</span></div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="comment"> * @return an error code or zero if there is no error</span></div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gacd33f1218d6b6baed75462a3c9e31a81">pn_messenger_set_blocking</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">bool</span> blocking);</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="comment"> * Check if a messenger is in passive mode.</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="comment"> * A messenger that is in passive mode will never attempt to perform</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="comment"> * I/O internally, but instead will make all internal file descriptors</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="comment"> * accessible through ::pn_messenger_selectable() to be serviced</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="comment"> * externally. This can be useful for integrating messenger into an</span></div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment"> * external event loop.</span></div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="comment"> * @return true if the messenger is in passive mode, false otherwise</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">bool</span> <a class="code" href="group__messenger.html#gaf24ba09549f555a0323f7ae0be1978b1">pn_messenger_is_passive</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;<span class="comment"> * Set the passive mode for a messenger.</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="comment"> * See ::pn_messenger_is_passive() for details on passive mode.</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment"> * @param[in] passive true to enable passive mode, false to disable</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="comment"> * passive mode</span></div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga71ac6697b6fc8a39360dee9989f3a99b">pn_messenger_set_passive</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">bool</span> passive);</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment">/** Frees a Messenger.</span></div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;<span class="comment"> * @param[in] messenger the messenger to free (or NULL), no longer</span></div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment"> *                      valid on return</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">void</span> <a class="code" href="group__messenger.html#gaf57143f98134870941839f9b665e87af">pn_messenger_free</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<span class="comment"> * Get the code for a messenger&#39;s most recent error.</span></div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="comment"> * The error code is initialized to zero at messenger creation. The</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="comment"> * error number is &quot;sticky&quot; i.e. error codes are not reset to 0 at the</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;<span class="comment"> * end of successful API calls. You can use ::pn_messenger_error to</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;<span class="comment"> * access the messenger&#39;s error object and clear explicitly if</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<span class="comment"> * desired.</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="comment"> * @param[in] messenger the messenger to check for errors</span></div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;<span class="comment"> * @return an error code or zero if there is no error</span></div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga916bf706b4b2e6eb60fb5ad679a230d2">pn_messenger_errno</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<span class="comment"> * Get a messenger&#39;s error object.</span></div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="comment"> * Returns a pointer to a pn_error_t that is valid until the messenger</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;<span class="comment"> * is freed. The pn_error_* API allows you to access the text, error</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="comment"> * number, and lets you set or clear the error code explicitly.</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;<span class="comment"> * @param[in] messenger the messenger to check for errors</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="comment"> * @return a pointer to the messenger&#39;s error descriptor</span></div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="error_8h.html#a24a289d5b32c9bd8a775600a5af83d52">pn_error_t</a> *<a class="code" href="group__messenger.html#ga66fff60287c43a457518382216464c5b">pn_messenger_error</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment"> * Get the size of a messenger&#39;s outgoing window.</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="comment"> * The size of the outgoing window limits the number of messages whose</span></div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;<span class="comment"> * status you can check with a tracker. A message enters this window</span></div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="comment"> * when you call pn_messenger_put on the message. For example, if your</span></div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="comment"> * outgoing window size is 10, and you call pn_messenger_put 12 times,</span></div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="comment"> * new status information will no longer be available for the first 2</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="comment"> * messages.</span></div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<span class="comment"> * The default outgoing window size is 0.</span></div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;<span class="comment"> * @return the outgoing window for the messenger</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga8f889c65a77b807bb249e116649f9cd3">pn_messenger_get_outgoing_window</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;<span class="comment"> * Set the size of a messenger&#39;s outgoing window.</span></div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<span class="comment"> * See ::pn_messenger_get_outgoing_window() for details.</span></div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;<span class="comment"> * @param[in] window the number of deliveries to track</span></div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;<span class="comment"> * @return an error or zero on success</span></div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga6e1ccb0c5a46d4f354b1b73ff5363531">pn_messenger_set_outgoing_window</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">int</span> window);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;<span class="comment"> * Get the size of a messenger&#39;s incoming window.</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="comment"> * The size of a messenger&#39;s incoming window limits the number of</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;<span class="comment"> * messages that can be accepted or rejected using trackers. Messages</span></div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="comment"> * *do not* enter this window when they have been received</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="comment"> * (::pn_messenger_recv) onto you incoming queue. Messages only enter</span></div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="comment"> * this window only when you access them using pn_messenger_get. If</span></div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<span class="comment"> * your incoming window size is N, and you get N+1 messages without</span></div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;<span class="comment"> * explicitly accepting or rejecting the oldest message, then it will</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;<span class="comment"> * be implicitly accepted when it falls off the edge of the incoming</span></div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;<span class="comment"> * window.</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;<span class="comment"> * The default incoming window size is 0.</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;<span class="comment"> * @return the incoming window for the messenger</span></div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gad8bdfb8f2d2ea1e8a873d048728b488f">pn_messenger_get_incoming_window</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;<span class="comment"> * Set the size of a messenger&#39;s incoming window.</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;<span class="comment"> * See ::pn_messenger_get_incoming_window() for details.</span></div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;<span class="comment"> * @param[in] window the number of deliveries to track</span></div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="comment"> * @return an error or zero on success</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga0725c3cac4ae83188a54ed2308fc9e9a">pn_messenger_set_incoming_window</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;                                               <span class="keywordtype">int</span> window);</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="comment"> * Currently a no-op placeholder. For future compatibility, do not</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;<span class="comment"> * send or receive messages before starting the messenger.</span></div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;<span class="comment"> * @param[in] messenger the messenger to start</span></div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gaeb8b0b3a04c4dc4dbf83a66cbb8f54f1">pn_messenger_start</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;<span class="comment"> * Stops a messenger.</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="comment"> * Stopping a messenger will perform an orderly shutdown of all</span></div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;<span class="comment"> * underlying connections. This may require some time. If the</span></div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="comment"> * messenger is in non blocking mode (see ::pn_messenger_is_blocking),</span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;<span class="comment"> * this operation will return PN_INPROGRESS if it cannot finish</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="comment"> * immediately. In that case, you can use ::pn_messenger_stopped() to</span></div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;<span class="comment"> * determine when the messenger has finished stopping.</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="comment"> * @param[in] messenger the messenger to stop</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga40373fb89d70f6c3b7a4b9a0e9c2d3e4">pn_messenger_stop</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="comment"> * Returns true if a messenger is in the stopped state. This function</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;<span class="comment"> * does not block.</span></div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;<span class="comment"> * @param[in] messenger the messenger to stop</span></div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">bool</span> <a class="code" href="group__messenger.html#gaba050f36861e436a18378a8a1ff835e0">pn_messenger_stopped</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;<span class="comment"> * Subscribes a messenger to messages from the specified source.</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;<span class="comment"> * @param[in] messenger the messenger to subscribe</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="comment"> * @param[in] source</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;<span class="comment"> * @return a subscription</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *<a class="code" href="group__messenger.html#gaf1f1bfe4894d971f0b8d679bcab5cae6">pn_messenger_subscribe</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *source);</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;<span class="comment"> * Subscribes a messenger to messages from the specified source with the given</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;<span class="comment"> * timeout for the subscription&#39;s lifetime.</span></div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;<span class="comment"> * @param[in] messenger the messenger to subscribe</span></div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;<span class="comment"> * @param[in] source</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;<span class="comment"> * @param[in] timeout the maximum time to keep the subscription alive once the</span></div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;<span class="comment"> *            link is closed.</span></div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;<span class="comment"> * @return a subscription</span></div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;<a class="code" href="group__messenger.html#gace4b35e754ed9e1ab134ce50212158a1">pn_messenger_subscribe_ttl</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *source,</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;                           <a class="code" href="group__primitives.html#gafdede9be0526a8d0b9ab5d3149069af1">pn_seconds_t</a> timeout);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;<span class="comment"> * Get a link based on link name and whether the link is a sender or receiver</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="comment"> * @param[in] messenger the messenger to get the link from</span></div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;<span class="comment"> * @param[in] address the link address that identifies the link to receive</span></div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="comment"> * @param[in] sender true if the link is a sender, false if the link is a</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="comment"> *            receiver</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="comment"> * @return a link, or NULL if no link matches the address / sender parameters</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__link.html#ga89dad3aa7934329a7ff467c636687bc0">pn_link_t</a> *<a class="code" href="group__messenger.html#ga24819ecf92720da72500bb453e3d3847">pn_messenger_get_link</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;                                           <span class="keyword">const</span> <span class="keywordtype">char</span> *address, <span class="keywordtype">bool</span> sender);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;<span class="comment"> * Get a subscription&#39;s application context.</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="comment"> * See ::pn_subscription_set_context().</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;<span class="comment"> * @param[in] sub a subscription object</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;<span class="comment"> * @return the subscription&#39;s application context</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">void</span> *<a class="code" href="group__messenger.html#gae8e9057967d3ca4d81318b147cd3f5ce">pn_subscription_get_context</a>(<a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *sub);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;<span class="comment"> * Set an application context for a subscription.</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;<span class="comment"> * @param[in] sub a subscription object</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;<span class="comment"> * @param[in] context the application context for the subscription</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">void</span> <a class="code" href="group__messenger.html#ga6ab59170c21b3a53e6f0c9b4a271ebce">pn_subscription_set_context</a>(<a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *sub, <span class="keywordtype">void</span> *context);</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;<span class="comment"> * Get the source address of a subscription.</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;<span class="comment"> * @param[in] sub a subscription object</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="comment"> * @return the subscription&#39;s source address</span></div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__messenger.html#ga177587d2aa7a6fee101a111e40765deb">pn_subscription_address</a>(<a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *sub);</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;<span class="comment"> * Puts a message onto the messenger&#39;s outgoing queue. The message may</span></div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;<span class="comment"> * also be sent if transmission would not cause blocking. This call</span></div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;<span class="comment"> * will not block.</span></div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;<span class="comment"> * @param[in] msg a message to put on the messenger&#39;s outgoing queue</span></div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gadc93816636d614c8ea2abdeef1b99573">pn_messenger_put</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <a class="code" href="group__message.html#gad9259fa9271e8844c8e05a7e8978e3b2">pn_message_t</a> *msg);</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;<span class="comment"> * Track the status of a delivery.</span></div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;<span class="comment"> * Get the current status of the delivery associated with the supplied</span></div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;<span class="comment"> * tracker. This may return PN_STATUS_UNKOWN if the tracker has fallen</span></div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;<span class="comment"> * outside the incoming/outgoing tracking windows of the messenger.</span></div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;<span class="comment"> * @param[in] tracker the tracker identifying the delivery</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;<span class="comment"> * @return a status code for the delivery</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__messenger.html#ga242e4ee54b9c0a416443c7da5f6e045b">pn_status_t</a> <a class="code" href="group__messenger.html#ga95063950449210b20ffb60bf2ea8f24b">pn_messenger_status</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, pn_tracker_t tracker);</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;<span class="comment"> * Get delivery information about a delivery.</span></div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;<span class="comment"> * Returns the delivery information associated with the supplied tracker.</span></div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;<span class="comment"> * This may return NULL if the tracker has fallen outside the</span></div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;<span class="comment"> * incoming/outgoing tracking windows of the messenger.</span></div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;<span class="comment"> * @param[in] tracker the tracker identifying the delivery</span></div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;<span class="comment"> * @return a pn_delivery_t representing the delivery.</span></div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__delivery.html#gacdfce854066c0a4ff4db9f9a0478f340">pn_delivery_t</a> *<a class="code" href="group__messenger.html#ga4d1810d42ee5dac4e5db82599b828aeb">pn_messenger_delivery</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;                                               pn_tracker_t tracker);</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="comment"> * Check if the delivery associated with a given tracker is still</span></div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;<span class="comment"> * waiting to be sent.</span></div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;<span class="comment"> * Note that returning false does not imply that the delivery was</span></div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="comment"> * actually sent over the wire.</span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;<span class="comment"> * @param[in] tracker the tracker identifying the delivery</span></div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;<span class="comment"> * @return true if the delivery is still buffered</span></div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">bool</span> <a class="code" href="group__messenger.html#ga8f41166af1cd932733d7c9cf10c22913">pn_messenger_buffered</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, pn_tracker_t tracker);</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;<span class="comment"> * Frees a Messenger from tracking the status associated with a given</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;<span class="comment"> * tracker. Use the PN_CUMULATIVE flag to indicate everything up to</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;<span class="comment"> * (and including) the given tracker.</span></div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;<span class="comment"> * @param[in] messenger the Messenger</span></div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;<span class="comment"> * @param[in] tracker identifies a delivery</span></div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;<span class="comment"> * @param[in] flags 0 or PN_CUMULATIVE</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga318b28252ff310f1956bc892ffaffaf3">pn_messenger_settle</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, pn_tracker_t tracker, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="comment"> * Get a tracker for the outgoing message most recently given to</span></div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="comment"> * pn_messenger_put.</span></div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;<span class="comment"> * This tracker may be used with pn_messenger_status to determine the</span></div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;<span class="comment"> * delivery status of the message, as long as the message is still</span></div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="comment"> * within your outgoing window.</span></div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;<span class="comment"> * @return a pn_tracker_t or an undefined value if pn_messenger_get</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;<span class="comment"> *         has never been called for the given messenger</span></div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> pn_tracker_t <a class="code" href="group__messenger.html#gaea099f5cefb69de9042e91d7fce17878">pn_messenger_outgoing_tracker</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;<span class="comment"> * Sends or receives any outstanding messages queued for a messenger.</span></div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;<span class="comment"> * This will block for the indicated timeout.</span></div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;<span class="comment"> * @param[in] messenger the Messenger</span></div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;<span class="comment"> * @param[in] timeout the maximum time to block in milliseconds, -1 ==</span></div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;<span class="comment"> * forever, 0 == do not block</span></div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="comment"> * @return 0 if no work to do, &lt; 0 if error, or 1 if work was done.</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga088c9d9b1dfd0b32cafa1534019438c2">pn_messenger_work</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">int</span> timeout);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;<span class="comment"> * Interrupt a messenger object that may be blocking in another</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;<span class="comment"> * thread.</span></div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<span class="comment"> * The messenger interface is single-threaded. This is the only</span></div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<span class="comment"> * messenger function intended to be concurrently called from another</span></div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;<span class="comment"> * thread. It will interrupt any messenger function which is currently</span></div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;<span class="comment"> * blocking and cause it to return with a status of ::PN_INTR.</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;<span class="comment"> * @param[in] messenger the Messenger to interrupt</span></div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gaf5a08242376fa805290966e89a54aa8e">pn_messenger_interrupt</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="comment"> * Send messages from a messenger&#39;s outgoing queue.</span></div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;<span class="comment"> * If a messenger is in blocking mode (see</span></div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;<span class="comment"> * ::pn_messenger_is_blocking()), this operation will block until N</span></div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;<span class="comment"> * messages have been sent from the outgoing queue. A value of -1 for</span></div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;<span class="comment"> * N means &quot;all messages in the outgoing queue&quot;. See below for a full</span></div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;<span class="comment"> * definition of what sent from the outgoing queue means.</span></div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;<span class="comment"> * Any blocking will end once the messenger&#39;s configured timeout (if</span></div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;<span class="comment"> * any) has been reached. When this happens an error code of</span></div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;<span class="comment"> * ::PN_TIMEOUT is returned.</span></div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;<span class="comment"> * If the messenger is in non blocking mode, this call will return an</span></div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;<span class="comment"> * error code of ::PN_INPROGRESS if it is unable to send the requested</span></div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;<span class="comment"> * number of messages without blocking.</span></div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;<span class="comment"> * A message is considered to be sent from the outgoing queue when its</span></div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;<span class="comment"> * status has been fully determined. This does not necessarily mean</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;<span class="comment"> * the message was successfully sent to the final recipient though,</span></div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;<span class="comment"> * for example of the receiver rejects the message, the final status</span></div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;<span class="comment"> * will be ::PN_STATUS_REJECTED. Similarly, if a message is sent to an</span></div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;<span class="comment"> * invalid address, it may be removed from the outgoing queue without</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;<span class="comment"> * ever even being transmitted. In this case the final status will be</span></div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;<span class="comment"> * ::PN_STATUS_ABORTED.</span></div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;<span class="comment"> * @param[in] n the number of messages to send</span></div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gafcdc9ca1e3d1505c5ebfb26cc95fb2bb">pn_messenger_send</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">int</span> n);</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;<span class="comment"> * Retrieve messages into a messenger&#39;s incoming queue.</span></div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;<span class="comment"> * Instructs a messenger to receive up to @c limit messages into the</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;<span class="comment"> * incoming message queue of a messenger. If @c limit is -1, the</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="comment"> * messenger will receive as many messages as it can buffer</span></div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;<span class="comment"> * internally. If the messenger is in blocking mode, this call will</span></div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;<span class="comment"> * block until at least one message is available in the incoming</span></div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;<span class="comment"> * queue.</span></div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;<span class="comment"> * Each call to pn_messenger_recv replaces the previous receive</span></div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;<span class="comment"> * operation, so pn_messenger_recv(messenger, 0) will cancel any</span></div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;<span class="comment"> * outstanding receive.</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="comment"> * After receiving messages onto your incoming queue use</span></div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="comment"> * ::pn_messenger_get() to access message content.</span></div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;<span class="comment"> * @param[in] limit the maximum number of messages to receive or -1 to</span></div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;<span class="comment"> *                  to receive as many messages as it can buffer</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;<span class="comment"> *                  internally.</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga6a766d6dfb249b2f2db8de0fc4a73990">pn_messenger_recv</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keywordtype">int</span> limit);</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;<span class="comment"> * Get the capacity of the incoming message queue of a messenger.</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;<span class="comment"> * Note this count does not include those messages already available</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;<span class="comment"> * on the incoming queue (@see pn_messenger_incoming()). Rather it</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;<span class="comment"> * returns the number of incoming queue entries available for</span></div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;<span class="comment"> * receiving messages.</span></div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga99c2fa02e546861b1cfe95bd133e2943">pn_messenger_receiving</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;<span class="comment"> * Get the next message from the head of a messenger&#39;s incoming queue.</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;<span class="comment"> * The get operation copies the message data from the head of the</span></div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;<span class="comment"> * messenger&#39;s incoming queue into the provided ::pn_message_t object.</span></div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;<span class="comment"> * If provided ::pn_message_t pointer is NULL, the head essage will be</span></div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;<span class="comment"> * discarded. This operation will return ::PN_EOS if there are no</span></div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;<span class="comment"> * messages left on the incoming queue.</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;<span class="comment"> * @param[out] message upon return contains the message from the head of the queue</span></div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga64d4dbf0f6cec27cd57d86728f43dd83">pn_messenger_get</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <a class="code" href="group__message.html#gad9259fa9271e8844c8e05a7e8978e3b2">pn_message_t</a> *message);</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;<span class="comment"> * Get a tracker for the message most recently retrieved by</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;<span class="comment"> * ::pn_messenger_get().</span></div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;<span class="comment"> * A tracker for an incoming message allows you to accept or reject</span></div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;<span class="comment"> * the associated message. It can also be used for cumulative</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;<span class="comment"> * accept/reject operations for the associated message and all prior</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;<span class="comment"> * messages as well.</span></div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="comment"> * @return a pn_tracker_t or an undefined value if pn_messenger_get</span></div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="comment"> *         has never been called for the given messenger</span></div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> pn_tracker_t <a class="code" href="group__messenger.html#gab3e5a76bd09bbce0e4243b2f4e600d04">pn_messenger_incoming_tracker</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;<span class="comment"> * Get the subscription of the message most recently retrieved by ::pn_messenger_get().</span></div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;<span class="comment"> * This operation will return NULL if ::pn_messenger_get() has never</span></div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<span class="comment"> * been succesfully called.</span></div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;<span class="comment"> * @return a pn_subscription_t or NULL</span></div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a> *<a class="code" href="group__messenger.html#ga7281f105c4eca994486985aa1e0f1cc1">pn_messenger_incoming_subscription</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;<span class="comment"> * Indicates that an accept or reject should operate cumulatively.</span></div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="group__messenger.html#ga6c2e8d006ec05b913fa1e6dc510d23b9">  772</a></span>&#160;<span class="preprocessor">#define PN_CUMULATIVE (0x1)</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;<span class="comment"> * Signal successful processing of message(s).</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;<span class="comment"> * With no flags this operation will signal the sender that the</span></div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;<span class="comment"> * message referenced by the tracker was accepted. If the</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;<span class="comment"> * PN_CUMULATIVE flag is set, this operation will also reject all</span></div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;<span class="comment"> * pending messages prior to the message indicated by the tracker.</span></div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;<span class="comment"> * Note that when a message is accepted or rejected multiple times,</span></div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;<span class="comment"> * either explicitly, or implicitly through use of the ::PN_CUMULATIVE</span></div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;<span class="comment"> * flag, only the first outcome applies. For example if a sequence of</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;<span class="comment"> * three messages are received: M1, M2, M3, and M2 is rejected, and M3</span></div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;<span class="comment"> * is cumulatively accepted, M2 will remain rejected and only M1 and</span></div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;<span class="comment"> * M3 will be considered accepted.</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;<span class="comment"> * @param[in] tracker an incoming tracker</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;<span class="comment"> * @param[in] flags 0 or PN_CUMULATIVE</span></div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga3ca5c41b89b7b47a721c06829e8c34e0">pn_messenger_accept</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, pn_tracker_t tracker, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;<span class="comment"> * Signal unsuccessful processing of message(s).</span></div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;<span class="comment"> * With no flags this operation will signal the sender that the</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;<span class="comment"> * message indicated by the tracker was rejected. If the PN_CUMULATIVE</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;<span class="comment"> * flag is used this operation will also reject all pending messages</span></div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;<span class="comment"> * prior to the message indicated by the tracker.</span></div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;<span class="comment"> * Note that when a message is accepted or rejected multiple times,</span></div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;<span class="comment"> * either explicitly, or implicitly through use of the ::PN_CUMULATIVE</span></div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;<span class="comment"> * flag, only the first outcome applies. For example if a sequence of</span></div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;<span class="comment"> * three messages are received: M1, M2, M3, and M2 is accepted, and M3</span></div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;<span class="comment"> * is cumulatively rejected, M2 will remain accepted and only M1 and</span></div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;<span class="comment"> * M3 will be considered rejected.</span></div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;<span class="comment"> * @param[in] tracker an incoming tracker</span></div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;<span class="comment"> * @param[in] flags 0 or PN_CUMULATIVE</span></div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;<span class="comment"> * @see error.h</span></div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga2967722a8f354ea3a13c65cdbc2be78c">pn_messenger_reject</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, pn_tracker_t tracker, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;<span class="comment"> * Get  link for the message referenced by the given tracker.</span></div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;<span class="comment"> * @param[in] tracker a tracker object</span></div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;<span class="comment"> * @return a pn_link_t or NULL if the link could not be determined.</span></div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__link.html#ga89dad3aa7934329a7ff467c636687bc0">pn_link_t</a> *<a class="code" href="group__messenger.html#gaa27f202efc3cb9454b899576058064b1">pn_messenger_tracker_link</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;                                               pn_tracker_t tracker);</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;<span class="comment"> * Get the number of messages in the outgoing message queue of a</span></div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;<span class="comment"> * messenger.</span></div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;<span class="comment"> * @return the outgoing queue depth</span></div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga1822e0ee5af28130d13687cc0fff21c6">pn_messenger_outgoing</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;<span class="comment"> * Get the number of messages in the incoming message queue of a messenger.</span></div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;<span class="comment"> * @return the incoming queue depth</span></div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#gaeb207b3f558e04abf7336bc603cc669d">pn_messenger_incoming</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;<span class="comment">//! Adds a routing rule to a Messenger&#39;s internal routing table.</span></div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;<span class="comment">//! The route procedure may be used to influence how a messenger will</span></div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;<span class="comment">//! internally treat a given address or class of addresses. Every call</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;<span class="comment">//! to the route procedure will result in messenger appending a routing</span></div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;<span class="comment">//! rule to its internal routing table.</span></div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;<span class="comment">//! Whenever a message is presented to a messenger for delivery, it</span></div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;<span class="comment">//! will match the address of this message against the set of routing</span></div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;<span class="comment">//! rules in order. The first rule to match will be triggered, and</span></div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;<span class="comment">//! instead of routing based on the address presented in the message,</span></div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;<span class="comment">//! the messenger will route based on the address supplied in the rule.</span></div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;<span class="comment">//! The pattern matching syntax supports two types of matches, a &#39;%&#39;</span></div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;<span class="comment">//! will match any character except a &#39;/&#39;, and a &#39;*&#39; will match any</span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;<span class="comment">//! character including a &#39;/&#39;.</span></div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;<span class="comment">//! A routing address is specified as a normal AMQP address, however it</span></div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;<span class="comment">//! may additionally use substitution variables from the pattern match</span></div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;<span class="comment">//! that triggered the rule.</span></div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;<span class="comment">//! Any message sent to &quot;foo&quot; will be routed to &quot;amqp://foo.com&quot;:</span></div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;foo&quot;, &quot;amqp://foo.com&quot;);</span></div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;<span class="comment">//! Any message sent to &quot;foobar&quot; will be routed to</span></div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;<span class="comment">//! &quot;amqp://foo.com/bar&quot;:</span></div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;foobar&quot;, &quot;amqp://foo.com/bar&quot;);</span></div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;<span class="comment">//! Any message sent to bar/&amp;lt;path&amp;gt; will be routed to the corresponding</span></div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;<span class="comment">//! path within the amqp://bar.com domain:</span></div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;bar/*&quot;, &quot;amqp://bar.com/$1&quot;);</span></div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;<span class="comment">//! Route all messages over TLS:</span></div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;amqp:*&quot;, &quot;amqps:$1&quot;)</span></div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;<span class="comment">//! Supply credentials for foo.com:</span></div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;amqp://foo.com/*&quot;, &quot;amqp://user:password@foo.com/$1&quot;);</span></div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;<span class="comment">//! Supply credentials for all domains:</span></div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;amqp://*&quot;, &quot;amqp://user:password@$1&quot;);</span></div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;<span class="comment">//! Route all addresses through a single proxy while preserving the</span></div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="comment">//! original destination:</span></div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;amqp://%/*&quot;, &quot;amqp://user:password@proxy/$1/$2&quot;);</span></div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;<span class="comment">//! Route any address through a single broker:</span></div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;<span class="comment">//!   pn_messenger_route(&quot;*&quot;, &quot;amqp://user:password@broker/$1&quot;);</span></div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;<span class="comment">//! @param[in] messenger the Messenger</span></div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;<span class="comment">//! @param[in] pattern a glob pattern</span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;<span class="comment">//! @param[in] address an address indicating alternative routing</span></div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;<span class="comment">//!</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;<span class="comment">//! @return an error code or zero on success</span></div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="comment">//! @see error.h</span></div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="comment"></span><a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga58608dc581eba5d56abc89d05377913e">pn_messenger_route</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *pattern,</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;                                 <span class="keyword">const</span> <span class="keywordtype">char</span> *address);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;<span class="comment"> * Rewrite message addresses prior to transmission.</span></div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="comment"> * This operation is similar to pn_messenger_route, except that the</span></div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;<span class="comment"> * destination of the message is determined before the message address</span></div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;<span class="comment"> * is rewritten.</span></div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;<span class="comment"> * The outgoing address is only rewritten after routing has been</span></div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;<span class="comment"> * finalized.  If a message has an outgoing address of</span></div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;<span class="comment"> * &quot;amqp://0.0.0.0:5678&quot;, and a rewriting rule that changes its</span></div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment"> * outgoing address to &quot;foo&quot;, it will still arrive at the peer that</span></div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="comment"> * is listening on &quot;amqp://0.0.0.0:5678&quot;, but when it arrives there,</span></div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;<span class="comment"> * the receiver will see its outgoing address as &quot;foo&quot;.</span></div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;<span class="comment"> * The default rewrite rule removes username and password from</span></div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;<span class="comment"> * addresses before they are transmitted.</span></div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;<span class="comment"> * @param[in] pattern a glob pattern to select messages</span></div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;<span class="comment"> * @param[in] address an address indicating outgoing address rewrite</span></div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;<span class="comment"> * @return an error code or zero on success</span></div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="group__messenger.html#ga1d109dcc2178b777e950d0ae664d5085">pn_messenger_rewrite</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger, <span class="keyword">const</span> <span class="keywordtype">char</span> *pattern,</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *address);</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;<span class="comment"> * Extract @link pn_selectable_t selectables @endlink from a passive</span></div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;<span class="comment"> * messenger.</span></div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="comment"> * A messenger that is in passive mode (see</span></div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;<span class="comment"> * ::pn_messenger_is_passive()) will never attempt to perform any I/O</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;<span class="comment"> * internally, but instead make its internal file descriptors</span></div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;<span class="comment"> * available for external processing via the</span></div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;<span class="comment"> * ::pn_messenger_selectable() operation.</span></div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;<span class="comment"> * An application wishing to perform I/O on behalf of a passive</span></div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;<span class="comment"> * messenger must extract all available selectables by calling this</span></div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;<span class="comment"> * operation until it returns NULL. The ::pn_selectable_t interface</span></div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;<span class="comment"> * may then be used by the application to perform I/O outside the</span></div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;<span class="comment"> * messenger.</span></div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;<span class="comment"> * All selectables returned by this operation must be serviced until</span></div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;<span class="comment"> * they reach a terminal state and then freed. See</span></div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;<span class="comment"> * ::pn_selectable_is_terminal() for more details.</span></div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;<span class="comment"> * By default any given selectable will only ever be returned once by</span></div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;<span class="comment"> * this operation, however if the selectable&#39;s registered flag is set</span></div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;<span class="comment"> * to true (see ::pn_selectable_set_registered()), then the selectable</span></div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="comment"> * will be returned whenever its interest set may have changed.</span></div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;<span class="comment"> * @return the next selectable, or NULL if there are none left</span></div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__selectable.html#gab7034170bf6367b989281d8ddaa87b09">pn_selectable_t</a> *<a class="code" href="group__messenger.html#ga48d37f185faf99c4270b41658e9bb7d8">pn_messenger_selectable</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;<span class="comment"> * Get the nearest deadline for selectables associated with a messenger.</span></div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;<span class="comment"> * @return the nearest deadline</span></div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__primitives.html#gad337c365b498106064ec28e00e5fb6dd">pn_timestamp_t</a> <a class="code" href="group__messenger.html#gac031418719d3afdd29cc6e64a3d97d67">pn_messenger_deadline</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;<span class="comment"> * @}</span></div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;</div><div class="line"><a name="l00979"></a><span class="lineno"><a class="line" href="messenger_8h.html#ad5ad0b67fef0e761dc0138b9621ffa14">  979</a></span>&#160;<span class="preprocessor">#define PN_FLAGS_CHECK_ROUTES                                                  \</span></div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;<span class="preprocessor">  (0x1) </span><span class="comment">/** Messenger flag to indicate that a call                             \</span></div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;<span class="comment">            to pn_messenger_start should check that                            \</span></div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;<span class="comment">            any defined routes are valid */</span><span class="preprocessor"></span></div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;</div><div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="messenger_8h.html#a118fb0c2384257dff5d72eea787e4a0c">  984</a></span>&#160;<span class="preprocessor">#define PN_FLAGS_ALLOW_INSECURE_MECHS                                          \</span></div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="preprocessor">  (0x2) </span><span class="comment">/** Messenger flag to indicate that the PLAIN                          \</span></div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="comment">            mechanism is allowed on an unencrypted                             \</span></div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;<span class="comment">            connection */</span><span class="preprocessor"></span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;<span class="comment">/** Sets control flags to enable additional function for the Messenger.</span></div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;<span class="comment"> * @param[in] flags 0 or PN_FLAGS_CHECK_ROUTES</span></div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;<span class="comment"> * @return an error code of zero if there is no error</span></div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="messenger_8h.html#abb0246cf86ece79993e498bbcb04ad60">pn_messenger_set_flags</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;                                     <span class="keyword">const</span> <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;<span class="comment">/** Gets the flags for a Messenger.</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;<span class="comment"> * @return The flags set for the messenger</span></div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="messenger_8h.html#a18cfd94962f9e839930f388fda9d7bd1">pn_messenger_get_flags</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;<span class="comment"> * Set the local sender settle mode for the underlying link.</span></div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;<span class="comment"> * @param[in] mode the sender settle mode</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="messenger_8h.html#a40147e4fdea368138335e90cbaf6e7aa">pn_messenger_set_snd_settle_mode</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;                                               <span class="keyword">const</span> <a class="code" href="group__link.html#ga3fb58bd0b88d37407ebb615c2630e608">pn_snd_settle_mode_t</a> mode);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="comment"> * Set the local receiver settle mode for the underlying link.</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;<span class="comment"> * @param[in] messenger the messenger</span></div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;<span class="comment"> * @param[in] mode the receiver settle mode</span></div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span> <a class="code" href="messenger_8h.html#ad139854875a7857a3dc1a0f93de718d9">pn_messenger_set_rcv_settle_mode</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;                                               <span class="keyword">const</span> <a class="code" href="group__link.html#gad1c2388cdae687be26222a5d66fd2d58">pn_rcv_settle_mode_t</a> mode);</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;<span class="comment"> * Set the tracer associated with a messenger.</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="comment"> * @param[in] tracer the tracer callback</span></div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">void</span> <a class="code" href="messenger_8h.html#a6f84343266983e41fbb78f2c5bb52eaf">pn_messenger_set_tracer</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;                                       <a class="code" href="group__transport.html#gae9b49fcbf6397e6916eb4e1357c90ff3">pn_tracer_t</a> tracer);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;<span class="comment"> * Gets the remote idle timeout for the specified remote service address</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;<span class="comment"> * @param[in] address of remote service whose idle timeout is required</span></div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;<span class="comment"> * @return the timeout in milliseconds or -1 if an error occurs</span></div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <a class="code" href="group__primitives.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a></div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    <a class="code" href="messenger_8h.html#abd65926e7942cabd7c8a8d08c816bac6">pn_messenger_get_remote_idle_timeout</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;                                         <span class="keyword">const</span> <span class="keywordtype">char</span> *address);</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="comment">/**</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;<span class="comment"> * Sets the SSL peer authentiacation mode required when a trust</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;<span class="comment"> * certificate is used.</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;<span class="comment"> * @param[in] messenger a messenger object</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="comment"> * @param[in] mode the mode required (see pn_ssl_verify_mode_t</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;<span class="comment"> *             enum for valid values)</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="comment"> * @return 0 if successful or -1 if an error occurs</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;<a class="code" href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a> <span class="keywordtype">int</span></div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<a class="code" href="messenger_8h.html#a8235fd094b6613334fcad7059109753b">pn_messenger_set_ssl_peer_authentication_mode</a>(<a class="code" href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a> *messenger,</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;                                              <span class="keyword">const</span> <a class="code" href="group__ssl.html#gae5e33024ed6af3432d4c76d1484d7ecb">pn_ssl_verify_mode_t</a> mode);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;}</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* messenger.h */</span><span class="preprocessor"></span></div><div class="ttc" id="group__messenger_html_ga95063950449210b20ffb60bf2ea8f24b"><div class="ttname"><a href="group__messenger.html#ga95063950449210b20ffb60bf2ea8f24b">pn_messenger_status</a></div><div class="ttdeci">PN_EXTERN pn_status_t pn_messenger_status(pn_messenger_t *messenger, pn_tracker_t tracker)</div><div class="ttdoc">Track the status of a delivery. </div></div>
<div class="ttc" id="group__messenger_html_ga8f889c65a77b807bb249e116649f9cd3"><div class="ttname"><a href="group__messenger.html#ga8f889c65a77b807bb249e116649f9cd3">pn_messenger_get_outgoing_window</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_get_outgoing_window(pn_messenger_t *messenger)</div><div class="ttdoc">Get the size of a messenger&amp;#39;s outgoing window. </div></div>
<div class="ttc" id="group__messenger_html_gaa300a232e25dbe6be6dca3949da82145"><div class="ttname"><a href="group__messenger.html#gaa300a232e25dbe6be6dca3949da82145">pn_messenger_name</a></div><div class="ttdeci">PN_EXTERN const char * pn_messenger_name(pn_messenger_t *messenger)</div><div class="ttdoc">Get the name of a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gaf5a08242376fa805290966e89a54aa8e"><div class="ttname"><a href="group__messenger.html#gaf5a08242376fa805290966e89a54aa8e">pn_messenger_interrupt</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_interrupt(pn_messenger_t *messenger)</div><div class="ttdoc">Interrupt a messenger object that may be blocking in another thread. </div></div>
<div class="ttc" id="group__messenger_html_gad8bdfb8f2d2ea1e8a873d048728b488f"><div class="ttname"><a href="group__messenger.html#gad8bdfb8f2d2ea1e8a873d048728b488f">pn_messenger_get_incoming_window</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_get_incoming_window(pn_messenger_t *messenger)</div><div class="ttdoc">Get the size of a messenger&amp;#39;s incoming window. </div></div>
<div class="ttc" id="group__messenger_html_ga7281f105c4eca994486985aa1e0f1cc1"><div class="ttname"><a href="group__messenger.html#ga7281f105c4eca994486985aa1e0f1cc1">pn_messenger_incoming_subscription</a></div><div class="ttdeci">PN_EXTERN pn_subscription_t * pn_messenger_incoming_subscription(pn_messenger_t *messenger)</div><div class="ttdoc">Get the subscription of the message most recently retrieved by pn_messenger_get(). </div></div>
<div class="ttc" id="group__messenger_html_gaa5e3ea6839e156d22afe0e8254e47b2d"><div class="ttname"><a href="group__messenger.html#gaa5e3ea6839e156d22afe0e8254e47b2d">pn_messenger_get_private_key</a></div><div class="ttdeci">PN_EXTERN const char * pn_messenger_get_private_key(pn_messenger_t *messenger)</div><div class="ttdoc">Gets the private key file for a messenger. </div></div>
<div class="ttc" id="transport_8h_html"><div class="ttname"><a href="transport_8h.html">transport.h</a></div><div class="ttdoc">Transport API for the proton Engine. </div></div>
<div class="ttc" id="group__messenger_html_ga91d3800c61ab27f32c8c0fc513ef085c"><div class="ttname"><a href="group__messenger.html#ga91d3800c61ab27f32c8c0fc513ef085c">pn_messenger_set_trusted_certificates</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_trusted_certificates(pn_messenger_t *messenger, const char *cert_db)</div><div class="ttdoc">Sets the trusted certificates database for a messenger. </div></div>
<div class="ttc" id="import__export_8h_html"><div class="ttname"><a href="import__export_8h.html">import_export.h</a></div></div>
<div class="ttc" id="messenger_8h_html_a18cfd94962f9e839930f388fda9d7bd1"><div class="ttname"><a href="messenger_8h.html#a18cfd94962f9e839930f388fda9d7bd1">pn_messenger_get_flags</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_get_flags(pn_messenger_t *messenger)</div><div class="ttdoc">Gets the flags for a Messenger. </div></div>
<div class="ttc" id="group__primitives_html_ga9a701bc6dc9af9f42c3f4679172a723c"><div class="ttname"><a href="group__primitives.html#ga9a701bc6dc9af9f42c3f4679172a723c">pn_millis_t</a></div><div class="ttdeci">uint32_t pn_millis_t</div><div class="ttdef"><b>Definition:</b> types.h:47</div></div>
<div class="ttc" id="selectable_8h_html"><div class="ttname"><a href="selectable_8h.html">selectable.h</a></div><div class="ttdoc">The selectable API provides an interface for integration with third party event loops. </div></div>
<div class="ttc" id="group__messenger_html_ga3ca5c41b89b7b47a721c06829e8c34e0"><div class="ttname"><a href="group__messenger.html#ga3ca5c41b89b7b47a721c06829e8c34e0">pn_messenger_accept</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_accept(pn_messenger_t *messenger, pn_tracker_t tracker, int flags)</div><div class="ttdoc">Signal successful processing of message(s). </div></div>
<div class="ttc" id="messenger_8h_html_a8235fd094b6613334fcad7059109753b"><div class="ttname"><a href="messenger_8h.html#a8235fd094b6613334fcad7059109753b">pn_messenger_set_ssl_peer_authentication_mode</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_ssl_peer_authentication_mode(pn_messenger_t *messenger, const pn_ssl_verify_mode_t mode)</div><div class="ttdoc">Sets the SSL peer authentiacation mode required when a trust certificate is used. ...</div></div>
<div class="ttc" id="group__message_html_gad9259fa9271e8844c8e05a7e8978e3b2"><div class="ttname"><a href="group__message.html#gad9259fa9271e8844c8e05a7e8978e3b2">pn_message_t</a></div><div class="ttdeci">struct pn_message_t pn_message_t</div><div class="ttdoc">An AMQP Message object. </div><div class="ttdef"><b>Definition:</b> message.h:49</div></div>
<div class="ttc" id="group__messenger_html_ga1d109dcc2178b777e950d0ae664d5085"><div class="ttname"><a href="group__messenger.html#ga1d109dcc2178b777e950d0ae664d5085">pn_messenger_rewrite</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_rewrite(pn_messenger_t *messenger, const char *pattern, const char *address)</div><div class="ttdoc">Rewrite message addresses prior to transmission. </div></div>
<div class="ttc" id="group__messenger_html_ga873eea2b97af52a138a2e1db7f4556e2"><div class="ttname"><a href="group__messenger.html#ga873eea2b97af52a138a2e1db7f4556e2">pn_messenger_get_timeout</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_get_timeout(pn_messenger_t *messenger)</div><div class="ttdoc">Gets the timeout for a messenger object. </div></div>
<div class="ttc" id="messenger_8h_html_abd65926e7942cabd7c8a8d08c816bac6"><div class="ttname"><a href="messenger_8h.html#abd65926e7942cabd7c8a8d08c816bac6">pn_messenger_get_remote_idle_timeout</a></div><div class="ttdeci">PN_EXTERN pn_millis_t pn_messenger_get_remote_idle_timeout(pn_messenger_t *messenger, const char *address)</div><div class="ttdoc">Gets the remote idle timeout for the specified remote service address. </div></div>
<div class="ttc" id="group__messenger_html_ga48d37f185faf99c4270b41658e9bb7d8"><div class="ttname"><a href="group__messenger.html#ga48d37f185faf99c4270b41658e9bb7d8">pn_messenger_selectable</a></div><div class="ttdeci">PN_EXTERN pn_selectable_t * pn_messenger_selectable(pn_messenger_t *messenger)</div><div class="ttdoc">Extract selectables  from a passive messenger. </div></div>
<div class="ttc" id="group__messenger_html_ga177587d2aa7a6fee101a111e40765deb"><div class="ttname"><a href="group__messenger.html#ga177587d2aa7a6fee101a111e40765deb">pn_subscription_address</a></div><div class="ttdeci">PN_EXTERN const char * pn_subscription_address(pn_subscription_t *sub)</div><div class="ttdoc">Get the source address of a subscription. </div></div>
<div class="ttc" id="group__messenger_html_gacd33f1218d6b6baed75462a3c9e31a81"><div class="ttname"><a href="group__messenger.html#gacd33f1218d6b6baed75462a3c9e31a81">pn_messenger_set_blocking</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_blocking(pn_messenger_t *messenger, bool blocking)</div><div class="ttdoc">Enable or disable blocking behavior for a messenger during calls to pn_messenger_send and pn_messenge...</div></div>
<div class="ttc" id="group__messenger_html_ga99c2fa02e546861b1cfe95bd133e2943"><div class="ttname"><a href="group__messenger.html#ga99c2fa02e546861b1cfe95bd133e2943">pn_messenger_receiving</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_receiving(pn_messenger_t *messenger)</div><div class="ttdoc">Get the capacity of the incoming message queue of a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gab1173cfe4bcaa0a530c8035dc75f42c7"><div class="ttname"><a href="group__messenger.html#gab1173cfe4bcaa0a530c8035dc75f42c7">pn_tracker_t</a></div><div class="ttdeci">int64_t pn_tracker_t</div><div class="ttdoc">Trackers provide a lightweight handle used to track the status of incoming and outgoing deliveries...</div><div class="ttdef"><b>Definition:</b> messenger.h:172</div></div>
<div class="ttc" id="group__messenger_html_gace4b35e754ed9e1ab134ce50212158a1"><div class="ttname"><a href="group__messenger.html#gace4b35e754ed9e1ab134ce50212158a1">pn_messenger_subscribe_ttl</a></div><div class="ttdeci">PN_EXTERN pn_subscription_t * pn_messenger_subscribe_ttl(pn_messenger_t *messenger, const char *source, pn_seconds_t timeout)</div><div class="ttdoc">Subscribes a messenger to messages from the specified source with the given timeout for the subscript...</div></div>
<div class="ttc" id="group__link_html_ga89dad3aa7934329a7ff467c636687bc0"><div class="ttname"><a href="group__link.html#ga89dad3aa7934329a7ff467c636687bc0">pn_link_t</a></div><div class="ttdeci">struct pn_link_t pn_link_t</div><div class="ttdoc">An AMQP Link object. </div><div class="ttdef"><b>Definition:</b> types.h:148</div></div>
<div class="ttc" id="group__messenger_html_ga1822e0ee5af28130d13687cc0fff21c6"><div class="ttname"><a href="group__messenger.html#ga1822e0ee5af28130d13687cc0fff21c6">pn_messenger_outgoing</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_outgoing(pn_messenger_t *messenger)</div><div class="ttdoc">Get the number of messages in the outgoing message queue of a messenger. </div></div>
<div class="ttc" id="group__primitives_html_gafdede9be0526a8d0b9ab5d3149069af1"><div class="ttname"><a href="group__primitives.html#gafdede9be0526a8d0b9ab5d3149069af1">pn_seconds_t</a></div><div class="ttdeci">uint32_t pn_seconds_t</div><div class="ttdef"><b>Definition:</b> types.h:49</div></div>
<div class="ttc" id="group__messenger_html_ga4d1810d42ee5dac4e5db82599b828aeb"><div class="ttname"><a href="group__messenger.html#ga4d1810d42ee5dac4e5db82599b828aeb">pn_messenger_delivery</a></div><div class="ttdeci">PN_EXTERN pn_delivery_t * pn_messenger_delivery(pn_messenger_t *messenger, pn_tracker_t tracker)</div><div class="ttdoc">Get delivery information about a delivery. </div></div>
<div class="ttc" id="group__messenger_html_gaf1f1bfe4894d971f0b8d679bcab5cae6"><div class="ttname"><a href="group__messenger.html#gaf1f1bfe4894d971f0b8d679bcab5cae6">pn_messenger_subscribe</a></div><div class="ttdeci">PN_EXTERN pn_subscription_t * pn_messenger_subscribe(pn_messenger_t *messenger, const char *source)</div><div class="ttdoc">Subscribes a messenger to messages from the specified source. </div></div>
<div class="ttc" id="group__messenger_html_ga58608dc581eba5d56abc89d05377913e"><div class="ttname"><a href="group__messenger.html#ga58608dc581eba5d56abc89d05377913e">pn_messenger_route</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_route(pn_messenger_t *messenger, const char *pattern, const char *address)</div><div class="ttdoc">Adds a routing rule to a Messenger&amp;#39;s internal routing table. </div></div>
<div class="ttc" id="group__ssl_html_gae5e33024ed6af3432d4c76d1484d7ecb"><div class="ttname"><a href="group__ssl.html#gae5e33024ed6af3432d4c76d1484d7ecb">pn_ssl_verify_mode_t</a></div><div class="ttdeci">pn_ssl_verify_mode_t</div><div class="ttdoc">Determines the level of peer validation. </div><div class="ttdef"><b>Definition:</b> ssl.h:175</div></div>
<div class="ttc" id="group__messenger_html_gaca5d33643cc6db452d4dd456f774f936"><div class="ttname"><a href="group__messenger.html#gaca5d33643cc6db452d4dd456f774f936">pn_messenger_get_certificate</a></div><div class="ttdeci">PN_EXTERN const char * pn_messenger_get_certificate(pn_messenger_t *messenger)</div><div class="ttdoc">Get the certificate path. </div></div>
<div class="ttc" id="group__messenger_html_gaeb8b0b3a04c4dc4dbf83a66cbb8f54f1"><div class="ttname"><a href="group__messenger.html#gaeb8b0b3a04c4dc4dbf83a66cbb8f54f1">pn_messenger_start</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_start(pn_messenger_t *messenger)</div><div class="ttdoc">Currently a no-op placeholder. </div></div>
<div class="ttc" id="message_8h_html"><div class="ttname"><a href="message_8h.html">message.h</a></div><div class="ttdoc">Message API for encoding/decoding AMQP Messages. </div></div>
<div class="ttc" id="messenger_8h_html_abb0246cf86ece79993e498bbcb04ad60"><div class="ttname"><a href="messenger_8h.html#abb0246cf86ece79993e498bbcb04ad60">pn_messenger_set_flags</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_flags(pn_messenger_t *messenger, const int flags)</div><div class="ttdoc">Sets control flags to enable additional function for the Messenger. </div></div>
<div class="ttc" id="group__messenger_html_ga242e4ee54b9c0a416443c7da5f6e045b"><div class="ttname"><a href="group__messenger.html#ga242e4ee54b9c0a416443c7da5f6e045b">pn_status_t</a></div><div class="ttdeci">pn_status_t</div><div class="ttdoc">Describes all the possible states for a message associated with a given tracker. </div><div class="ttdef"><b>Definition:</b> messenger.h:178</div></div>
<div class="ttc" id="group__messenger_html_gaf95b3b54f4ee2a97db09e83ea5a0f8c3"><div class="ttname"><a href="group__messenger.html#gaf95b3b54f4ee2a97db09e83ea5a0f8c3">pn_messenger_is_blocking</a></div><div class="ttdeci">PN_EXTERN bool pn_messenger_is_blocking(pn_messenger_t *messenger)</div><div class="ttdoc">Check if a messenger is in blocking mode. </div></div>
<div class="ttc" id="group__messenger_html_gaba050f36861e436a18378a8a1ff835e0"><div class="ttname"><a href="group__messenger.html#gaba050f36861e436a18378a8a1ff835e0">pn_messenger_stopped</a></div><div class="ttdeci">PN_EXTERN bool pn_messenger_stopped(pn_messenger_t *messenger)</div><div class="ttdoc">Returns true if a messenger is in the stopped state. </div></div>
<div class="ttc" id="import__export_8h_html_acfa9628d87130a64f95ee17c57a7c13b"><div class="ttname"><a href="import__export_8h.html#acfa9628d87130a64f95ee17c57a7c13b">PN_EXTERN</a></div><div class="ttdeci">#define PN_EXTERN</div><div class="ttdef"><b>Definition:</b> import_export.h:53</div></div>
<div class="ttc" id="group__messenger_html_gabd73703511b9dae193765e9e57864291"><div class="ttname"><a href="group__messenger.html#gabd73703511b9dae193765e9e57864291">pn_subscription_t</a></div><div class="ttdeci">struct pn_subscription_t pn_subscription_t</div><div class="ttdoc">A subscription is a request for incoming messages. </div><div class="ttdef"><b>Definition:</b> messenger.h:166</div></div>
<div class="ttc" id="group__messenger_html_ga24819ecf92720da72500bb453e3d3847"><div class="ttname"><a href="group__messenger.html#ga24819ecf92720da72500bb453e3d3847">pn_messenger_get_link</a></div><div class="ttdeci">PN_EXTERN pn_link_t * pn_messenger_get_link(pn_messenger_t *messenger, const char *address, bool sender)</div><div class="ttdoc">Get a link based on link name and whether the link is a sender or receiver. </div></div>
<div class="ttc" id="group__messenger_html_ga0725c3cac4ae83188a54ed2308fc9e9a"><div class="ttname"><a href="group__messenger.html#ga0725c3cac4ae83188a54ed2308fc9e9a">pn_messenger_set_incoming_window</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_incoming_window(pn_messenger_t *messenger, int window)</div><div class="ttdoc">Set the size of a messenger&amp;#39;s incoming window. </div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba693fd9044a50a4f02e842d04a4bf1467"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba693fd9044a50a4f02e842d04a4bf1467">PN_STATUS_ACCEPTED</a></div><div class="ttdoc">The message was accepted. </div><div class="ttdef"><b>Definition:</b> messenger.h:183</div></div>
<div class="ttc" id="terminus_8h_html"><div class="ttname"><a href="terminus_8h.html">terminus.h</a></div><div class="ttdoc">Terminus API for the proton Engine. </div></div>
<div class="ttc" id="group__messenger_html_ga310d7de19eb8943a2818f53d9b45cfc9"><div class="ttname"><a href="group__messenger.html#ga310d7de19eb8943a2818f53d9b45cfc9">pn_messenger_set_certificate</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_certificate(pn_messenger_t *messenger, const char *certificate)</div><div class="ttdoc">Sets the path that will be used to get the certificate that will be used to identify this messenger t...</div></div>
<div class="ttc" id="group__messenger_html_ga6a766d6dfb249b2f2db8de0fc4a73990"><div class="ttname"><a href="group__messenger.html#ga6a766d6dfb249b2f2db8de0fc4a73990">pn_messenger_recv</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_recv(pn_messenger_t *messenger, int limit)</div><div class="ttdoc">Retrieve messages into a messenger&amp;#39;s incoming queue. </div></div>
<div class="ttc" id="group__link_html_ga3fb58bd0b88d37407ebb615c2630e608"><div class="ttname"><a href="group__link.html#ga3fb58bd0b88d37407ebb615c2630e608">pn_snd_settle_mode_t</a></div><div class="ttdeci">pn_snd_settle_mode_t</div><div class="ttdoc">Describes the permitted/expected settlement behaviours of a sending link. </div><div class="ttdef"><b>Definition:</b> link.h:471</div></div>
<div class="ttc" id="group__messenger_html_gab3e5a76bd09bbce0e4243b2f4e600d04"><div class="ttname"><a href="group__messenger.html#gab3e5a76bd09bbce0e4243b2f4e600d04">pn_messenger_incoming_tracker</a></div><div class="ttdeci">PN_EXTERN pn_tracker_t pn_messenger_incoming_tracker(pn_messenger_t *messenger)</div><div class="ttdoc">Get a tracker for the message most recently retrieved by pn_messenger_get(). </div></div>
<div class="ttc" id="group__messenger_html_gafcdc9ca1e3d1505c5ebfb26cc95fb2bb"><div class="ttname"><a href="group__messenger.html#gafcdc9ca1e3d1505c5ebfb26cc95fb2bb">pn_messenger_send</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_send(pn_messenger_t *messenger, int n)</div><div class="ttdoc">Send messages from a messenger&amp;#39;s outgoing queue. </div></div>
<div class="ttc" id="condition_8h_html"><div class="ttname"><a href="condition_8h.html">condition.h</a></div><div class="ttdoc">The Condition API for the proton Engine. </div></div>
<div class="ttc" id="group__messenger_html_ga64d4dbf0f6cec27cd57d86728f43dd83"><div class="ttname"><a href="group__messenger.html#ga64d4dbf0f6cec27cd57d86728f43dd83">pn_messenger_get</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_get(pn_messenger_t *messenger, pn_message_t *message)</div><div class="ttdoc">Get the next message from the head of a messenger&amp;#39;s incoming queue. </div></div>
<div class="ttc" id="group__messenger_html_ga916bf706b4b2e6eb60fb5ad679a230d2"><div class="ttname"><a href="group__messenger.html#ga916bf706b4b2e6eb60fb5ad679a230d2">pn_messenger_errno</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_errno(pn_messenger_t *messenger)</div><div class="ttdoc">Get the code for a messenger&amp;#39;s most recent error. </div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba4b0354a77173cd75c69159e15c23f611"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba4b0354a77173cd75c69159e15c23f611">PN_STATUS_PENDING</a></div><div class="ttdoc">The message is in flight. </div><div class="ttdef"><b>Definition:</b> messenger.h:180</div></div>
<div class="ttc" id="group__delivery_html_gacdfce854066c0a4ff4db9f9a0478f340"><div class="ttname"><a href="group__delivery.html#gacdfce854066c0a4ff4db9f9a0478f340">pn_delivery_t</a></div><div class="ttdeci">struct pn_delivery_t pn_delivery_t</div><div class="ttdoc">An AMQP Delivery object. </div><div class="ttdef"><b>Definition:</b> types.h:238</div></div>
<div class="ttc" id="group__messenger_html_gaeb207b3f558e04abf7336bc603cc669d"><div class="ttname"><a href="group__messenger.html#gaeb207b3f558e04abf7336bc603cc669d">pn_messenger_incoming</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_incoming(pn_messenger_t *messenger)</div><div class="ttdoc">Get the number of messages in the incoming message queue of a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045baf109df703952744009b3547f3b8f32bf"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045baf109df703952744009b3547f3b8f32bf">PN_STATUS_REJECTED</a></div><div class="ttdoc">The message was rejected. </div><div class="ttdef"><b>Definition:</b> messenger.h:184</div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba77d94a6b6b745eef9307f144b57e81e8"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba77d94a6b6b745eef9307f144b57e81e8">PN_STATUS_MODIFIED</a></div><div class="ttdoc">The message was modified. </div><div class="ttdef"><b>Definition:</b> messenger.h:186</div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba1181bc7f51502ae11ed240866cd64583"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1181bc7f51502ae11ed240866cd64583">PN_STATUS_SETTLED</a></div><div class="ttdoc">The remote party has settled the message. </div><div class="ttdef"><b>Definition:</b> messenger.h:188</div></div>
<div class="ttc" id="group__messenger_html_ga40373fb89d70f6c3b7a4b9a0e9c2d3e4"><div class="ttname"><a href="group__messenger.html#ga40373fb89d70f6c3b7a4b9a0e9c2d3e4">pn_messenger_stop</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_stop(pn_messenger_t *messenger)</div><div class="ttdoc">Stops a messenger. </div></div>
<div class="ttc" id="group__messenger_html_ga66fff60287c43a457518382216464c5b"><div class="ttname"><a href="group__messenger.html#ga66fff60287c43a457518382216464c5b">pn_messenger_error</a></div><div class="ttdeci">PN_EXTERN pn_error_t * pn_messenger_error(pn_messenger_t *messenger)</div><div class="ttdoc">Get a messenger&amp;#39;s error object. </div></div>
<div class="ttc" id="group__messenger_html_ga088c9d9b1dfd0b32cafa1534019438c2"><div class="ttname"><a href="group__messenger.html#ga088c9d9b1dfd0b32cafa1534019438c2">pn_messenger_work</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_work(pn_messenger_t *messenger, int timeout)</div><div class="ttdoc">Sends or receives any outstanding messages queued for a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gaea099f5cefb69de9042e91d7fce17878"><div class="ttname"><a href="group__messenger.html#gaea099f5cefb69de9042e91d7fce17878">pn_messenger_outgoing_tracker</a></div><div class="ttdeci">PN_EXTERN pn_tracker_t pn_messenger_outgoing_tracker(pn_messenger_t *messenger)</div><div class="ttdoc">Get a tracker for the outgoing message most recently given to pn_messenger_put. </div></div>
<div class="ttc" id="group__messenger_html_ga71ac6697b6fc8a39360dee9989f3a99b"><div class="ttname"><a href="group__messenger.html#ga71ac6697b6fc8a39360dee9989f3a99b">pn_messenger_set_passive</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_passive(pn_messenger_t *messenger, bool passive)</div><div class="ttdoc">Set the passive mode for a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba1239e8ada7eabe2aeab98f2c881cd2ee"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba1239e8ada7eabe2aeab98f2c881cd2ee">PN_STATUS_ABORTED</a></div><div class="ttdoc">The message was aborted. </div><div class="ttdef"><b>Definition:</b> messenger.h:187</div></div>
<div class="ttc" id="group__messenger_html_gaf24ba09549f555a0323f7ae0be1978b1"><div class="ttname"><a href="group__messenger.html#gaf24ba09549f555a0323f7ae0be1978b1">pn_messenger_is_passive</a></div><div class="ttdeci">PN_EXTERN bool pn_messenger_is_passive(pn_messenger_t *messenger)</div><div class="ttdoc">Check if a messenger is in passive mode. </div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba0b46b1041679460baaba2ddcdb2173f2"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba0b46b1041679460baaba2ddcdb2173f2">PN_STATUS_UNKNOWN</a></div><div class="ttdoc">The tracker is unknown. </div><div class="ttdef"><b>Definition:</b> messenger.h:179</div></div>
<div class="ttc" id="group__link_html_gad1c2388cdae687be26222a5d66fd2d58"><div class="ttname"><a href="group__link.html#gad1c2388cdae687be26222a5d66fd2d58">pn_rcv_settle_mode_t</a></div><div class="ttdeci">pn_rcv_settle_mode_t</div><div class="ttdoc">Describes the permitted/expected settlement behaviours of a receiving link. </div><div class="ttdef"><b>Definition:</b> link.h:488</div></div>
<div class="ttc" id="group__messenger_html_ga6e1ccb0c5a46d4f354b1b73ff5363531"><div class="ttname"><a href="group__messenger.html#ga6e1ccb0c5a46d4f354b1b73ff5363531">pn_messenger_set_outgoing_window</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_outgoing_window(pn_messenger_t *messenger, int window)</div><div class="ttdoc">Set the size of a messenger&amp;#39;s outgoing window. </div></div>
<div class="ttc" id="group__primitives_html_gad337c365b498106064ec28e00e5fb6dd"><div class="ttname"><a href="group__primitives.html#gad337c365b498106064ec28e00e5fb6dd">pn_timestamp_t</a></div><div class="ttdeci">int64_t pn_timestamp_t</div><div class="ttdef"><b>Definition:</b> types.h:51</div></div>
<div class="ttc" id="group__transport_html_gae9b49fcbf6397e6916eb4e1357c90ff3"><div class="ttname"><a href="group__transport.html#gae9b49fcbf6397e6916eb4e1357c90ff3">pn_tracer_t</a></div><div class="ttdeci">void(* pn_tracer_t)(pn_transport_t *transport, const char *message)</div><div class="ttdoc">Callback for customizing logging behaviour. </div><div class="ttdef"><b>Definition:</b> transport.h:63</div></div>
<div class="ttc" id="error_8h_html_a24a289d5b32c9bd8a775600a5af83d52"><div class="ttname"><a href="error_8h.html#a24a289d5b32c9bd8a775600a5af83d52">pn_error_t</a></div><div class="ttdeci">struct pn_error_t pn_error_t</div><div class="ttdoc">A pn_error_t has an int error code and some string text to describe the error. </div><div class="ttdef"><b>Definition:</b> error.h:33</div></div>
<div class="ttc" id="group__messenger_html_gga242e4ee54b9c0a416443c7da5f6e045ba67079750477effb7935df83381c47852"><div class="ttname"><a href="group__messenger.html#gga242e4ee54b9c0a416443c7da5f6e045ba67079750477effb7935df83381c47852">PN_STATUS_RELEASED</a></div><div class="ttdoc">The message was released. </div><div class="ttdef"><b>Definition:</b> messenger.h:185</div></div>
<div class="ttc" id="messenger_8h_html_a6f84343266983e41fbb78f2c5bb52eaf"><div class="ttname"><a href="messenger_8h.html#a6f84343266983e41fbb78f2c5bb52eaf">pn_messenger_set_tracer</a></div><div class="ttdeci">PN_EXTERN void pn_messenger_set_tracer(pn_messenger_t *messenger, pn_tracer_t tracer)</div><div class="ttdoc">Set the tracer associated with a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gaac399276ec13c5bb2755b55aeddbc3cb"><div class="ttname"><a href="group__messenger.html#gaac399276ec13c5bb2755b55aeddbc3cb">pn_messenger_set_private_key</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_private_key(pn_messenger_t *messenger, const char *private_key)</div><div class="ttdoc">Set path to the private key that was used to sign the certificate. </div></div>
<div class="ttc" id="group__messenger_html_gaf57143f98134870941839f9b665e87af"><div class="ttname"><a href="group__messenger.html#gaf57143f98134870941839f9b665e87af">pn_messenger_free</a></div><div class="ttdeci">PN_EXTERN void pn_messenger_free(pn_messenger_t *messenger)</div><div class="ttdoc">Frees a Messenger. </div></div>
<div class="ttc" id="ssl_8h_html"><div class="ttname"><a href="ssl_8h.html">ssl.h</a></div><div class="ttdoc">API for using SSL with the Transport Layer. </div></div>
<div class="ttc" id="group__messenger_html_ga621e7edf471c5cf32d7251ed0a468877"><div class="ttname"><a href="group__messenger.html#ga621e7edf471c5cf32d7251ed0a468877">pn_messenger_set_timeout</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_timeout(pn_messenger_t *messenger, int timeout)</div><div class="ttdoc">Set the default timeout for a messenger. </div></div>
<div class="ttc" id="link_8h_html"><div class="ttname"><a href="link_8h.html">link.h</a></div><div class="ttdoc">Link API for the proton Engine. </div></div>
<div class="ttc" id="group__messenger_html_ga2967722a8f354ea3a13c65cdbc2be78c"><div class="ttname"><a href="group__messenger.html#ga2967722a8f354ea3a13c65cdbc2be78c">pn_messenger_reject</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_reject(pn_messenger_t *messenger, pn_tracker_t tracker, int flags)</div><div class="ttdoc">Signal unsuccessful processing of message(s). </div></div>
<div class="ttc" id="group__messenger_html_ga8f41166af1cd932733d7c9cf10c22913"><div class="ttname"><a href="group__messenger.html#ga8f41166af1cd932733d7c9cf10c22913">pn_messenger_buffered</a></div><div class="ttdeci">PN_EXTERN bool pn_messenger_buffered(pn_messenger_t *messenger, pn_tracker_t tracker)</div><div class="ttdoc">Check if the delivery associated with a given tracker is still waiting to be sent. </div></div>
<div class="ttc" id="group__messenger_html_ga6ab59170c21b3a53e6f0c9b4a271ebce"><div class="ttname"><a href="group__messenger.html#ga6ab59170c21b3a53e6f0c9b4a271ebce">pn_subscription_set_context</a></div><div class="ttdeci">PN_EXTERN void pn_subscription_set_context(pn_subscription_t *sub, void *context)</div><div class="ttdoc">Set an application context for a subscription. </div></div>
<div class="ttc" id="group__messenger_html_ga0d342bb795d48591ad6b3f867766b8b1"><div class="ttname"><a href="group__messenger.html#ga0d342bb795d48591ad6b3f867766b8b1">pn_messenger_t</a></div><div class="ttdeci">struct pn_messenger_t pn_messenger_t</div><div class="ttdoc">A pn_messenger_t provides a high level interface for sending and receiving messages (See pn_message_t...</div><div class="ttdef"><b>Definition:</b> messenger.h:157</div></div>
<div class="ttc" id="group__messenger_html_gaa27f202efc3cb9454b899576058064b1"><div class="ttname"><a href="group__messenger.html#gaa27f202efc3cb9454b899576058064b1">pn_messenger_tracker_link</a></div><div class="ttdeci">PN_EXTERN pn_link_t * pn_messenger_tracker_link(pn_messenger_t *messenger, pn_tracker_t tracker)</div><div class="ttdoc">Get link for the message referenced by the given tracker. </div></div>
<div class="ttc" id="messenger_8h_html_a40147e4fdea368138335e90cbaf6e7aa"><div class="ttname"><a href="messenger_8h.html#a40147e4fdea368138335e90cbaf6e7aa">pn_messenger_set_snd_settle_mode</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_snd_settle_mode(pn_messenger_t *messenger, const pn_snd_settle_mode_t mode)</div><div class="ttdoc">Set the local sender settle mode for the underlying link. </div></div>
<div class="ttc" id="group__messenger_html_gac031418719d3afdd29cc6e64a3d97d67"><div class="ttname"><a href="group__messenger.html#gac031418719d3afdd29cc6e64a3d97d67">pn_messenger_deadline</a></div><div class="ttdeci">PN_EXTERN pn_timestamp_t pn_messenger_deadline(pn_messenger_t *messenger)</div><div class="ttdoc">Get the nearest deadline for selectables associated with a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gae8e9057967d3ca4d81318b147cd3f5ce"><div class="ttname"><a href="group__messenger.html#gae8e9057967d3ca4d81318b147cd3f5ce">pn_subscription_get_context</a></div><div class="ttdeci">PN_EXTERN void * pn_subscription_get_context(pn_subscription_t *sub)</div><div class="ttdoc">Get a subscription&amp;#39;s application context. </div></div>
<div class="ttc" id="group__messenger_html_ga9b1e530ba6d77b9e1f3a6e1e44cb7cf0"><div class="ttname"><a href="group__messenger.html#ga9b1e530ba6d77b9e1f3a6e1e44cb7cf0">pn_messenger_set_password</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_password(pn_messenger_t *messenger, const char *password)</div><div class="ttdoc">Sets the private key password for a messenger. </div></div>
<div class="ttc" id="group__messenger_html_ga21ab008d0e2218de2bb2ff19d66e214c"><div class="ttname"><a href="group__messenger.html#ga21ab008d0e2218de2bb2ff19d66e214c">pn_messenger_get_trusted_certificates</a></div><div class="ttdeci">PN_EXTERN const char * pn_messenger_get_trusted_certificates(pn_messenger_t *messenger)</div><div class="ttdoc">Gets the trusted certificates database for a messenger. </div></div>
<div class="ttc" id="group__messenger_html_gaca818b10d8ab415ff21b2df30e645588"><div class="ttname"><a href="group__messenger.html#gaca818b10d8ab415ff21b2df30e645588">pn_messenger_get_password</a></div><div class="ttdeci">PN_EXTERN const char * pn_messenger_get_password(pn_messenger_t *messenger)</div><div class="ttdoc">Gets the private key file password for a messenger. </div></div>
<div class="ttc" id="group__messenger_html_ga318b28252ff310f1956bc892ffaffaf3"><div class="ttname"><a href="group__messenger.html#ga318b28252ff310f1956bc892ffaffaf3">pn_messenger_settle</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_settle(pn_messenger_t *messenger, pn_tracker_t tracker, int flags)</div><div class="ttdoc">Frees a Messenger from tracking the status associated with a given tracker. </div></div>
<div class="ttc" id="group__messenger_html_gadc93816636d614c8ea2abdeef1b99573"><div class="ttname"><a href="group__messenger.html#gadc93816636d614c8ea2abdeef1b99573">pn_messenger_put</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_put(pn_messenger_t *messenger, pn_message_t *msg)</div><div class="ttdoc">Puts a message onto the messenger&amp;#39;s outgoing queue. </div></div>
<div class="ttc" id="messenger_8h_html_ad139854875a7857a3dc1a0f93de718d9"><div class="ttname"><a href="messenger_8h.html#ad139854875a7857a3dc1a0f93de718d9">pn_messenger_set_rcv_settle_mode</a></div><div class="ttdeci">PN_EXTERN int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, const pn_rcv_settle_mode_t mode)</div><div class="ttdoc">Set the local receiver settle mode for the underlying link. </div></div>
<div class="ttc" id="group__messenger_html_ga5770958f2ad363cbce4e49ddde2f0249"><div class="ttname"><a href="group__messenger.html#ga5770958f2ad363cbce4e49ddde2f0249">pn_messenger</a></div><div class="ttdeci">PN_EXTERN pn_messenger_t * pn_messenger(const char *name)</div><div class="ttdoc">Construct a new pn_messenger_t with the given name. </div></div>
<div class="ttc" id="group__selectable_html_gab7034170bf6367b989281d8ddaa87b09"><div class="ttname"><a href="group__selectable.html#gab7034170bf6367b989281d8ddaa87b09">pn_selectable_t</a></div><div class="ttdeci">struct pn_selectable_t pn_selectable_t</div><div class="ttdoc">A selectable object provides an interface that can be used to incorporate proton&amp;#39;s I/O into third par...</div><div class="ttdef"><b>Definition:</b> selectable.h:68</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Sun Feb 4 2018 22:16:50 for proton by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>