📄 httpserv.s
字号:
xcall __fdopen
movw R20,R16
movw R14,R20
cpi R16,0
cpc R16,R17
brne L145
X39:
.dbline 693
.dbline 694
; printf("[%u] Creating stream device failed\n", id);
mov R18,R10
clr R19
ldi R16,<L148
ldi R17,>L148
xcall _printf_M
.dbline 695
; } else {
xjmp L146
L145:
.dbline 695
.dbline 702
; /*
; * This API call saves us a lot of work. It will parse the
; * client's HTTP request, send any requested file from the
; * registered file system or handle CGI requests by calling
; * our registered CGI routine.
; */
; NutHttpProcessRequest(stream);
movw R16,R14
xcall _NutHttpProcessRequest
.dbline 707
;
; /*
; * Destroy the virtual stream device.
; */
; fclose(stream);
movw R16,R14
xcall _fclose
.dbline 708
; }
L146:
.dbline 713
;
; /*
; * Close our socket.
; */
; NutTcpCloseSocket(sock);
movw R16,R12
xcall _NutTcpCloseSocket
.dbline 714
; printf("[%u] Disconnected\n", id);
mov R18,R10
clr R19
ldi R16,<L149
ldi R17,>L149
xcall _printf_M
.dbline 715
; }
.dbline 655
.dbline 655
xjmp L133
X40:
.dbline -2
L132:
.dbline 0 ; func end
adiw R28,2
xjmp pop_xgset30FC
.dbsym r stream 14 pS[__iobuf]
.dbsym r sock 12 pS[tcp_socket]
.dbsym r id 10 c
.dbsym r arg 10 pV
.dbend
.area lit(rom, con, rel)
L163:
.byte 0,6,152,48,0,53,0
L195:
.byte 'h,'t,'t,'p,'d,48,0
.area text(rom, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.dbfunc e main _main fI
; thname -> y+14
; ip_gate -> y+29
; ip_mask -> y+25
; ip_addr -> y+21
; mac -> y+14
; baud -> y+10
; i -> R20
.even
_main::
sbiw R28,33
.dbline -1
.dbline 724
; }
;
; /*!
; * \brief Main application routine.
; *
; * Nut/OS automatically calls this entry after initialization.
; */
; int main(void)
; {
.dbline 725
; u_long baud = 115200;
ldi R24,0
ldi R25,194
ldi R26,1
ldi R27,0
std y+10,R24
std y+11,R25
std y+12,R26
std y+13,R27
.dbline 731
; u_char i;
;
; /*
; * Initialize the uart device.
; */
; NutRegisterDevice(&DEV_DEBUG, 0, 0);
clr R2
std y+0,R2
clr R18
clr R19
ldi R16,<_devDebug0
ldi R17,>_devDebug0
xcall _NutRegisterDevice
.dbline 732
; freopen(DEV_DEBUG_NAME, "w", stdout);
lds R2,___iob+2
lds R3,___iob+2+1
std y+1,R3
std y+0,R2
ldi R18,<L152
ldi R19,>L152
ldi R16,<L151
ldi R17,>L151
xcall _freopen
.dbline 733
; _ioctl(_fileno(stdout), UART_SETSPEED, &baud);
lds R16,___iob+2
lds R17,___iob+2+1
xcall __fileno
movw R24,R28
adiw R24,10
std y+1,R25
std y+0,R24
ldi R18,257
ldi R19,1
xcall __ioctl
.dbline 734
; NutSleep(200);
ldi R16,200
ldi R17,0
ldi R18,0
ldi R19,0
xcall _NutSleep
.dbline 735
; printf("\n\nNut/OS %s HTTP Daemon...", NutVersionString());
xcall _NutVersionString
movw R18,R16
ldi R16,<L155
ldi R17,>L155
xcall _printf_M
.dbline 747
;
; #ifdef NUTDEBUG
; NutTraceTcp(stdout, 0);
; NutTraceOs(stdout, 0);
; NutTraceHeap(stdout, 0);
; NutTracePPP(stdout, 0);
; #endif
;
; /*
; * Register Ethernet controller.
; */
; if (NutRegisterDevice(&DEV_ETHER, 0, 0)) {
clr R2
std y+0,R2
clr R18
clr R19
ldi R16,<_devEth0
ldi R17,>_devEth0
xcall _NutRegisterDevice
movw R10,R16
cpi R16,0
cpc R16,R17
breq L156
X41:
.dbline 747
.dbline 748
; puts("Registering device failed");
ldi R16,<L158
ldi R17,>L158
xcall _puts_M
.dbline 749
; }
L156:
.dbline 751
;
; printf("Configure %s...", DEV_ETHER_NAME);
ldi R18,<L160
ldi R19,>L160
ldi R16,<L159
ldi R17,>L159
xcall _printf_M
.dbline 752
; if (NutNetLoadConfig(DEV_ETHER_NAME)) {
ldi R16,<L160
ldi R17,>L160
xcall _NutNetLoadConfig
movw R10,R16
cpi R16,0
cpc R16,R17
brne X48
xjmp L161
X48:
X42:
.dbline 752
.dbline 753
; u_char mac[] = MY_MAC;
ldi R24,<L163
ldi R25,>L163
movw R30,R28
adiw R30,14
ldi R16,7
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblkx
.dbline 755
;
; printf("initial boot...");
ldi R16,<L164
ldi R17,>L164
xcall _printf_M
.dbline 759
; #ifdef USE_DHCP
; if (NutDhcpIfConfig(DEV_ETHER_NAME, mac, 60000))
; #endif
; {
.dbline 760
; u_long ip_addr = inet_addr(MY_IPADDR);
ldi R16,<L165
ldi R17,>L165
xcall _inet_addr
std y+21,R16
std y+22,R17
std y+23,R18
std y+24,R19
.dbline 761
; u_long ip_mask = inet_addr(MY_IPMASK);
ldi R16,<L166
ldi R17,>L166
xcall _inet_addr
std y+25,R16
std y+26,R17
std y+27,R18
std y+28,R19
.dbline 762
; u_long ip_gate = inet_addr(MY_IPGATE);
ldi R16,<L167
ldi R17,>L167
xcall _inet_addr
std y+29,R16
std y+30,R17
std y+31,R18
std y+32,R19
.dbline 764
;
; printf("No DHCP...");
ldi R16,<L168
ldi R17,>L168
xcall _printf_M
.dbline 765
; if (NutNetIfConfig(DEV_ETHER_NAME, mac, ip_addr, ip_mask) == 0) {
ldd R2,y+25
ldd R3,y+26
ldd R4,y+27
ldd R5,y+28
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
ldd R2,y+21
ldd R3,y+22
ldd R4,y+23
ldd R5,y+24
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
movw R18,R28
subi R18,242 ; offset = 14
sbci R19,255
ldi R16,<L160
ldi R17,>L160
xcall _NutNetIfConfig
movw R10,R16
cpi R16,0
cpc R16,R17
brne L169
X43:
.dbline 765
.dbline 767
; /* Without DHCP we had to set the default gateway manually.*/
; if(ip_gate) {
ldd R2,y+29
ldd R3,y+30
ldd R4,y+31
ldd R5,y+32
clc
tst R2
cpc R3,R2
cpc R4,R2
cpc R5,R2
breq L171
X44:
.dbline 767
.dbline 768
; printf("hard coded gate...");
ldi R16,<L173
ldi R17,>L173
xcall _printf_M
.dbline 769
; NutIpRouteAdd(0, 0, ip_gate, &DEV_ETHER);
ldi R24,<_devEth0
ldi R25,>_devEth0
std y+9,R25
std y+8,R24
ldd R2,y+29
ldd R3,y+30
ldd R4,y+31
ldd R5,y+32
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
std y+0,R24
std y+1,R25
std y+2,R26
std y+3,R27
ldi R16,0
ldi R17,0
ldi R18,0
ldi R19,0
xcall _NutIpRouteAdd
.dbline 770
; }
L171:
.dbline 771
; puts("OK");
ldi R16,<L59
ldi R17,>L59
xcall _puts_M
.dbline 772
; }
xjmp L162
L169:
.dbline 773
; else {
.dbline 774
; puts("failed");
ldi R16,<L174
ldi R17,>L174
xcall _puts_M
.dbline 775
; }
.dbline 776
; }
.dbline 777
; }
xjmp L162
L161:
.dbline 778
; else {
.dbline 787
; #ifdef USE_DHCP
; if (NutDhcpIfConfig(DEV_ETHER_NAME, 0, 60000)) {
; puts("failed");
; }
; else {
; puts("OK");
; }
; #else
; if (NutNetIfConfig(DEV_ETHER_NAME, 0, 0, confnet.cdn_ip_mask)) {
lds R4,_confnet+20+2
lds R5,_confnet+20+2+1
lds R2,_confnet+20
lds R3,_confnet+20+1
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
ldi R24,0
ldi R25,0
ldi R26,0
ldi R27,0
std y+0,R24
std y+1,R25
std y+2,R26
std y+3,R27
clr R18
clr R19
ldi R16,<L160
ldi R17,>L160
xcall _NutNetIfConfig
movw R10,R16
cpi R16,0
cpc R16,R17
breq L175
X45:
.dbline 787
.dbline 788
; puts("failed");
ldi R16,<L174
ldi R17,>L174
xcall _puts_M
.dbline 789
; }
xjmp L176
L175:
.dbline 790
; else {
.dbline 791
; puts("OK");
ldi R16,<L59
ldi R17,>L59
xcall _puts_M
.dbline 792
; }
L176:
.dbline 794
; #endif
; }
L162:
.dbline 795
; printf("%s ready\n", inet_ntoa(confnet.cdn_ip_addr));
lds R18,_confnet+16+2
lds R19,_confnet+16+2+1
lds R16,_confnet+16
lds R17,_confnet+16+1
xcall _inet_ntoa
movw R10,R16
movw R18,R10
ldi R16,<L178
ldi R17,>L178
xcall _printf_M
.dbline 804
;
; #ifdef USE_DISCOVERY
; NutRegisterDiscovery((u_long)-1, 0, DISF_INITAL_ANN);
; #endif
;
; /*
; * Register our device for the file system.
; */
; NutRegisterDevice(&MY_FSDEV, 0, 0);
clr R2
std y+0,R2
clr R18
clr R19
ldi R16,<_devUrom
ldi R17,>_devUrom
xcall _NutRegisterDevice
.dbline 834
;
; #ifdef MY_BLKDEV
; /* Register block device. */
; printf("Registering block device '" MY_BLKDEV_NAME "'...");
; if (NutRegisterDevice(&MY_BLKDEV, 0, 0)) {
; puts("failed");
; for (;;);
; }
; puts("OK");
;
; /* Mount partition. */
; printf("Mounting block device '" MY_BLKDEV_NAME ":1/" MY_FSDEV_NAME "'...");
; if (_open(MY_BLKDEV_NAME ":1/" MY_FSDEV_NAME, _O_RDWR | _O_BINARY) == -1) {
; puts("failed");
; for (;;);
; }
; puts("OK");
; #endif
;
; #ifdef MY_HTTPROOT
; /* Register root path. */
; printf("Registering HTTP root '" MY_HTTPROOT "'...");
; if (NutRegisterHttpRoot(MY_HTTPROOT)) {
; puts("failed");
; for (;;);
; }
; puts("OK");
; #endif
;
; NutRegisterCgiBinPath("cgi-bin/;user/cgi-bin/;admin/cgi-bin/");
ldi R16,<L180
ldi R17,>L180
xcall _NutRegisterCgiBinPath
.dbline 841
;
;
; /*
; * Register our CGI sample. This will be called
; * by http://host/cgi-bin/test.cgi?anyparams
; */
; NutRegisterCgi("test.cgi", ShowQuery);
ldi R18,<PL_ShowQuery
ldi R19,>PL_ShowQuery
ldi R16,<L181
ldi R17,>L181
xcall _NutRegisterCgi
.dbline 849
;
; /*
; * Register a cgi included by the ssi demo. This will show how dynamic
; * content is included in a ssi page and how the request parameters for
; * a site are passed down to the included cgi.
; */
;
; NutRegisterCgi("ssi-demo.cgi", SSIDemoCGI);
ldi R18,<PL_SSIDemoCGI
ldi R19,>PL_SSIDemoCGI
ldi R16,<L182
ldi R17,>L182
xcall _NutRegisterCgi
.dbline 855
;
; /*
; * Register some CGI samples, which display interesting
; * system informations.
; */
; NutRegisterCgi("threads.cgi", ShowThreads);
ldi R18,<PL_ShowThreads
ldi R19,>PL_ShowThreads
ldi R16,<L183
ldi R17,>L183
xcall _NutRegisterCgi
.dbline 856
; NutRegisterCgi("timers.cgi", ShowTimers);
ldi R18,<PL_ShowTimers
ldi R19,>PL_ShowTimers
ldi R16,<L184
ldi R17,>L184
xcall _NutRegisterCgi
.dbline 857
; NutRegisterCgi("sockets.cgi", ShowSockets);
ldi R18,<PL_ShowSockets
ldi R19,>PL_ShowSockets
ldi R16,<L185
ldi R17,>L185
xcall _NutRegisterCgi
.dbline 862
;
; /*
; * Finally a CGI example to process a form.
; */
; NutRegisterCgi("form.cgi", ShowForm);
ldi R18,<PL_ShowForm
ldi R19,>PL_ShowForm
ldi R16,<L186
ldi R17,>L186
xcall _NutRegisterCgi
.dbline 868
;
; /*
; * Protect the cgi-bin directory with
; * user and password.
; */
; NutRegisterAuth("admin", "root:root");
ldi R18,<L188
ldi R19,>L188
ldi R16,<L187
ldi R17,>L187
xcall _NutRegister
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -