http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/c/examples/recv.c.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/c/examples/recv.c.html b/content/releases/qpid-proton-0.17.0/messenger/c/examples/recv.c.html new file mode 100644 index 0000000..5c53f06 --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/c/examples/recv.c.html @@ -0,0 +1,283 @@ +<!DOCTYPE html> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE file + - distributed with this work for additional information + - regarding copyright ownership. The ASF licenses this file + - to you under the Apache License, Version 2.0 (the + - "License"); you may not use this file except in compliance + - with the License. You may obtain a copy of the License at + - + - http://www.apache.org/licenses/LICENSE-2.0 + - + - Unless required by applicable law or agreed to in writing, + - software distributed under the License is distributed on an + - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + - KIND, either express or implied. See the License for the + - specific language governing permissions and limitations + - under the License. + - +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + <head> + <title>recv.c - Apache Qpid™</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> + <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> + <script type="text/javascript">var _deferredFunctions = [];</script> + <script type="text/javascript" src="/deferred.js" defer="defer"></script> + <!--[if lte IE 8]> + <link rel="stylesheet" href="/ie.css" type="text/css"/> + <script type="text/javascript" src="/html5shiv.js"></script> + <![endif]--> + + <!-- Redirects for `go get` and godoc.org --> + <meta name="go-import" + content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> + <meta name="go-source" + content="qpid.apache.org +https://github.com/apache/qpid-proton/blob/go1/README.md +https://github.com/apache/qpid-proton/tree/go1{/dir} +https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> + </head> + <body> + <div id="-content"> + <div id="-top" class="panel"> + <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> + + <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> + + <ul id="-global-navigation"> + <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> + <li><a href="/documentation.html">Documentation</a></li> + <li><a href="/download.html">Download</a></li> + <li><a href="/discussion.html">Discussion</a></li> + </ul> + </div> + + <div id="-menu" class="panel" style="display: none;"> + <div class="flex"> + <section> + <h3>Project</h3> + + <ul> + <li><a href="/overview.html">Overview</a></li> + <li><a href="/components/index.html">Components</a></li> + <li><a href="/releases/index.html">Releases</a></li> + </ul> + </section> + + <section> + <h3>Messaging APIs</h3> + + <ul> + <li><a href="/proton/index.html">Qpid Proton</a></li> + <li><a href="/components/jms/index.html">Qpid JMS</a></li> + <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> + </ul> + </section> + + <section> + <h3>Servers and tools</h3> + + <ul> + <li><a href="/components/java-broker/index.html">Broker for Java</a></li> + <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> + <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> + </ul> + </section> + + <section> + <h3>Resources</h3> + + <ul> + <li><a href="/dashboard.html">Dashboard</a></li> + <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> + <li><a href="/resources.html">More resources</a></li> + </ul> + </section> + </div> + </div> + + <div id="-search" class="panel" style="display: none;"> + <form action="http://www.google.com/search" method="get"> + <input type="hidden" name="sitesearch" value="qpid.apache.org"/> + <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> + <button type="submit">Search</button> + <a href="/search.html">More ways to search</a> + </form> + </div> + + <div id="-middle" class="panel"> + <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.17.0/index.html">Qpid Proton 0.17.0</a></li><li><a href="/releases/qpid-proton-0.17.0/messenger/c/examples/index.html">C AMQP Messenger Examples</a></li><li>recv.c</li></ul> + + <div id="-middle-content"> + +<h1>recv.c</h1> +<div class="highlight"><pre><span class="cp">#include "proton/message.h"</span> +<span class="cp">#include "proton/messenger.h"</span> + +<span class="cp">#include "pncompat/misc_funcs.inc"</span> +<span class="cp">#include <stdio.h></span> +<span class="cp">#include <stdlib.h></span> +<span class="cp">#include <ctype.h></span> + +<span class="cp">#define check(messenger) \</span> +<span class="cp"> { \</span> +<span class="cp"> if(pn_messenger_errno(messenger)) \</span> +<span class="cp"> { \</span> +<span class="cp"> die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \</span> +<span class="cp"> } \</span> +<span class="cp"> } \</span> + +<span class="kt">void</span> <span class="nf">die</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="kt">int</span> <span class="n">line</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">message</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"%s:%i: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">usage</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"Usage: recv [options] <addr></span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"-c </span><span class="se">\t</span><span class="s">Path to the certificate file.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"-k </span><span class="se">\t</span><span class="s">Path to the private key file.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"-p </span><span class="se">\t</span><span class="s">Password for the private key.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"<addr></span><span class="se">\t</span><span class="s">An address.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span> <span class="n">argv</span><span class="p">)</span> +<span class="p">{</span> + <span class="kt">char</span><span class="o">*</span> <span class="n">certificate</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> + <span class="kt">char</span><span class="o">*</span> <span class="n">privatekey</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> + <span class="kt">char</span><span class="o">*</span> <span class="n">password</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> + <span class="kt">char</span><span class="o">*</span> <span class="n">address</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="s">"amqp://~0.0.0.0"</span><span class="p">;</span> + <span class="kt">int</span> <span class="n">c</span><span class="p">;</span> + + <span class="kt">pn_message_t</span> <span class="o">*</span> <span class="n">message</span><span class="p">;</span> + <span class="kt">pn_messenger_t</span> <span class="o">*</span> <span class="n">messenger</span><span class="p">;</span> + + <span class="n">message</span> <span class="o">=</span> <span class="n">pn_message</span><span class="p">();</span> + <span class="n">messenger</span> <span class="o">=</span> <span class="n">pn_messenger</span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> + + <span class="n">opterr</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> + + <span class="k">while</span><span class="p">((</span><span class="n">c</span> <span class="o">=</span> <span class="n">getopt</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"hc:k:p:"</span><span class="p">))</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">switch</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">case</span> <span class="sc">'h'</span>: + <span class="n">usage</span><span class="p">();</span> + <span class="k">break</span><span class="p">;</span> + + <span class="k">case</span> <span class="sc">'c'</span>: <span class="n">certificate</span> <span class="o">=</span> <span class="n">optarg</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> + <span class="k">case</span> <span class="sc">'k'</span>: <span class="n">privatekey</span> <span class="o">=</span> <span class="n">optarg</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> + <span class="k">case</span> <span class="sc">'p'</span>: <span class="n">password</span> <span class="o">=</span> <span class="n">optarg</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> + + <span class="k">case</span> <span class="sc">'?'</span>: + <span class="k">if</span><span class="p">(</span><span class="n">optopt</span> <span class="o">==</span> <span class="sc">'c'</span> <span class="o">||</span> + <span class="n">optopt</span> <span class="o">==</span> <span class="sc">'k'</span> <span class="o">||</span> + <span class="n">optopt</span> <span class="o">==</span> <span class="sc">'p'</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Option -%c requires an argument.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">isprint</span><span class="p">(</span><span class="n">optopt</span><span class="p">))</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option `-%c'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option character `</span><span class="se">\\</span><span class="s">x%x'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">return</span> <span class="mi">1</span><span class="p">;</span> + <span class="nl">default:</span> + <span class="n">abort</span><span class="p">();</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">optind</span> <span class="o"><</span> <span class="n">argc</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">address</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">optind</span><span class="p">];</span> + <span class="p">}</span> + + + <span class="k">if</span><span class="p">(</span><span class="n">certificate</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">pn_messenger_set_certificate</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">certificate</span><span class="p">);</span> + <span class="p">}</span> + + <span class="k">if</span><span class="p">(</span><span class="n">privatekey</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">pn_messenger_set_private_key</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">privatekey</span><span class="p">);</span> + <span class="p">}</span> + + <span class="k">if</span><span class="p">(</span><span class="n">password</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">pn_messenger_set_password</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">password</span><span class="p">);</span> + <span class="p">}</span> + + <span class="n">pn_messenger_start</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="n">pn_messenger_subscribe</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="k">for</span><span class="p">(;;)</span> + <span class="p">{</span> + <span class="n">pn_messenger_recv</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="mi">1024</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="k">while</span><span class="p">(</span><span class="n">pn_messenger_incoming</span><span class="p">(</span><span class="n">messenger</span><span class="p">))</span> + <span class="p">{</span> + <span class="n">pn_messenger_get</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="p">{</span> + <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="mi">1024</span><span class="p">];</span> + <span class="kt">size_t</span> <span class="n">buffsize</span> <span class="o">=</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">buffer</span><span class="p">);</span> + <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">pn_message_get_subject</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="kt">pn_data_t</span> <span class="o">*</span><span class="n">body</span> <span class="o">=</span> <span class="n">pn_message_body</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="n">pn_data_format</span><span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="n">buffer</span><span class="p">,</span> <span class="o">&</span><span class="n">buffsize</span><span class="p">);</span> + + <span class="n">printf</span><span class="p">(</span><span class="s">"Address: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">pn_message_get_address</span><span class="p">(</span><span class="n">message</span><span class="p">));</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"Subject: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">subject</span> <span class="o">?</span> <span class="n">subject</span> <span class="o">:</span> <span class="s">"(no subject)"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"Content: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">buffer</span><span class="p">);</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> +<span class="p">}</span> +</pre></div> + +<p><a href="recv.c">Download this file</a></p> + + + <hr/> + + <ul id="-apache-navigation"> + <li><a href="http://www.apache.org/">Apache</a></li> + <li><a href="http://www.apache.org/licenses/">License</a></li> + <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> + <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li> + <li><a href="/security.html">Security</a></li> + <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> + </ul> + + <p id="-legal"> + Apache Qpid, Messaging built on AMQP; Copyright © 2015 + The Apache Software Foundation; Licensed under + the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache + License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, + Proton, Apache, the Apache feather logo, and the Apache Qpid + project logo are trademarks of The Apache Software + Foundation; All other marks mentioned may be trademarks or + registered trademarks of their respective owners + </p> + </div> + </div> + </div> + </body> +</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c new file mode 100755 index 0000000..de9b023 --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c @@ -0,0 +1,170 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +// This is a re-implementation of send.c using non-blocking/asynchronous calls. + +#include "proton/message.h" +#include "proton/messenger.h" + +#include "pncompat/misc_funcs.inc" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#if EMSCRIPTEN +#include <emscripten.h> +#endif + +pn_message_t * message; +pn_messenger_t * messenger; +pn_tracker_t tracker; +int running = 1; + +#define check(messenger) \ + { \ + if(pn_messenger_errno(messenger)) \ + { \ + die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \ + } \ + } \ + +void die(const char *file, int line, const char *message) +{ + fprintf(stderr, "%s:%i: %s\n", file, line, message); + exit(1); +} + +void usage(void) +{ + printf("Usage: send [-a addr] [message]\n"); + printf("-a \tThe target address [amqp[s]://domain[/name]]\n"); + printf("message\tA text string to send.\n"); + exit(0); +} + +void process(void) { + pn_status_t status = pn_messenger_status(messenger, tracker); + if (status != PN_STATUS_PENDING) { + if (running) { + pn_messenger_stop(messenger); + running = 0; + } + } + + if (pn_messenger_stopped(messenger)) { + pn_message_free(message); + pn_messenger_free(messenger); + message = NULL; + messenger = NULL; + } +} + +#if EMSCRIPTEN // For emscripten C/C++ to JavaScript compiler. +void pump(int fd, void* userData) { + while (pn_messenger_work(messenger, 0) >= 0) { + process(); + } +} + +void onclose(int fd, void* userData) { + process(); +} + +void onerror(int fd, int errno, const char* msg, void* userData) { + printf("error callback fd = %d, errno = %d, msg = %s\n", fd, errno, msg); +} +#endif + +int main(int argc, char** argv) +{ + int c; + char * address = (char *) "amqp://0.0.0.0"; + char * msgtext = (char *) "Hello World!"; + pn_data_t* body; + + opterr = 0; + + while((c = getopt(argc, argv, "ha:b:c:")) != -1) + { + switch(c) + { + case 'a': address = optarg; break; + case 'h': usage(); break; + + case '?': + if(optopt == 'a') + { + fprintf(stderr, "Option -%c requires an argument.\n", optopt); + } + else if(isprint(optopt)) + { + fprintf(stderr, "Unknown option `-%c'.\n", optopt); + } + else + { + fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); + } + return 1; + default: + abort(); + } + } + + if (optind < argc) msgtext = argv[optind]; + + message = pn_message(); + messenger = pn_messenger(NULL); + pn_messenger_set_blocking(messenger, false); // Needs to be set non-blocking to behave asynchronously. + pn_messenger_set_outgoing_window(messenger, 1024); + + pn_messenger_start(messenger); + + pn_message_set_address(message, address); + body = pn_message_body(message); + pn_data_put_string(body, pn_bytes(strlen(msgtext), msgtext)); + + pn_messenger_put(messenger, message); + check(messenger); + + tracker = pn_messenger_outgoing_tracker(messenger); + +#if EMSCRIPTEN // For emscripten C/C++ to JavaScript compiler. + emscripten_set_socket_error_callback(NULL, onerror); + + emscripten_set_socket_open_callback(NULL, pump); + emscripten_set_socket_connection_callback(NULL, pump); + emscripten_set_socket_message_callback(NULL, pump); + emscripten_set_socket_close_callback(NULL, onclose); +#else // For native compiler. + while (running) { + pn_messenger_work(messenger, -1); // Block indefinitely until there has been socket activity. + process(); + } + + while (messenger && !pn_messenger_stopped(messenger)) { + pn_messenger_work(messenger, 0); + process(); + } +#endif + + return 0; +} + http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c.html b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c.html new file mode 100644 index 0000000..a2cc9ad --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send-async.c.html @@ -0,0 +1,298 @@ +<!DOCTYPE html> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE file + - distributed with this work for additional information + - regarding copyright ownership. The ASF licenses this file + - to you under the Apache License, Version 2.0 (the + - "License"); you may not use this file except in compliance + - with the License. You may obtain a copy of the License at + - + - http://www.apache.org/licenses/LICENSE-2.0 + - + - Unless required by applicable law or agreed to in writing, + - software distributed under the License is distributed on an + - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + - KIND, either express or implied. See the License for the + - specific language governing permissions and limitations + - under the License. + - +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + <head> + <title>send-async.c - Apache Qpid™</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> + <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> + <script type="text/javascript">var _deferredFunctions = [];</script> + <script type="text/javascript" src="/deferred.js" defer="defer"></script> + <!--[if lte IE 8]> + <link rel="stylesheet" href="/ie.css" type="text/css"/> + <script type="text/javascript" src="/html5shiv.js"></script> + <![endif]--> + + <!-- Redirects for `go get` and godoc.org --> + <meta name="go-import" + content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> + <meta name="go-source" + content="qpid.apache.org +https://github.com/apache/qpid-proton/blob/go1/README.md +https://github.com/apache/qpid-proton/tree/go1{/dir} +https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> + </head> + <body> + <div id="-content"> + <div id="-top" class="panel"> + <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> + + <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> + + <ul id="-global-navigation"> + <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> + <li><a href="/documentation.html">Documentation</a></li> + <li><a href="/download.html">Download</a></li> + <li><a href="/discussion.html">Discussion</a></li> + </ul> + </div> + + <div id="-menu" class="panel" style="display: none;"> + <div class="flex"> + <section> + <h3>Project</h3> + + <ul> + <li><a href="/overview.html">Overview</a></li> + <li><a href="/components/index.html">Components</a></li> + <li><a href="/releases/index.html">Releases</a></li> + </ul> + </section> + + <section> + <h3>Messaging APIs</h3> + + <ul> + <li><a href="/proton/index.html">Qpid Proton</a></li> + <li><a href="/components/jms/index.html">Qpid JMS</a></li> + <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> + </ul> + </section> + + <section> + <h3>Servers and tools</h3> + + <ul> + <li><a href="/components/java-broker/index.html">Broker for Java</a></li> + <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> + <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> + </ul> + </section> + + <section> + <h3>Resources</h3> + + <ul> + <li><a href="/dashboard.html">Dashboard</a></li> + <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> + <li><a href="/resources.html">More resources</a></li> + </ul> + </section> + </div> + </div> + + <div id="-search" class="panel" style="display: none;"> + <form action="http://www.google.com/search" method="get"> + <input type="hidden" name="sitesearch" value="qpid.apache.org"/> + <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> + <button type="submit">Search</button> + <a href="/search.html">More ways to search</a> + </form> + </div> + + <div id="-middle" class="panel"> + <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.17.0/index.html">Qpid Proton 0.17.0</a></li><li><a href="/releases/qpid-proton-0.17.0/messenger/c/examples/index.html">C AMQP Messenger Examples</a></li><li>send-async.c</li></ul> + + <div id="-middle-content"> + +<h1>send-async.c</h1> +<div class="highlight"><pre><span class="c1">// This is a re-implementation of send.c using non-blocking/asynchronous calls.</span> + +<span class="cp">#include "proton/message.h"</span> +<span class="cp">#include "proton/messenger.h"</span> + +<span class="cp">#include "pncompat/misc_funcs.inc"</span> +<span class="cp">#include <stdio.h></span> +<span class="cp">#include <stdlib.h></span> +<span class="cp">#include <string.h></span> +<span class="cp">#include <ctype.h></span> + +<span class="cp">#if EMSCRIPTEN</span> +<span class="cp">#include <emscripten.h></span> +<span class="cp">#endif</span> + +<span class="kt">pn_message_t</span> <span class="o">*</span> <span class="n">message</span><span class="p">;</span> +<span class="kt">pn_messenger_t</span> <span class="o">*</span> <span class="n">messenger</span><span class="p">;</span> +<span class="kt">pn_tracker_t</span> <span class="n">tracker</span><span class="p">;</span> +<span class="kt">int</span> <span class="n">running</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> + +<span class="cp">#define check(messenger) \</span> +<span class="cp"> { \</span> +<span class="cp"> if(pn_messenger_errno(messenger)) \</span> +<span class="cp"> { \</span> +<span class="cp"> die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \</span> +<span class="cp"> } \</span> +<span class="cp"> } \</span> + +<span class="kt">void</span> <span class="nf">die</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="kt">int</span> <span class="n">line</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">message</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"%s:%i: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">usage</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"Usage: send [-a addr] [message]</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"-a </span><span class="se">\t</span><span class="s">The target address [amqp[s]://domain[/name]]</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"message</span><span class="se">\t</span><span class="s">A text string to send.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">process</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> + <span class="kt">pn_status_t</span> <span class="n">status</span> <span class="o">=</span> <span class="n">pn_messenger_status</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">tracker</span><span class="p">);</span> + <span class="k">if</span> <span class="p">(</span><span class="n">status</span> <span class="o">!=</span> <span class="n">PN_STATUS_PENDING</span><span class="p">)</span> <span class="p">{</span> + <span class="k">if</span> <span class="p">(</span><span class="n">running</span><span class="p">)</span> <span class="p">{</span> + <span class="n">pn_messenger_stop</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">running</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">pn_messenger_stopped</span><span class="p">(</span><span class="n">messenger</span><span class="p">))</span> <span class="p">{</span> + <span class="n">pn_message_free</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="n">pn_messenger_free</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">message</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> + <span class="n">messenger</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> + <span class="p">}</span> +<span class="p">}</span> + +<span class="cp">#if EMSCRIPTEN </span><span class="c1">// For emscripten C/C++ to JavaScript compiler.</span> +<span class="kt">void</span> <span class="nf">pump</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">userData</span><span class="p">)</span> <span class="p">{</span> + <span class="k">while</span> <span class="p">(</span><span class="n">pn_messenger_work</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> + <span class="n">process</span><span class="p">();</span> + <span class="p">}</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">onclose</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">userData</span><span class="p">)</span> <span class="p">{</span> + <span class="n">process</span><span class="p">();</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">onerror</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="kt">int</span> <span class="n">errno</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">msg</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">userData</span><span class="p">)</span> <span class="p">{</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"error callback fd = %d, errno = %d, msg = %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">fd</span><span class="p">,</span> <span class="n">errno</span><span class="p">,</span> <span class="n">msg</span><span class="p">);</span> +<span class="p">}</span> +<span class="cp">#endif</span> + +<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span> <span class="n">argv</span><span class="p">)</span> +<span class="p">{</span> + <span class="kt">int</span> <span class="n">c</span><span class="p">;</span> + <span class="kt">char</span> <span class="o">*</span> <span class="n">address</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="s">"amqp://0.0.0.0"</span><span class="p">;</span> + <span class="kt">char</span> <span class="o">*</span> <span class="n">msgtext</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="s">"Hello World!"</span><span class="p">;</span> + <span class="kt">pn_data_t</span><span class="o">*</span> <span class="n">body</span><span class="p">;</span> + + <span class="n">opterr</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> + + <span class="k">while</span><span class="p">((</span><span class="n">c</span> <span class="o">=</span> <span class="n">getopt</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"ha:b:c:"</span><span class="p">))</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">switch</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">case</span> <span class="sc">'a'</span>: <span class="n">address</span> <span class="o">=</span> <span class="n">optarg</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> + <span class="k">case</span> <span class="sc">'h'</span>: <span class="n">usage</span><span class="p">();</span> <span class="k">break</span><span class="p">;</span> + + <span class="k">case</span> <span class="sc">'?'</span>: + <span class="k">if</span><span class="p">(</span><span class="n">optopt</span> <span class="o">==</span> <span class="sc">'a'</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Option -%c requires an argument.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">isprint</span><span class="p">(</span><span class="n">optopt</span><span class="p">))</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option `-%c'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option character `</span><span class="se">\\</span><span class="s">x%x'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">return</span> <span class="mi">1</span><span class="p">;</span> + <span class="nl">default:</span> + <span class="n">abort</span><span class="p">();</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">optind</span> <span class="o"><</span> <span class="n">argc</span><span class="p">)</span> <span class="n">msgtext</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">optind</span><span class="p">];</span> + + <span class="n">message</span> <span class="o">=</span> <span class="n">pn_message</span><span class="p">();</span> + <span class="n">messenger</span> <span class="o">=</span> <span class="n">pn_messenger</span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> + <span class="n">pn_messenger_set_blocking</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="nb">false</span><span class="p">);</span> <span class="c1">// Needs to be set non-blocking to behave asynchronously.</span> + <span class="n">pn_messenger_set_outgoing_window</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="mi">1024</span><span class="p">);</span> + + <span class="n">pn_messenger_start</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="n">pn_message_set_address</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> + <span class="n">body</span> <span class="o">=</span> <span class="n">pn_message_body</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="n">pn_data_put_string</span><span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="n">pn_bytes</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">msgtext</span><span class="p">),</span> <span class="n">msgtext</span><span class="p">));</span> + + <span class="n">pn_messenger_put</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="n">tracker</span> <span class="o">=</span> <span class="n">pn_messenger_outgoing_tracker</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + +<span class="cp">#if EMSCRIPTEN </span><span class="c1">// For emscripten C/C++ to JavaScript compiler.</span> + <span class="n">emscripten_set_socket_error_callback</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">onerror</span><span class="p">);</span> + + <span class="n">emscripten_set_socket_open_callback</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">pump</span><span class="p">);</span> + <span class="n">emscripten_set_socket_connection_callback</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">pump</span><span class="p">);</span> + <span class="n">emscripten_set_socket_message_callback</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">pump</span><span class="p">);</span> + <span class="n">emscripten_set_socket_close_callback</span><span class="p">(</span><span class="nb">NULL</span><span class="p">,</span> <span class="n">onclose</span><span class="p">);</span> +<span class="cp">#else </span><span class="c1">// For native compiler.</span> + <span class="k">while</span> <span class="p">(</span><span class="n">running</span><span class="p">)</span> <span class="p">{</span> + <span class="n">pn_messenger_work</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// Block indefinitely until there has been socket activity.</span> + <span class="n">process</span><span class="p">();</span> + <span class="p">}</span> + + <span class="k">while</span> <span class="p">(</span><span class="n">messenger</span> <span class="o">&&</span> <span class="o">!</span><span class="n">pn_messenger_stopped</span><span class="p">(</span><span class="n">messenger</span><span class="p">))</span> <span class="p">{</span> + <span class="n">pn_messenger_work</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> + <span class="n">process</span><span class="p">();</span> + <span class="p">}</span> +<span class="cp">#endif</span> + + <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> +<span class="p">}</span> +</pre></div> + +<p><a href="send-async.c">Download this file</a></p> + + + <hr/> + + <ul id="-apache-navigation"> + <li><a href="http://www.apache.org/">Apache</a></li> + <li><a href="http://www.apache.org/licenses/">License</a></li> + <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> + <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li> + <li><a href="/security.html">Security</a></li> + <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> + </ul> + + <p id="-legal"> + Apache Qpid, Messaging built on AMQP; Copyright © 2015 + The Apache Software Foundation; Licensed under + the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache + License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, + Proton, Apache, the Apache feather logo, and the Apache Qpid + project logo are trademarks of The Apache Software + Foundation; All other marks mentioned may be trademarks or + registered trademarks of their respective owners + </p> + </div> + </div> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c new file mode 100755 index 0000000..11b47ff --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +#include "proton/message.h" +#include "proton/messenger.h" + +#include "pncompat/misc_funcs.inc" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +#define check(messenger) \ + { \ + if(pn_messenger_errno(messenger)) \ + { \ + die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \ + } \ + } \ + +void die(const char *file, int line, const char *message) +{ + fprintf(stderr, "%s:%i: %s\n", file, line, message); + exit(1); +} + +void usage(void) +{ + printf("Usage: send [-a addr] [message]\n"); + printf("-a \tThe target address [amqp[s]://domain[/name]]\n"); + printf("message\tA text string to send.\n"); + exit(0); +} + +int main(int argc, char** argv) +{ + int c; + char * address = (char *) "amqp://0.0.0.0"; + char * msgtext = (char *) "Hello World!"; + opterr = 0; + + while((c = getopt(argc, argv, "ha:b:c:")) != -1) + { + switch(c) + { + case 'a': address = optarg; break; + case 'h': usage(); break; + + case '?': + if(optopt == 'a') + { + fprintf(stderr, "Option -%c requires an argument.\n", optopt); + } + else if(isprint(optopt)) + { + fprintf(stderr, "Unknown option `-%c'.\n", optopt); + } + else + { + fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); + } + return 1; + default: + abort(); + } + } + + if (optind < argc) msgtext = argv[optind]; + + { + pn_message_t * message; + pn_messenger_t * messenger; + pn_data_t * body; + + message = pn_message(); + messenger = pn_messenger(NULL); + + pn_messenger_start(messenger); + + pn_message_set_address(message, address); + body = pn_message_body(message); + pn_data_put_string(body, pn_bytes(strlen(msgtext), msgtext)); + pn_messenger_put(messenger, message); + check(messenger); + pn_messenger_send(messenger, -1); + check(messenger); + + pn_messenger_stop(messenger); + pn_messenger_free(messenger); + pn_message_free(message); + } + + return 0; +} http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c.html b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c.html new file mode 100644 index 0000000..15c7bb1 --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/c/examples/send.c.html @@ -0,0 +1,240 @@ +<!DOCTYPE html> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE file + - distributed with this work for additional information + - regarding copyright ownership. The ASF licenses this file + - to you under the Apache License, Version 2.0 (the + - "License"); you may not use this file except in compliance + - with the License. You may obtain a copy of the License at + - + - http://www.apache.org/licenses/LICENSE-2.0 + - + - Unless required by applicable law or agreed to in writing, + - software distributed under the License is distributed on an + - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + - KIND, either express or implied. See the License for the + - specific language governing permissions and limitations + - under the License. + - +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + <head> + <title>send.c - Apache Qpid™</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> + <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> + <script type="text/javascript">var _deferredFunctions = [];</script> + <script type="text/javascript" src="/deferred.js" defer="defer"></script> + <!--[if lte IE 8]> + <link rel="stylesheet" href="/ie.css" type="text/css"/> + <script type="text/javascript" src="/html5shiv.js"></script> + <![endif]--> + + <!-- Redirects for `go get` and godoc.org --> + <meta name="go-import" + content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> + <meta name="go-source" + content="qpid.apache.org +https://github.com/apache/qpid-proton/blob/go1/README.md +https://github.com/apache/qpid-proton/tree/go1{/dir} +https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> + </head> + <body> + <div id="-content"> + <div id="-top" class="panel"> + <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> + + <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> + + <ul id="-global-navigation"> + <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> + <li><a href="/documentation.html">Documentation</a></li> + <li><a href="/download.html">Download</a></li> + <li><a href="/discussion.html">Discussion</a></li> + </ul> + </div> + + <div id="-menu" class="panel" style="display: none;"> + <div class="flex"> + <section> + <h3>Project</h3> + + <ul> + <li><a href="/overview.html">Overview</a></li> + <li><a href="/components/index.html">Components</a></li> + <li><a href="/releases/index.html">Releases</a></li> + </ul> + </section> + + <section> + <h3>Messaging APIs</h3> + + <ul> + <li><a href="/proton/index.html">Qpid Proton</a></li> + <li><a href="/components/jms/index.html">Qpid JMS</a></li> + <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> + </ul> + </section> + + <section> + <h3>Servers and tools</h3> + + <ul> + <li><a href="/components/java-broker/index.html">Broker for Java</a></li> + <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> + <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> + </ul> + </section> + + <section> + <h3>Resources</h3> + + <ul> + <li><a href="/dashboard.html">Dashboard</a></li> + <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> + <li><a href="/resources.html">More resources</a></li> + </ul> + </section> + </div> + </div> + + <div id="-search" class="panel" style="display: none;"> + <form action="http://www.google.com/search" method="get"> + <input type="hidden" name="sitesearch" value="qpid.apache.org"/> + <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> + <button type="submit">Search</button> + <a href="/search.html">More ways to search</a> + </form> + </div> + + <div id="-middle" class="panel"> + <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.17.0/index.html">Qpid Proton 0.17.0</a></li><li><a href="/releases/qpid-proton-0.17.0/messenger/c/examples/index.html">C AMQP Messenger Examples</a></li><li>send.c</li></ul> + + <div id="-middle-content"> + +<h1>send.c</h1> +<div class="highlight"><pre><span class="cp">#include "proton/message.h"</span> +<span class="cp">#include "proton/messenger.h"</span> + +<span class="cp">#include "pncompat/misc_funcs.inc"</span> +<span class="cp">#include <stdio.h></span> +<span class="cp">#include <stdlib.h></span> +<span class="cp">#include <string.h></span> +<span class="cp">#include <ctype.h></span> + +<span class="cp">#define check(messenger) \</span> +<span class="cp"> { \</span> +<span class="cp"> if(pn_messenger_errno(messenger)) \</span> +<span class="cp"> { \</span> +<span class="cp"> die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \</span> +<span class="cp"> } \</span> +<span class="cp"> } \</span> + +<span class="kt">void</span> <span class="nf">die</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">file</span><span class="p">,</span> <span class="kt">int</span> <span class="n">line</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">message</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"%s:%i: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">file</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">void</span> <span class="nf">usage</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<span class="p">{</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"Usage: send [-a addr] [message]</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"-a </span><span class="se">\t</span><span class="s">The target address [amqp[s]://domain[/name]]</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">printf</span><span class="p">(</span><span class="s">"message</span><span class="se">\t</span><span class="s">A text string to send.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> + <span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span> +<span class="p">}</span> + +<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span> <span class="n">argv</span><span class="p">)</span> +<span class="p">{</span> + <span class="kt">int</span> <span class="n">c</span><span class="p">;</span> + <span class="kt">char</span> <span class="o">*</span> <span class="n">address</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="s">"amqp://0.0.0.0"</span><span class="p">;</span> + <span class="kt">char</span> <span class="o">*</span> <span class="n">msgtext</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="s">"Hello World!"</span><span class="p">;</span> + <span class="n">opterr</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> + + <span class="k">while</span><span class="p">((</span><span class="n">c</span> <span class="o">=</span> <span class="n">getopt</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"ha:b:c:"</span><span class="p">))</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">switch</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> + <span class="p">{</span> + <span class="k">case</span> <span class="sc">'a'</span>: <span class="n">address</span> <span class="o">=</span> <span class="n">optarg</span><span class="p">;</span> <span class="k">break</span><span class="p">;</span> + <span class="k">case</span> <span class="sc">'h'</span>: <span class="n">usage</span><span class="p">();</span> <span class="k">break</span><span class="p">;</span> + + <span class="k">case</span> <span class="sc">'?'</span>: + <span class="k">if</span><span class="p">(</span><span class="n">optopt</span> <span class="o">==</span> <span class="sc">'a'</span><span class="p">)</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Option -%c requires an argument.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> <span class="k">if</span><span class="p">(</span><span class="n">isprint</span><span class="p">(</span><span class="n">optopt</span><span class="p">))</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option `-%c'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">else</span> + <span class="p">{</span> + <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Unknown option character `</span><span class="se">\\</span><span class="s">x%x'.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">optopt</span><span class="p">);</span> + <span class="p">}</span> + <span class="k">return</span> <span class="mi">1</span><span class="p">;</span> + <span class="nl">default:</span> + <span class="n">abort</span><span class="p">();</span> + <span class="p">}</span> + <span class="p">}</span> + + <span class="k">if</span> <span class="p">(</span><span class="n">optind</span> <span class="o"><</span> <span class="n">argc</span><span class="p">)</span> <span class="n">msgtext</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">optind</span><span class="p">];</span> + + <span class="p">{</span> + <span class="kt">pn_message_t</span> <span class="o">*</span> <span class="n">message</span><span class="p">;</span> + <span class="kt">pn_messenger_t</span> <span class="o">*</span> <span class="n">messenger</span><span class="p">;</span> + <span class="kt">pn_data_t</span> <span class="o">*</span> <span class="n">body</span><span class="p">;</span> + + <span class="n">message</span> <span class="o">=</span> <span class="n">pn_message</span><span class="p">();</span> + <span class="n">messenger</span> <span class="o">=</span> <span class="n">pn_messenger</span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> + + <span class="n">pn_messenger_start</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="n">pn_message_set_address</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">address</span><span class="p">);</span> + <span class="n">body</span> <span class="o">=</span> <span class="n">pn_message_body</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="n">pn_data_put_string</span><span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="n">pn_bytes</span><span class="p">(</span><span class="n">strlen</span><span class="p">(</span><span class="n">msgtext</span><span class="p">),</span> <span class="n">msgtext</span><span class="p">));</span> + <span class="n">pn_messenger_put</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="n">message</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">pn_messenger_send</span><span class="p">(</span><span class="n">messenger</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> + <span class="n">check</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + + <span class="n">pn_messenger_stop</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">pn_messenger_free</span><span class="p">(</span><span class="n">messenger</span><span class="p">);</span> + <span class="n">pn_message_free</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> + <span class="p">}</span> + + <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> +<span class="p">}</span> +</pre></div> + +<p><a href="send.c">Download this file</a></p> + + + <hr/> + + <ul id="-apache-navigation"> + <li><a href="http://www.apache.org/">Apache</a></li> + <li><a href="http://www.apache.org/licenses/">License</a></li> + <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> + <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li> + <li><a href="/security.html">Security</a></li> + <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> + </ul> + + <p id="-legal"> + Apache Qpid, Messaging built on AMQP; Copyright © 2015 + The Apache Software Foundation; Licensed under + the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache + License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, + Proton, Apache, the Apache feather logo, and the Apache Qpid + project logo are trademarks of The Apache Software + Foundation; All other marks mentioned may be trademarks or + registered trademarks of their respective owners + </p> + </div> + </div> + </div> + </body> +</html> http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl b/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl new file mode 100755 index 0000000..a6d8378 --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl @@ -0,0 +1,105 @@ +#!/usr/bin/env perl +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +use strict; +use warnings; +use Getopt::Long; +use Pod::Usage; + +use qpid_proton; + +my $reply_to = "~/replies"; +my $help = 0; +my $man = 0; + +GetOptions( + "reply_to=s", \$reply_to, + man => \$man, + "help|?" => \$help + ) or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitval => 0, -verbose => 2) if $man; + +# get the address to use and show help if it's missing +my $address = $ARGV[0]; +pod2usage(1) if !$address; + +my $messenger = new qpid::proton::Messenger(); +$messenger->start; + +my $message = new qpid::proton::Message(); +$message->set_address($address); +$message->set_reply_to($reply_to); +$message->set_subject("Subject"); +$message->set_content("Yo!"); + +print "Sending to: $address\n"; + +$messenger->put($message); +$messenger->send; + +if($reply_to =~ /^~\//) { + print "Waiting on returned message.\n"; + $messenger->receive(1); + + $messenger->get($message); + print $message->get_address . " " . $message->get_subject . "\n"; +} + +$messenger->stop; + +__END__ + +=head1 NAME + +client - Proton example application for Perl. + +=head1 SYNOPSIS + +client.pl [OPTIONS] <address> <subject> + + Options: + --reply_to - The reply to address to be used. (default: ~/replies) + --help - This help message. + --man - Show the full docementation. + +=over 8 + +=item B<--reply_to> + +Specifies the reply address to be used for responses from the server. + +=item B<--help> + +Prints a brief help message and exits. + +=item B<--man> + +Prints the man page and exits. + +=back + +=head2 ADDRESS + +The form an address takes is: + +[amqp://]<domain>[/name] + +=cut http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1859e58c/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl.html b/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl.html new file mode 100644 index 0000000..498981d --- /dev/null +++ b/content/releases/qpid-proton-0.17.0/messenger/perl/examples/client.pl.html @@ -0,0 +1,234 @@ +<!DOCTYPE html> +<!-- + - + - Licensed to the Apache Software Foundation (ASF) under one + - or more contributor license agreements. See the NOTICE file + - distributed with this work for additional information + - regarding copyright ownership. The ASF licenses this file + - to you under the Apache License, Version 2.0 (the + - "License"); you may not use this file except in compliance + - with the License. You may obtain a copy of the License at + - + - http://www.apache.org/licenses/LICENSE-2.0 + - + - Unless required by applicable law or agreed to in writing, + - software distributed under the License is distributed on an + - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + - KIND, either express or implied. See the License for the + - specific language governing permissions and limitations + - under the License. + - +--> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> + <head> + <title>client.pl - Apache Qpid™</title> + <meta http-equiv="X-UA-Compatible" content="IE=edge"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> + <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> + <script type="text/javascript">var _deferredFunctions = [];</script> + <script type="text/javascript" src="/deferred.js" defer="defer"></script> + <!--[if lte IE 8]> + <link rel="stylesheet" href="/ie.css" type="text/css"/> + <script type="text/javascript" src="/html5shiv.js"></script> + <![endif]--> + + <!-- Redirects for `go get` and godoc.org --> + <meta name="go-import" + content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> + <meta name="go-source" + content="qpid.apache.org +https://github.com/apache/qpid-proton/blob/go1/README.md +https://github.com/apache/qpid-proton/tree/go1{/dir} +https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> + </head> + <body> + <div id="-content"> + <div id="-top" class="panel"> + <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> + + <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> + + <ul id="-global-navigation"> + <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> + <li><a href="/documentation.html">Documentation</a></li> + <li><a href="/download.html">Download</a></li> + <li><a href="/discussion.html">Discussion</a></li> + </ul> + </div> + + <div id="-menu" class="panel" style="display: none;"> + <div class="flex"> + <section> + <h3>Project</h3> + + <ul> + <li><a href="/overview.html">Overview</a></li> + <li><a href="/components/index.html">Components</a></li> + <li><a href="/releases/index.html">Releases</a></li> + </ul> + </section> + + <section> + <h3>Messaging APIs</h3> + + <ul> + <li><a href="/proton/index.html">Qpid Proton</a></li> + <li><a href="/components/jms/index.html">Qpid JMS</a></li> + <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> + </ul> + </section> + + <section> + <h3>Servers and tools</h3> + + <ul> + <li><a href="/components/java-broker/index.html">Broker for Java</a></li> + <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> + <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> + </ul> + </section> + + <section> + <h3>Resources</h3> + + <ul> + <li><a href="/dashboard.html">Dashboard</a></li> + <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> + <li><a href="/resources.html">More resources</a></li> + </ul> + </section> + </div> + </div> + + <div id="-search" class="panel" style="display: none;"> + <form action="http://www.google.com/search" method="get"> + <input type="hidden" name="sitesearch" value="qpid.apache.org"/> + <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> + <button type="submit">Search</button> + <a href="/search.html">More ways to search</a> + </form> + </div> + + <div id="-middle" class="panel"> + <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.17.0/index.html">Qpid Proton 0.17.0</a></li><li><a href="/releases/qpid-proton-0.17.0/messenger/perl/examples/index.html">Perl AMQP Messenger Examples</a></li><li>client.pl</li></ul> + + <div id="-middle-content"> + +<h1>client.pl</h1> +<div class="highlight"><pre><span class="k">use</span> <span class="n">strict</span><span class="p">;</span> +<span class="k">use</span> <span class="n">warnings</span><span class="p">;</span> +<span class="k">use</span> <span class="nn">Getopt::</span><span class="n">Long</span><span class="p">;</span> +<span class="k">use</span> <span class="nn">Pod::</span><span class="n">Usage</span><span class="p">;</span> + +<span class="k">use</span> <span class="n">qpid_proton</span><span class="p">;</span> + +<span class="k">my</span> <span class="nv">$reply_to</span> <span class="o">=</span> <span class="s">"~/replies"</span><span class="p">;</span> +<span class="k">my</span> <span class="nv">$help</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<span class="k">my</span> <span class="nv">$man</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> + +<span class="n">GetOptions</span><span class="p">(</span> + <span class="s">"reply_to=s"</span><span class="p">,</span> <span class="o">\</span><span class="nv">$reply_to</span><span class="p">,</span> + <span class="n">man</span> <span class="o">=></span> <span class="o">\</span><span class="nv">$man</span><span class="p">,</span> + <span class="s">"help|?"</span> <span class="o">=></span> <span class="o">\</span><span class="nv">$help</span> + <span class="p">)</span> <span class="ow">or</span> <span class="n">pod2usage</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span> +<span class="n">pod2usage</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="nv">$help</span><span class="p">;</span> +<span class="n">pod2usage</span><span class="p">(</span><span class="o">-</span><span class="n">exitval</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">verbose</span> <span class="o">=></span> <span class="mi">2</span><span class="p">)</span> <span class="k">if</span> <span class="nv">$man</span><span class="p">;</span> + +<span class="c1"># get the address to use and show help if it's missing</span> +<span class="k">my</span> <span class="nv">$address</span> <span class="o">=</span> <span class="nv">$ARGV</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span> +<span class="n">pod2usage</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">if</span> <span class="o">!</span><span class="nv">$address</span><span class="p">;</span> + +<span class="k">my</span> <span class="nv">$messenger</span> <span class="o">=</span> <span class="k">new</span> <span class="nn">qpid::proton::</span><span class="n">Messenger</span><span class="p">();</span> +<span class="nv">$messenger</span><span class="o">-></span><span class="n">start</span><span class="p">;</span> + +<span class="k">my</span> <span class="nv">$message</span> <span class="o">=</span> <span class="k">new</span> <span class="nn">qpid::proton::</span><span class="n">Message</span><span class="p">();</span> +<span class="nv">$message</span><span class="o">-></span><span class="n">set_address</span><span class="p">(</span><span class="nv">$address</span><span class="p">);</span> +<span class="nv">$message</span><span class="o">-></span><span class="n">set_reply_to</span><span class="p">(</span><span class="nv">$reply_to</span><span class="p">);</span> +<span class="nv">$message</span><span class="o">-></span><span class="n">set_subject</span><span class="p">(</span><span class="s">"Subject"</span><span class="p">);</span> +<span class="nv">$message</span><span class="o">-></span><span class="n">set_content</span><span class="p">(</span><span class="s">"Yo!"</span><span class="p">);</span> + +<span class="k">print</span> <span class="s">"Sending to: $address\n"</span><span class="p">;</span> + +<span class="nv">$messenger</span><span class="o">-></span><span class="n">put</span><span class="p">(</span><span class="nv">$message</span><span class="p">);</span> +<span class="nv">$messenger</span><span class="o">-></span><span class="nb">send</span><span class="p">;</span> + +<span class="k">if</span><span class="p">(</span><span class="nv">$reply_to</span> <span class="o">=~</span><span class="sr"> /^~\//</span><span class="p">)</span> <span class="p">{</span> + <span class="k">print</span> <span class="s">"Waiting on returned message.\n"</span><span class="p">;</span> + <span class="nv">$messenger</span><span class="o">-></span><span class="n">receive</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> + + <span class="nv">$messenger</span><span class="o">-></span><span class="n">get</span><span class="p">(</span><span class="nv">$message</span><span class="p">);</span> + <span class="k">print</span> <span class="nv">$message</span><span class="o">-></span><span class="n">get_address</span> <span class="o">.</span> <span class="s">" "</span> <span class="o">.</span> <span class="nv">$message</span><span class="o">-></span><span class="n">get_subject</span> <span class="o">.</span> <span class="s">"\n"</span><span class="p">;</span> +<span class="p">}</span> + +<span class="nv">$messenger</span><span class="o">-></span><span class="n">stop</span><span class="p">;</span> + +<span class="cp">__END__</span> + +<span class="cp">=head1 NAME</span> + +<span class="cp">client - Proton example application for Perl.</span> + +<span class="cp">=head1 SYNOPSIS</span> + +<span class="cp">client.pl [OPTIONS] <address> <subject></span> + +<span class="cp"> Options:</span> +<span class="cp"> --reply_to - The reply to address to be used. (default: ~/replies)</span> +<span class="cp"> --help - This help message.</span> +<span class="cp"> --man - Show the full docementation.</span> + +<span class="cp">=over 8</span> + +<span class="cp">=item B<--reply_to></span> + +<span class="cp">Specifies the reply address to be used for responses from the server.</span> + +<span class="cp">=item B<--help></span> + +<span class="cp">Prints a brief help message and exits.</span> + +<span class="cp">=item B<--man></span> + +<span class="cp">Prints the man page and exits.</span> + +<span class="cp">=back</span> + +<span class="cp">=head2 ADDRESS</span> + +<span class="cp">The form an address takes is:</span> + +<span class="cp">[amqp://]<domain>[/name]</span> + +<span class="cp">=cut</span> +</pre></div> + +<p><a href="client.pl">Download this file</a></p> + + + <hr/> + + <ul id="-apache-navigation"> + <li><a href="http://www.apache.org/">Apache</a></li> + <li><a href="http://www.apache.org/licenses/">License</a></li> + <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> + <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li> + <li><a href="/security.html">Security</a></li> + <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> + </ul> + + <p id="-legal"> + Apache Qpid, Messaging built on AMQP; Copyright © 2015 + The Apache Software Foundation; Licensed under + the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache + License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, + Proton, Apache, the Apache feather logo, and the Apache Qpid + project logo are trademarks of The Apache Software + Foundation; All other marks mentioned may be trademarks or + registered trademarks of their respective owners + </p> + </div> + </div> + </div> + </body> +</html> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
