NetBurner 3.5.7
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>
10#include <webclient/http_funcs.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 eConnecting,
74 eSendingRequest,
75 eSendingPayload,
76 eWaitingForResponse,
77 eSleeping,
78 eDisconnected,
79} eWebClientState_t;
80
81const int HEADER_BUFFER_SIZE=256;
82
83class WebClientServlet: public servlet, public TimeOutElement
84{
85protected:
86//Servlet virtual functions
87 virtual int AddToSelectSet(fd_set &rd_set, fd_set &wr_set, fd_set &er_set);
88 virtual void ProcessSelectResult(fd_set &rd_set, fd_set &wr_set, fd_set &er_set);
89//Timeout element virtual function
90 virtual void TimeElementEvent();
91
92 int m_fd; //fd to hold DNS Requests and tcp send/rx
93 eWebClientState_t m_cur_state; //State variable
94 eWebResponse_t m_resp_state;
95 ParsedURI m_cur_request; //Current URI (used when string URLs are passed)
96 ParsedURI *m_pActiveUri; //Points to m_cur_request or external ParsedURI
97 buffer_object * pDestinationBuffer;
98 bool m_bChunk;
99 NBString PostPayload;
100 NBString AdditionalHeaders;
101 NBString PostType;
102 const char *m_pMethodStr;
103
104
105 char HeaderBuffer[HEADER_BUFFER_SIZE];
106 int m_HeaderPos;
107 int m_rem_content;
108
109 uint32_t m_ResultCode;
110
111 TickTimeout m_waketime;
112 TickTimeout m_responsetimeout;
113
114
115
116 servlet_list * m_pWhoToReJoin;
117
118
119//Fucntion to handle data to read
120//returns true if the function is complete.
121virtual bool ResponseReader(int fd);
122
123virtual void StartQuery();
124
125
126//Called when things happen
127virtual void ActionComplete(eWebClientAction_t action);
128
129protected:
130 const char* ActionText(eWebClientAction_t action);
131
132
133
134void DisconnectTil(TickTimeout & tt); //Maximum interval ~ 3 yrs with default ticks.
135void ReConnectNow();
136
137void CoreStart(const char* pUrl,buffer_object * result_buffer, uint32_t timeout);
138void CoreStart(ParsedURI *pUri,buffer_object * result_buffer, uint32_t timeout);
139
140public:
141
142// If List_To_Join is null joins config server
143WebClientServlet(servlet_list * List_To_Join=0);
144
145uint32_t GetResultCode(){return m_ResultCode; };
146
147void NewGet(const char* pUrl,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
148void NewGet(ParsedURI *pUri,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
149void CommonPutPost(const char * method, const char * pUrl,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
150void CommonPutPost(const char * method, const char * pUrl,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
151void CommonPutPost(const char * method, ParsedURI *pUri,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
152void CommonPutPost(const char * method, ParsedURI *pUri,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0);
153
154inline void NewPost(const char * pUrl,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
155 { CommonPutPost("POST",pUrl,pType,payload,result_buffer,timeout,additional_header); }
156inline void NewPost(const char * pUrl,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
157 { CommonPutPost("POST",pUrl,pType,payload,result_buffer,timeout,additional_header); }
158inline void NewPost(ParsedURI *pUri,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
159 { CommonPutPost("POST",pUri,pType,payload,result_buffer,timeout,additional_header); }
160inline void NewPost(ParsedURI *pUri,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
161 { CommonPutPost("POST",pUri,pType,payload,result_buffer,timeout,additional_header); }
162inline void NewPut(const char * pUrl,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
163 { CommonPutPost("PUT",pUrl,pType,payload,result_buffer,timeout,additional_header); }
164inline void NewPut(const char * pUrl,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
165 { CommonPutPost("PUT",pUrl,pType,payload,result_buffer,timeout,additional_header); }
166inline void NewPut(ParsedURI *pUri,const char* pType, NBString & payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
167 { CommonPutPost("PUT",pUri,pType,payload,result_buffer,timeout,additional_header); }
168inline void NewPut(ParsedURI *pUri,const char* pType, const char* payload,buffer_object * result_buffer, uint32_t timeout=0,const char* additional_header=0)
169 { CommonPutPost("PUT",pUri,pType,payload,result_buffer,timeout,additional_header); }
170};
171
172
173
174#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:162
Base class for web client response buffers.
Definition web_buffers.h:20
An OS_CRIT object is used to establish critical sections of code that can only be run by one task at ...
Definition nbrtos.h:1106
Semaphores are used to control access to shared resources or or to communicate between tasks in a mul...
Definition nbrtos.h:407