From 85212b95f478baad47f366429ecb1252122287b3 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Mon, 3 Jan 2011 02:51:43 +0000 Subject: [PATCH] git-svn-id: http://svn.code.sf.net/p/netboot65/code@299 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/bails.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/inc/version.i | 2 +- client/ip65/cifs.s | 463 +++++++++++++++++++++++++++++++- client/ip65/ip.s | 17 +- client/test/Makefile | 7 +- client/test/test_cifs.s | 31 +-- client/wiznet/kipperwizdisk.d64 | Bin 174848 -> 174848 bytes dist/version_number.txt | 2 +- 9 files changed, 488 insertions(+), 34 deletions(-) diff --git a/client/basic/bails.d64 b/client/basic/bails.d64 index 319b598239e49e8e12d37d0f114970a6a263411f..da8eaccb1fa09518757539c36bfde3fb7e4d15ce 100644 GIT binary patch delta 1893 zcma)7ZD><|Z zJs;0=o^#GUdTrTJ`hE`MJ{aKd_@GkyY-BF!gEb)C4)QNwfnUUV>KIf=KMwLs$Kctb zF0{J&^{sGdYa^x~WQrC(j;ZEHvCQA*iI_DNo0yqAXKq5P9w*LBo;4fLYDDFL-%Ga# z8<3rdO`I{OVh0=f#Bm5o7eaG4I^b%tl#Ft7Cmfb;MS10`F#BZvz67X-#G>3v!1{}? zK^aK(`*?XLObgqKoe*1oE2xOvhW%xh*~L6Y$$fD2w+at3}p?tQnO%-K+)mR#dJB z6{Sb{V1J^-m}HSL)qpD=%-#*8gDUGnz1ueJMBR@B*n@_P{Z|;e+bHg;kX2*KJ>P@L zl{nvo$yIpS^PAa;mLKCxM!gJ8QDbD!pk9uO9ya??1J;L%wqNhXhq0I*OiP&>y85*j zvp28yVdnZmKaxwj)Z-3x1SumydXGgsboS^*a zwXNLQQrp$58f^trst#EjvP~r=$mmPR_%K(Qz~whr~mN0t8ZaEdNiPF*k<8M6VY z#*W3}h$2zzE0qJ;oEjOy;_D?Wt`%4a?28iQVe@mJK%FE5|A9^}oq`tk`N<1>%PCmB zx^9rQjOwkUB-Bbwt{Wwtl&L*t6Zr?*~`TKr zZ`*CFmfV5Dd7E&~=AF0Y*=2goYHfm#2EiL|z?rkG5i_MTXY5eknWwaMY!e!q=3?~% zVlIH$fU;YxrXvFiB?l*YbL64qxwHk$g|t~(PY!iEtUYC$mr!#i#jM3_c~0oXSu;F= z`w>H?A5ktT>kj-L;rph+t5MlNEmUj1PD}RKw9PuSUPfl`7_(KQtwVaUZnTS+qm&C@ zMv-$tDx8v6P_^VD(G||P^BdDp6{H12`ZL-$?HaW|Z5mZIJpVV^ZO*oOHyM{3h+2@@IcNRY)$W5^qX^@o_BVv^(Ygdd=toD0D=s$LE7(b2CD)ebrLYOHw zfQ9*?^RR|@^+Km4m-0lf;MWJbBtO9uebCB}pNFwIGYrY6=epj6i}K_+oEw*#{sm@v BOho_y delta 2168 zcmb7Fe@qi+818pP*wmPo6s!t*Fu@@pDnBeB7|{t4GNJq^Ma9cPmY$h8;zD$Bu4t5H zF5d;SB`1G$V$sD<{Vten60`8%J7bNwn{LjSY*}WukU2^B4`xdi_I_6j7-N<-O)tIg z{qa1{``&Z?_ZRl#_X~2knz)Sjs!6W&X2)2hnq(2_bkO)}Gx??ZbdcZeG4J)zGa-E_ z#B!rM=myX?0{^bZ{Juv%);YSBZH)HF_qVd_D9E*StV+H+!&|`g8xLwoZ%q}%W~`K{ zPeTg-BxL=~&xFjO(8&t}pYu&%`rzcqzuCX6$$(;pKWx(Lu$-7d2z{q`rjJ|q1Fh~?8(Y=N_Nb;`jAn8Q99WXrg zWLU&rt0$pF{Q-rQn{V~Wm{ia}KEr^qSOeKE6@S|%AMKP$K#~9P4@y2oZf_m^i?3B< z#Bw(M&=yO@i?%1`#!FgYtg4YbB*uwW^1gBJ5?Ntnw~=eN!e@|eIf!<*>T#{r_6@2htUq|KCGu7W)AsiI~K~YQ!^k&;;RxBCZByokw@&9 z+kq7@nzj2BysTvHSk3n&6B>#=!1xQ6$d1nLAa?mRPL%o3AgFwrGRs-D(^5jlh19~mUCxXaEKCutc4+!*(Ot>X4 z#2+{H1r^!?y5A1o1$r~!>|R<3&q_s;LZC$ub&iKyA(9Q_)ey;nTdqI(E-;&cE(3iz z*sBM01?X8ISMBCOPzmh>WU2>*K=aUWFT^A(ACLYBK>X32POu(K1p!lHX)b5e@158Y zAss{HK1BpOEL;s%9fh!1TSlS|`G_CkAdW4F<0%S=QO79-PF>b@t6`k9?j!%H8`IKEe3sE0+r(;Edjb7 zu8vqlxjGV0ohpHw)-*2$a~&k&5_}f3Q?>?JCkTR+&7YTmx!xw_#pxveB}hH1PyqT` zF|8Md;GmX0g5x#k{LYlDmmhpu@_17`uX`@$u85$99BQKN%#txV^RRSmmaLMO&^_;Y**&&z&NCbAlr5|Z%hD_mEmi=cqiCEy z6&(~UQ&E^}HqHGC=w&b1)Ru(tzSO3gs&*S6UnYHHJU}8##v0!yU%Ee>IYh>04oRf+ EU#e!&NdN!< diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index 524b33b5d4df6bf789cb03cfa607b290bf65856c..c32d536f1f384816b64c91c1889424fc6c7d696d 100644 GIT binary patch delta 2328 zcmbtWZA@Eb6zBBn_9| z`<(Nf=bZCCmqS;VAHvTCa=DVU%d?dv*Zg(Q^e>g<3$m&u1hjldfC%)ZI$G|LKi^J@ zlQx3%gnWBD;xfJRBUR+}8V5M1>L)L17UxfOiitUZ6~N?dv|3xKm&JNDOIvzSOId~?Hn;1NexNwR5S~YpL)Bw=~b@Z+~Vwrb|&hDq_+8yVl z7e*W~ZW<|oI5FNg*l0@E(Hc^f?*M7xStMuN9)LNrNxm|EK-%R-|1d_TvYXd=gWvhrr)<1uHNiDWMJ zcAla8?}%S`aU-x|kT!ur zm<_NIZNQ3vl>#dRn%u(5L3$GCUmm)>g`U|PuquNL4hjmHvw?oodDA1XCXkv9Xah)% zpqL+=2A>sjiuJ(qAY_?o0e>(9W=bKr1}@uvRU07O2+R&r8mLVWZU(j*q;#N>ZnX_W z!dyU)?3G$!X)US^>?CT|^6}x%t)O4K;sWj4`8L3yXo}6^6g=A>0AKx=Ouo0h{2JA?wPhAa6@~P>-m@i}*H_fbp<8S*ETTvlsNs39g%w)sy zQQxJ@w(E+E$v(AEe#}iAE7n7nn9hcMQ)-^P%T3nWkYfn5-=&{+s+?NxcN6MgShmrS zXlxL=DX)&}wI|^gswc$oN#l{)4B;lALWj<82gUGM>~vXO4+zp6HhNR6R;7NvGMKA_rQ@E3(-| zTJRr(T`ux?z6UhRyc<+EggwCC@k#IcaFJf_)vf%TXuluJ5+AcaBnMoi*zX3quP5L@ zPh(vmb#v!dyCB>RVo8A9ptFsUTO43j-sEqU1(+g)df8~d^j^PWqLv<9YmX7?fhf^) zVi|74e|VB>hPNYja}WADzhJ70TV0vZIDD%c&i0{2d?3!bK}*KhoJa0xBTt#_%j7^C f*Vc|NPy2E?&`!M5z1?JO>QMiFGTp!5JXHHP%S9O2 delta 2329 zcmbtVYfKbZ6y7__qrU2{0bEh*)rwXH@d1h;4@L38HsJDHKpm6TGD({?8dKwsuB`!5 z;7+kL9jz|VMF?ZP+cla{)6kq6Yg{SKBu!1zf30m}Vx`lVYD}8gb7yxE`bdA2Y?$4- z-#Op;&N=hViQCgp;O7dtRX`ltXaQLw9jYJxwSZhFv#WwYbGLR8nZCB2e&3*7Dm7*8`O!j@S;AOo9tXsV!oi;Fb*}v%YCVYWX*P1y+MJq z!if|+)>lGi*`-FW_HijWA_cwL(rqLxjeCc0ZzDwnzi4S?q)z}oDI?7@f?iqA4c$0O z5xHsy=@H1$9i)v2MD;GRE;Z=QlOqYnvoy&Qo)%R2%f|%v>@IRzB+K1Rd?IFWH&Lam z2eq`ffj;k*>7tr0DNm-a*MuMQE+s;6D35C+Nq9N6FXF_@3h(fN7s+=-`>2N0Xi_aX zBsqz8xR#XT_&=*9&n-;_!#2EPODo?=lKZ5nF`}w?2`G1%2)~* zi8^7a+VwiJS(EC8HoJDXo~WASC42qyt80Pfg1P|^GTQ^H$AVUXS_!%oOY{$E@NB&xSp_T;g7y)A6$BQ- zNC5;E!!5^eyaGa%z~+IP4tx)UJiz9Ix&Ua?UhV~juzEn1YMtoJq*}NOB9gHTkAA5G z^UhcGV0=671q_KKJM8Y6jmU`FM8ooA0k#>q5qd!o{4MyH=p<;Pfod!V>nO%LoQaRH zdx*1}$yTUK){BD>$6|L7t~)I$K_N!9#6-1}LLg&8(Y^mrjHaw_80BV+J9~($BLYw8oO; zLP^#yXA(qZ#d53wb)}fs{~Ol~Yjv!S%6hqIs2{s8I*YbNw^f_*5gJ1J7n7u)Z<;(p zF*z}eiNbMOD%mCSZKi!B1H@x~%kh(5$uu8duQhwf@)@hZrKGTS z-w@B#KJbuq2ePzb{zvrF8ZOAS>mEY=6YJI;RIClcS4dnhZXrLbgw9z9+ykLKK;>#v z+zu$Ap6KmL2vx*y<02+x4k>0P-LfydjCUxJ9Ai4~R3dW>=QDQqHFN@ooBp=2h9?YP z6Zw9ieGM`n5|A8>>ax2#tlgH3B|`7jUL{ZpDDI(N8trQAanS9UNn~^&A-ZJe{&=(% z)~^K0K?Ls*!RAEpjtO-}1#eecv>&R7%fAT*&a-?lk_Y;&RIY)UN*mhZOc=d>v`KczK^9FuOPwff%@*FTz;(HWV>~LR~btnE4 z?UGEp`*WH1C}X)`G~hhOHh|%Y+Fp{VhsaO+H`1*Hs;oxvTnKFdW;r20r=U0Dg#F9| zRzKq^Q%L!%%OKN2^r%PNIsL4{7Jwj`4_F^V&+JjqJkc#>9NVP8 joWJ=~any1D)t}r=dx!UXN&2j|;|Iy`@q<$9He&k|ifJH1 diff --git a/client/inc/version.i b/client/inc/version.i index 681cfc0..27e2123 100644 --- a/client/inc/version.i +++ b/client/inc/version.i @@ -1 +1 @@ -.byte "1.0.35" +.byte "1.0.36" diff --git a/client/ip65/cifs.s b/client/ip65/cifs.s index 3415a0b..b72f49f 100644 --- a/client/ip65/cifs.s +++ b/client/ip65/cifs.s @@ -10,9 +10,50 @@ .include "../inc/kipper_constants.i" .endif +DEFAULT_CIFS_CMD_BUFFER = $2800 .export cifs_l1_encode .export cifs_l1_decode -.importzp copy_src +.export cifs_start + +.import copymem +.importzp copy_src +.importzp copy_dest + +.import cfg_ip +.import output_buffer +.importzp udp_data +.import udp_send +.import udp_inp +.importzp udp_data +.import udp_send_dest +.import udp_send_src_port +.import udp_send_dest_port +.import udp_send_len +.importzp ip_src +.import ip_data +.import ip_inp +.import tcp_listen +.import tcp_callback +.import tcp_inbound_data_length +.import tcp_inbound_data_ptr +.import ip65_process +.import udp_add_listener +.import udp_callback + +nbns_txn_id = 0 +nbns_opcode=2 +nbns_flags_rcode=3 +nbns_qdcount=4 +nbns_ancount=6 +nbns_nscount=8 +nbns_arcount=10 +nbns_question_name=12 +nbns_service_type=43 +nbns_ttl=56 +nbns_additional_record_flags=62 +nbns_my_ip=64 +nbns_registration_message_length=68 + ;given an ASCII (or PETSCII) hostname, convert to ;canonical 'level 1 encoded' form. @@ -99,13 +140,428 @@ cifs_l1_decode: ldax #hostname_buffer rts - rts - +;start a CIFS (SMB) server process, and advertise the specified hostname on the local LAN +; +;inputs: +;AX = ptr to hostname to be used +;outputs: +; none +cifs_start: + + ;save the hostname in 'raw' form + stax copy_src + ldax #raw_local_hostname + stax copy_dest + ldax #$0f + stx raw_local_hostname+15 + jsr copymem + + ;set up callbacks + ldax #nbns_callback + stax udp_callback + ldax #137 + jsr udp_add_listener + + ldax #nbns_callback + stax udp_callback + ldax #137 + jsr udp_add_listener + + ldax #raw_local_hostname + jsr cifs_l1_encode + ldx #0 +@copy_hostname_loop: + lda hostname_buffer,x + sta local_hostname,x + inx + cpx #$21 + bmi @copy_hostname_loop + + jsr cifs_advertise_hostname + jsr cifs_advertise_hostname + + + ldax #nb_session_callback + stax tcp_callback +@listen: + + ldax #-4 ;start at -4, to skip the NBT header length + stax cifs_cmd_length + + + ldax cifs_cmd_buffer + stax cifs_cmd_buffer_ptr + ldax #139 + stx connection_closed + + jsr tcp_listen + +@loop: + jsr ip65_process + lda connection_closed + beq @loop + + jmp @listen + rts + + +;broadcast a Name Registration Request message to the local LAN +cifs_advertise_hostname: + + + ;start with a template registration request message + + ldx #nbns_registration_message_length +@copy_message_loop: + lda workgroup_registration_request,x + sta output_buffer,x + dex + bpl @copy_message_loop + + + ; advertise the 'server' service for own hostname + ;overwrite the hostname in 'DNS compressed form' + ;we assume this hostname ends with <20> + lda #$20 ;indicates what follows is a netbios name + sta output_buffer+nbns_question_name + + ldx #0 +@copy_hostname_loop: + lda local_hostname,x + sta output_buffer+nbns_question_name+1,x + inx + cpx #$21 + bmi @copy_hostname_loop + + jsr @send_nbns_message + + + ;now send the host announcement + ldax #host_announce_message + stax copy_src + ldax #output_buffer + stax copy_dest + ldax #host_announce_message_length + jsr copymem + + + ;copy our encode hostname to the host announcment + ldax #local_hostname + stax copy_src + ldax # output_buffer+host_announce_hostname + stax copy_dest + ldax #$20 + jsr copymem + + ;copy our encode hostname to the host announcment + ldax #raw_local_hostname + stax copy_src + ldax # output_buffer+host_announce_servername + stax copy_dest + ldax #$10 + jsr copymem + + +;copy the local IP address to the 'sender' field of the host announcment + ldx #03 +@copy_sending_address_loop: + lda cfg_ip,x + sta output_buffer+host_announce_my_ip,x + dex + bpl @copy_sending_address_loop + + + ldax #138 + stax udp_send_dest_port + stax udp_send_src_port + + ldax #host_announce_message_length + stax udp_send_len + + ldax #output_buffer + jsr udp_send + rts + + +@send_nbns_message: +;copy the local IP address + ldx #03 +@copy_my_address_loop: + lda cfg_ip,x + sta output_buffer+nbns_my_ip,x + dex + bpl @copy_my_address_loop + + ;send to the broadcast address + lda #$ff + ldx #03 +@copy_broadcast_address_loop: + sta udp_send_dest,x + dex + bpl @copy_broadcast_address_loop + + ldax #137 + stax udp_send_dest_port + stax udp_send_src_port + + ldax #nbns_registration_message_length + stax udp_send_len + + ldax #output_buffer + jsr udp_send + + + rts + + + +nbns_callback: + + lda udp_inp+udp_data+nbns_opcode + and #$f8 ;mask the lower three bits + beq @name_request + rts +@name_request: + + ;this is a NB NAME REQUEST. + ;is it looking for our local hostname? + ldax #udp_inp+udp_data+nbns_question_name+1 + stax copy_src + ldy #0 +@cmp_loop: + lda (copy_src),y + cmp local_hostname,y + bne @not_us + iny + cpy #30 + bne @cmp_loop + + ;this is a request for our name! + ;we will overwrite the input message to make our response + + ;set the opcode & flags to make this a response + lda #$85 + ldx #$00 + sta udp_inp+udp_data+nbns_opcode + stx udp_inp+udp_data+nbns_opcode+1 + + ;set the question count to 0 + stx udp_inp+udp_data+nbns_qdcount+1 + + ;set the answer count to 1 + inx + stx udp_inp+udp_data+nbns_ancount+1 + +;set the sender & recipients IP address + ldx #03 +@copy_address_loop: + lda ip_inp+ip_src,x + sta udp_send_dest,x + lda cfg_ip,x + sta udp_inp+udp_data+nbns_my_ip-6,x + dex + bpl @copy_address_loop + + + +;set the answers + + ldax #nbns_ttl_etc + stax copy_src + ldax #udp_inp+udp_data+nbns_ttl-6 + stax copy_dest + ldax #08 + jsr copymem + + ldax #137 + stax udp_send_dest_port + stax udp_send_src_port + + ldax #nbns_registration_message_length-6 + stax udp_send_len + + ldax #udp_inp+udp_data + jmp udp_send + + +@not_us: + rts + + +nb_session_callback: + + lda tcp_inbound_data_length+1 + cmp #$ff + bne @not_eof + inc connection_closed +@done: + rts +@not_eof: + +;copy this chunk to our input buffer + ldax cifs_cmd_buffer_ptr + stax copy_dest + ldax tcp_inbound_data_ptr + stax copy_src + ldax tcp_inbound_data_length + jsr copymem + +;increment the pointer into the input buffer + clc + lda cifs_cmd_buffer_ptr + adc tcp_inbound_data_length + sta cifs_cmd_buffer_ptr + lda cifs_cmd_buffer_ptr+1 + adc tcp_inbound_data_length+1 + sta cifs_cmd_buffer_ptr+1 + +;increment the cmd buffer length + clc + lda cifs_cmd_length + adc tcp_inbound_data_length + sta cifs_cmd_length + lda cifs_cmd_length+1 + adc tcp_inbound_data_length+1 + sta cifs_cmd_length+1 + +;have we got a complete message? + ldax cifs_cmd_buffer + stax copy_src + ldy #3 + lda (copy_src),y + cmp cifs_cmd_length + bne @not_got_full_message + dey + lda (copy_src),y + cmp cifs_cmd_length+1 + bne @not_got_full_message + + ;we have a complete message! + inc $d020 + @not_got_full_message: + .import print_hex + lda cifs_cmd_length+1 + jsr print_hex + lda cifs_cmd_length + jsr print_hex + rts + + +.rodata + +host_announce_message: + .byte $11 ;message type = direct group datagram + .byte $02 ;no more fragments, this is first fragment, node type = B + .byte $ab,$cd ;txn id +host_announce_my_ip=*- host_announce_message + .byte $0,0,0,0 ;source IP + .byte $0,138 ;source port + .byte $00,<(host_announce_message_length-4) ;datagram length + .byte $00,$00 ;packet offset + .byte $20 ;hostname length +host_announce_hostname=*- host_announce_message + .res 32 ;hostname + .byte $0 ;nul at end of hostname + ;now WORKGROUP<1D> encoded + + .byte $20, $46, $48, $45, $50, $46, $43, $45, $4c, $45, $48, $46, $43, $45, $50, $46 + .byte $46, $46, $41, $43, $41, $43, $41, $43, $41, $43, $41, $43, $41, $43, $41, $42, $4E, $00 + + .byte $ff,"SMB" ;Server Message Block header + .byte $25 ;SMB command = Transaction + .byte $00 ;error class = success + .byte $00 ;reserved + .byte $00,$00 ;no error + .byte $00 ;flags + .byte $00,$00 ;flags2 + .byte $00,$00 ;PID high + .byte $00,$00,$00,$00,$00,$00,$00,$00 ;Signature + .byte $00,$00 ;reserved + .byte $00,$00 ;tree ID + .byte $00,$00 ;process ID + .byte $00,$00 ;user ID + .byte $00,$00 ;multiplex ID + .byte $11 ;txn word count + .byte $00,$00 ;txn paramater count + .byte $21,$00 ;txn total data count + .byte $00,$00 ;txn max paramater count + .byte $00,$00 ;txn max data count + .byte $00 ;txn max setup count + .byte $00 ;reserved + .byte $00,$00 ;flags + .byte $ed,$03,$00,$00 ;timeout = 1 second + .byte $00,$00 ;reserved + .byte $00,$00 ;paramater count + .byte $00,$00 ;paramater offset + .byte $21,$00 ;data count + .byte $56,$00 ;data offset + .byte $03 ;setup count + .byte $00 ;reserved + + .byte $01,$00 ;opcode = WRITE MAIL SLOT + .byte $00,$00 ;priority 0 + .byte $02,$00 ;class = unreliable & broadcast + .byte $32,$00 ;byte count + .byte "\MAILSLOT\BROWSE", 0 + .byte $01 ;command - HOST ANNOUNCEMENT + .byte $0 ;update count 0 + .byte $80,$fc,03,00 ;update period + host_announce_servername =*-host_announce_message + .res 16 + .byte $01 ;OS major version + .byte $64 ;OS minor version + .byte $03,$02,$0,$0 ;advertise as a workstation, server & print host + .byte $0F ;browser major version + .byte $01 ;browser minor version + .byte $55,$aa ;signature + .byte $0 ;host comment + host_announce_message_length=*-host_announce_message + + +workgroup_registration_request: + + .byte $0c, $64 ;txn ID + .byte $29,$10 ;Registration Request opcode & flags + .byte $00,$01 ;questions = 1 + .byte $00,$00 ;answers = 0 + .byte $00,$00 ;authority records = 0 + .byte $00,$01 ;additional records = 1 + ;now WORKGROUP<00> encoded + .byte $20, $46, $48, $45, $50, $46, $43, $45, $4c, $45, $48, $46, $43, $45, $50, $46 + .byte $46, $46, $41, $43, $41, $43, $41, $43, $41, $43, $41, $43, $41, $43, $41, $41, $41, $00 + + .byte $00,$20 ;question_type = NB + .byte $00,$01 ;question_class = IN + .byte $c0,$0c ;additional record name : ptr to string in QUESTION NAME + .byte $00,$20 ;question_type = NB + .byte $00,$01 ;question_class = IN +nbns_ttl_etc: + .byte $00,$00,$01,$40 ; TTL = 64 seconds + .byte $00,$06 ;data length + .byte $00,$00 ;FLAGS = B-NODE, UNIQUE NAME + .bss hostname_buffer: .res 33 + + +local_hostname: + .res 33 + +raw_local_hostname: + .res 16 + hi_nibble: .res 1 + +connection_closed: .res 1 + +cifs_cmd_buffer_ptr: .res 2 +cifs_cmd_length: .res 2 +.data + +cifs_cmd_buffer: .word DEFAULT_CIFS_CMD_BUFFER + ;-- LICENSE FOR cifs.s -- ; The contents of this file are subject to the Mozilla Public License ; Version 1.1 (the "License"); you may not use this file except in @@ -124,3 +580,4 @@ hi_nibble: .res 1 ; Portions created by the Initial Developer are Copyright (C) 2009 ; Jonno Downes. All Rights Reserved. ; -- LICENSE END -- + diff --git a/client/ip65/ip.s b/client/ip65/ip.s index 9275fb8..80c218b 100644 --- a/client/ip65/ip.s +++ b/client/ip65/ip.s @@ -232,14 +232,23 @@ checkaddr: @ok: clc rts @broadcast: +;jonno 2011-01-2 +;previously this was just checking for 255.255.255.255 +;however it is also possible to do a broadcast to a specific subnet, e.g. 10.5.1.255 +;this is particularly common with NETBIOS over TCP +;we really should use the netmask, but as a kludge, just see if last octet is 255. +;this will work on a /24 network +; inc ip_broadcast - lda ip_inp + ip_dest ; check for broadcast - and ip_inp + ip_dest + 1 - and ip_inp + ip_dest + 2 - and ip_inp + ip_dest + 3 +; lda ip_inp + ip_dest ; check for broadcast +; and ip_inp + ip_dest + 1 +; and ip_inp + ip_dest + 2 +; and ip_inp + ip_dest + 3 + lda ip_inp + ip_dest +3 ; check for broadcast cmp #$ff beq @ok inc bad_addr + bne :+ inc bad_addr + 1 : sec diff --git a/client/test/Makefile b/client/test/Makefile index 81b342e..8c1c6c8 100644 --- a/client/test/Makefile +++ b/client/test/Makefile @@ -34,7 +34,7 @@ all: \ testdottedquad.prg\ test_tcp.prg \ test_xmodem.prg \ - test_xmodem.d64 \ +# test_xmodem.d64 \ test_httpd.prg \ test_parser.prg \ test_ping.prg \ @@ -72,7 +72,6 @@ test_xmodem.o: test_xmodem.s ../ip65/xmodem.s $(AS) $(AFLAGS) $< - test_xmodem.prg: test_xmodem.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg $(LD) -m test_xmodem.map -vm -C ../cfg/c64prg.cfg -o test_xmodem.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) @@ -90,6 +89,10 @@ test_ping.prg: test_ping.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64pr test_wiznet.prg: test_wiznet.o $(C64WIZNETLIB) $(IP65WIZNETLIB) $(INCFILES) ../cfg/c64prg.cfg $(LD) -m test_wiznet.map -vm -C ../cfg/c64prg.cfg -o test_wiznet.prg $(AFLAGS) $< $(IP65WIZNETLIB) $(C64WIZNETLIB) cp test_wiznet.prg ../../server/boot/autoexec.prg + + +test_cifs.prg: test_cifs.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_cifs.map -vm -C ../cfg/c64prg.cfg -o test_cifs.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) %.pg2: %.o $(IP65LIB) $(APPLE2PROGLIB) $(INCFILES) ../cfg/a2bin.cfg diff --git a/client/test/test_cifs.s b/client/test/test_cifs.s index 89961f2..528d4ab 100644 --- a/client/test/test_cifs.s +++ b/client/test/test_cifs.s @@ -7,6 +7,7 @@ .import cfg_get_configuration_ptr .import cifs_l1_encode .import cifs_l1_decode + .import cifs_start .import __CODE_LOAD__ .import __CODE_SIZE__ @@ -40,10 +41,8 @@ basicstub: init: ; jsr print_cr -; jsr print_ip_config -; init_ip_via_dhcp -; jsr overwrite_with_hardcoded_dns_server -; jsr print_ip_config + init_ip_via_dhcp + jsr print_ip_config ldax #hostname_1 jsr do_encoding_test @@ -53,16 +52,9 @@ init: ldax #hostname_3 jsr do_encoding_test - - ldax #hostname_4 - jsr do_encoding_test - - ldax #hostname_5 - jsr do_encoding_test - - ldax #hostname_6 - jsr do_encoding_test - + + ldax #cifs_hostname + jsr cifs_start jmp exit_to_basic @@ -101,15 +93,8 @@ hostname_2: hostname_3: .byte "HOSTNAMEWITHLOTSOFCHARSINNAME",0 ;this should be another CNAME -hostname_4: - .byte "FOO.BAR.BOGUS",0 ;this should fail - -hostname_5: ;this should work (without hitting dns) - .byte "111.22.3.4",0 - -hostname_6: ;make sure doesn't get treated as a number - .byte "3COM.COM",0 - +cifs_hostname: + .byte "KIPPERCIFS",0 sample_msg: .byte $ff, $ff, $ff, $ff, $ff, $ff, $f8, $1e, $df, $dc, $47, $a1, $08, $00, $45, $00 diff --git a/client/wiznet/kipperwizdisk.d64 b/client/wiznet/kipperwizdisk.d64 index 2428a760b66ccc5f8b0b1f615e423d599e4186d3..cd4de3b2272bf7262c8bee20d42090c908c43fb0 100644 GIT binary patch delta 3182 zcmZuzeNa@_72ms0a7D!>VqA&B6+febD1un4lBkK8)uf7=58FJoNn91;x0x!UD7ZoH zidK1$h`xOW<*mLAR3kxW?Hg;iE>+H({*mF2+GeIn>Lg*aeoaK3q36Cww6SHDd++(( zbAIRCbI!fHyS_-+g`aa|&xAOe;=baOn&U~j6qrC7?H#gIm_f!kI%Id^ZhBdk_GFN0 z9KDo5L_X6@Qk~Kv%LnOzUDZTnHql2!syC@emCq^ew`G#l5gjrj{Bz0go>Ha?EL&G2 zN*NuH&>^cfMWnZ6sqaMcTymygy@Gg$+@7sFBdCiO(k~{GZSyY6n$1BQ{G2*XIgg<< zj6ks=y$8!QF>RrMvbKPaTyutn=9}m&K1y8^Nx1{rdUH0ZB8wFF?LclZh+$*A-B~1k zffes1lcHU@fH)_M;p(zXgZo9*XYxLE=s!29gPF@v2jR(ixF#j0tauXHY{&VlNn{M4 z`%fl|($S}bN1$#*Dir#d!VXJFFk{<2nJmx51l5@!9WB#AUY^9l=7?YrF;Z^KRJWk7 z0g0&eh8d=`Ae*E~HH=aE#w z{zikecsfb97dNzQn@$>f^^?F?3+fy^dqkDS=93L}XF&QG=fryO9Rqc?Vq?d_Crc?W zkhEv(pw0O}?Ly2CJ_RtJ*Xi;=%d0PtQDg|;yv^M07!mo|zQkT6hn<$Eoap&$!SmO+ zw@I_fyM3JjQO)51x>aVAtrIL_4ly$VMF_p3*K_V4)tsJS9y^{hhioGjv*L*^0c{Cz z=D*G*lLtEkdCq=fq?eIMlRs+eqj>lxdP#nXth2nB&|@#JLywoaPkE8fyhL(ln!#vm zfYpJv7T8CitpoNkXhpz|LU6USKWH8>Qw7>@Aow=?ECnrTFO!RLrPIykRQo6wd#XO) z>eiep`iyzo&1>WwDASxOPkc4Gi7ykcv2~L;nD7L&?h^+SpMch_;@~q+KZwK60ZL9>?PGF^=I1{%+<_^$G zz?ocxXbEULp$PYOf>sJerCh1a_&b_)D0Uo!J0Mg7^XB6p{m{Sq`2je#?*Qk&#fUAI z5Zw+gPZs@Kw;0?G#$8l4gy?oDrI1j3^R*M#_(gxQkjx}0((Xbs5T_%BWV}7eCh3JF zZMXzin<=XWnKaXYx0$*ls-9%5kcHN*`a$Y--k0o4h&ZDTa4Gjf)#IjtY>xHjc+4FA z=BV&-9{vYbyO#&_frjA5jyb-Bq{g-TX%dn2C1j$A%X@zMO|84&gg(+3GOuzTZTHJ| zWZz)2Y=oZ8QAQu!L1p(pYxP}596rk~QQwV=20t#!aB+(xdvGzDFZSXBYw)Y3A`4iGsL)JfLNqGWoy4s>ay&W?2s{s`1v$>j!O^=Us?vfJ%C#KfO$dN1FmzZbi#`kICis<8ho>*DX?J7cs!HuCK z+#+<4TZDekEpB>^Z`*6o5bxqWp>9psix0Si6_4jNct6b6huMZO+Zbk>!qEo;CZ|i# zx`f~Zfo%@^wuEI{>j$co^%@z$1708YZ3wG`tqRlUPr8?$M2aqf7B^Opp|hIVL&5h* zpjUj_Lm~J`@J!|}+M=qaPOcEIma!Ap#K&sbSt|2^?*JB=_HRU@2d3!*AwptlCPPwh z;bzYtrz!oHx*I7_eOe>$I-HO#uk)cWud?%z5Lk_=-K$^k5{x*E@PQzD*5~HX47z#s zJ2W>ZYcef(jc(e!V%1t3Iy;M1I}5Qvfws_TxV~FA9HCF)`Yt_|(B|w^z32xkcLG?N z9y$e#>NHg^b&2d8_&$R(XgE~w#XGVUjn9GMXhq}CAeMUd+F3BZjh=P}$=)P0;c@4sl0y-zX3d7YhkVlA&HdP#B&3$&i$WUWn5ihQk~aK6??&UdxV z_^SOZ((*S$-KvDm7sC%h1!!UweqGl={k!4NEWLhZxXpP>s|PH%b_`f?SUV0_bWH{< zsG7vq@>bX!W?RB+O;}xtOnBurKYk-Puq#+mxKUHUGup+{sStG9!LNH delta 3163 zcmZuz4Nz3q72dlKa6yEnVqA&J3z+y5!5=_LtxEh!&@5x|v96gh7?(@e)HlT4bXP9n^rjekjpp8FobNm^#P z_nz;b^PO|gIq%(9_GwfZ{yrkd7KVS+X20eVeGw!{>{v+J%}$TFHHFNzI6d~5a=yeP z9!nw5F!YlYBCwfHCAA4okGqbKEvqF0H3=>v@M@RbD1FT1et#;No$T}=!hZYO?CBLU zN7Ga}C{^&WQBIF+k_5ihBTimK9*_URBVR+@=^0E@twGd93-RZR$ieIqk7Ba$+uIm* zqI4NUX-!74HEA46)iEWPLs`jTBhy@IpjkS)nvLRvMWoV#Y?Bz9Shbk!ne0Sv!HZ#I zykm<=QjQVtKAmDvx`H?(3*oB7!+TE&vP(a=qok`mA30)iaBW{QCyHl5+V^RoWP!8;z2{KNh7~tV%5ZMqIf5b%w$-Lf!Wf@ zOjg`w=_KD~B%}G1{lzMIuGGVV%~x6OTGPp^tI()dH*yo!0dwR(=@N?*^M_V1_;^gr za@|nQk$UV#GNX<5$jTt`a}2~JnfQ6#T~_%GeM|X-^ZuT*7oX(a4m`W~n+&pw#q@Co z*~8{}%g9PL|9TmD8!MP8$fpg;p=D&zR;1L+XFpRtjSO z*Kl7uNxq3OR#g8_6xfKua?-e*HB0Q&@pfTtf&J@FVrP$*bM*+&Ge)yRU)uz|ZJeH- zv`jLaGe6}Px2zyZ<`wRqgDXgDSadD8>OfwHXFuB_&dVZu%|k8Xd7NX;f=dK>tz@G0 z;A#*Po+XKoorZqvL-_$>=fHIyFrU}?`K>*ho+VF`8Eo@5wGU!M92Q^#~-+|AN}YxbMjsnC{yDPS@S;N#US5K6FYABeMeKZz zWUSJIQFZ}64a(a<-v?zk&<{W<26_g(h1Myc6oH;9P+kM?4){?DdJ>-}SHriP=rN$j zfmQ;o0zOsZUuzNg0(Y%BQ{cPZT@RG~YLIBwshmAs3dU)i{mqt4LD{7S*K5x!#j33+ zh8{u3YLST^1*JgE97geFb@-_GZXTJPP~99fX%U~BG_y?@IR+XxavZP~Ote&N&m(iv zOF{XqnsP`@Ijp7}QG;WlZ$>JaRu$7)PYVL5`f@Gnqg;@L5)Fo%KDn((oU>NCxoVT^!r=jdbz4u{OxePObtc#TZd%_a$;2)fzDR_ZlH-OKMSiu z6>xc>6YXZIVXWDD(N+P?(u=lU2+i&r=mhQSkxpo6f$D~KP->x}5tKS;aASJq6O1;K z(Ugw!#5;aM5$>=KXA1SKTIgn0M{g_R>XiZ6dYc$qZ!=@->({;<>_pN^zUm3NL<&?U zRV6Fuz3h*&SG~yNh-x+uh4HhIa0bh zevNE2uD=W?AJ9Jg-DE@lQsJpzsEnSn8nK;x2*3uExl9>MxOJdhzVWH|7A?@UIgvmsE*IiMX?~4@c0p_To_>zyqiATgqL(h8!wtS zlSMmmA-C~g)!YBmuFlbBWLL*c%H}KD^nmv2Ec;-5`$;VlcTnB_S-o1Oh2saHO;F2m zvAqo!6}V_+$T3{pXvM{GTwrnPHj{Vq`xHM{#|!Fa48l~a=Hb*|qb}8^xH%u+aErqe z*+0CX#%t+r4l8#T(GWLsmuv9g)*W|5oCS~D!Qo-(hnzdy$WZ59G5?oj=d1U0{642g z{XiEUa(aTk(}nLj<2bPJf!ddjy1%` nc}#yxh@a*Y4L@pn+Fv3E=1j7iO!l!c(~0CGq$l}^c_`(-CdC1N diff --git a/dist/version_number.txt b/dist/version_number.txt index fff1fac..d1c66e6 100644 --- a/dist/version_number.txt +++ b/dist/version_number.txt @@ -1 +1 @@ -1.0.35 \ No newline at end of file +1.0.36 \ No newline at end of file