Hi<br><br>I started to learn Twisted with the O&#39;Reilly Book Twisted Network Programming Essentials<br>I want to do a daemon to listen on port<br>- when a correct sentence is received, the daemon must to check <span id="result_box" class="" lang="en"><span class="hps">by querying</span> <span class="hps">a server</span> <span class="hps">XML_RPC<br>
- if the answer from </span></span><span id="result_box" class="" lang="en"> <span class="hps">XML_RPC</span></span><span id="result_box" class="" lang="en"><span class="hps"> is 1, the  HTTP answer will be OK else NOT FOUND<br>
<br>I adapted the basic example HttpEchoProtocol.py<br><br>from twisted.protocols import basic<br>from twisted.web.xmlrpc import Proxy<br>from twisted.internet import protocol, reactor<br>import pdb<br><br>KEYS_ADDR=&quot;192.168.0.254&quot;<br>
KEYS_PORT=2101<br><br># URL of the XML-RPC server<br> OF_XMLRPC_URL=&quot;<a href="http://127.0.0.1/xmlRpc.rpc.php">http://127.0.0.1/xmlRpc.rpc.php</a>&quot;<br># HTTP Port from which the OF client contact the service<br>
SERVICE_PORT=4080<br># url sent  for test: localhost:4080/?sessid=dddddd&amp;key=1&amp;resource=2<br><br>class HttpProtocol(basic.LineReceiver):<br><br>    def __init__(self):<br>        self.lines      = []<br>        self.answer     = &quot;HTTP/1.0 200 No value&quot;<br>
        self.gotRequest = False<br>        self.proxy      = Proxy(OF_XMLRPC_URL)<br><br>    def xmlRpcResponse(self, value):<br>        self.xmlRpc = value<br>        if self.xmlRpc == 1:<br>            self.answer = &quot;HTTP/1.0 200 OK&quot;<br>
            print &quot;xmlRpc : &quot;,self.xmlRpc<br>        else:<br>            self.answer = &quot;HTTP/1.0 406 Invalid key&quot;<br>        self.xmlRpc = 0<br> <br>    def xmlRpcError(self, error):<br>        self.answer = &quot;HTTP/1.0 405 NOT FOUND&quot;<br>
        print &quot;Error&quot;<br><br>    def lineReceived(self, line):<br>        self.lines.append(line)<br>        if not line and not self.gotRequest:<br>            text = self.lines[0]<br>            startText = text.find(&quot;sessid&quot;)<br>
            if startText&gt;0 :<br>                endText = text.find(&quot;HTTP&quot;)<br>                text=text[startText:endText]<br>                data = text.split(&quot;&amp;&quot;)<br>                sessionId = data[0][data[0].find(&quot;=&quot;)+1:]<br>
                keyId = int(data[1][data[1].find(&quot;=&quot;)+1:])<br>                resourceId = int(data[2][data[2].find(&quot;=&quot;)+1:])<br>                self.proxy.callRemote(&#39;checkCommand&#39;, sessionId, keyId).addCallbacks(self.xmlRpcResponse, self.xmlRpcError)<br>
            self.sendResponse()<br>            self.gotRequest = True            <br>            <br>    def sendResponse(self):<br>        responseBody = self.answer<br>        self.sendLine(self.answer)<br>        self.sendLine(&quot;Content-Type: text/plain&quot;)<br>
        self.sendLine(&quot;Content-Length: %i&quot; % len(responseBody))<br>        self.sendLine(&quot;&quot;)<br>        self.transport.write(responseBody)<br>        self.transport.loseConnection()<br><br>factory = protocol.ServerFactory()<br>
factory.protocol = HttpProtocol<br>reactor.listenTCP(SERVICE_PORT, factory)<br>reactor.run()<br><br>XML_RPC answer is correctly </span></span><span id="result_box" class="" lang="en"><span class="hps"> received </span></span><span id="result_box" class="" lang="en"><span class="hps"> (</span></span><span id="result_box" class="" lang="en"><span class="hps">&quot;xmlRpc :  1&quot;)</span></span><span id="result_box" class="" lang="en"><span class="hps"> but the HTTP answer is always </span></span><span id="result_box" class="" lang="en"><span class="hps"> &quot;HTTP/1.0 200 No value&quot; (first initialization) <br>
<br>I tried a other example, based on requesthandler,py<br><br>from twisted.web.xmlrpc import Proxy<br>from twisted.web import http<br>from twisted.web.xmlrpc import Proxy<br>from twisted.internet import reactor<br>import pdb<br>
<br><br># HTTP Port from which the OF client contact OpenKeys service<br>SERVICE_PORT=4080<br><br># URL of the XML-RPC server<br>OF_XMLRPC_URL=&quot;<a href="http://127.0.0.1/openkeys.rpc.php">http://127.0.0.1/openkeys.rpc.php</a>&quot;<br>
<br>class MyRequestHandler(http.Request):<br><br>    xmlRpc = 0<br>    def xmlRpcResponse(self, value):<br>        self.xmlRpc = value<br>        print repr(value)<br>        if self.xmlRpc == 1:<br>           self.setResponseCode(http.OK)<br>
           self.write(&quot;&lt;h1&gt;OK&lt;/h1&gt;&quot;)<br>        else:<br>            self.setResponseCode(http.NOT_ALLOWED)<br>            self.write(&quot;&lt;h1&gt;Invalid key&lt;/h1&gt;.&quot;)<br>        self.xmlRpc = 0<br>
        self.finish()<br> <br>    def xmlRpcError(self, error):<br>        print &#39;error&#39;, error<br>        self.setResponseCode(http.NOT_FOUND)<br>        self.write(&quot;&lt;h1&gt;Not Found&lt;/h1&gt;&quot;)<br>
        self.xmlRpc = 0<br>        self.finish()<br>        <br>    def process(self):<br>        self.setHeader(&#39;Content-Type&#39;, &#39;text/html&#39;)<br>        data = self.args         <br>        if &#39;sessid&#39; in data:<br>
            sessionId  = data[&#39;sessid&#39;][0]<br>            keyId      = data[&quot;key&quot;][0]<br>            resourceId = data[&quot;resource&quot;][0]<br>            print &quot;session = &quot;, sessionId    <br>
            print &quot;key = &quot;, keyId    <br>            print &quot;resource = &quot;, resourceId    <br>            proxy.callRemote(&#39;checkCommand&#39;, sessionId, keyId).addCallbacks(self.xmlRpcResponse, self.xmlRpcError)<br>
        else:<br>            print &quot;data = &quot;, data    <br>            self.setResponseCode(http.NOT_FOUND)<br>            self.write(&quot;&lt;h1&gt;Not Found&lt;/h1&gt;Sorry, no such page.&quot;)<br>            self.finish()<br>
<br>class MyHttp(http.HTTPChannel):<br>    requestFactory = MyRequestHandler<br><br>class MyHttpFactory(http.HTTPFactory):<br>    protocol = MyHttp<br><br>proxy  = Proxy(OF_XMLRPC_URL)<br>reactor.listenTCP(SERVICE_PORT, MyHttpFactory())<br>
reactor.run()<br><br>But in this case an error occur<br><br>error [Failure instance: Traceback: &lt;class &#39;xmlrpclib.Fault&#39;&gt;: &lt;Fault -32602: &#39;s<br>erver error. invalid method parameters&#39;&gt;<br>C:\python27\lib\site-packages\twisted\internet\posixbase.py:263:_disconnectSelec<br>
table<br>C:\python27\lib\site-packages\twisted\internet\tcp.py:433:connectionLost<br>C:\python27\lib\site-packages\twisted\internet\tcp.py:277:connectionLost<br>C:\python27\lib\site-packages\twisted\web\xmlrpc.py:373:connectionLost<br>
--- &lt;exception caught here&gt; ---<br>C:\python27\lib\site-packages\twisted\web\xmlrpc.py:444:parseResponse<br>C:\python27\lib\xmlrpclib.py:1137:loads<br>C:\python27\lib\xmlrpclib.py:793:close<br>]<br><br>I try to declare the Proxy</span></span><span id="result_box" class="" lang="en"><span class="hps">(OF_XMLRPC_URL) differently, without success<br>
<br>Where is my mistake ....<br>Thanks<br>Bingo<br></span></span>