From d94737ef177524014fbf9b1ee2b446825536514b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Sun, 1 May 2011 11:13:23 +0200
Subject: Updated Swiften developers guide.

Added call to setAlwaysTrustCertificates in examples.
Added C++0x example.

diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot0x.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot0x.cpp
index b4ccc21..11773ae 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot0x.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot0x.cpp
@@ -13,25 +13,19 @@ int main(int, char**) {
 	SimpleEventLoop eventLoop;
 	BoostNetworkFactories networkFactories(&eventLoop);
 
-	// Initialize the client with the JID and password
 	Client client("echobot@wonderland.lit", "mypass", &networkFactories);
-
-	// When the client is convnected, send out initial presence
+	client.setAlwaysTrustCertificates();
 	client.onConnected.connect([&] {
-		client.sendPresence(Presence::create("Send me a message"));
+		std::cout << "Connected" << std::endl;
 	});
-
-	// When the client receives an incoming message, echo it back
 	client.onMessageReceived.connect([&] (Message::ref message) {
 		message->setTo(message->getFrom());
 		message->setFrom(JID());
 		client.sendMessage(message);
 	});
-
-	// Start the client
 	client.connect();
 
-	// Run the event loop to start processing incoming network events
 	eventLoop.run();
+
 	return 0;
 }
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp
index 4736494..8a64b56 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot1.cpp
@@ -13,6 +13,7 @@ int main(int, char**) {
 	BoostNetworkFactories networkFactories(&eventLoop);
 
 	Client client("echobot@wonderland.lit", "mypass", &networkFactories);
+	client.setAlwaysTrustCertificates();
 	client.connect();
 
 	eventLoop.run();
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp
index f431245..deeb852 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot2.cpp
@@ -22,6 +22,7 @@ int main(int, char**) {
 	BoostNetworkFactories networkFactories(&eventLoop);
 
 	client = new Client("echobot@wonderland.lit", "mypass", &networkFactories);
+	client->setAlwaysTrustCertificates();
 	client->onConnected.connect(&handleConnected);
 	client->onMessageReceived.connect(bind(&handleMessageReceived, _1));
 	client->connect();
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp
index cd95b91..e3e3560 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot3.cpp
@@ -16,6 +16,7 @@ class EchoBot {
 	public:
 		EchoBot(NetworkFactories* networkFactories) {
 			client = new Client("echobot@wonderland.lit", "mypass", networkFactories);
+			client->setAlwaysTrustCertificates();
 			client->onConnected.connect(bind(&EchoBot::handleConnected, this));
 			client->onMessageReceived.connect(
 					bind(&EchoBot::handleMessageReceived, this, _1));
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp
index c2f555c..c8d8c84 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot4.cpp
@@ -18,6 +18,7 @@ class EchoBot {
 		EchoBot(NetworkFactories* networkFactories) {
 			//...
 			client = new Client("echobot@wonderland.lit", "mypass", networkFactories);
+			client->setAlwaysTrustCertificates();
 			client->onConnected.connect(bind(&EchoBot::handleConnected, this));
 			client->onMessageReceived.connect(
 					bind(&EchoBot::handleMessageReceived, this, _1));
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp
index 0b00330..810424c 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot5.cpp
@@ -18,6 +18,7 @@ class EchoBot {
 		EchoBot(NetworkFactories* networkFactories) {
 			//...
 			client = new Client("echobot@wonderland.lit", "mypass", networkFactories);
+			client->setAlwaysTrustCertificates();
 			client->onConnected.connect(bind(&EchoBot::handleConnected, this));
 			client->onMessageReceived.connect(
 					bind(&EchoBot::handleMessageReceived, this, _1));
diff --git a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp
index d3587e9..92a2ab6 100644
--- a/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp
+++ b/Documentation/SwiftenDevelopersGuide/Examples/EchoBot/EchoBot6.cpp
@@ -23,6 +23,7 @@ class EchoBot {
 		EchoBot(NetworkFactories* networkFactories) {
 			//...
 			client = new Client("echobot@wonderland.lit", "mypass", networkFactories);
+			client->setAlwaysTrustCertificates();
 			client->onConnected.connect(bind(&EchoBot::handleConnected, this));
 			client->onMessageReceived.connect(
 					bind(&EchoBot::handleMessageReceived, this, _1));
diff --git a/Documentation/SwiftenDevelopersGuide/SConscript b/Documentation/SwiftenDevelopersGuide/SConscript
index e000ac2..c50641f 100644
--- a/Documentation/SwiftenDevelopersGuide/SConscript
+++ b/Documentation/SwiftenDevelopersGuide/SConscript
@@ -87,6 +87,7 @@ if "doc" in ARGUMENTS :
 sources = []
 for i in range(1, 7) :
 	sources.append("Examples/EchoBot/EchoBot" + str(i) + ".cpp")
+sources.append("Examples/EchoBot/EchoBot0x.cpp")
 sources += ["Examples/EchoBot/" + i for i in ["EchoPayloadParserFactory.h", "EchoPayloadSerializer.h", "EchoPayload.h", "EchoComponent.cpp"]]
 for source in sources :
 	env.Command(source + ".xml", source, Action(generateDocBookCode, cmdstr = "$GENCOMSTR"))
diff --git a/Documentation/SwiftenDevelopersGuide/Swiften Developers Guide.xml b/Documentation/SwiftenDevelopersGuide/Swiften Developers Guide.xml
index e0daff3..fae79e4 100644
--- a/Documentation/SwiftenDevelopersGuide/Swiften Developers Guide.xml	
+++ b/Documentation/SwiftenDevelopersGuide/Swiften Developers Guide.xml	
@@ -94,7 +94,12 @@
         <literal>connect()</literal> to instruct the client to connect to 
         the XMPP server with the given credentials. Note that this call returns
         immediately; it is only when starting the event loop that network
-        the actual connection process will start.
+        the actual connection process will start. The call to
+        <literal>setAlwaysTrustCertificates()</literal> before connecting
+        avoids checks for certificate validity; this is convenient for
+        the examples in this guide (because not all servers have trusted
+        certificates), but for production software, you should
+        not call this.
       </para>
     </sect1>
 
@@ -177,8 +182,20 @@
       </para>
 
       <para>
+        If you use a C++ compiler that supports C++0x lambda expressions (such as 
+        GCC 4.5 or Microsoft Visual Studio 2010), you can write this example in a more
+        concise way, as illustrated in <xref linkend="Example-EchoBot0x"/>. However,
+        for the remainder of this guide, we will not use this functionality.
+      </para>
+      <example id="Example-EchoBot0x">
+        <title>EchoBot using C++0x lambda expressions. This is currently only possible with a limited set of C++compilers.</title>
+        <include xmlns="http://www.w3.org/2001/XInclude" href="Examples/EchoBot/EchoBot0x.cpp.xml" xpointer="xpointer(//programlisting|//calloutlist)"/>
+      </example>
+
+      <para>
         Before moving on to the next step, we are going to rearrange our
-        code a bit, to make it a bit cleaner. Instead of using global 
+        code from <xref linkend="Example-EchoBot2"/> a bit, to make it a bit cleaner. 
+        Instead of using global 
         variables, we are going to create an <literal>EchoBot</literal>
         class with the current code in it. The resulting code can be found
         in <xref linkend="Example-EchoBot3"/>.
-- 
cgit v0.10.2-6-g49f6