X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2Fserver%2Fiotquery.cpp;h=191ffc4cde0b069ed9a3a74fb4f093f7b9086423;hb=511e50c6cab584740787ea62566c7b77f5c130d4;hp=af5a9765ccc816a0c6da53ed725fb8a81a35497a;hpb=577f78a317bbbc8af4a6a9c99c9566c7e4ea3098;p=iotcloud.git diff --git a/src/server/iotquery.cpp b/src/server/iotquery.cpp index af5a976..191ffc4 100644 --- a/src/server/iotquery.cpp +++ b/src/server/iotquery.cpp @@ -27,6 +27,7 @@ IoTQuery::IoTQuery(FCGX_Request *request) : length(0), firstentry(0), lastentry(0), + requestsequencenumber(0), numqueueentries(DEFAULT_SIZE), fd(-1) { @@ -43,53 +44,75 @@ IoTQuery::~IoTQuery() { closedir(dir); } -int IoTQuery::checkDirectory() { +bool IoTQuery::checkDirectory() { struct stat s; int err=stat(directory, &s); if (-1 == err) - return 0; + return false; return S_ISDIR(s.st_mode); } +void IoTQuery::decodeQuery() { + int len=strlen(query); + char * str=new char[len+1]; + memcpy(str, query, len+1); + char *tok_ptr=str; + + /* Parse commands */ + char *command=strsep(&tok_ptr, "&"); + if (strncmp(command, "putslot", 7) == 0) + reqPutSlot = true; + + if (strncmp(command, "getslot", 7) == 0) + reqGetSlot = true; + + /* Load Sequence Number for request */ + char *sequencenumber_str = strsep(&tok_ptr, "&"); + + if (sequencenumber_str != NULL) + requestsequencenumber = strtol(sequencenumber_str, NULL, 10); + + /* Update size if we get request */ + char * numqueueentries_str = tok_ptr; + if (numqueueentries_str != NULL) + numqueueentries = strtol(numqueueentries_str, NULL, 10); + + delete str; +} + +void IoTQuery::getSlot() { + +} + +void IoTQuery::putSlot() { + +} + void IoTQuery::processQuery() { - parseQuery(); + getQuery(); getDirectory(); readData(); - + if (strncmp(method, "POST", 4) != 0) return; if (directory == NULL || - checkDirectory()) + !checkDirectory()) return; - if (openStatusFile() < 0) + if (!openStatusFile()) return; - - flock(fd, LOCK_EX); - - cout << "Content-type: text/html\r\n" - << "\r\n" - << "\n" - << " \n" - << " Hello, World!\n" - << " \n" - << " \n" - << "

Hello, World!

\n" - << " \n"; - - cout << uri_str << " " << uri << "\n"; - cout << query_str << " " << query << "\n"; - cout << method_str << " " << method << "\n"; - cout << iotcloudroot_str << " " << iotcloudroot << "\n"; - if (data) - cout << "[" << data << "]"; - - - cout << "\n"; -} + flock(fd, LOCK_EX); + + decodeQuery(); + if (reqGetSlot) + getSlot(); + else if (reqPutSlot) + putSlot(); + else return; +} void IoTQuery::readData() { if (length) { @@ -103,7 +126,7 @@ void IoTQuery::readData() { } while (!cin.eof()); } -void IoTQuery::parseQuery() { +void IoTQuery::getQuery() { uri = FCGX_GetParam(uri_str, request->envp); query = FCGX_GetParam(query_str, request->envp); method = FCGX_GetParam(method_str, request->envp); @@ -147,7 +170,7 @@ void IoTQuery::updateStatusFile() { pwrite(fd, &lastentry, sizeof(lastentry), OFFSET_LAST); } -int IoTQuery::openStatusFile() { +bool IoTQuery::openStatusFile() { char statusfile[]="queuestatus"; int len=strlen(directory); @@ -160,7 +183,7 @@ int IoTQuery::openStatusFile() { delete filename; if (fd < 0) - return fd; + return false; int size; int needwrite=0; @@ -183,7 +206,7 @@ int IoTQuery::openStatusFile() { if (needwrite) updateStatusFile(); - return fd; + return true; }