-const char * query_str="QUERY_STRING";
-const char * uri_str="REQUEST_URI";
-const char * method_str="REQUEST_METHOD";
-const char * iotcloudroot_str="IOTCLOUD_ROOT";
-const char * length_str="CONTENT_LENGTH";
+const char * query_str = "QUERY_STRING";
+const char * uri_str = "REQUEST_URI";
+const char * method_str = "REQUEST_METHOD";
+const char * iotcloudroot_str = "IOTCLOUD_ROOT";
+const char * length_str = "CONTENT_LENGTH";
- int len=strlen(query);
- char * str=new char[len+1];
- memcpy(str, query, len+1);
- char *tok_ptr=str;
-
+ int len = strlen(query);
+ char * str = new char[len + 1];
+ memcpy(str, query, len + 1);
+ char *tok_ptr = str;
+
if (strncmp(command, "req=putslot", 11) == 0)
reqPutSlot = true;
else if (strncmp(command, "req=getslot", 11) == 0)
if (strncmp(command, "req=putslot", 11) == 0)
reqPutSlot = true;
else if (strncmp(command, "req=getslot", 11) == 0)
/* Load Sequence Number for request */
char *sequencenumber_str = strsep(&tok_ptr, "&");
if (sequencenumber_str != NULL &&
/* Load Sequence Number for request */
char *sequencenumber_str = strsep(&tok_ptr, "&");
if (sequencenumber_str != NULL &&
sequencenumber_str = strchr(sequencenumber_str, '=');
if (sequencenumber_str != NULL) {
requestsequencenumber = strtoll(sequencenumber_str + 1, NULL, 10);
sequencenumber_str = strchr(sequencenumber_str, '=');
if (sequencenumber_str != NULL) {
requestsequencenumber = strtoll(sequencenumber_str + 1, NULL, 10);
/* Update size if we get request */
char * numqueueentries_str = tok_ptr;
if (numqueueentries_str != NULL &&
/* Update size if we get request */
char * numqueueentries_str = tok_ptr;
if (numqueueentries_str != NULL &&
numqueueentries_str = strchr(numqueueentries_str, '=') + 1;
numqueueentries = strtoll(numqueueentries_str, NULL, 10);
}
numqueueentries_str = strchr(numqueueentries_str, '=') + 1;
numqueueentries = strtoll(numqueueentries_str, NULL, 10);
}
}
/** Helper function to read data from file. */
bool doRead(int fd, void *buf, int numbytes) {
}
/** Helper function to read data from file. */
bool doRead(int fd, void *buf, int numbytes) {
if (numrequeststosend < 0)
numrequeststosend = 0;
long long numbytes = 0;
int filesizes[numrequeststosend];
int fdarray[numrequeststosend];
if (numrequeststosend < 0)
numrequeststosend = 0;
long long numbytes = 0;
int filesizes[numrequeststosend];
int fdarray[numrequeststosend];
- fdarray[index]=open(filename, O_RDONLY);
- filesizes[index]=st.st_size;
- numbytes+=filesizes[index];
+ fdarray[index] = open(filename, O_RDONLY);
+ filesizes[index] = st.st_size;
+ numbytes += filesizes[index];
- long long offset=0;
- memcpy(response, header, sizeof(header)-1);
- offset+=sizeof(header)-1;
- int numreq=htonl(numrequeststosend);
+ long long offset = 0;
+ memcpy(response, header, sizeof(header) - 1);
+ offset += sizeof(header) - 1;
+ int numreq = htonl(numrequeststosend);
- offset+=sizeof(numrequeststosend);
- for(int i=0; i<numrequeststosend; i++) {
- int filesize=htonl(filesizes[i]);
+ offset += sizeof(numrequeststosend);
+ for (int i = 0; i < numrequeststosend; i++) {
+ int filesize = htonl(filesizes[i]);
- for(int i=0; i<numrequeststosend; i++) {
- if (fdarray[i]>=0) {
- doRead(fdarray[i], response+offset, filesizes[i]);
- offset+=filesizes[i];
+ for (int i = 0; i < numrequeststosend; i++) {
+ if (fdarray[i] >= 0) {
+ doRead(fdarray[i], response + offset, filesizes[i]);
+ offset += filesizes[i];
void IoTQuery::setSalt() {
/* Write the slot data we received to a SLOT file */
char *filename = getSaltFileName();
void IoTQuery::setSalt() {
/* Write the slot data we received to a SLOT file */
char *filename = getSaltFileName();
doWrite(saltfd, data, length);
char response[0];
sendResponse(response, 0);
doWrite(saltfd, data, length);
char response[0];
sendResponse(response, 0);
delete filename;
return;
}
int saltfd = open(filename, O_RDONLY);
int responsesize = filesize + sizeof(int);
char * response = new char[responsesize];
delete filename;
return;
}
int saltfd = open(filename, O_RDONLY);
int responsesize = filesize + sizeof(int);
char * response = new char[responsesize];
- doRead(saltfd, response+ sizeof(int), filesize);
- int n_filesize=htonl(filesize);
+ doRead(saltfd, response + sizeof(int), filesize);
+ int n_filesize = htonl(filesize);
*((int*) response) = n_filesize;
sendResponse(response, responsesize);
close(saltfd);
*((int*) response) = n_filesize;
sendResponse(response, responsesize);
close(saltfd);
void IoTQuery::putSlot() {
/* Check if the request is stale and send update in that case. This
servers as an implicit failure of the request. */
void IoTQuery::putSlot() {
/* Check if the request is stale and send update in that case. This
servers as an implicit failure of the request. */
if (numberofliveslots >= numqueueentries) {
removeOldestSlot();
}
/* Write the slot data we received to a SLOT file */
char *filename = getSlotFileName(requestsequencenumber);
if (numberofliveslots >= numqueueentries) {
removeOldestSlot();
}
/* Write the slot data we received to a SLOT file */
char *filename = getSlotFileName(requestsequencenumber);
- char command[]="putslot";
- sendResponse(command, sizeof(command)-1);
+ char command[] = "putslot";
+ sendResponse(command, sizeof(command) - 1);
void IoTQuery::sendResponse(char * bytes, int len) {
cout << "Accept-Ranges: bytes\r\n"
void IoTQuery::sendResponse(char * bytes, int len) {
cout << "Accept-Ranges: bytes\r\n"
/* Size is 19 digits for ASCII representation of a long + 4
characters for SLOT string + 1 character for null termination +
directory size*/
/* Size is 19 digits for ASCII representation of a long + 4
characters for SLOT string + 1 character for null termination +
directory size*/
- char * filename=new char[25+directorylen];
- snprintf(filename, 25+directorylen, "%s/SLOT%lld", directory, seqnum);
+ char * filename = new char[25 + directorylen];
+ snprintf(filename, 25 + directorylen, "%s/SLOT%lld", directory, seqnum);
- char * filename=new char[6+directorylen];
- snprintf(filename, 6+directorylen, "%s/SALT", directory);
+ char * filename = new char[6 + directorylen];
+ snprintf(filename, 6 + directorylen, "%s/SALT", directory);
/* Verify that we receive a post request. */
if (strncmp(method, "POST", 4) != 0) {
/* Verify that we receive a post request. */
if (strncmp(method, "POST", 4) != 0) {
-void IoTQuery::readData() {
- if (length) {
- data = new char[length+1];
- memset(data, 0, length+1);
+bool IoTQuery::readData() {
+ if (length != 0) {
+ data = new char[length + 1];
+ memset(data, 0, length + 1);
/** We require the content-length header to be sent. */
char * reqlength = FCGX_GetParam(length_str, request->envp);
if (reqlength) {
/** We require the content-length header to be sent. */
char * reqlength = FCGX_GetParam(length_str, request->envp);
if (reqlength) {
int rootdir_len = strlen(iotcloudroot);
int directory_len = split_len + rootdir_len + 1;
directory = new char[directory_len];
memcpy(directory, iotcloudroot, rootdir_len);
memcpy(directory + rootdir_len, uri, split_len);
int rootdir_len = strlen(iotcloudroot);
int directory_len = split_len + rootdir_len + 1;
directory = new char[directory_len];
memcpy(directory, iotcloudroot, rootdir_len);
memcpy(directory + rootdir_len, uri, split_len);
int doread(int fd, void *ptr, size_t count, off_t offset) {
do {
int doread(int fd, void *ptr, size_t count, off_t offset) {
do {
- size_t bytesread=pread(fd, ptr, count, offset);
- if (bytesread==count) {
+ size_t bytesread = pread(fd, ptr, count, offset);
+ if (bytesread == count) {
- filename[len]='/';
- memcpy(filename+len+1, statusfile, sizeof(statusfile));
- filename[len+sizeof(statusfile)+1]=0;
- fd=open(filename, O_CREAT| O_RDWR, S_IRUSR| S_IWUSR);
+ filename[len] = '/';
+ memcpy(filename + len + 1, statusfile, sizeof(statusfile));
+ filename[len + sizeof(statusfile) + 1] = 0;
+ fd = open(filename, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if (doread(fd, &size, sizeof(size), OFFSET_MAX))
if (doread(fd, &size, sizeof(size), OFFSET_MAX))
long long entry;
if (doread(fd, &entry, sizeof(entry), OFFSET_OLD))
long long entry;
if (doread(fd, &entry, sizeof(entry), OFFSET_OLD))
if (doread(fd, &entry, sizeof(entry), OFFSET_NEW))
if (doread(fd, &entry, sizeof(entry), OFFSET_NEW))