blob: 8f2b4a2d8b73438d1f441bb8be8cbe5a652051bf [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.20"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Qpid Proton C++ API: client.cpp</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</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">Qpid Proton C++ API
&#160;<span id="projectnumber">0.32.0</span>
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.svg"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.20 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('client_8cpp-example.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">client.cpp</div> </div>
</div><!--header-->
<div class="contents">
<p>The client part of a request-response example. Sends requests and prints out responses. Requires an intermediary that supports the AMQP 1.0 dynamic nodes on which the responses are received. The requests are sent through the 'examples' node.</p>
<div class="fragment"><div class="line"><span class="comment">/*</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
<div class="line"><span class="comment"> * or more contributor license agreements. See the NOTICE file</span></div>
<div class="line"><span class="comment"> * distributed with this work for additional information</span></div>
<div class="line"><span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></div>
<div class="line"><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
<div class="line"><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
<div class="line"><span class="comment"> * with the License. You may obtain a copy of the License at</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
<div class="line"><span class="comment"> * software distributed under the License is distributed on an</span></div>
<div class="line"><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
<div class="line"><span class="comment"> * KIND, either express or implied. See the License for the</span></div>
<div class="line"><span class="comment"> * specific language governing permissions and limitations</span></div>
<div class="line"><span class="comment"> * under the License.</span></div>
<div class="line"><span class="comment"> *</span></div>
<div class="line"><span class="comment"> */</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;options.hpp&quot;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="connection_8hpp.html">proton/connection.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="container_8hpp.html">proton/container.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="delivery_8hpp.html">proton/delivery.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="message_8hpp.html">proton/message.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="messaging__handler_8hpp.html">proton/messaging_handler.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="receiver__options_8hpp.html">proton/receiver_options.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="source__options_8hpp.html">proton/source_options.hpp</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="code" href="tracker_8hpp.html">proton/tracker.hpp</a>&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"> </div>
<div class="line"><span class="preprocessor">#include &quot;fake_cpp11.hpp&quot;</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">using</span> <a name="_a0"></a><a class="code" href="classproton_1_1receiver__options.html">proton::receiver_options</a>;</div>
<div class="line"><span class="keyword">using</span> <a name="_a1"></a><a class="code" href="classproton_1_1source__options.html">proton::source_options</a>;</div>
<div class="line"> </div>
<div class="line"><span class="keyword">class </span>client : <span class="keyword">public</span> <a name="_a2"></a><a class="code" href="classproton_1_1messaging__handler.html">proton::messaging_handler</a> {</div>
<div class="line"> <span class="keyword">private</span>:</div>
<div class="line"> std::string url;</div>
<div class="line"> std::vector&lt;std::string&gt; requests;</div>
<div class="line"> <a name="_a3"></a><a class="code" href="classproton_1_1sender.html">proton::sender</a> sender;</div>
<div class="line"> <a name="_a4"></a><a class="code" href="classproton_1_1receiver.html">proton::receiver</a> receiver;</div>
<div class="line"> </div>
<div class="line"> <span class="keyword">public</span>:</div>
<div class="line"> client(<span class="keyword">const</span> std::string &amp;u, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; r) : url(u), requests(r) {}</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">void</span> <a name="a5"></a><a class="code" href="classproton_1_1messaging__handler.html#a9188622c33638e076d2214080129c824">on_container_start</a>(<a name="_a6"></a><a class="code" href="classproton_1_1container.html">proton::container</a> &amp;c) OVERRIDE {</div>
<div class="line"> sender = c.<a name="a7"></a><a class="code" href="classproton_1_1container.html#adfbfd13668611a525bb44328d7a3b1e8">open_sender</a>(url);</div>
<div class="line"> <span class="comment">// Create a receiver requesting a dynamically created queue</span></div>
<div class="line"> <span class="comment">// for the message source.</span></div>
<div class="line"> receiver_options opts = receiver_options().source(source_options().dynamic(<span class="keyword">true</span>));</div>
<div class="line"> receiver = sender.<a name="a8"></a><a class="code" href="classproton_1_1link.html#aff302bb6016f2ae29f01bb4e07389a52">connection</a>().<a name="a9"></a><a class="code" href="classproton_1_1connection.html#aad60d14592ee9d34caca4c61214ecd27">open_receiver</a>(<span class="stringliteral">&quot;&quot;</span>, opts);</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">void</span> send_request() {</div>
<div class="line"> <a name="_a10"></a><a class="code" href="classproton_1_1message.html">proton::message</a> req;</div>
<div class="line"> req.<a name="a11"></a><a class="code" href="classproton_1_1message.html#ae9af642f154a68ec0eb8e715ecaf95ae">body</a>(requests.front());</div>
<div class="line"> req.<a name="a12"></a><a class="code" href="classproton_1_1message.html#a4032b495d721bd6d29bfa33ebb8ac5fe">reply_to</a>(receiver.<a name="a13"></a><a class="code" href="classproton_1_1receiver.html#a91a9e8a9445b29d83dd0514cd76503ae">source</a>().<a name="a14"></a><a class="code" href="classproton_1_1source.html#a4744eb217c976c199b678bb5a0d55acf">address</a>());</div>
<div class="line"> sender.<a name="a15"></a><a class="code" href="classproton_1_1sender.html#a214eb30b24e6831d016a47b9dddda830">send</a>(req);</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">void</span> <a name="a16"></a><a class="code" href="classproton_1_1messaging__handler.html#a77f7e38659ee43ccb764e417ad6dd401">on_receiver_open</a>(<a class="code" href="classproton_1_1receiver.html">proton::receiver</a> &amp;) OVERRIDE {</div>
<div class="line"> send_request();</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">void</span> <a name="a17"></a><a class="code" href="classproton_1_1messaging__handler.html#a584c9daeadf4322801f58e054017fecb">on_message</a>(<a name="_a18"></a><a class="code" href="classproton_1_1delivery.html">proton::delivery</a> &amp;d, <a class="code" href="classproton_1_1message.html">proton::message</a> &amp;response) OVERRIDE {</div>
<div class="line"> <span class="keywordflow">if</span> (requests.empty()) <span class="keywordflow">return</span>; <span class="comment">// Spurious extra message!</span></div>
<div class="line"> </div>
<div class="line"> std::cout &lt;&lt; requests.front() &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; response.<a class="code" href="classproton_1_1message.html#ae9af642f154a68ec0eb8e715ecaf95ae">body</a>() &lt;&lt; std::endl;</div>
<div class="line"> requests.erase(requests.begin());</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span> (!requests.empty()) {</div>
<div class="line"> send_request();</div>
<div class="line"> } <span class="keywordflow">else</span> {</div>
<div class="line"> d.<a name="a19"></a><a class="code" href="classproton_1_1transfer.html#aff302bb6016f2ae29f01bb4e07389a52">connection</a>().<a name="a20"></a><a class="code" href="classproton_1_1connection.html#a5ae591df94fc66ccb85cbb6565368bca">close</a>();</div>
<div class="line"> }</div>
<div class="line"> }</div>
<div class="line">};</div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"> std::string url(<span class="stringliteral">&quot;127.0.0.1:5672/examples&quot;</span>);</div>
<div class="line"> example::options opts(argc, argv);</div>
<div class="line"> </div>
<div class="line"> opts.add_value(url, <span class="charliteral">&#39;a&#39;</span>, <span class="stringliteral">&quot;address&quot;</span>, <span class="stringliteral">&quot;connect and send to URL&quot;</span>, <span class="stringliteral">&quot;URL&quot;</span>);</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">try</span> {</div>
<div class="line"> opts.parse();</div>
<div class="line"> </div>
<div class="line"> std::vector&lt;std::string&gt; requests;</div>
<div class="line"> requests.push_back(<span class="stringliteral">&quot;Twas brillig, and the slithy toves&quot;</span>);</div>
<div class="line"> requests.push_back(<span class="stringliteral">&quot;Did gire and gymble in the wabe.&quot;</span>);</div>
<div class="line"> requests.push_back(<span class="stringliteral">&quot;All mimsy were the borogroves,&quot;</span>);</div>
<div class="line"> requests.push_back(<span class="stringliteral">&quot;And the mome raths outgrabe.&quot;</span>);</div>
<div class="line"> </div>
<div class="line"> client c(url, requests);</div>
<div class="line"> <a class="code" href="classproton_1_1container.html">proton::container</a>(c).<a name="a21"></a><a class="code" href="classproton_1_1container.html#a13a43e6d814de94978c515cb084873b1">run</a>();</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 0;</div>
<div class="line"> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> example::bad_option&amp; e) {</div>
<div class="line"> std::cout &lt;&lt; opts &lt;&lt; std::endl &lt;&lt; e.what() &lt;&lt; std::endl;</div>
<div class="line"> } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e) {</div>
<div class="line"> std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;</div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> 1;</div>
<div class="line">}</div>
</div><!-- fragment --> </div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="aclassproton_1_1receiver_html_a91a9e8a9445b29d83dd0514cd76503ae"><div class="ttname"><a href="classproton_1_1receiver.html#a91a9e8a9445b29d83dd0514cd76503ae">proton::receiver::source</a></div><div class="ttdeci">class source source() const</div><div class="ttdoc">Get the source node.</div></div>
<div class="ttc" id="amessaging__handler_8hpp_html"><div class="ttname"><a href="messaging__handler_8hpp.html">messaging_handler.hpp</a></div><div class="ttdoc">Handler for Proton messaging events.</div></div>
<div class="ttc" id="amessage_8hpp_html"><div class="ttname"><a href="message_8hpp.html">message.hpp</a></div><div class="ttdoc">An AMQP message.</div></div>
<div class="ttc" id="atracker_8hpp_html"><div class="ttname"><a href="tracker_8hpp.html">tracker.hpp</a></div><div class="ttdoc">A tracker for a sent message.</div></div>
<div class="ttc" id="aclassproton_1_1source__options_html"><div class="ttname"><a href="classproton_1_1source__options.html">proton::source_options</a></div><div class="ttdoc">Options for creating a source node for a sender or receiver.</div><div class="ttdef"><b>Definition:</b> source_options.hpp:44</div></div>
<div class="ttc" id="aclassproton_1_1container_html"><div class="ttname"><a href="classproton_1_1container.html">proton::container</a></div><div class="ttdoc">A top-level container of connections, sessions, and links.</div><div class="ttdef"><b>Definition:</b> container.hpp:50</div></div>
<div class="ttc" id="aclassproton_1_1link_html_aff302bb6016f2ae29f01bb4e07389a52"><div class="ttname"><a href="classproton_1_1link.html#aff302bb6016f2ae29f01bb4e07389a52">proton::link::connection</a></div><div class="ttdeci">class connection connection() const</div><div class="ttdoc">The connection that owns this link.</div></div>
<div class="ttc" id="adelivery_8hpp_html"><div class="ttname"><a href="delivery_8hpp.html">delivery.hpp</a></div><div class="ttdoc">A received message.</div></div>
<div class="ttc" id="aclassproton_1_1messaging__handler_html_a9188622c33638e076d2214080129c824"><div class="ttname"><a href="classproton_1_1messaging__handler.html#a9188622c33638e076d2214080129c824">proton::messaging_handler::on_container_start</a></div><div class="ttdeci">virtual void on_container_start(container &amp;)</div><div class="ttdoc">The container event loop is starting.</div></div>
<div class="ttc" id="areceiver__options_8hpp_html"><div class="ttname"><a href="receiver__options_8hpp.html">receiver_options.hpp</a></div><div class="ttdoc">Options for creating a receiver.</div></div>
<div class="ttc" id="aclassproton_1_1receiver__options_html"><div class="ttname"><a href="classproton_1_1receiver__options.html">proton::receiver_options</a></div><div class="ttdoc">Options for creating a receiver.</div><div class="ttdef"><b>Definition:</b> receiver_options.hpp:56</div></div>
<div class="ttc" id="aclassproton_1_1messaging__handler_html_a584c9daeadf4322801f58e054017fecb"><div class="ttname"><a href="classproton_1_1messaging__handler.html#a584c9daeadf4322801f58e054017fecb">proton::messaging_handler::on_message</a></div><div class="ttdeci">virtual void on_message(delivery &amp;, message &amp;)</div><div class="ttdoc">A message is received.</div></div>
<div class="ttc" id="aclassproton_1_1receiver_html"><div class="ttname"><a href="classproton_1_1receiver.html">proton::receiver</a></div><div class="ttdoc">A channel for receiving messages.</div><div class="ttdef"><b>Definition:</b> receiver.hpp:41</div></div>
<div class="ttc" id="aclassproton_1_1delivery_html"><div class="ttname"><a href="classproton_1_1delivery.html">proton::delivery</a></div><div class="ttdoc">A received message.</div><div class="ttdef"><b>Definition:</b> delivery.hpp:39</div></div>
<div class="ttc" id="aclassproton_1_1connection_html_a5ae591df94fc66ccb85cbb6565368bca"><div class="ttname"><a href="classproton_1_1connection.html#a5ae591df94fc66ccb85cbb6565368bca">proton::connection::close</a></div><div class="ttdeci">void close()</div><div class="ttdoc">Close the connection.</div></div>
<div class="ttc" id="aconnection_8hpp_html"><div class="ttname"><a href="connection_8hpp.html">connection.hpp</a></div><div class="ttdoc">A connection to a remote AMQP peer.</div></div>
<div class="ttc" id="aclassproton_1_1sender_html_a214eb30b24e6831d016a47b9dddda830"><div class="ttname"><a href="classproton_1_1sender.html#a214eb30b24e6831d016a47b9dddda830">proton::sender::send</a></div><div class="ttdeci">tracker send(const message &amp;m)</div><div class="ttdoc">Send a message on the sender.</div></div>
<div class="ttc" id="aclassproton_1_1messaging__handler_html"><div class="ttname"><a href="classproton_1_1messaging__handler.html">proton::messaging_handler</a></div><div class="ttdoc">Handler for Proton messaging events.</div><div class="ttdef"><b>Definition:</b> messaging_handler.hpp:69</div></div>
<div class="ttc" id="aclassproton_1_1sender_html"><div class="ttname"><a href="classproton_1_1sender.html">proton::sender</a></div><div class="ttdoc">A channel for sending messages.</div><div class="ttdef"><b>Definition:</b> sender.hpp:40</div></div>
<div class="ttc" id="aclassproton_1_1transfer_html_aff302bb6016f2ae29f01bb4e07389a52"><div class="ttname"><a href="classproton_1_1transfer.html#aff302bb6016f2ae29f01bb4e07389a52">proton::transfer::connection</a></div><div class="ttdeci">class connection connection() const</div><div class="ttdoc">Return the connection for this transfer.</div></div>
<div class="ttc" id="aclassproton_1_1connection_html_aad60d14592ee9d34caca4c61214ecd27"><div class="ttname"><a href="classproton_1_1connection.html#aad60d14592ee9d34caca4c61214ecd27">proton::connection::open_receiver</a></div><div class="ttdeci">receiver open_receiver(const std::string &amp;addr)</div><div class="ttdoc">Open a receiver for addr on default_session().</div></div>
<div class="ttc" id="asource__options_8hpp_html"><div class="ttname"><a href="source__options_8hpp.html">source_options.hpp</a></div><div class="ttdoc">Options for creating a source node for a sender or receiver.</div></div>
<div class="ttc" id="aclassproton_1_1messaging__handler_html_a77f7e38659ee43ccb764e417ad6dd401"><div class="ttname"><a href="classproton_1_1messaging__handler.html#a77f7e38659ee43ccb764e417ad6dd401">proton::messaging_handler::on_receiver_open</a></div><div class="ttdeci">virtual void on_receiver_open(receiver &amp;)</div><div class="ttdoc">The remote peer opened the link.</div></div>
<div class="ttc" id="aclassproton_1_1message_html_ae9af642f154a68ec0eb8e715ecaf95ae"><div class="ttname"><a href="classproton_1_1message.html#ae9af642f154a68ec0eb8e715ecaf95ae">proton::message::body</a></div><div class="ttdeci">void body(const value &amp;x)</div><div class="ttdoc">Set the body. Equivalent to body() = x.</div></div>
<div class="ttc" id="aclassproton_1_1message_html_a4032b495d721bd6d29bfa33ebb8ac5fe"><div class="ttname"><a href="classproton_1_1message.html#a4032b495d721bd6d29bfa33ebb8ac5fe">proton::message::reply_to</a></div><div class="ttdeci">void reply_to(const std::string &amp;)</div><div class="ttdoc">Set the address for replies.</div></div>
<div class="ttc" id="aclassproton_1_1container_html_a13a43e6d814de94978c515cb084873b1"><div class="ttname"><a href="classproton_1_1container.html#a13a43e6d814de94978c515cb084873b1">proton::container::run</a></div><div class="ttdeci">void run()</div><div class="ttdoc">Run the container in the current thread.</div></div>
<div class="ttc" id="acontainer_8hpp_html"><div class="ttname"><a href="container_8hpp.html">container.hpp</a></div><div class="ttdoc">A top-level container of connections, sessions, and links.</div></div>
<div class="ttc" id="aclassproton_1_1source_html_a4744eb217c976c199b678bb5a0d55acf"><div class="ttname"><a href="classproton_1_1source.html#a4744eb217c976c199b678bb5a0d55acf">proton::source::address</a></div><div class="ttdeci">std::string address() const</div><div class="ttdoc">The address of the source.</div></div>
<div class="ttc" id="aclassproton_1_1container_html_adfbfd13668611a525bb44328d7a3b1e8"><div class="ttname"><a href="classproton_1_1container.html#adfbfd13668611a525bb44328d7a3b1e8">proton::container::open_sender</a></div><div class="ttdeci">returned&lt; sender &gt; open_sender(const std::string &amp;addr_url)</div><div class="ttdoc">Open a connection and sender for addr_url.</div></div>
<div class="ttc" id="aclassproton_1_1message_html"><div class="ttname"><a href="classproton_1_1message.html">proton::message</a></div><div class="ttdoc">An AMQP message.</div><div class="ttdef"><b>Definition:</b> message.hpp:50</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="http://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.8.20 </li>
</ul>
</div>
</body>
</html>