edits
authorBrian Demsky <bdemsky@plrg.eecs.uci.edu>
Fri, 22 Jul 2016 06:26:39 +0000 (23:26 -0700)
committerBrian Demsky <bdemsky@plrg.eecs.uci.edu>
Fri, 22 Jul 2016 06:26:39 +0000 (23:26 -0700)
src/server/iotcloud.fcgi
src/server/iotquery.cpp
src/server/iotquery.h

index c9614c364a0b912a75a5546de56b6302844b67a8..fc754f41514ce97ec1948a0685d71cffa0eec5a9 100755 (executable)
Binary files a/src/server/iotcloud.fcgi and b/src/server/iotcloud.fcgi differ
index af5a9765ccc816a0c6da53ed725fb8a81a35497a..191ffc4cde0b069ed9a3a74fb4f093f7b9086423 100644 (file)
@@ -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"
-       << "<html>\n"
-       << "  <head>\n"
-       << "    <title>Hello, World!</title>\n"
-       << "  </head>\n"
-       << "  <body>\n"
-       << "    <h1>Hello, World!</h1>\n"
-       << "  </body>\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 << "</html>\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;
 }
 
                                                   
index bfc185e9822ce837ae5e08c160e1bee5f5195b65..f2433dc99954cba95eb32d552acd3db6a9a1852a 100644 (file)
@@ -17,12 +17,15 @@ class IoTQuery {
   void processQuery();
   
  private:
-  void parseQuery();
+  void getQuery();
   void getDirectory();
   void readData();
-  int checkDirectory();
-  int openStatusFile();
+  bool checkDirectory();
+  bool openStatusFile();
   void updateStatusFile();
+  void decodeQuery();
+  void getSlot();
+  void putSlot();
   
   FCGX_Request * request;
   char *data;
@@ -35,7 +38,10 @@ class IoTQuery {
   long length;
   long firstentry;
   long lastentry;
+  long requestsequencenumber;
   int numqueueentries;
   int fd;
+  bool reqGetSlot;
+  bool reqPutSlot;
 };
 #endif