?? http_server.lst
字號(hào):
256
257 Return val: INT32 - depends on event but usually (-1) is error of some
258 kind and positive reply means OK
259
260 Date: 13.10.2002
261
262 Desc: This function is given to TCP socket as function pointer to be
263 used by TCP engine to make callbacks to inform about events
264 on TCP e.g. arriving data.
265 *********************************************************************************/
266
267
268 INT32 https_eventlistener (INT8 cbhandle, UINT8 event, UINT32 par1, UINT32 par2) reentrant
269 {
270 /* This function is called by TCP stack to inform about events */
271
272 INT16 i;
273 INT16 session;
274
275 if( https_enabled == 0)
276 return(-1);
277
278 if(cbhandle < 0)
279 return(-1);
280
281 /* Search for rigth session */
282
283 session = https_searchsession(cbhandle);
284
285 switch( event )
286 {
287
288 case TCP_EVENT_CONREQ:
289
290 /* Do we have a session for requesting socket? */
291
292 if(session < 0)
293 return(-1);
C51 COMPILER V7.06 HTTP_SERVER 11/26/2004 11:32:46 PAGE 6
294
295
296 /* Try to get new session */
297
298 session = https_bindsession(cbhandle);
299
300 if(session < 0) /* No resources */
301 return(-1);
302
303
304 return(1);
305
306 case TCP_EVENT_ABORT:
307
308 if(session < 0)
309 return(1);
310
311 https_deletesession((UINT8)session);
312
313 return(1);
314
315 case TCP_EVENT_CONNECTED:
316
317 if(session < 0)
318 return(-1);
319
320 https_activatesession((UINT8)session);
321
322 return(1);
323
324 case TCP_EVENT_CLOSE:
325
326 if(session < 0)
327 return(-1);
328
329 https_deletesession((UINT8)session);
330
331 return(1);
332
333
334 case TCP_EVENT_ACK:
335
336 if(session < 0)
337 return(-1);
338
339 https[session].fpoint += https[session].funacked;
340 https[session].funacked = 0;
341
342 return(1);
343
344 case TCP_EVENT_DATA:
345
346 /* Check for GET request */
347
348 if(session < 0)
349 return(-1);
350
351 if(https[session].fstart == 0)
352 {
353 if(par1 <= 3)
354 return(1);
355
C51 COMPILER V7.06 HTTP_SERVER 11/26/2004 11:32:46 PAGE 7
356 /* Check for GET */
357
358 if(RECEIVE_NETWORK_B() != 'G')
359 return(1);
360 if(RECEIVE_NETWORK_B() != 'E')
361 return(1);
362 if(RECEIVE_NETWORK_B() != 'T')
363 return(1);
364
365 par1 -= 3;
366
367 /* Search for '/' */
368
369 for(i=0; i<par1; i++)
370 {
371 if(RECEIVE_NETWORK_B() == '/')
372 {
373 i++;
374 break;
375 }
376 }
377
378 par1 -= i;
379
380 /* Calculate Hash */
381
382 i = https_calculatehash(par1);
383
384 if(i < 0)
385 {
386 /* Invalid GET */
387 return(1);
388 }
389
390 /* Get FileRef */
391
392 i = https_findfile((UINT8)i, (UINT8)session);
393
394
395 return(1);
396
397
398 }
399
400
401 return(1);
402
403
404 case TCP_EVENT_REGENERATE:
405
406 if(session < 0)
407 return(-1);
408
409 if(https[session].state != HTTPS_STATE_ACTIVE)
410 return(-1);
411
412 i = https_loadbuffer(session, &net_buf[TCP_APP_OFFSET], (UINT16)par1);
413
414 if(i<0)
415 return(-1);
416
417 tcp_send(https[session].ownersocket, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET,
C51 COMPILER V7.06 HTTP_SERVER 11/26/2004 11:32:46 PAGE 8
- i);
418
419 return(i);
420
421
422 default:
423 return(-1);
424 }
425
426 }
427
428
429 void https_deletesession (UINT8 ses)
430 {
431 https[ses].state = HTTPS_STATE_FREE;
432 https[ses].fstart = 0;
433 https[ses].fpoint = 0;
434 https[ses].flen = 0;
435 https[ses].funacked = 0;
436
437 }
438
439 INT16 https_searchsession (UINT8 soch)
440 {
441 UINT8 i;
442
443 for(i=0; i<NO_OF_HTTP_SESSIONS; i++)
444 {
445 if(https[i].ownersocket == soch)
446 return(i);
447
448 }
449
450 return(-1);
451
452 }
453
454 INT16 https_bindsession (UINT8 soch)
455 {
456 UINT8 i;
457
458 for(i=0; i<NO_OF_HTTP_SESSIONS; i++)
459 {
460 if(https[i].ownersocket == soch)
461 {
462 if(https[i].state == HTTPS_STATE_FREE)
463 {
464 https[i].state = HTTPS_STATE_RESERVED;
465 return(i);
466 }
467 }
468
469 }
470
471
472 return(-1);
473
474 }
475
476 void https_activatesession (UINT8 ses)
477 {
478 https[ses].state = HTTPS_STATE_ACTIVE;
C51 COMPILER V7.06 HTTP_SERVER 11/26/2004 11:32:46 PAGE 9
479
480 }
481
482 INT16 https_calculatehash (UINT32 len)
483 {
484 UINT8 hash=0;
485 UINT8 ch;
486 UINT8 i;
487
488
489 /* Read Max 60 characters */
490
491 if(len > 60)
492 len = 60;
493
494 for( i=0; i<len; i++)
495 {
496 ch = RECEIVE_NETWORK_B();
497
498 if( ch ==' ') /* End reached? */
499 break;
500
501 hash *= 37;
502 hash += ch;
503
504 }
505
506 if(i==len)
507 return(-1);
508
509 /* construct address for Hash table */
510
511 if(hash == 0) /* User asked defaul file */
512 {
513 /* Set hash to index.html value */
514
515 hash = 0x0B;
516
517 }
518
519 /* Now we have hash value calculated */
520
521 return( hash );
522
523 }
524
525
C51 COMPILATION COMPLETE. 6 WARNING(S), 1 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -