📄 httpd.lis
字号:
02F4 CE01 movw R24,R28
02F6 F501 movw R30,R10
02F8 3697 sbiw R30,6
02FA E80F add R30,R24
02FC F91F adc R31,R25
02FE 2082 std z+0,R2
0300 .dbline 307
0300 C501 movw R24,R10
0302 0196 adiw R24,1
0304 5C01 movw R10,R24
0306 .dbline 308
0306 L56:
0306 .dbline 304
0306 ; while((uip_appdata[i] != ISO_dot) && (uip_appdata[i] != ISO_space))
0306 20900000 lds R2,_uip_appdata
030A 30900100 lds R3,_uip_appdata+1
030E 2501 movw R4,R10
0310 420C add R4,R2
0312 531C adc R5,R3
0314 F201 movw R30,R4
0316 8081 ldd R24,z+0
0318 8E32 cpi R24,46
031A 11F0 breq L58
031C 8032 cpi R24,32
031E 11F7 brne L55
0320 L58:
0320 .dbline 309
0320 ; {
0320 ; opfn[i-6]=uip_appdata[i];
0320 ; i++;
0320 ; }
0320 ; opfn[i-6]='\r';
0320 CE01 movw R24,R28
0322 F501 movw R30,R10
0324 3697 sbiw R30,6
0326 E80F add R30,R24
0328 F91F adc R31,R25
032A 8DE0 ldi R24,13
032C 8083 std z+0,R24
032E .dbline 310
032E ; fs_open(opfn, &fsfile);
032E 9E01 movw R18,R28
0330 285F subi R18,248 ; offset = 8
0332 3F4F sbci R19,255
0334 8E01 movw R16,R28
0336 0E940000 xcall _fs_open
033A .dbline 311
033A ; if(!fs_open((char *)&uip_appdata[5], &fsfile))
033A 9E01 movw R18,R28
033C 285F subi R18,248 ; offset = 8
033E 3F4F sbci R19,255
0340 00910000 lds R16,_uip_appdata
0344 10910100 lds R17,_uip_appdata+1
0348 0B5F subi R16,251 ; offset = 5
034A 1F4F sbci R17,255
034C 0E940000 xcall _fs_open
0350 0030 cpi R16,0
0352 0107 cpc R16,R17
0354 29F4 brne L41
0356 X2:
0356 .dbline 312
0356 ; {
0356 .dbline 313
0356 ; PRINTLN("couldn't open file");
0356 .dbline 315
0356 ; //fs_open(file_404_html.name, &fsfile);
0356 ; }
0356 .dbline 317
0356 ;
0356 ; }
0356 .dbline 318
0356 ; }
0356 04C0 xjmp L41
0358 L40:
0358 .dbline 320
0358 ; else
0358 ; {
0358 .dbline 322
0358 ; /* If it isn't a GET,*/
0358 ; uip_abort();
0358 80E2 ldi R24,32
035A 80930000 sts _uip_flags,R24
035E .dbline 323
035E ; return;
035E E2C0 xjmp L8
0360 L41:
0360 L22:
0360 .dbline 328
0360 ; }
0360 ;
0360 ;
0360 ;
0360 ; if(uip_appdata[4] == ISO_slash &&
0360 E0910000 lds R30,_uip_appdata
0364 F0910100 lds R31,_uip_appdata+1
0368 8481 ldd R24,z+4
036A 8F32 cpi R24,47
036C 31F5 brne L61
036E E0910000 lds R30,_uip_appdata
0372 F0910100 lds R31,_uip_appdata+1
0376 8581 ldd R24,z+5
0378 8336 cpi R24,99
037A F9F4 brne L61
037C E0910000 lds R30,_uip_appdata
0380 F0910100 lds R31,_uip_appdata+1
0384 8681 ldd R24,z+6
0386 8736 cpi R24,103
0388 C1F4 brne L61
038A E0910000 lds R30,_uip_appdata
038E F0910100 lds R31,_uip_appdata+1
0392 8781 ldd R24,z+7
0394 8936 cpi R24,105
0396 89F4 brne L61
0398 E0910000 lds R30,_uip_appdata
039C F0910100 lds R31,_uip_appdata+1
03A0 8085 ldd R24,z+8
03A2 8F32 cpi R24,47
03A4 51F4 brne L61
03A6 .dbline 332
03A6 ; uip_appdata[5] == ISO_c &&
03A6 ; uip_appdata[6] == ISO_g &&
03A6 ; uip_appdata[7] == ISO_i &&
03A6 ; uip_appdata[8] == ISO_slash) {
03A6 .dbline 335
03A6 ; /* If the request is for a file that starts with "/cgi/", we
03A6 ; prepare for invoking a script. */
03A6 ; hs->script = fsfile.data;
03A6 2884 ldd R2,y+8
03A8 3984 ldd R3,y+9
03AA E0910000 lds R30,_hs
03AE F0910100 lds R31,_hs+1
03B2 3682 std z+6,R3
03B4 2582 std z+5,R2
03B6 .dbline 336
03B6 ; next_scriptstate();
03B6 D5D0 xcall _next_scriptstate
03B8 .dbline 337
03B8 16C0 xjmp L62
03BA L61:
03BA .dbline 337
03BA ; } else {
03BA .dbline 338
03BA ; hs->script = NULL;
03BA 2224 clr R2
03BC 3324 clr R3
03BE E0910000 lds R30,_hs
03C2 F0910100 lds R31,_hs+1
03C6 3682 std z+6,R3
03C8 2582 std z+5,R2
03CA .dbline 342
03CA ; /* The web server is now no longer in the HTTP_NOGET state, but
03CA ; in the HTTP_FILE state since is has now got the GET from
03CA ; the client and will start transmitting the file. */
03CA ; hs->state = HTTP_FILE;
03CA 81E0 ldi R24,1
03CC 8083 std z+0,R24
03CE .dbline 346
03CE ;
03CE ; /* Point the file pointers in the connection state to point to
03CE ; the first byte of the file. */
03CE ; hs->dataptr = fsfile.data;
03CE 2884 ldd R2,y+8
03D0 3984 ldd R3,y+9
03D2 E0910000 lds R30,_hs
03D6 F0910100 lds R31,_hs+1
03DA 3482 std z+4,R3
03DC 2382 std z+3,R2
03DE .dbline 347
03DE ; hs->count = fsfile.len;
03DE 2A84 ldd R2,y+10
03E0 3B84 ldd R3,y+11
03E2 3282 std z+2,R3
03E4 2182 std z+1,R2
03E6 .dbline 348
03E6 ; }
03E6 L62:
03E6 .dbline 349
03E6 ; }
03E6 L19:
03E6 .dbline 352
03E6 ;
03E6 ;
03E6 ; if(hs->state != HTTP_FUNC) {
03E6 E0910000 lds R30,_hs
03EA F0910100 lds R31,_hs+1
03EE 8081 ldd R24,z+0
03F0 8330 cpi R24,3
03F2 09F4 brne X18
03F4 59C0 xjmp L64
03F6 X18:
03F6 .dbline 352
03F6 .dbline 357
03F6 ; /* Check if the client (remote end) has acknowledged any data that
03F6 ; we've previously sent. If so, we move the file pointer further
03F6 ; into the file and send back more data. If we are out of data to
03F6 ; send, we close the connection. */
03F6 ; if(uip_acked()) {
03F6 20900000 lds R2,_uip_flags
03FA 20FE sbrs R2,0
03FC 74C0 rjmp L65
03FE .dbline 357
03FE .dbline 358
03FE ; if(hs->count >= uip_conn->len) {
03FE E0910000 lds R30,_uip_conn
0402 F0910100 lds R31,_uip_conn+1
0406 2088 ldd R2,z+16
0408 3188 ldd R3,z+17
040A E0910000 lds R30,_hs
040E F0910100 lds R31,_hs+1
0412 4180 ldd R4,z+1
0414 5280 ldd R5,z+2
0416 4214 cp R4,R2
0418 5304 cpc R5,R3
041A 18F1 brlo L68
041C .dbline 358
041C .dbline 359
041C ; hs->count -= uip_conn->len;
041C CF01 movw R24,R30
041E 0196 adiw R24,1
0420 E0910000 lds R30,_uip_conn
0424 F0910100 lds R31,_uip_conn+1
0428 4088 ldd R4,z+16
042A 5188 ldd R5,z+17
042C FC01 movw R30,R24
042E 6080 ldd R6,z+0
0430 7180 ldd R7,z+1
0432 6418 sub R6,R4
0434 7508 sbc R7,R5
0436 7182 std z+1,R7
0438 6082 std z+0,R6
043A .dbline 360
043A ; hs->dataptr += uip_conn->len;
043A 80910000 lds R24,_hs
043E 90910100 lds R25,_hs+1
0442 0396 adiw R24,3
0444 FC01 movw R30,R24
0446 4080 ldd R4,z+0
0448 5180 ldd R5,z+1
044A E0910000 lds R30,_uip_conn
044E F0910100 lds R31,_uip_conn+1
0452 6088 ldd R6,z+16
0454 7188 ldd R7,z+17
0456 640C add R6,R4
0458 751C adc R7,R5
045A FC01 movw R30,R24
045C 7182 std z+1,R7
045E 6082 std z+0,R6
0460 .dbline 361
0460 08C0 xjmp L69
0462 L68:
0462 .dbline 361
0462 ; } else {
0462 .dbline 362
0462 ; hs->count = 0;
0462 2224 clr R2
0464 3324 clr R3
0466 E0910000 lds R30,_hs
046A F0910100 lds R31,_hs+1
046E 3282 std z+2,R3
0470 2182 std z+1,R2
0472 .dbline 363
0472 ; }
0472 L69:
0472 .dbline 365
0472 ;
0472 ; if(hs->count == 0) {
0472 E0910000 lds R30,_hs
0476 F0910100 lds R31,_hs+1
047A 2180 ldd R2,z+1
047C 3280 ldd R3,z+2
047E 2220 tst R2
0480 91F5 brne L65
0482 3320 tst R3
0484 81F5 brne L65
0486 X3:
0486 .dbline 365
0486 .dbline 366
0486 ; if(hs->script != NULL) {
0486 E0910000 lds R30,_hs
048A F0910100 lds R31,_hs+1
048E 2580 ldd R2,z+5
0490 3680 ldd R3,z+6
0492 2220 tst R2
0494 11F4 brne X4
0496 3320 tst R3
0498 19F0 breq L72
049A X4:
049A .dbline 366
049A .dbline 367
049A ; next_scriptline();
049A 48D0 xcall _next_scriptline
049C .dbline 368
049C ; next_scriptstate();
049C 62D0 xcall _next_scriptstate
049E .dbline 369
049E 23C0 xjmp L65
04A0 L72:
04A0 .dbline 369
04A0 ; } else {
04A0 .dbline 370
04A0 ; uip_close();
04A0 80E1 ldi R24,16
04A2 80930000 sts _uip_flags,R24
04A6 .dbline 371
04A6 ; }
04A6 .dbline 372
04A6 ; }
04A6 .dbline 373
04A6 ; }
04A6 .dbline 374
04A6 1FC0 xjmp L65
04A8 L64:
04A8 .dbline 374
04A8 ; } else {
04A8 .dbline 376
04A8 ; /* Call the CGI function. */
04A8 ; if(cgitab[hs->script[2] - ISO_a](uip_acked())) {
04A8 00910000 lds R16,_uip_flags
04AC 0170 andi R16,1
04AE E0910000 lds R30,_hs
04B2 F0910100 lds R31,_hs+1
04B6 AF93 push R26
04B8 BF93 push R27
04BA A581 ldd R26,z+5
04BC B681 ldd R27,z+6
04BE FD01 movw R30,R26
04C0 BF91 pop R27
04C2 AF91 pop R26
04C4 2280 ldd R2,z+2
04C6 82E0 ldi R24,2
04C8 829D mul R24,R2
04CA F001 movw R30,R0
04CC 80E0 ldi R24,<_cgitab-194
04CE 90E0 ldi R25,>_cgitab-194
04D0 E80F add R30,R24
04D2 F91F adc R31,R25
04D4 A081 ldd R26,z+0
04D6 B181 ldd R27,z+1
04D8 FD01 movw R30,R26
04DA 0E940000 xcall xicall
04DE 0023 tst R16
04E0 11F0 breq L74
04E2 .dbline 376
04E2 .dbline 379
04E2 ; /* If the function returns non-zero, we jump to the next line
04E2 ; in the script. */
04E2 ; next_scriptline();
04E2 24D0 xcall _next_scriptline
04E4 .dbline 380
04E4 ; next_scriptstate();
04E4 3ED0 xcall _next_scriptstate
04E6 .dbline 381
04E6 ; }
04E6 L74:
04E6 .dbline 382
04E6 ; }
04E6 L65:
04E6 .dbline 384
04E6 ;
04E6 ; if(hs->state != HTTP_FUNC && !uip_poll()) {
04E6 E0910000 lds R30,_hs
04EA F0910100 lds R31,_hs+1
04EE 8081 ldd R24,z+0
04F0 8330 cpi R24,3
04F2 C1F0 breq L8
04F4 20900000 lds R2,_uip_flags
04F8 23FC sbrc R2,3
04FA 14C0 rjmp L8
04FC .dbline 384
04FC L79:
04FC .dbline 387
04FC ; /* Send a piece of data, but not more than the MSS of the
04FC ; connection. */
04FC ; uip_send(hs->dataptr, hs->count);
04FC .dbline 387
04FC E0910000 lds R30,_hs
0500 F0910100 lds R31,_hs+1
0504 2380 ldd R2,z+3
0506 3480 ldd R3,z+4
0508 30920100 sts _uip_sappdata+1,R3
050C 20920000 sts _uip_sappdata,R2
0510 .dbline 387
0510 2180 ldd R2,z+1
0512 3280 ldd R3,z+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -