3394b57ade21a7a6f685cefc86b959dd8c91f613
[iotcloud.git] / src / server / iotquery.h
1 #ifndef IOTQUERY_H
2 #define IOTQUERY_H
3 #include <iostream>
4 #include "fcgio.h"
5 #include "fcgi_stdio.h"
6
7 #define DEFAULT_SIZE 128
8 #define OFFSET_MAX 0
9 #define OFFSET_OLD 4
10 #define OFFSET_NEW 12
11
12 class IoTQuery {
13 public:
14         IoTQuery(FCGX_Request * request);
15         ~IoTQuery();
16         void processQuery();
17
18 private:
19         void sendResponse(char *data, int length);
20         void getQuery();
21         void getDirectory();
22         void readData();
23         bool checkDirectory();
24         bool openStatusFile();
25         void updateStatusFile();
26         void decodeQuery();
27         void getSlot();
28         void putSlot();
29         void removeOldestSlot();
30         char * getSlotFileName(long long);
31
32         FCGX_Request * request;
33         char *data;
34         /* Directory slot files are placed in. */
35         char *directory;
36         /* Full URI from Apache */
37         const char * uri;
38         /* Query portion of URI */
39         const char * query;
40         /* Type of request: GET or PUT */
41         const char * method;
42         /* Root directory for all accounts */
43         const char * iotcloudroot;
44         /* Expected length of data from client */
45         long long length;
46         /* Sequence number for oldest slot */
47         long long oldestentry;
48         /* Sequence number for newest slot */
49         long long newestentry;
50         /* Sequence number from request */
51         long long requestsequencenumber;
52         /* Size of queue */
53         int numqueueentries;
54         /* fd for queuestatus file */
55         int fd;
56         /* Is the request to get a slot? */
57         bool reqGetSlot;
58         /* Is the request to put a slot? */
59         bool reqPutSlot;
60 };
61 #endif