00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "NetHTTPProtocol.h"
00026
00027 namespace cmlabs {
00028
00029
00030
00031
00032
00033 NetHTTPProtocol::NetHTTPProtocol():NetProtocol("HTTP")
00034 {
00035 netTimeout = 60000;
00036 recHTTP = NULL;
00037 }
00038
00039 NetHTTPProtocol::~NetHTTPProtocol()
00040 {
00041 if (recHTTP != NULL)
00042 delete(recHTTP);
00043 }
00044
00045 Object* NetHTTPProtocol::clone() const {
00046 return new NetHTTPProtocol();
00047 }
00048
00049 bool NetHTTPProtocol::checkBufferForCompatibility(char* buffer, int length) {
00050
00051 if (length < 1) return false;
00052
00053 JString str = buffer;
00054
00055 if ( (str.startsWith("GET ")) || (str.startsWith("PUT ")) || (str.startsWith("POST "))) {
00056 return true;
00057 }
00058
00059 return false;
00060 }
00061
00062 bool NetHTTPProtocol::initializeConversation(JSocket* socket) {
00063 if (socket == NULL)
00064 return false;
00065 return true;
00066 }
00067
00068 bool NetHTTPProtocol::sendObject(JSocket* socket, Message* msg, bool isReply) {
00069 if (socket == NULL)
00070 return false;
00071
00072 HTMLPage* page = (HTMLPage*) msg->getObject();
00073 if (page == NULL) {
00074
00075 page = new HTMLPage();
00076 page->title = "Web Interface Error";
00077 page->body = "No information found...";
00078 }
00079 if (page->generateHTML()) {
00080
00081
00082
00083
00084
00085
00086
00087
00088 socket->write(page->data, page->datalength);
00089 if (!page->keep_alive) {
00090
00091 socket->waitForWriteability(1000);
00092 socket->disconnectNow();
00093
00094 }
00095 else {
00096
00097 }
00098 }
00099 else {
00100 socket->writeln(page->printErrorHTML());
00101 }
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 return true;
00116 }
00117
00118 Message* NetHTTPProtocol::receiveObject(JSocket* socket, int timeout) {
00119
00120 if (recHTTP == NULL)
00121 recHTTP = new HTTPRequest();
00122
00123 JTime start;
00124
00125 JString str;
00126 Message* inMsg = NULL;
00127
00128 JTime t1, t2;
00129 int t = start.getAge();
00130 while ( (!recHTTP->isComplete(socket)) && (t < timeout) ) {
00131
00132 str = socket->readln(10);
00133 if (str.isCRTerminated)
00134 recHTTP->addEntry(str);
00135
00136 t = start.getAge();
00137 }
00138
00139 if (recHTTP->isComplete(socket)) {
00140 if (DEBUGLEVEL(KITCHENSINK)) {
00141 printf("[NetHTTP] HTTP request complete, generating response...\n");
00142 }
00143 inMsg = new Message(socket->getRemoteHostname(), "", "HTTP");
00144 inMsg->setObject(recHTTP);
00145 recHTTP = NULL;
00146
00147 JString hostname = socket->getRemoteIPAddress();
00148 if (hostname.equals("localhost"))
00149 hostname = socket->getLocalIPAddress();
00150 inMsg->setOrigin(hostname);
00151 inMsg->set("netprotocol", name);
00152 }
00153
00154 return inMsg;
00155 }
00156
00157
00158
00159 }