NetBurner 3.5.0
PDF Version
 
servlets.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
5#ifndef _NB_SERVLET_H
6#define _NB_SERVLET_H
7
8#include <iosys.h>
9#include <nbrtos.h>
11#include <iosys.h>
12#include <nbstring.h>
13#include <dns.h>
14#include <nettimer.h>
15
16
17
18
19class servlet_list;
20
21class servlet
22{
23protected:
24 servlet *pNext;
25 servlet_list *pOwner;
26
27 public:
28 servlet(servlet_list *whereToAdd);
29 servlet();
30 ~servlet();
31
32 // Also returns the number of seconds needed for timeout/recycle...
33 virtual int AddToSelectSet(fd_set &rd_set, fd_set &wr_set, fd_set &er_set) = 0;
34 virtual void ProcessSelectResult(fd_set &rd_set, fd_set &wr_set, fd_set &er_set) = 0;
35 friend class servlet_list;
36};
37
38class servlet_list
39{
40 servlet *pHead;
41 OS_CRIT ListCritical;
42 OS_SEM m_Sem;
43
44 public:
45 servlet_list();
46 ~servlet_list();
47 void add(servlet *ps);
48 void remove(servlet *ps);
49 void run_once_through_select_loop(int max_timeout_ticks);
50};
51
52
53typedef enum {
54 eReadingHeader,
55 eChunkSize,
56 eBody
57}eWebResponse_t;
58
59typedef enum {
60 eFirstValidInterface,
61 eTransactionComplete,
62 eTransactionDnsFail,
63 eTransactionFail,
64 eTransactionTimeOut,
65 eReconnectTime,
66 eReconnectNow,
67} eWebClientAction_t;
68
69typedef enum {
70 eIdle,
71 eWaitingIntf,
72 eDoingDns,
73 eSendingRequest,
74 eSendingPayload,
75 eWaitingForResponse,
76 eSleeping,
77 eDisconnected,
78} eWebClientState_t;
79
80const int HEADER_BUFFER_SIZE=256;
81
82class WebClientServlet: public servlet, public TimeOutElement
83{
84protected:
85//Servlet virtual functions
86 virtual int AddToSelectSet(fd_set &rd_set, fd_set &wr_set, fd_set &er_set);
87 virtual void ProcessSelectResult(fd_set &rd_set, fd_set &wr_set, fd_set &er_set);
88//Timeout element virtual function
89 virtual void TimeElementEvent();
90
91 int m_fd; //fd to hold DNS Requests and tcp send/rx
92 eWebClientState_t m_cur_state; //State variable
93 eWebResponse_t m_resp_state;
94 ParsedURI m_cur_request; //Current URI
95 buffer_object * pDestinationBuffer;
96 bool m_bChunk;
97 NBString PostPayload;
98 NBString AdditionalHeaders;
99 NBString PostType;
100
101
102 char HeaderBuffer[HEADER_BUFFER_SIZE];
103 int m_HeaderPos;
104 int m_rem_content;
105
106 uint32_t m_ResultCode;
107
108 TickTimeout m_waketime;
109 TickTimeout m_responsetimeout;
110
111
112
113 servlet_list * m_pWhoToReJoin;
114
115
116//Fucntion to handle data to read
117//returns true if the function is complete.
118virtual bool ResponseReader(int fd);
119
120virtual void StartQuery();
121
122
123//Called when things happen
124virtual void ActionComplete(eWebClientAction_t action);
125
126protected:
127 const char* ActionText(eWebClientAction_t action);
128
129
130
131void DisconnectTil(TickTimeout & tt); //Maximum interval ~ 3 yrs with default ticks.
132void ReConnectNow();
133
134void CoreStart(const char* pUrl,buffer_object * result_buffer, uint32_t timeout);
135
136public:
137
138// If List_To_Join is null joins config server
139WebClientServlet(servlet_list * List_To_Join=0);
140
141uint32_t GetResultCode(){return m_ResultCode; };
142
143void NewGet(const char* pUrl,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
144void NewPost(const char * pUrl,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
145void NewPost(const char * pUrl,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
146};
147
148
149
150#endif
Lightweight alternative to C++ CString class.
Definition nbstring.h:118
Parsed Uniform Resource Identifier Class (URI)
Definition http_funcs.h:62
TickTimeout objects are used to facilitate sequential function calls with timeout parameters that nee...
Definition nbrtos.h:157
NetBurner Domain Name Server Header File.
JSON HTTP functions.
NetBurner I/O System Library API.
NetBurner Real-Time Operating System (NBRTOS) API.
NetBurner String Class.
An OS_CRIT object is used to establish critical sections of code that can only be run by one task at ...
Definition nbrtos.h:1084
Semaphores are used to control access to shared resources or or to communicate between tasks in a mul...
Definition nbrtos.h:386