<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>gouranga &#187; xml</title>
	<atom:link href="http://www.gouranga.me/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gouranga.me</link>
	<description>ein wenig von fast allem</description>
	<lastBuildDate>Sat, 28 Aug 2010 11:37:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>XML RPC mit Qt 4.6 und OpenSSL</title>
		<link>http://www.gouranga.me/2010/03/09/xml-rpc-mit-qt-4-6-und-openssl/</link>
		<comments>http://www.gouranga.me/2010/03/09/xml-rpc-mit-qt-4-6-und-openssl/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 19:11:06 +0000</pubDate>
		<dc:creator>Steffen</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[rpc]]></category>
		<category><![CDATA[sipgate]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.gouranga.me/?p=695</guid>
		<description><![CDATA[In einem Projekt möchte ich mit Qt auf die XML Rpc Schnittstelle von Sipgate Team zugreifen. Nach meiner Internetrecherche hat sich folgendes herrausgestellt: Qt bringt keine eigene XML Rpc Librarys mit. SOAP ist mit Qt übrings kein Problem. Mit geringem Aufwand lässt sich aus den Qt Modulen QtNetwork und QtXML eine eigene XML RPC Lib [...]]]></description>
			<content:encoded><![CDATA[<p>In einem Projekt möchte ich mit Qt auf die<a href="http://en.wikipedia.org/wiki/XML-RPC"> XML Rpc</a> Schnittstelle von Sipgate Team zugreifen.</p>
<p>Nach meiner Internetrecherche hat sich folgendes herrausgestellt:</p>
<ul>
<li>Qt bringt keine eigene XML Rpc Librarys mit. SOAP ist mit Qt übrings kein Problem.</li>
<li>Mit geringem Aufwand lässt sich aus den Qt Modulen QtNetwork und QtXML eine eigene XML RPC Lib zusammenschustern.</li>
<li>Sebastian Wiedenroth und Karl Gratz haben uns mit <a href="http://wiedi.frubar.net/blog/2008/03/08/libmaia-xml-rpc-with-qt4/">LibMaia </a>schon einen Großteil der Arbeit abgenommen.</li>
<li>Für meine Zwecke musste ich nurnoch einige Anpassungen vornehmen (SSL und Auth)</li>
</ul>
<h4>Vorraussetzungen</h4>
<ul>
<li><a href="http://qt.nokia.com/downloads">Qt 4.6.2</a></li>
<li>OpenSSL  (Ich verwende <a href="http://www.slproweb.com/products/Win32OpenSSL.html">OpenSSL 0.9.8l als fertige Win32 Kompilat mit libs und includes</a>)</li>
<li><a href="http://wiedi.frubar.net/blog/2008/03/08/libmaia-xml-rpc-with-qt4/">LibMaia</a></li>
</ul>
<p>Ich entwickele unter Windows 7 mit VS2005. Eine <a href="http://fakguen.wordpress.com/2008/07/14/qt-440-visual-studio-integration/">Anleitung zu Qt und VS2005 findet man bei Ferhat Akgün</a>.</p>
<h4>Qt mit OpenSSL Support kompilieren</h4>
<p>Nachdem OpenSSL installiert ist müssen wir Qt mit OpenSSL Support backen. Dazu rufen wir configure zusätzliche mit folgenden Flags auf:</p>
<p><code>-openssl -I pfad_zu_openssl_includes -L pfad_zu_openssl_libs</code></p>
<p>Bei mir sieht das so aus:<br />
<code>configure -platform win32-msvc2005 -no-qt3support -qt-sql-odbc -qt-sql-sqlite -qt-zlib -qt-libpng -openssl -I C:\OpenSSL\include -L C:\OpenSSL\lib -qt-sql-mysql -opensource -I C:\mysql-5.1.44-win32\include -L C:\mysql-5.1.44-win32\lib\opt -l libmysql </code></p>
<h4>LibMaia</h4>
<p>Nachdem wir uns ein Checkout von LibMaia besorgt haben (<code>svn co <a href="http://websvn.frubar.net/listing.php?repname=libmaia&amp;path=%2Ftrunk%2F#_trunk_">https://svn.frubar.net/svn/libmaia/trunk/</a></code>) kompilieren wir das ganze mit</p>
<p><code>qmake &amp;&amp; nmake</code></p>
<p>Ich empfehle, einen Unterordner wie 3rdparty im Qt Verzeichnis (in der Ebene ,in der auch die Ordner mit eueren Qt Versionen liegen) zu erstellen und dort 3rd-Party Libs wie LibMaia abzulegen.</p>
<p>Macht euerem Projekt jetzt den Include Path mit den Headern sowieso euerem Linker den Include Path mit den Libs und im speziellen maia.lib bekannt. (Wenn ihr wollt könnt ihr natürlich auch die *.h und *.cpps von LibMaia direkt euerem Projekt hinzufügen und euch den vorherigen Schritt sparen)</p>
<h4>Frisch ans Werk</h4>
<p>Weist zunächst Qt an, die Module QtNetwork und QtXml mitzuladen.</p>
<p>Erstellt jetzt eine Klasse die folgende Slots enthält:<br />
<code><br />
public slots:;<br />
void myFaultResponse(int, const QString &amp;);<br />
void myResponse(QVariant&amp;);</code></p>
<p>Diese werden benötigt, um auf die asynchronen Antworten der XML RPC API zu reagieren.</p>
<p>In euerer .cpp inkludiert ihr &#8220;maiaXmlRpcClient.h&#8221;. Ich werde jetzt meinen ersten Testcode benutzen, um euch das weitere vorgehen zu erklären:</p>
<p><code><br />
#include "xmlrpc.h"<br />
// Client Includes<br />
#include "maiaXmlRpcClient.h"<br />
xmlrpc::xmlrpc(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags)<br />
{<br />
ui.setupUi(this);<br />
// API Url. Kann auch pro Call übergeben oder mit rpcClient-&gt;setUrl gesetzt werden.<br />
QUrl targetUrl = QUrl("https://api.sipgate.net/RPC2");<br />
targetUrl.setUserName("euere@sipgate.kontaktdaten");<br />
targetUrl.setPassword("euerpasswort");<br />
// Erstellt den Client. Der zweite Parameter ist ein QObjekt als Parent für die automatische<br />
// Objektzerstörung, wie bei Qt üblich<br />
MaiaXmlRpcClient* rpcClient = new MaiaXmlRpcClient(targetUrl, this);<br />
// Ein  erstellen, wie von der Sipgate Api für ClientIdentify verlangt<br />
QVariantMap clientArgs;<br />
clientArgs["ClientName"] = QString("AWinKD Sipgate Plugin");<br />
clientArgs["ClientVersion"] = QString("0.1");<br />
clientArgs["ClientVendor"] = QString("Steffen Görtz");<br />
// In ein  packen<br />
QVariantList args;<br />
args &lt;&lt; clientArgs;<br />
// Methode samurai.ClientIdentify ausführen und Antwort sowieso Errormethode connecten<br />
rpcClient-&gt;call("samurai.ClientIdentify", args,<br />
this, SLOT(myResponse(QVariant&amp;)), this, SLOT(myFaultResponse(int, const QString &amp;)));<br />
}<br />
void xmlrpc::myFaultResponse(int errorCode, const QString &amp;errorMsg) {<br />
qDebug() &lt;&lt; "Fehler (" &lt;&lt; errorCode &lt;&lt; ") :" &lt;&lt; errorMsg;<br />
}<br />
void xmlrpc::myResponse(QVariant &amp;response) {<br />
;<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gouranga.me/2010/03/09/xml-rpc-mit-qt-4-6-und-openssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
