summaryrefslogtreecommitdiff
path: root/orkbasecxx/MultiThreadedServer.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-02-09 02:14:43 +0000
committerHenri Herscher <henri@oreka.org>2007-02-09 02:14:43 +0000
commite660a409b15c382ca3ea98ffc9d7a73ee3e08d5d (patch)
tree744dca83e2192be63abde080e8c4c483625cc99e /orkbasecxx/MultiThreadedServer.cpp
parenta09aa20ccfd668e75f28a3062eb8eee12c8f783f (diff)
Introduced timeout in the HTTP server. Also now checking if a command does not return a response.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@406 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkbasecxx/MultiThreadedServer.cpp')
-rw-r--r--orkbasecxx/MultiThreadedServer.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/orkbasecxx/MultiThreadedServer.cpp b/orkbasecxx/MultiThreadedServer.cpp
index fb799fd..7cbf4db 100644
--- a/orkbasecxx/MultiThreadedServer.cpp
+++ b/orkbasecxx/MultiThreadedServer.cpp
@@ -161,8 +161,9 @@ int HttpServer::svc(void)
char buf[2048];
buf[2047] = '\0'; // security
ACE_Time_Value timeout;
+ timeout.sec(5);
- ssize_t size = peer().recv(buf, 2040);
+ ssize_t size = peer().recv(buf, 2040, &timeout);
if (size > 5)
{
@@ -192,18 +193,25 @@ int HttpServer::svc(void)
objRef->DeSerializeUrl(url);
ObjectRef response = objRef->Process();
- DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XStr("Core").unicodeForm());
- XERCES_CPP_NAMESPACE::DOMDocument* myDoc;
- myDoc = impl->createDocument(
- 0, // root element namespace URI.
- XStr("response").unicodeForm(), // root element name
- 0); // document type object (DTD).
- response->SerializeDom(myDoc);
- CStdString pingResponse = DomSerializer::DomNodeToString(myDoc);
-
- CStdString httpOk("HTTP/1.0 200 OK\r\nContent-type: text/xml\r\n\r\n");
- peer().send(httpOk, httpOk.GetLength());
- peer().send(pingResponse, pingResponse.GetLength());
+ if(response.get() == NULL)
+ {
+ throw (CStdString("Command does not return a response:") + className);
+ }
+ else
+ {
+ DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XStr("Core").unicodeForm());
+ XERCES_CPP_NAMESPACE::DOMDocument* myDoc;
+ myDoc = impl->createDocument(
+ 0, // root element namespace URI.
+ XStr("response").unicodeForm(), // root element name
+ 0); // document type object (DTD).
+ response->SerializeDom(myDoc);
+ CStdString pingResponse = DomSerializer::DomNodeToString(myDoc);
+
+ CStdString httpOk("HTTP/1.0 200 OK\r\nContent-type: text/xml\r\n\r\n");
+ peer().send(httpOk, httpOk.GetLength());
+ peer().send(pingResponse, pingResponse.GetLength());
+ }
}
else
{