📄 http.lst
字号:
171 5 //} else
172 5 ReplaceTag(ReplacePtr,ConfigAckMsg[HttpAckCode[i]],PostPageReplace[i].length);
173 5 if ((HttpAckCode[i] == USER_ERROR) || (HttpAckCode[i] == PASSWORD_ERROR)) {
174 6 for (; i<REPLACE_STATU_NUM; i++) { //如果是密码或用户名错误,余下的不再替换
-
175 7 ReplaceStatu[i] = 10;
176 7 }
C51 COMPILER V7.06 HTTP 09/26/2008 13:36:02 PAGE 4
177 6 break;
178 6 }
179 5 }
180 4 } //正文用字符串替代原先准备替换的标签
181 3 }
182 2 }
183 1 }
184
185
186 /*
187 *****************************************************************************************************
188 *FUNC:
189 *NOTE:
190 *****************************************************************************************************
191 */
192 void HttpFunc(union netcard xdata *pRxdnet,unsigned char sock,unsigned int length)
193 {
194 1 unsigned int xdata body_len, hdr_len, page_len;
195 1 unsigned char xdata body[1461];
196 1 unsigned int xdata i,sent,remaining;
197 1 unsigned char xdata request;
198 1 unsigned char code *xdata head[3]; //利用指针数组存放头部数据首地址
199 1 unsigned char code *xdata page[3]; //利用指针数组存放网页正文数据首地址
200 1 unsigned char count=0,ch=0;
201 1
202 1 if (StrCompare(pRxdnet->tcpframe.tcpdata,"POST",length)) {
203 2 request = POST_PAGE;
204 2 DebugMsg(45);
205 2 } else if (StrCompare(pRxdnet->tcpframe.tcpdata,"GET",length) != NULL) {
206 2 if (StrCompare(pRxdnet->tcpframe.tcpdata, "logo",length) != NULL) {
207 3 request = GET_JPEG;
208 3 DebugMsg(46);
209 3 } else if (StrCompare(pRxdnet->tcpframe.tcpdata, "index",length) != NULL) {
210 3 request = GET_PAGE;
211 3 DebugMsg(47);
212 3 } else if (StrCompare(pRxdnet->tcpframe.tcpdata, "/ ",length) != NULL) {
213 3 request = GET_PAGE;
214 3 DebugMsg(47);
215 3 } else {
216 3 request = GET_PAGE;
217 3 DebugMsg(48);
218 3 }
219 2 } else {
220 2 return;
221 2 }
222 1
223 1 if (request > 2) {
224 2 return;
225 2 }
226 1
227 1 if (request == POST_PAGE) {
228 2 ParseHttpCmd(pRxdnet->tcpframe.tcpdata,length); // 各ACK ID放在HttpAckCode[i]里
229 2 }
230 1
231 1 head[0] = HtmlHeader; //request =0:Getpage
232 1 head[1] = HtmlHeader; //request =1:Postpage
233 1 head[2] = JpegHeader; //request =2:GetJPG
234 1
235 1 page[0] = WebPage; //request =0:Getpage
236 1
237 1 if (RemoteRestart == REMOTE_RESTART_TRUE) {
238 2 page[1] = PostRstPage; //HTTP控制重启,提交重启页
C51 COMPILER V7.06 HTTP 09/26/2008 13:36:02 PAGE 5
239 2 } else if (RemoteRestart == REMOTE_RESTART_FALSE){
240 2 page[1] = PostRstErrorPage;
241 2 } else {
242 2 page[1] = PostPage; //request =1:Postpage
243 2 }
244 1 page[2] = Photo1Jpeg; //request =2:GetJPG
245 1
246 1 hdr_len = strlen(head[request]); // 头长度:119
247 1 page_len = strlen(page[request]); //页长度: 2223
248 1 if (request == GET_JPEG) {
249 2 page_len = 2267;//7680; //图片长度用strlen取会有问题
250 2 }
251 1 body_len = hdr_len + page_len; //总长度: 2342
252 1
253 1 HexToDec(page_len); // 网页正文长度变成字符串Data_Length
254 1
255 1 if (body_len > 1460) {
256 2 remaining = 1460;
257 2 } else {
258 2 remaining = body_len;
259 2 }
260 1
261 1 for (i=0; i<remaining; i++) {
262 2 if (i < hdr_len) {
263 3 body[i] = *(head[request]+i); //COPY头部
264 3 } else {
265 3 body[i] = *(page[request]+i-hdr_len); //copy正文 从0个开始
266 3 }
267 2 }
268 1
269 1 body[remaining]=0; //结束符
270 1
271 1
272 1 for (i=0; i<REPLACE_STATU_NUM; i++) { //替换前全清0,0:未替换,大于0:已替换
273 2 ReplaceStatu[i] = 0; //替换一个后填大于1的值,否为0
274 2 }
275 1 ReplaceNewIp = FALSE; //替换刷新IP,置未替换
276 1
277 1 if (ReplacePtr = StrCompare(body,"TAG:LEN1",length)) {
278 2 ReplaceTag(ReplacePtr,Data_Length,8); //正文长度用字符串替代原先准备替换的标签
279 2 }
280 1
281 1 Replace_Loop(body,request,remaining); //把当前的参数替换为网页内容上传显示
282 1
283 1 //#ifdef _DEBUG_
284 1 // Uart0Putsl(body,remaining);
285 1 //#endif
286 1
287 1 conxn[sock].pUnAcked->bUsed = FALSE;
288 1 User_TCPSend(sock,body,remaining);
289 1 conxn[sock].my_sequence+=remaining; // 很重要哦
290 1 sent = remaining-hdr_len; //sent=正文已发,remaining=现在正要发的
291 1
292 1 while (sent < page_len) { //小于说明正文还有未发
293 2 count++;
294 2 ch=count+0x30;
295 2 remaining = page_len - sent; //现在要发的
296 2 if (remaining > 1460) {
297 3 remaining = 1460;
298 3 }
299 2
300 2 for (i=0; i<remaining; i++) {
C51 COMPILER V7.06 HTTP 09/26/2008 13:36:02 PAGE 6
301 3 body[i] = *(page[request]+i+sent); //copy正文
302 3 }
303 2
304 2 body[remaining]=0; //结束符
305 2
306 2 Replace_Loop(body,request,remaining); //替换,有些正文有分侦发送,反以这也要判断
307 2
308 2 sent += remaining;
309 2 conxn[sock].pUnAcked->bUsed = FALSE;
310 2 User_TCPSend(sock,body,remaining);
311 2 conxn[sock].my_sequence+=remaining; // 很重要哦
312 2 }
313 1
314 1 conxn[sock].pUnAcked->bUsed = FALSE; // 很重要哦 僻免重发
315 1
316 1 //发RST命令目的是,让浏览器每一次POST或GET都得从请求链接开始,牺牲时间
317 1 tcp_send(&TCPSend,FLG_RST, 20, sock);
318 1 InerClose(sock);
319 1 //=======================================================
320 1
321 1 if (RemoteRestart == REMOTE_RESTART_TRUE) {
322 2 RemoteRestart = REMOTE_RESTART_IDEL;
323 2 HintMsg(11,NULL);
324 2 McuRst(SAVE_EXIT);
325 2 }
326 1 }
327
328 /*
329 *****************************************************************************************************
330 *
331 *****************************************************************************************************
332 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2279 ----
CONSTANT SIZE = 529 ----
XDATA SIZE = 15 1486
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -