From ade45f63b8e19abc9252c9686d75a5cb74f79cc8 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 25 Apr 2024 13:54:01 -0400 Subject: [PATCH 01/22] why is this working --- src/AMOSPro_BSDSocket.Lib | Bin 0 -> 5892 bytes src/BSDSocket.s | 6 +- src/BSDSocket_Labels.s | 39 +++++++ src/BSDSocket_Size.s | 5 + src/absdsocket | 9 +- src/bsdsocket_lib.fd | 107 ++++++++++++++++++++ src/bsdsocket_lvo.i | 208 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 368 insertions(+), 6 deletions(-) create mode 100644 src/AMOSPro_BSDSocket.Lib create mode 100644 src/BSDSocket_Labels.s create mode 100644 src/BSDSocket_Size.s create mode 100644 src/bsdsocket_lib.fd create mode 100644 src/bsdsocket_lvo.i diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib new file mode 100644 index 0000000000000000000000000000000000000000..14341093646faa280e4ac5d92a7d950d73e443e2 GIT binary patch literal 5892 zcmeHLZ){sv6+iDiH+9o2b+Qt&X4JQjr&mKV+i|OcMm5<oM#BjZtk$iYxh z`U%LO!$#4U=<7xU?(hDBzwDKlvvC;5W$*I*qT0cjN{J(DlqJV4iUaZcJal9oZTIb3g( zKA;5DZ$O5yo+IPSMC^&IN-bAzQwiQ&ZX8+d^1^&75kOX6`*)EmXVe3oi+cG`1RK6x%=M|~fsn?|~fBp&OwCiNefTOQ%3TQnE)CfDp~Qt4Am zUT74XI2UV&RTBQ+x)vldAfkLS|lNi%CT(k;Pf)=FUCWLhM)a|zQZ6%CTiWZq}_ z-jT@_2~7-=OruyNspBMV z@zk_0T7~WVZ-Z|*Cc7iImBHbt+=KT4ynEuyPeGwCv=^jAsZjsn>xmLu+qilfPoF$| zl7av045W$~HZFd?4Zwj!WZ%AtsYv4M04t*~lqj+5!-jP*T2&sRZ~8IWU2v&*{cTPD z!^m+=fh+OiN7r|T0S*HUkiAHNmA-%C_J!|VJHzr>eHb9VJiBN?qSUI3(h{X;wGvjx z={oS(>-NW&Wt_j4F9Ou-X@G9Bw_dM*NF_a|sD0g*y}U?{%4e@G_00lKC0=EaM#n%# zslSoPqfs@gq3oMA`BoVQwoL={*f!vCfUW26I}G((RM*H+fW(XSczk(_dq)^t#2sJW z0 zTAmHRrl>+Ss5zIb?Kzs7j*&_KLGR@fxt zWGFOvXPXuTHn&9d3w^3-SLjj|@{LaXkIl`9{Cy<+=|unC<_E2;&5s?0BR6lgiRGd7 zGQxV;k&kaN9ki20Hi)vG4puQuF*i8$TobhmUS=)u0(n$}}4ye}yn_Ke+uAQ?u zxh{F0=V6}v_*2XuX7C9_A>pZrMaR;!f|x9<7w9NOshQKYQT&*`4aC&|d8ETu18q&{O!`U6sr0ejj}PS4 zGV4tp!)u~Akaj|!Dgy~?;n?6b)N8u?$KR*t4yhbmnjG(22;v9zq2JX1wZ|=wgLGwS zINJ4uzR9*KH?bM(-3|@6GBng5=t_wdY`1QuU_axRIHEvrD-{umpPR7b`iU2F*`ft^ zcuDnIxW|VV9nmaM3{_;?$~KgVvNM!(bwI-0foAhqoO-Mo>29|?hLK*Pk>Y%BQXk;?HOcItqN=Q?_-;^)ZyV@M}> zhNN9Q_5y$!7U#~DRI?(!j<5v%9;6)`p!?IRiJ+LPt)U{`$qu|bfn$Yuck_aVct=k7 zymSt1oj`Rqrs(t=IAv@K*(?iFs6;9@L$* za^svTy6AtUR?a*#L|nI4k7HiGiL?2iRjJb)uF2P(r;RA~w}-1NInPF~*OWg;tBWpz zXD`??7G9v0?N*^cceGHn`bDs?YiK{+sC@M``6NC`H=cR(q)(ooL&>g*u;xNEd|O4_ zh5PB0UaR3(#-jdee3>ZXoqn4YDx%LQwb47{Wfwn7{fwfC)Z3icHc_>~PcnYBhF-}I z?C|STu?pg3FYPpnlNMq#39CoIqaGrC4q3!|Ega}B!^C(DzXR*HwW)S^A9TxMM8U=O zc;8vavOSSJqED%C<1|NtdBlP1>h&MdDBR35mMMEWH;@BmH+}zFHYNui6v8*QzD*<*!U0H1lL^avzyw{}jjhKgFZ|pnvp% tP%yMBxI4Iu_|o}|;XjhZf0NBrDd*1^<NIL: BSDSocket_Labels.s ;delete >NIL: BSDSocket_Size.s +FAILAT 21 copy AMOSPro_System:APSystem/AMOSPro_BSDSocket.lib AMOSPro_System:APSystem/AMOSPro_BSDSocket.lib.bak +FAILAT 10 copy AMOSPro_BSDSocket.Lib AMOSPro_System:APSystem/ ;use an amos file here that includes the plugin to quickly build a test program ;apcmp "aqua_test_plugin.amos" inclib diff --git a/src/bsdsocket_lib.fd b/src/bsdsocket_lib.fd new file mode 100644 index 0000000..e4afa67 --- /dev/null +++ b/src/bsdsocket_lib.fd @@ -0,0 +1,107 @@ +##base _SocketBase +##public +##bias 30 +socket(domain,type,protocol)(d0/d1/d2) +bind(sock,name,namelen)(d0/a0/d1) +listen(sock,backlog)(d0/d1) +accept(sock,addr,addrlen)(d0/a0/a1) +connect(sock,name,namelen)(d0/a0/d1) +sendto(sock,buf,len,flags,to,tolen)(d0/a0/d1/d2/a1/d3) +send(sock,buf,len,flags)(d0/a0/d1/d2) +recvfrom(sock,buf,len,flags,addr,addrlen)(d0/a0/d1/d2/a1/a2) +recv(sock,buf,len,flags)(d0/a0/d1/d2) +shutdown(sock,how)(d0/d1) +setsockopt(sock,level,optname,optval,optlen)(d0/d1/d2/a0/d3) +getsockopt(sock,level,optname,optval,optlen)(d0/d1/d2/a0/a1) +getsockname(sock,name,namelen)(d0/a0/a1) +getpeername(sock,name,namelen)(d0/a0/a1) +IoctlSocket(sock,req,argp)(d0/d1/a0) +CloseSocket(sock)(d0) +WaitSelect(nfds,read_fds,write_fds,except_fds,timeout,signals)(d0/a0/a1/a2/a3/d1) +SetSocketSignals(int_mask,io_mask,urgent_mask)(d0/d1/d2) +getdtablesize()() +ObtainSocket(id,domain,type,protocol)(d0/d1/d2/d3) +ReleaseSocket(sock,id)(d0/d1) +ReleaseCopyOfSocket(sock,id)(d0/d1) +Errno()() +SetErrnoPtr(errno_ptr,size)(a0/d0) +Inet_NtoA(ip)(d0) +inet_addr(cp)(a0) +Inet_LnaOf(in)(d0) +Inet_NetOf(in)(d0) +Inet_MakeAddr(net,host)(d0/d1) +inet_network(cp)(a0) +gethostbyname(name)(a0) +gethostbyaddr(addr,len,type)(a0/d0/d1) +getnetbyname(name)(a0) +getnetbyaddr(net,type)(d0/d1) +getservbyname(name,proto)(a0/a1) +getservbyport(port,proto)(d0/a0) +getprotobyname(name)(a0) +getprotobynumber(proto)(d0) +vsyslog(pri,msg,args)(d0/a0/a1) +Dup2Socket(old_socket,new_socket)(d0/d1) +sendmsg(sock,msg,flags)(d0/a0/d1) +recvmsg(sock,msg,flags)(d0/a0/d1) +gethostname(name,namelen)(a0/d0) +gethostid()() +SocketBaseTagList(tags)(a0) +GetSocketEvents(event_ptr)(a0) +##bias 366 +bpf_open(channel)(d0) +bpf_close(channel)(d0) +bpf_read(channel,buffer,len)(d0/a0/d1) +bpf_write(channel,buffer,len)(d0/a0/d1) +bpf_set_notify_mask(channel,signal_mask)(d1/d0) +bpf_set_interrupt_mask(channel,signal_mask)(d0/d1) +bpf_ioctl(channel,command,buffer)(d0/d1/a0) +bpf_data_waiting(channel)(d0) +AddRouteTagList(tags)(a0) +DeleteRouteTagList(tags)(a0) +##bias 432 +FreeRouteInfo(buf)(a0) +GetRouteInfo(address_family,flags)(d0/d1) +AddInterfaceTagList(interface_name,device_name,unit,tags)(a0/a1/d0/a2) +ConfigureInterfaceTagList(interface_name,tags)(a0/a1) +ReleaseInterfaceList(list)(a0) +ObtainInterfaceList()() +QueryInterfaceTagList(interface_name,tags)(a0/a1) +CreateAddrAllocMessageA(version,protocol,interface_name,result_ptr,tags)(d0/d1/a0/a1/a2) +DeleteAddrAllocMessage(aam)(a0) +BeginInterfaceConfig(message)(a0) +AbortInterfaceConfig(message)(a0) +AddNetMonitorHookTagList(type,hook,tags)(d0/a0/a1) +RemoveNetMonitorHook(hook)(a0) +GetNetworkStatistics(type,version,destination,size)(d0/d1/a0/d2) +AddDomainNameServer(address)(a0) +RemoveDomainNameServer(address)(a0) +ReleaseDomainNameServerList(list)(a0) +ObtainDomainNameServerList()() +setnetent(stay_open)(d0) +endnetent()() +getnetent()() +setprotoent(stay_open)(d0) +endprotoent()() +getprotoent()() +setservent(stay_open)(d0) +endservent()() +getservent()() +inet_aton(cp,addr)(a0/a1) +inet_ntop(af,src,dst,size)(d0/a0/a1/d1) +inet_pton(af,src,dst)(d0/a0/a1) +In_LocalAddr(address)(d0) +In_CanForward(address)(d0) +mbuf_copym(m,off,len)(a0/d0/d1) +mbuf_copyback(m,off,len,cp)(a0/d0/d1/a1) +mbuf_copydata(m,off,len,cp)(a0/d0/d1/a1) +mbuf_free(m)(a0) +mbuf_freem(m)(a0) +mbuf_get()() +mbuf_gethdr()() +mbuf_prepend(m,len)(a0/d0) +mbuf_cat(m,n)(a0/a1) +mbuf_adj(mp,req_len)(a0/d0) +mbuf_pullup(m,len)(a0/d0) +ProcessIsServer(pr)(a0) +ObtainServerSocket()() +##end diff --git a/src/bsdsocket_lvo.i b/src/bsdsocket_lvo.i new file mode 100644 index 0000000..676e088 --- /dev/null +++ b/src/bsdsocket_lvo.i @@ -0,0 +1,208 @@ + IFND LIBRARIES_BSDSOCKET_LVO_I +LIBRARIES_BSDSOCKET_LVO_I SET 1 + + XDEF _LVOsocket + XDEF _LVObind + XDEF _LVOlisten + XDEF _LVOaccept + XDEF _LVOconnect + XDEF _LVOsendto + XDEF _LVOsend + XDEF _LVOrecvfrom + XDEF _LVOrecv + XDEF _LVOshutdown + XDEF _LVOsetsockopt + XDEF _LVOgetsockopt + XDEF _LVOgetsockname + XDEF _LVOgetpeername + XDEF _LVOIoctlSocket + XDEF _LVOCloseSocket + XDEF _LVOWaitSelect + XDEF _LVOSetSocketSignals + XDEF _LVOgetdtablesize + XDEF _LVOObtainSocket + XDEF _LVOReleaseSocket + XDEF _LVOReleaseCopyOfSocket + XDEF _LVOErrno + XDEF _LVOSetErrnoPtr + XDEF _LVOInet_NtoA + XDEF _LVOinet_addr + XDEF _LVOInet_LnaOf + XDEF _LVOInet_NetOf + XDEF _LVOInet_MakeAddr + XDEF _LVOinet_network + XDEF _LVOgethostbyname + XDEF _LVOgethostbyaddr + XDEF _LVOgetnetbyname + XDEF _LVOgetnetbyaddr + XDEF _LVOgetservbyname + XDEF _LVOgetservbyport + XDEF _LVOgetprotobyname + XDEF _LVOgetprotobynumber + XDEF _LVOvsyslog + XDEF _LVODup2Socket + XDEF _LVOsendmsg + XDEF _LVOrecvmsg + XDEF _LVOgethostname + XDEF _LVOgethostid + XDEF _LVOSocketBaseTagList + XDEF _LVOGetSocketEvents + XDEF _LVObpf_open + XDEF _LVObpf_close + XDEF _LVObpf_read + XDEF _LVObpf_write + XDEF _LVObpf_set_notify_mask + XDEF _LVObpf_set_interrupt_mask + XDEF _LVObpf_ioctl + XDEF _LVObpf_data_waiting + XDEF _LVOAddRouteTagList + XDEF _LVODeleteRouteTagList + XDEF _LVOFreeRouteInfo + XDEF _LVOGetRouteInfo + XDEF _LVOAddInterfaceTagList + XDEF _LVOConfigureInterfaceTagList + XDEF _LVOReleaseInterfaceList + XDEF _LVOObtainInterfaceList + XDEF _LVOQueryInterfaceTagList + XDEF _LVOCreateAddrAllocMessageA + XDEF _LVODeleteAddrAllocMessage + XDEF _LVOBeginInterfaceConfig + XDEF _LVOAbortInterfaceConfig + XDEF _LVOAddNetMonitorHookTagList + XDEF _LVORemoveNetMonitorHook + XDEF _LVOGetNetworkStatistics + XDEF _LVOAddDomainNameServer + XDEF _LVORemoveDomainNameServer + XDEF _LVOReleaseDomainNameServerList + XDEF _LVOObtainDomainNameServerList + XDEF _LVOsetnetent + XDEF _LVOendnetent + XDEF _LVOgetnetent + XDEF _LVOsetprotoent + XDEF _LVOendprotoent + XDEF _LVOgetprotoent + XDEF _LVOsetservent + XDEF _LVOendservent + XDEF _LVOgetservent + XDEF _LVOinet_aton + XDEF _LVOinet_ntop + XDEF _LVOinet_pton + XDEF _LVOIn_LocalAddr + XDEF _LVOIn_CanForward + XDEF _LVOmbuf_copym + XDEF _LVOmbuf_copyback + XDEF _LVOmbuf_copydata + XDEF _LVOmbuf_free + XDEF _LVOmbuf_freem + XDEF _LVOmbuf_get + XDEF _LVOmbuf_gethdr + XDEF _LVOmbuf_prepend + XDEF _LVOmbuf_cat + XDEF _LVOmbuf_adj + XDEF _LVOmbuf_pullup + XDEF _LVOProcessIsServer + XDEF _LVOObtainServerSocket + +_LVOsocket EQU -30 +_LVObind EQU -36 +_LVOlisten EQU -42 +_LVOaccept EQU -48 +_LVOconnect EQU -54 +_LVOsendto EQU -60 +_LVOsend EQU -66 +_LVOrecvfrom EQU -72 +_LVOrecv EQU -78 +_LVOshutdown EQU -84 +_LVOsetsockopt EQU -90 +_LVOgetsockopt EQU -96 +_LVOgetsockname EQU -102 +_LVOgetpeername EQU -108 +_LVOIoctlSocket EQU -114 +_LVOCloseSocket EQU -120 +_LVOWaitSelect EQU -126 +_LVOSetSocketSignals EQU -132 +_LVOgetdtablesize EQU -138 +_LVOObtainSocket EQU -144 +_LVOReleaseSocket EQU -150 +_LVOReleaseCopyOfSocket EQU -156 +_LVOErrno EQU -162 +_LVOSetErrnoPtr EQU -168 +_LVOInet_NtoA EQU -174 +_LVOinet_addr EQU -180 +_LVOInet_LnaOf EQU -186 +_LVOInet_NetOf EQU -192 +_LVOInet_MakeAddr EQU -198 +_LVOinet_network EQU -204 +_LVOgethostbyname EQU -210 +_LVOgethostbyaddr EQU -216 +_LVOgetnetbyname EQU -222 +_LVOgetnetbyaddr EQU -228 +_LVOgetservbyname EQU -234 +_LVOgetservbyport EQU -240 +_LVOgetprotobyname EQU -246 +_LVOgetprotobynumber EQU -252 +_LVOvsyslog EQU -258 +_LVODup2Socket EQU -264 +_LVOsendmsg EQU -270 +_LVOrecvmsg EQU -276 +_LVOgethostname EQU -282 +_LVOgethostid EQU -288 +_LVOSocketBaseTagList EQU -294 +_LVOGetSocketEvents EQU -300 +_LVObpf_open EQU -366 +_LVObpf_close EQU -372 +_LVObpf_read EQU -378 +_LVObpf_write EQU -384 +_LVObpf_set_notify_mask EQU -390 +_LVObpf_set_interrupt_mask EQU -396 +_LVObpf_ioctl EQU -402 +_LVObpf_data_waiting EQU -408 +_LVOAddRouteTagList EQU -414 +_LVODeleteRouteTagList EQU -420 +_LVOFreeRouteInfo EQU -432 +_LVOGetRouteInfo EQU -438 +_LVOAddInterfaceTagList EQU -444 +_LVOConfigureInterfaceTagList EQU -450 +_LVOReleaseInterfaceList EQU -456 +_LVOObtainInterfaceList EQU -462 +_LVOQueryInterfaceTagList EQU -468 +_LVOCreateAddrAllocMessageA EQU -474 +_LVODeleteAddrAllocMessage EQU -480 +_LVOBeginInterfaceConfig EQU -486 +_LVOAbortInterfaceConfig EQU -492 +_LVOAddNetMonitorHookTagList EQU -498 +_LVORemoveNetMonitorHook EQU -504 +_LVOGetNetworkStatistics EQU -510 +_LVOAddDomainNameServer EQU -516 +_LVORemoveDomainNameServer EQU -522 +_LVOReleaseDomainNameServerList EQU -528 +_LVOObtainDomainNameServerList EQU -534 +_LVOsetnetent EQU -540 +_LVOendnetent EQU -546 +_LVOgetnetent EQU -552 +_LVOsetprotoent EQU -558 +_LVOendprotoent EQU -564 +_LVOgetprotoent EQU -570 +_LVOsetservent EQU -576 +_LVOendservent EQU -582 +_LVOgetservent EQU -588 +_LVOinet_aton EQU -594 +_LVOinet_ntop EQU -600 +_LVOinet_pton EQU -606 +_LVOIn_LocalAddr EQU -612 +_LVOIn_CanForward EQU -618 +_LVOmbuf_copym EQU -624 +_LVOmbuf_copyback EQU -630 +_LVOmbuf_copydata EQU -636 +_LVOmbuf_free EQU -642 +_LVOmbuf_freem EQU -648 +_LVOmbuf_get EQU -654 +_LVOmbuf_gethdr EQU -660 +_LVOmbuf_prepend EQU -666 +_LVOmbuf_cat EQU -672 +_LVOmbuf_adj EQU -678 +_LVOmbuf_pullup EQU -684 +_LVOProcessIsServer EQU -690 +_LVOObtainServerSocket EQU -696 + + ENDC From fdab7b432e44889981e7a8da7b488f4581bd0464 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 25 Apr 2024 14:40:47 -0400 Subject: [PATCH 02/22] 1.1.0 applied and working --- .gitignore | 5 ++ src/AMOSPro_BSDSocket.Lib | Bin 5892 -> 6068 bytes src/BSDSocket.s | 105 ++++++++++++++++++++++++++++++++++---- src/BSDSocket_Labels.s | 3 +- src/BSDSocket_Size.s | 4 +- 5 files changed, 104 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index c03c60e..e618a7f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,8 @@ dist/ build/ aminet/ Disk.info +test/ +stuff/ +patches/ +.vamosrc +activate diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index 14341093646faa280e4ac5d92a7d950d73e443e2..a83c2feed9efbb1370ac61554c355dc2d81f97ac 100644 GIT binary patch delta 309 zcmZqC+oC@~T=WS81M^D;238==;0I(2F)#=pnW*E-UcwO0pv<7VvFID_KGhQCakCo=CB6ubBb zsDMeITP>G~LnoVo!EfDvJ+=7Fi$tRsCr63P+8XE?>KYjs85@`w7%ONb=clCVWh5qN frxqoZ=IN!RmT5Amgt-P;DH!S@s|1<}wEq(TMB*ed diff --git a/src/BSDSocket.s b/src/BSDSocket.s index cd9c1b6..7947dd7 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -7,7 +7,7 @@ ; extension number 18 ExtNb equ 18-1 Version MACRO - dc.b "1.0.1-20230403" + dc.b "1.1.0-20240223" ENDM VerNumber equ $1 @@ -68,6 +68,20 @@ Error_PortOutOfRange EQU -11 Error_FdsetOutOfRange EQU -11 Error_UnableToBind EQU -12 +; socket herrno and tag lists +; built from: +; * https://wiki.amigaos.net/amiga/autodocs/bsdsocket.doc.txt +; * https://github.com/deplinenoise/amiga-sdk/blob/master/netinclude/amitcp/socketbasetags.h +; * http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node012E.html + +TAG_USER EQU (1<<31) +SBTF_REF EQU $8000 +SBTB_CODE EQU 1 +SBTS_CODE EQU $3FFF +SBTC_HERRNO EQU 6 + +HerrnoTag EQU (TAG_USER|SBTF_REF|((SBTC_HERRNO&SBTS_CODE)< Date: Thu, 25 Apr 2024 14:53:17 -0400 Subject: [PATCH 03/22] 1.1.1 applied and working --- src/AMOSPro_BSDSocket.Lib | Bin 6068 -> 6072 bytes src/BSDSocket.s | 5 +++-- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index a83c2feed9efbb1370ac61554c355dc2d81f97ac..0c0c7eec8beaa6e4bcad1015b6e640498d8cfa47 100644 GIT binary patch delta 118 zcmdm@ze9h5xad;`2IiLx46Hz!!4Jq5Vqg$HHc`i#(Pm?Y68|JYw#g5~_$SZj7iJ1} z-n@zbIJ>Q(u91O}iGi`9xq?P=eoCrdMq+YyYEe>Yo?c37nI?lum}`)gf}tJ|!c_td I2La|!09-{L0{{R3 delta 85 zcmdm?zeRt7xaboG2IiLx46Hz!!4Jq5Vqg$HGEv8x(RyQs5IQ251OUEK6yN{= diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 7947dd7..4cc7c51 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -7,7 +7,7 @@ ; extension number 18 ExtNb equ 18-1 Version MACRO - dc.b "1.1.0-20240223" + dc.b "1.1.1-20240317" ENDM VerNumber equ $1 @@ -1353,7 +1353,7 @@ _SocketSelect_PerformSelect PreserveStackFunction EnsureBSDSocketLibrary _SocketInetNtoa_LibraryOpen - RestoreStackInstruction + RestoreStackFunction Ret_Int _SocketInetNtoa_LibraryOpen: @@ -1373,6 +1373,7 @@ _SocketInetNtoA_StringSizeLoop: MOVE.L A0,D3 SUB.L A2,D3 ; D3 = length + SUBQ #1,D3 ; get rid of the null terminator Rjsr L_Demande ; string base address is in A0/A1 MOVE.W D3,(A0)+ ; length of string diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index 97c99e2..52ab0ee 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 25-04-2024 14:34:43 +; BSDSocket.s, list of the library functions on the 25-04-2024 14:44:28 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index 744803d..ab081f3 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 25-04-2024 14:34:43 +; BSDSocket.s, library size on the 25-04-2024 14:44:28 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 From 771d40fab76d9ac54dee13a9b648ac781d2103de Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 25 Apr 2024 16:18:31 -0400 Subject: [PATCH 04/22] 1.1.2 applied --- src/AMOSPro_BSDSocket.Lib | Bin 6072 -> 6108 bytes src/BSDSocket.s | 87 +++++++++++++++++++++++--------------- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- 4 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index 0c0c7eec8beaa6e4bcad1015b6e640498d8cfa47..f707d660edaa2ff014283b11c17e9ebc42b03f05 100644 GIT binary patch delta 243 zcmdm?e@B0Uxad0u2IiLx46Hz!!4Jq5Vqg${Gf~G{*n^>wL61S6;TppXAZfxN!BDob z%8Fk}gJVWlu!|ZClk@+7A4wNuW&J#4)Y$4{%$YrE!WME`sU~FhHxm8?25Wxjmz`*h($ delta 207 zcmcbkze9h5xad;`2IiLx46Hz!!4Jq5Vqg$HHc`h~*oL8oL61S6;TppXAZfxN!BDcX z%8H-spWt@}#xjG$!OoMf@n6%^XDnkdV^Hxx2&;JsZZcpnU Date: Thu, 25 Apr 2024 17:03:25 -0400 Subject: [PATCH 05/22] 1.1.3 works --- src/AMOSPro_BSDSocket.Lib | Bin 6108 -> 6160 bytes src/BSDSocket.s | 41 +++++++++++++++++++++++++------------- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index f707d660edaa2ff014283b11c17e9ebc42b03f05..bd44a6760c730b9bacf0cd0206b32071f11aac1c 100644 GIT binary patch delta 486 zcmcbkKfz#vc=B%s2IiLx46Hz!!4Jq5Vqg%F1F}OH7#stP3>fD!Ffphxuru&5crh3= zSOM7v3}y_93@QxnK)xJ<1CXD?kjgNDftNv$L5RVFp^ib1L7w3b!#p5q!XUv=zOm{H zo0!LQfe%WKW|Ar%!OkK#15f||BeI8qVR9S0k%Yh=1_8kupgoL+P7F-$FBn+V4mizr zn!R}syArF4$8!k=HO5!7nVNyFVt+dO;$aO&rWPPuzKrqZZY5@)`wSA3|L|-eO5x^H zypNbRZxV1|geYf1F_#Hpt_s9l0U>ABN7)PvrzS@T$w0I)qiA79Xi)=e**r;zhe*Ts z2s^W<0S!-5ke{3&Bto3=79yt@nSz}+Gl|V-66gvISoKzIX0+E^p40r?NoUBF*= zY<3O~3lehh(ZUL88%wC5hE?)qc;t7ng%C1SXb8|p9R?n7M$<(Jy{p5YY)L(W0?_1O z%{F*2RlZEW8$_p)lc{*f#CK9vEH?y;y$|>aHIOEQ`y1XTW%Stduqs$aq|28nC-JNN z#Ix-KfFT|!9!u`|4D$F7IT_XxWL@jX<2~TkG#2*xTmzA<>q$tM2_=oF$8=~>D8ANm tsoCT-sQ~@w`xh%IYUuy~ diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 17a87c4..45d4229 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -7,7 +7,7 @@ ; extension number 18 ExtNb equ 18-1 Version MACRO - dc.b "1.1.2-20240318" + dc.b "1.1.3-20240417" ENDM VerNumber equ $1 @@ -56,7 +56,6 @@ SO_REUSEADDR EQU $4 MAX_SOCKETS EQU 64 len_sockaddr_in EQU 16 -sockaddr_in_sin_len EQU 0 sockaddr_in_sin_family EQU 1 sockaddr_in_sin_port EQU 2 sockaddr_in_sin_addr EQU 4 @@ -142,19 +141,20 @@ LeaFdset MACRO ; LeaFdsetForBit fd_set reg,target address,target bit in address LeaFdsetForBit MACRO LeaFdset \1,\2 ; get fdset base address in \2 - MOVE.L D3,-(SP) + MOVEM.L D3-D4,-(SP) MOVE.L \3,D3 ; Put target bit into D3 ROR.L #5,D3 ; lop off the first 5 bits AND.L #$7,D3 ; only keep the top three ROL.L #2,D3 ; multiply by 4 ADD.L D3,\2 ; add that value to the fdset address - AND.L #$1F,\3 ; only keep 0-31 in \3 + MOVE.L \3,D4 + AND.L #$1F,D4 ; only keep 0-31 in \3 MOVEQ #1,D3 - ROL.L \3,D3 ; shift that bit left as many as target + ROL.L D4,D3 ; shift that bit left as many as target MOVE.L D3,\3 ; put that in the target - MOVE.L (SP)+,D3 + MOVEM.L (SP)+,D3-D4 ENDM @@ -533,14 +533,17 @@ _ToSockaddr_PortOK: MOVE.L sockaddr_ram-MB(A3),A0 ADD.L D3,A0 ; A0 contains our offset in ram - MOVE.B #len_sockaddr_in,sockaddr_in_sin_len(A0) - MOVE.B #AF_INET,sockaddr_in_sin_family(A0) - MOVE.W D2,sockaddr_in_sin_port(A0) - MOVEM.L A0-A3/D3,-(SP) + MOVE.L D1,A1 ; ip string address + MOVE.W (A1)+,D3 ; string length - MOVE.L D1,A0 ; ip address - ADDQ #2,A0 ; string data starts 2 bytes in + ; temporarily store a null-terminated copy of the ip string in A0 + MOVE.L A0,A2 + SUBQ #1,D3 ; DBRA loop runs D3 + 1 times +_ToSockaddr_CopyIPString: + MOVE.B (A1)+,(A2)+ + DBRA D3,_ToSockaddr_CopyIPString + MOVE.B #0,(A2) ; end of string ; if the string contains "INADDR_ANY", we use that value instead MOVE.L A0,A1 @@ -565,7 +568,15 @@ _ToSockaddr_ParseIPAddress: _ToSockaddr_DoneParsing: MOVEM.L (SP)+,A0-A3/D3 - MOVE.L D0,sockaddr_in_sin_addr(A0) + + ; create struct sockaddr_in + MOVE.B #len_sockaddr_in,(A0) + MOVE.B #AF_INET,sockaddr_in_sin_family(A0) + MOVE.W D2,sockaddr_in_sin_port(A0) + LEA sockaddr_in_sin_addr(A0),A3 + MOVE.L D0,(A3)+ + CLR.L (A3)+ + CLR.L (A3)+ MOVE.L A0,D0 MOVEM.L (SP)+,A0/A3/D3 @@ -1999,6 +2010,8 @@ _DnsGetHostAddressByName_GetIPAddressLength: BNE _DnsGetHostAddressByName_GetIPAddressLength MOVE.L (SP)+,A2 + SUBQ #1,D3 + MOVE.L D3,D4 AND.W #$FFFE,D3 ADDQ #2,D3 @@ -2013,7 +2026,7 @@ _DnsGetHostAddressByName_GetIPAddressLength: SUBQ #1,D4 _DnsGetHostAddressByName_KeepCopying: - MOVE.B (A2,D4),(A0,D4) + MOVE.B (A2,D4),(A0,D4) DBRA D4,_DnsGetHostAddressByName_KeepCopying RestoreStackFunction diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index ca423b1..0e40485 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 25-04-2024 16:01:54 +; BSDSocket.s, list of the library functions on the 25-04-2024 17:02:36 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index 2764174..f60a36d 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 25-04-2024 16:01:54 +; BSDSocket.s, library size on the 25-04-2024 17:02:36 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 From e4711f17837c14bc861cf4443ff52643f11c888b Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 17 Apr 2024 19:41:33 -0400 Subject: [PATCH 06/22] Change up documentation structure --- .gitignore | 2 +- API.md | 92 +++++++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 78 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index e618a7f..1b25989 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ dist/ build/ aminet/ Disk.info -test/ +private-test/ stuff/ patches/ .vamosrc diff --git a/API.md b/API.md index fbba5c4..3f07354 100644 --- a/API.md +++ b/API.md @@ -3,7 +3,9 @@ Most functions will return -2 if the bsdsocket.library is not open. -### Setup +--- + +## Setup #### ADDR=Socket Library Open @@ -16,11 +18,15 @@ Try to open bsdsocket.library version 4. * If needed, you'll be able to directly access library functions using this address. +--- + #### Socket Library Close Close bsdsocket.library. This is safe to call if the library is not open +--- + #### RESULT=Socket Set Nonblocking(Socket, IsNonblocking BOOL) Make a socket blocking (False, default), or nonblocking (True). @@ -29,6 +35,8 @@ Make a socket blocking (False, default), or nonblocking (True). * Result of IoctlSocket call. +--- + #### RESULT=Socket Reuse Addr(Socket) Make a listening socket reuse the address it's trying to bind to. @@ -38,9 +46,9 @@ You probably want to call this right before Socket Listen. * Result of setsockopt call. +--- - -### Connections +## Connections #### SOCKET=Socket Create Inet Socket @@ -51,6 +59,8 @@ Create a new Internet socket for reading or writing. * Socket number on success * -1 on failure +--- + #### RESULT=Socket Connect(Socket to IPAddress$, Port) Attempt to connect to a remote host. Currently doesn't @@ -65,6 +75,8 @@ support DNS lookups. to see if the connection succeeded * -11 port out of range +--- + #### RESULT=Socket Reuse Addr(Socket) Set a server socket to reuse an interface and port that had @@ -77,6 +89,8 @@ setsockopt() for you. The result of calling setsockopt() while setting your socket to reuse addresses. +--- + #### RESULT=Socket Bind(Socket to IPAddress, Port) Attempt to bind a socket to a network interface. Use @@ -89,6 +103,8 @@ interfaces. * -1 on other error * -11 port out of range +--- + #### RESULT=Socket Listen(Socket) Start listening for connections. @@ -98,6 +114,8 @@ Start listening for connections. * 0 on success * -1 on failure +--- + #### NEW_SOCKET=Socket Accept(Socket) Get the socket that connected to this one. Wait for a connect @@ -115,11 +133,13 @@ socket non-blocking and use Fdsets and Select! * The remote socket number on success * -1 on failure -#### RESULT=Socket Async Wait Reading(Socket, Wait_ms) +--- + +#### RESULT=Socket Wait Async Reading(Socket, Wait_ms) Wait the given number of milliseconds for the nonblocking socket to be ready for reading. -Use this when you're waiting for a client to connect to you, or if you're waiting for -a remote socket to send you data. +Use on a listen socket to await new connections, or on a connected socket to await +incoming data packets. ##### Returns @@ -127,7 +147,9 @@ a remote socket to send you data. * -1 on error. Use `Socket Errno` for more detail. * 1 on success. -#### RESULT=Socket Async Wait Writing(Socket, Wait_ms) +--- + +#### RESULT=Socket Wait Async Writing(Socket, Wait_ms) Wait the given number of milliseconds for the nonblocking socket to be ready for writing. Use this when you're connecting to a remote server and want to know if the connection @@ -143,6 +165,8 @@ has been completed. checks will return 1. * 1 on success. +--- + #### RESULT=Socket Set Timeout(Socket, Wait_ms) Set a socket to timeout after Wait_ms milliseconds if reading or writing doesn't complete. @@ -152,7 +176,9 @@ Set a socket to timeout after Wait_ms milliseconds if reading or writing doesn't * 0 on success * -1 on error -#### RESULT=Socket Close(Socket) +--- + +#### RESULT=Socket Close Socket(Socket) Close a socket. @@ -161,9 +187,9 @@ Close a socket. * 0 on success * -1 on error +--- - -### Data Transfers +## Data Transfers #### SENT=Socket Send$(Socket, String$) @@ -194,6 +220,8 @@ End Proc * Number of characters sent * -1 on other error +--- + #### SENT=Socket Send(Socket, Data Pointer, Length) Send a block of data to a connected socket. @@ -203,6 +231,8 @@ Send a block of data to a connected socket. * Number of characters sent * -1 on other error +--- + #### DATA$=Socket Recv$(Socket, MaxLength) Retrieve at most MaxLength bytes from Socket, and put them into a string. @@ -212,7 +242,9 @@ If Len(DATA$) < MaxLength, you've read the last bit of data from the socket. * String of data, which is blank if there is no more data. -### LENGTH=Socket Recv(Socket to Dataptr, MaxLength) +--- + +#### LENGTH=Socket Recv(Socket to Dataptr, MaxLength) Retrieve at most MaxLength bytes from Socket, and put them into the memory address at Dataptr. @@ -222,9 +254,9 @@ address at Dataptr. * Count of bytes read * -1 on error +--- - -### Informational +## Informational #### HOST=Socket Get Host(Socket) @@ -234,6 +266,8 @@ Get the IPv4 (Long) host value the given socket is using. * Host as a long value +--- + #### PORT=Socket Get Port(Socket) Get the 16-bit port (Word) value the given socket is using. @@ -242,6 +276,8 @@ Get the 16-bit port (Word) value the given socket is using. * Port as a word value +--- + #### RESULT$=Socket Inet Ntoa$(Host) Turn a long Host address into a string. @@ -250,6 +286,8 @@ Turn a long Host address into a string. * IP address as string +--- + #### RESULT=Socket Errno Get the error from the last command. Note that this is @@ -260,6 +298,18 @@ not cleared on a successful command! Error number from last call. Look in for more details. +--- + +#### RESULT=Socket Herrno + +Get the error from the last DNS resolver command. + +##### Returns + +Resolver error number (`h_errno`) from last call. + +--- + #### RESULT$=Dns Get Address By Name$(Domain Name$) Look up the first IP address associated with this hostname. @@ -274,6 +324,8 @@ out. There's no way to set this timeout, or cancel or override it via AMOS. String with IP address, or blank string on error. +--- + #### RESULT=Socket Status(Socket) Returns basic connection information about a socket. @@ -297,9 +349,9 @@ Status of socket: * 6 = Connecting * 7 = Connected +--- - -### Low Level +## Low Level #### RESULT=Socket Setsockopt Int(Socket, Option, Value) @@ -311,6 +363,8 @@ Socket Reuse Addr(). * Result of setsockopt call +--- + #### RESULT=Socket Getsockopt Int(Socket, Option) Get a socket option. You probably want SO_ERROR, @@ -321,6 +375,8 @@ attempt a connection with a non-blocking socket. * Result of getsockopt call +--- + #### ADDR=Socket Fdset Zero(fd_set) Clear out the specified fd_set. @@ -330,6 +386,8 @@ Clear out the specified fd_set. * Address to that particular fd_set * -1 if fd_set out of range. You get 16 of them. +--- + #### ADDR=Socket Fdset Set(fd_set, Socket to Value BOOL) Set or clear a socket bit in an fd_set. @@ -339,6 +397,8 @@ Set or clear a socket bit in an fd_set. * Address to that particular fd_set * -1 if fd_set is out of range or socket is out of range. +--- + #### RESULT=Socket Fdset Is Set(fd_set, Socket) See if the particular socket remained after a Socket Select call. @@ -347,6 +407,8 @@ See if the particular socket remained after a Socket Select call. * True or False if the socket is set or not +--- + #### RESULT=Socket Select(Max Socket, Read fd_set, Write fd_set, Error fd_set, TimeoutMS) Wait for the specified number of milliseconds. If any of the sockets From 882ee8cba27905c036f19e1828fb642a14c72e86 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 08:32:52 -0400 Subject: [PATCH 07/22] Starting on test suite, fixing some bugs found via it --- .gitignore | 1 + src/AMOSPro_BSDSocket.Lib | Bin 6160 -> 6188 bytes src/BSDSocket.s | 31 +++++++++++++++++++++---------- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- test/TestSuite.amos | Bin 0 -> 4378 bytes 6 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 test/TestSuite.amos diff --git a/.gitignore b/.gitignore index 1b25989..afe86f5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ stuff/ patches/ .vamosrc activate +test/report.txt diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index bd44a6760c730b9bacf0cd0206b32071f11aac1c..781ff6cb98dc50b0a95c38a3841de4569127688c 100644 GIT binary patch delta 110 zcmbPWu*P75m;oCT0|WC*1_lt#;0I(2F))Z&0ofr842}Ut28?qVm>AR;*co_$BE}51 z6Wxp%D>hdBVG~JXU=Z@T&(Gm=pOZtu=KufypZrQUm$3^mvN=^UFfcM~?%^J|7>NJ? delta 79 zcmZ2uFu`Dgm;vi=1_tJr3=ANe!4Jq5Vqg%F1F}OH7#stP3>fD!Ffphxuru&5crh3= fSWR>@W-Q-W^@nY97rPMS=0zMbyqgb*<}d*OeB=>L diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 45d4229..49f4e5a 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -512,7 +512,7 @@ _SocketLibraryOpen_Finish: ; ; Turn an IP address and port into a sockaddr_in strucure ; -; d0 - 0 on success, -1 on failure +; d0 - address of sockaddr_in on success, -1 on failure ; - - - - - - - - Lib_Def SocketIPAddressPortToSockaddr @@ -537,6 +537,15 @@ _ToSockaddr_PortOK: MOVE.L D1,A1 ; ip string address MOVE.W (A1)+,D3 ; string length + BNE _ToSockaddr_StringHasLength + MOVEM.L (SP)+,A0-A3/D3 + MOVEM.L (SP)+,A0/A3/D3 + + MOVE.L #-14,D0 + RTS + +_ToSockaddr_StringHasLength: + ; temporarily store a null-terminated copy of the ip string in A0 MOVE.L A0,A2 SUBQ #1,D3 ; DBRA loop runs D3 + 1 times @@ -656,7 +665,6 @@ _SocketCreateInetSocket_Done: Ret_Int _SocketConnect_LibraryOpen: - MOVE.L D0,-(SP) ; socket id onto stack Rbsr L_SocketIPAddressPortToSockaddr @@ -674,6 +682,8 @@ _SocketConnect_SockaddrIn: MOVE.L D0,A0 MOVE.L (SP)+,D0 + CLR.W $100 + MOVE.L D0,-(SP) MOVEM.L A0/A3,-(SP) Dload A3 @@ -1946,24 +1956,25 @@ _SocketReuseAddr_LibraryOpen: _DnsGetHostAddressByName_LibraryOpen: ; string so you need demande, hichaine, and chvide MOVE.L D3,A0 ; name + MOVEQ #0,D0 MOVE.W (A0)+,D0 ; d0 contains length MOVE.L D0,D1 ; d1 also has length MOVE.L D0,D2 ; d2 also has length Rjsr L_RamFast ; d0 contains address - BNE .StringRamAllocated + BNE _DnsGetHostAddressByName_StringRamAllocated MOVE.L ChVide(A5),D3 RestoreStackFunction Ret_String -.StringRamAllocated: +_DnsGetHostAddressByName_StringRamAllocated: MOVE.L D0,A1 ; a1 contains address SUBQ #1,D1 ; reduce by one for DBRA -.KeepCopyingAMOSString +_DnsGetHostAddressByName_KeepCopyingAMOSString MOVE.B (A0)+,(A1)+ ; byte copy - DBRA D1,.KeepCopyingAMOSString ; keep copying + DBRA D1,_DnsGetHostAddressByName_KeepCopyingAMOSString ; keep copying MOVE.B #0,(A1)+ ; null terminate string MOVE.L D0,A0 ; first param of gethostbyname @@ -1982,14 +1993,14 @@ _DnsGetHostAddressByName_LibraryOpen: MOVE.L (SP)+,D0 TST.L D0 - BNE .GetIPAddress + BNE _DnsGetHostAddressByName_GetIPAddress RestoreStackFunction MOVE.L ChVide(A5),D3 Ret_String -.GetIPAddress: +_DnsGetHostAddressByName_GetIPAddress: MOVE.L D0,A0 MOVE.L 16(A0),A1 ; **h_addr_list MOVE.L (A1),A1 ; *h_addr_list @@ -2156,7 +2167,7 @@ _SocketCloseSocket_LibraryOpen: EndDataStorage TST.L D0 - BEQ .success + BEQ _SocketHerrno_success ; failed MOVE.L #-1,D3 @@ -2164,7 +2175,7 @@ _SocketCloseSocket_LibraryOpen: RestoreStackFunction Ret_Int -.success +_SocketHerrno_success: MOVE.L (A1),D3 RestoreStackFunction diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index 0e40485..5e81b7d 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 25-04-2024 17:02:36 +; BSDSocket.s, list of the library functions on the 26-04-2024 08:23:46 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index f60a36d..f3e9d7f 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 25-04-2024 17:02:36 +; BSDSocket.s, library size on the 26-04-2024 08:23:46 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 diff --git a/test/TestSuite.amos b/test/TestSuite.amos new file mode 100644 index 0000000000000000000000000000000000000000..521803a83a2196e7db11252011999473aa2d1ed1 GIT binary patch literal 4378 zcmb_f&vO(-6n--qHZfU92r(`oRD)qrO4m|67>hz#B1)A8ir_`Dwq|#Fvjej|Tk~Uq zDh?bxdhp=EGY8AE{2MIFBjwoxe}gwqp4RVm&u)_4oq-?}Nw#LXUw`j=-~0OQr7y2- ziMkv6Ezy7P{0D;QFs)dn8ze-1YeQ^>tvfOipWaKPiv3WDn=($sR_Z5`$l-PPcbflR zz#2SiJ}zkG;>?;5`HEqKXRS*_C z4?S$Sp4UjihDnva)A8)CjAM5jw0;kC4xW{k>=C*+i9iDZUlmd4xMN=cKxAN(&rdmT zq93U=_-7)gCqq`w&gMp)e%fQi`*%;K*@?{H(OLUp)uv>IGcAS{s_xV+_-bG?F zv-VS>S;xLIJdfxMbF@5XH^MaOrHSFj`i2HTJ(au1;LiS5==U_Y!#Axs&TU{H>{XMl z>8|)h^N!QsdnR&npxgHax+9IGfL5jOW6?vk66pyvOx%j3R3ZsQ%S~Dx(Td!-BV**` zl%L?YHS>efNk!{~Ylwu6PMUJtS3?aLojA5~yOK3>9Qlt|XR`YA0O~-rY@gXRsS&K1 z+zY0%e%e8~WKeFh+&FIeVM8i!gmHiIN6OrZzhYJX)N%K8Hfm9&dDAbo1f8t=^O!}; zgTK&E<2+UANM>AL_|3?T?u%uSvrjB9Q6n&sxOZVhF<9MP z9x&3^IpW`wU47su?uco7(LEd;1TOI2KgK!aH%BaV*U!`UkNTa?I@8YvTkkYuFV^l| z%b*JtCc^E*QQc-B--c#AZLM&0$PtJZINAi7gO2?RRR+JoSK7Yv<4z+s_7ClHS2EfH zRu?wH6vv5hSb-zVXk~>OO5V+9^<*)tIr|N>`K;!@;Ve$%YvX99r^}Ia6Dh7LT#DwA zX0FURoh*?dJk!QUM6VTRG1^gx8!9}Wk8CwVwgp6+p=t)GIbRj1Cz#Ibj{{fSAU1am zYFDDQ5}E5Y!~RrjcL(3C<g zQQyoQaPm0edbh&}g9#=d9$|L+h2u>0OR>h-Q?z4D_pQo?ip6Ir(>-tLQD~0!*VJ)1qZNF!9U_XKm;3esYUff?Wtp&!Cm{2D&q<`3;uMrkc}y|xR(@$iedBD0phD|IX)UGFI#IXsQe&fyJw73BO1 z zvHtP?y(UN1sKZKr9p;*WtL_ND$9ci~p9g6bAsHpn^_PjVp!eo|)yEe*FT?o;~~i0QUUi|gy_wOv2sxDf@j#@KhHY?>OyM~?YQ2MOBar)y`y_@qE5y*aMc z@>`-Eg$$(!NgJ4JdMp{+~Eat@k-V=!@2l!5Mm4flSQ+FS;VUj xSbFLenR=%=dX;9k(pC#2azW2OV`eO8Gh=Ir?q!{u&u7UxS{{Dexzw!#{D0)S*b4vv literal 0 HcmV?d00001 From 8a4235270c3ca28eb7379a9cc71a31064c5ff0b3 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 14:41:00 -0400 Subject: [PATCH 08/22] test suite stuff --- test/TestSuite | Bin 0 -> 22264 bytes test/TestSuite.amos | Bin 4378 -> 8374 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/TestSuite diff --git a/test/TestSuite b/test/TestSuite new file mode 100644 index 0000000000000000000000000000000000000000..bedc0e5a8ed46eeb53871e76d0de7f10a8763772 GIT binary patch literal 22264 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 Dji8l# delta 495 zcmZ8dO)mpc6utARZ#vVN>4!;F6Jtn;3~eebq@q3+7CvgBv9M{XMoct5+F>Oku@ehi zu|R|_tR)g_D+^WiPZ20n`g0x?Yb zbk2|a5_}439eD2R{zJUi2u<3v$^~cq%hr3m@gwpDk_V6=>OlUM!L|fnr#fvl;~ZybwT(6HBoHG From 12b859eaf347708669b27b9a72453d25626db579 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 16:14:46 -0400 Subject: [PATCH 09/22] wow it's working --- API.md | 19 ++- bin/rebuild_raw_source | 2 +- src/AMOSPro_BSDSocket.Lib | Bin 6188 -> 6180 bytes src/BSDSocket.s | 2 - src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- src/report.txt | 34 +++++ test/TestSuite | Bin 22264 -> 65428 bytes test/TestSuite.amos | Bin 8374 -> 8960 bytes test/TestSuite.basic | 271 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 324 insertions(+), 8 deletions(-) create mode 100644 src/report.txt create mode 100644 test/TestSuite.basic diff --git a/API.md b/API.md index 3f07354..e1d86ec 100644 --- a/API.md +++ b/API.md @@ -63,8 +63,19 @@ Create a new Internet socket for reading or writing. #### RESULT=Socket Connect(Socket to IPAddress$, Port) -Attempt to connect to a remote host. Currently doesn't -support DNS lookups. +Attempt to connect to a remote IP address. + +##### Emulation vs. Physical/FPGA Amiga note + +On emulated Amigas (FS-UAE) with emulated `bsdsocket.library`, a failure in +`Socket Connect` due to giving the function a bad IP address allows you to reuse +the socket. On real or FPGA-based Amiga running real TCP/IP stacks (MiamiDX, +Roadshow), the socket will be made unusable and you'll need to +`Socket Close Socket` and reopen the socket with whatever parameters necessary. +Closing and opening `bsdsocket.library` has the same effect. + +Always close and re-open a socket if you have any `Socket Connect` failure and +any non-blocking polling loops time out! ##### Returns @@ -74,6 +85,7 @@ support DNS lookups. the socket with Socket Select and Socket Getsockopt Int to see if the connection succeeded * -11 port out of range +* -13 IP address has zero length --- @@ -82,7 +94,7 @@ support DNS lookups. Set a server socket to reuse an interface and port that had been used recently. You likely want this if you're building something that listens on a port for connections. This calls -setsockopt() for you. +`setsockopt()` for you. ##### Returns @@ -182,6 +194,7 @@ Set a socket to timeout after Wait_ms milliseconds if reading or writing doesn't Close a socket. + ##### Returns * 0 on success diff --git a/bin/rebuild_raw_source b/bin/rebuild_raw_source index 2a1b19b..3c2c04a 100755 --- a/bin/rebuild_raw_source +++ b/bin/rebuild_raw_source @@ -1,6 +1,6 @@ #!/bin/bash -for i in examples/*.amos; do +for i in examples/*.amos test/*.amos; do echo "$i" ~/Projects/amostools/listamos -e AMOSPro_BSDSocket.Lib "${i}" > "${i%.amos}.basic" 2>/dev/null done diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index 781ff6cb98dc50b0a95c38a3841de4569127688c..c7308ecba14273d3c79c34456be4b549eb2a9b08 100644 GIT binary patch delta 45 ycmZ2uu*6`3xF`by1M^D;1~wqg;0I(2F))ajOw^HNwA$zv#<6)3M;kvA^Ctkrz6n_X delta 54 zcmZ2tu*P75xF{0?1M^D;1~wqg;0I(2F))Z&P1KQOwB6_y#=+)P$-uzKuz3zg8$SzB G_7eaPq6#Dc diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 49f4e5a..e557aad 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -682,8 +682,6 @@ _SocketConnect_SockaddrIn: MOVE.L D0,A0 MOVE.L (SP)+,D0 - CLR.W $100 - MOVE.L D0,-(SP) MOVEM.L A0/A3,-(SP) Dload A3 diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index 5e81b7d..e449567 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 26-04-2024 08:23:46 +; BSDSocket.s, list of the library functions on the 26-04-2024 14:45:36 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index f3e9d7f..7aa7186 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 26-04-2024 08:23:46 +; BSDSocket.s, library size on the 26-04-2024 14:45:36 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 diff --git a/src/report.txt b/src/report.txt new file mode 100644 index 0000000..9caf71b --- /dev/null +++ b/src/report.txt @@ -0,0 +1,34 @@ +[Socket Library Open/Open Library] 1075577444 +[Socket Library Open/Double open] 1075577444 +[Socket Create Inet Socket] 0 +[Socket Set Nonblocking/False] 0 +[Socket Set Nonblocking/True] 0 +[Socket Set Nonblocking/True] Preserving this state for rest of tests +[Dns Get Address By Name$/Bad domain name] +[Dns Get Address By Name$/localhost] 127.0.0.1 +[Dns Get Address By Name$/aminet.net] 35.223.124.178 +[Dns Get Address By Name$/aminet.net] Using this IP address for connection tests +[Dns Get Address By Name$/Returned string can be manipulated] Cat35.223.124.178Dog +[Socket Connect/port too high] -11 +[Socket Connect/blank ip] -14 +[Socket Connect/invalid ip] -1 +[Socket Connect/aminet IP (35.223.124.178) from above] -1 (ok to be -1, will Wait Async Writing next) +[Socket Wait Async Writing/With unconnected socket/2 second timeout] 1 +[Socket Wait Async Writing/With unconnected socket/Zero timeout] 1 +[Socket Wait Async Writing/Connected socket/Two second timeout] 1 +[Socket Wait Async Writing/Connected socket/Zero timeout] 1 +[Socket Wait Async Writing/Connected socket/Attempt to get actual connection] 1 +[Socket Wait Async Writing/Socket Send and Socket Send$/Socket send$ first half] 10 +[Socket Wait Async Writing/Socket Send and Socket Send$/Socket send second half] 18 +[Socket Wait Async Writing/Socket wait Async Reading/With unconnected socket/2 second timeout] 1 +[Socket Wait Async Writing/Socket wait Async Reading/With unconnected socket/Zero timeout] 1 +[Socket Wait Async Writing/Socket wait Async Reading/With aminet socket/2 second timeout] 1 +[Socket Wait Async Writing/Socket wait Async Reading/With aminet socket/Zero timeout] 1 +[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Recv$/Read 20 characters] HTTP/1.1 302 Found + +[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Recv$/String can be manipulated] CatHTTP/1.1 302 Found +Dog +[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Read/Read 20 bytes] 20 +[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Read/Data was read] Date: Fri, 26 Apr 20 +[Socket Wait Async Writing/Socket Library Close/Close] Success +[Socket Wait Async Writing/Socket Library Close/Double close] Success diff --git a/test/TestSuite b/test/TestSuite index bedc0e5a8ed46eeb53871e76d0de7f10a8763772..01256c2b0ac118b5486db423a28d07ab4acc556e 100644 GIT binary patch literal 65428 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 delta 6965 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 delta 1688 zcmaJ=U1$_n6h3n|J7#~ft?9&_{h7(cCTnV>#;8GK8=}Y}8e^eSi%2Ki?8IHVX2b3n zmLM9$CkZin(w8El!3Uqpf~}8|Cn=JLwiF+vls<__1qJb;pttwlnaxhJNtcCl=icvp z=R5a)XD0pNpmOl|i7$;qnR0&2nA){_j{#uZysrE~=s(wA=!E`-K`Bn?V@ye%Y!8Q} z6#KewOGkbDbE#>T(4TO`KfuFP{{cUM%vO*6jNu2oEf4bWw|s-pIkY$R2I!m&<>J_P z7QT*aSZL0w^s)>kt9-s-(?u9*rSKGN#xaM_n?EJ=GR`Es@bf^=#<-b)z*Pfp37y7! z!J|CrVMC_Vgybi&x+#HsL%aBHE;LZz)$vh?WlrPU5bH^#@Gunqy@q+EcVcx*9KUKA zO*P0o?Z|Z7v0;IUp2k00T+!XQC$ghaw3~&M$UdjJZl)r+JwGv(Dde+8eiCK@K9(5Q z+H0w09{%7+E%V8TJJL>*bO}-r{=^tB70(%&Z;MkF=h6O$XN~S7n}zPm<`;c57lxvp zvr49TsM@m(07N<8C;<~zJyi}DT1OgMC24U%IjqLrR!=4q>j?7T6dZ2r^bo-X-bIKd z0fYg+(AxaYDyUREFh`8bGl#>;KIekI-Wc<$hUu0J>@ni_bKCY)%)0z$VHT)qcxJ@EU< zEm0YKKJpYGAh9YQW%U~|t%%;<3`W98EP^-Ckq$Gt374sH!VgpHx31RL39HBrmY6rVJ{#LfK;4vZ8`n zuqMvhIabJ-ZVrlJPpqY(80lT7n2z7XR6=E}#QOQ$R%6e37)mIFt{7}S(TR~n@2Ugg zD84hFxVv)TwTNfa^~8K)P-d2E1wbRBH0f-KOTISzUfU+(Z(3BucbeAs{$H7R>_DYo z8^m)HDclZ<;Jgu1lzNtH?^-Q3uTHHydKY^){6*LGI#|rO?{M)ftWNW&#nG)zLfo(_CONTEXT_INDEX-1) + _CONTEXT_STRING$=_CONTEXT_STRING$+"/" + End If + Next I + _OUTPUT$="["+_CONTEXT_STRING$+"] "+MESSAGE$ + Print #_FILE_HANDLE,_OUTPUT$ + Print _OUTPUT$ + ' ensure line is printed on screen to catch crashes + Wait Vbl +End Proc + +Procedure _BEGIN_CONTEXT[NAME$] + _CONTEXT$(_CONTEXT_INDEX)=NAME$ + _CONTEXT_INDEX=_CONTEXT_INDEX+1 +End Proc + +Procedure _END_CONTEXT + _CONTEXT_INDEX=_CONTEXT_INDEX-1 +End Proc + +Open Out _FILE_HANDLE,"report.txt" + +_BEGIN_CONTEXT["Socket Library Open"] +_BEGIN_CONTEXT["Open Library"] + +_LIBRARY_ADDRESS=Socket Library Open +_ADD_TO_REPORT[Str$(_LIBRARY_ADDRESS)] + +_END_CONTEXT + +If _LIBRARY_ADDRESS=0 + _ADD_TO_REPORT["bsdsocket.library not available, ending tests"] + _END_CONTEXT + Goto _FINISH_SUITE +End If + +_BEGIN_CONTEXT["Double open"] +_NEW_LIBRARY_ADDRESS=Socket Library Open +_ADD_TO_REPORT[Str$(_NEW_LIBRARY_ADDRESS)] +_END_CONTEXT + +_END_CONTEXT + + +_BEGIN_CONTEXT["Socket Create Inet Socket"] +SOCKET=Socket Create Inet Socket +_ADD_TO_REPORT[Str$(SOCKET)] +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Reuse Addr"] +RESULT=Socket Reuse Addr(SOCKET) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Set Nonblocking"] +_BEGIN_CONTEXT["False"] +RESULT=Socket Set Nonblocking(SOCKET,False) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["True"] +RESULT=Socket Set Nonblocking(SOCKET,True) +_ADD_TO_REPORT[Str$(RESULT)] +_ADD_TO_REPORT["Preserving this state for rest of tests"] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Dns Get Address By Name$"] + +_BEGIN_CONTEXT["Bad domain name"] +IP$=Dns Get Address By Name$("u8dsf93jsdfoiodsoi.sdfjdsoifueru.sadfasdsdasd") +Print IP$ +_ADD_TO_REPORT[IP$] +_END_CONTEXT + +_BEGIN_CONTEXT["localhost"] +IP$=Dns Get Address By Name$("localhost") +_ADD_TO_REPORT[IP$] +_END_CONTEXT + +_BEGIN_CONTEXT["aminet.net"] +IP$=Dns Get Address By Name$("aminet.net") +Print IP$ +_ADD_TO_REPORT[IP$] +_ADD_TO_REPORT["Using this IP address for connection tests"] +_END_CONTEXT + +_BEGIN_CONTEXT["Returned string can be manipulated"] +_ADD_TO_REPORT["Cat"+IP$+"Dog"] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Connect"] +_BEGIN_CONTEXT["port too high"] +RESULT=Socket Connect(SOCKET To IP$,999999) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["blank ip"] +RESULT=Socket Connect(SOCKET To "",80) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["invalid ip -- requires reopening failed socket"] +RESULT=Socket Connect(SOCKET To "999.999.999.999",80) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Close Socket"] +RESULT=Socket Close Socket(SOCKET) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +' re-set up this socket after a failed connection +SOCKET=Socket Create Inet Socket +_=Socket Set Nonblocking(SOCKET,True) + +_BEGIN_CONTEXT["aminet IP ("+IP$+") from above"] +RESULT=Socket Connect(SOCKET To IP$,80) +_ADD_TO_REPORT[Str$(RESULT)+" (ok to be -1, will Wait Async Writing next)"] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Wait Async Writing"] + +_BEGIN_CONTEXT["With unconnected socket"] +OTHER_SOCKET=Socket Create Inet Socket +_=Socket Set Nonblocking(OTHER_SOCKET,True) + +_BEGIN_CONTEXT["2 second timeout"] +RESULT=Socket Wait Async Writing(OTHER_SOCKET,2000) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Zero timeout"] +RESULT=Socket Wait Async Writing(OTHER_SOCKET,0) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Connected socket"] +_BEGIN_CONTEXT["Two second timeout"] +RESULT=Socket Wait Async Writing(SOCKET,2000) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Zero timeout"] +RESULT=Socket Wait Async Writing(SOCKET,0) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Attempt to get actual connection"] +For TRIES=0 To 10 + RESULT=Socket Wait Async Writing(SOCKET,500) + _ADD_TO_REPORT[Str$(RESULT)] + If RESULT>0 + Exit + End If +Next TRIES +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Send and Socket Send$"] +HTTP_REQUEST_HEADERS$="GET / HTTP/1.0"+Chr$(10)+"Host: amiga"+Chr$(10)+Chr$(10) + +_BEGIN_CONTEXT["Socket send$ first half"] +FIRST_HALF$=Left$(HTTP_REQUEST_HEADERS$,10) +RESULT=Socket Send$(SOCKET,FIRST_HALF$) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Socket send second half"] +SECOND_HALF_START=Varptr(HTTP_REQUEST_HEADERS$)+10 +SECOND_HALF_LENGTH=Len(HTTP_REQUEST_HEADERS$)-10 +RESULT=Socket Send(SOCKET,SECOND_HALF_START,SECOND_HALF_LENGTH) +_ADD_TO_REPORT[Str$(RESULT)] + +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket wait Async Reading"] +_BEGIN_CONTEXT["With unconnected socket"] +_BEGIN_CONTEXT["2 second timeout"] +RESULT=Socket Wait Async Reading(OTHER_SOCKET,2000) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_BEGIN_CONTEXT["Zero timeout"] +RESULT=Socket Wait Async Reading(OTHER_SOCKET,0) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["With aminet socket"] +_BEGIN_CONTEXT["2 second timeout"] +RESULT=Socket Wait Async Reading(SOCKET,2000) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Zero timeout"] +RESULT=Socket Wait Async Reading(SOCKET,0) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_END_CONTEXT + +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Recv$ and Socket Recv"] +_BEGIN_CONTEXT["Socket Recv$"] +_BEGIN_CONTEXT["Read 20 characters"] +RESULT$=Socket Recv$(SOCKET,20) +_ADD_TO_REPORT[RESULT$] +_END_CONTEXT + +_BEGIN_CONTEXT["String can be manipulated"] +_ADD_TO_REPORT["Cat"+RESULT$+"Dog"] +_END_CONTEXT + +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Read"] +Reserve As Work 20,20 + +_BEGIN_CONTEXT["Read 20 bytes"] +RESULT=Socket Recv(SOCKET To Start(20),20) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["Data was read"] +' this value will change in the interpreter as tests run +' we are hacking the gibson here +BASE$="12345678901234567890" +Copy Start(20),Start(20)+20 To Varptr(DEST$) +_ADD_TO_REPORT[DEST$] +_END_CONTEXT + +Erase 20 +_END_CONTEXT +_END_CONTEXT + +_FINISH_SUITE: + +_BEGIN_CONTEXT["Socket Library Close"] +_BEGIN_CONTEXT["Close"] +Socket Library Close +_ADD_TO_REPORT["Success"] +_END_CONTEXT + +_BEGIN_CONTEXT["Double close"] +Socket Library Close +_ADD_TO_REPORT["Success"] +_END_CONTEXT +_END_CONTEXT + +Close 1 From 2ba9fd6c82e31d2507529e7a5d3027771a95261c Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 22:22:46 -0400 Subject: [PATCH 10/22] Finish up 1.1.4 --- API.md | 24 ------------- README.md | 74 +++++++++++++++++++++++++++++++++++--- src/AMOSPro_BSDSocket.Lib | Bin 6180 -> 6200 bytes src/BSDSocket.s | 25 +++++++------ src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- src/absdsocket | 3 +- src/report.txt | 34 ------------------ test/TestSuite | Bin 65428 -> 68324 bytes test/TestSuite.amos | Bin 8960 -> 11938 bytes 10 files changed, 84 insertions(+), 80 deletions(-) delete mode 100644 src/report.txt diff --git a/API.md b/API.md index e1d86ec..246a089 100644 --- a/API.md +++ b/API.md @@ -337,30 +337,6 @@ out. There's no way to set this timeout, or cancel or override it via AMOS. String with IP address, or blank string on error. ---- - -#### RESULT=Socket Status(Socket) - -Returns basic connection information about a socket. - -##### Warning - -Since none of the socket processing of this extension happens in the -background, you're likely better off using other means to detect -socket status. - -* Disconnected: Try a recv and get zero bytes back. Check Socket Errno. -* Broken: Try a send. If it fails, check Socket Errno. -* Ready: Use the Async Wait functions. - -##### Returns - -Status of socket: - -* 0 = Closed -* 2 = Listening -* 6 = Connecting -* 7 = Connected --- diff --git a/README.md b/README.md index 69c1fad..a46a986 100644 --- a/README.md +++ b/README.md @@ -127,6 +127,9 @@ Socket Library Close * [AQUABYSS](https://agedcode.com/agedcode/en/games/aquabyss) * As of April 2023, the extension's been in heavy use for over a month on the client side of the game. +* [Hop to the Top: Bunny's Revenge](https://rabbit.robsmithdev.co.uk/) + * The game uses this extension to send and receive high score information. + I also did some of the art for the game! Doing something cool with the extension? [Contact me](https://theindustriousrabbit.com/about) and I'll add it to the list! @@ -158,7 +161,7 @@ This project uses semantic versioning. ## License -Copyright 2023 John Bintz. Licensed under the MIT License. +Copyright 2023-2024 John Bintz. Licensed under the MIT License. If you use this in your project, and you really want to, throw a link to theindustriousrabbit.com somewhere! You can @@ -181,14 +184,75 @@ to contact me. * Fix bug in Socket Wait Async Writing where result of getsockopt was incorrectly used. -## Development +### 1.1.0 (2024-02-23) + +* Fix bug in `Dns Get Host Address By Name$` where it assumed AMOS strings are + null-terminated. They are not. +* Add `Socket Herrno` to aid in debugging resolver errors. + +### 1.1.1 (2024-03-17) + +* Fix bug in `Socket Inet Ntoa$` where the null terminator on the result of + calling `Inet_NtoA` was being included in the AMOS string. +* Fix crash bug in `Socket Inet Ntoa$` if called with the BSD Socket library + was not open. + +### 1.1.2 (2024-03-18) + +* Fix all functions that return strings so that strings work properly + in AMOS. While you could kind of use the immediate return value of the + string, any future manipulation of that string would fail. This fixes + the following functions: + * `Socket Inet Ntoa$` + * `Dns Get Address By Name$` + * `Socket Recv$` + +### 1.1.3 + +Internal release. + +### 1.1.4 (2024-04-26) + +* Fix bug in fdset macro where using D3 for a parameter could cause corruption +* Copy a null-terminated copy of IP address for `SocketIPAddressPortToSockaddr` +* Add test suite to exercise extension functionality +* Fix several crash bugs found due to the test suite +* Retructure API docs for easier reading + +# Development ### Environment +#### Native Amiga + * Clone the [AMOS Professional source code](https://github.com/AOZ-Studio/AMOS-Professional-Official) -* Run `execute absdsocket` - * Note that you'll have to fix up some assigns and files in the AMOS Professional - source directory. I'll update this README with those changes once I track them down... + * Copy `AMOSPro Sources/+lequ.s` to `+LEqu.s` +* Generate the socket LVO file in the `src` directory + * Install [`fd2pragma`](https://aminet.net/package/dev/misc/fd2pragma) in your path + * Download `https://raw.githubusercontent.com/cnvogelg/amitools/master/amitools/data/fd/bsdsocket_lib.fd` to `src` + * In a Shell: + + ``` + cd src + fd2pragma bsdsocket_lib.fd to "" special 20 + ``` + +* Fix up `src/absdsocket` to match your system's setup +* In a Shell: + +``` +cd src +execute absdsocket +``` + +#### Emulated setup (WinUAE, FS-UAE, Amiberry) + +Run `bin/setup` to do most of the setups above. + +### Debugging + +Modify data in the `DebugArea` and read it by `Peek`/`Deek`/`Leek`ing from +the base address provided by `Socket Get Debug Area`. ### Releasing diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index c7308ecba14273d3c79c34456be4b549eb2a9b08..5ed4bb227a74f7d1b2d68f263f30f5e74a4f89a5 100644 GIT binary patch delta 162 zcmZ2tu)|=2xF{~V6j7$tnjLZ}?lJiqi^)eEZvr~(bO7rwmQp+?MRKi??tP~9O4D}EyfldLsJxXX9mU# uhqXP}vNj6{gt1R{;AfxQFP_I`tZQUoWMW`qXg--;LO~G01-XHN`4a#^{UbmC diff --git a/src/BSDSocket.s b/src/BSDSocket.s index e557aad..c465bff 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -7,7 +7,7 @@ ; extension number 18 ExtNb equ 18-1 Version MACRO - dc.b "1.1.3-20240417" + dc.b "1.1.4-20240426" ENDM VerNumber equ $1 @@ -345,7 +345,7 @@ C_Tk dc.w 1,0 dc.b "socket close socke","t"+$80,"00",-1 AddTokenFunction SocketHerrno - dc.b "socket herrn","0"+$80,"0",-1 + dc.b "socket herrn","o"+$80,"0",-1 ; TOKEN_END dc.w 0 @@ -1372,8 +1372,10 @@ _SocketSelect_PerformSelect PreserveStackFunction EnsureBSDSocketLibrary _SocketInetNtoa_LibraryOpen + MOVE.L ChVide(A5),D3 + RestoreStackFunction - Ret_Int + Ret_String _SocketInetNtoa_LibraryOpen: MOVE.L D3,D0 @@ -1390,9 +1392,6 @@ _SocketInetNtoA_StringSizeLoop: TST.B (A0)+ BNE _SocketInetNtoA_StringSizeLoop - MOVE.L A0,D3 - SUB.L A2,D3 ; D3 = length - SUBQ #1,D3 ; get rid of the null terminator MOVE.L A0,D4 SUB.L A2,D4 ; D4 = length SUBQ #1,D4 ; get rid of the null terminator @@ -1413,13 +1412,8 @@ _SocketInetNtoA_StringSizeLoop: SUBQ #1,D4 _SocketInetNtoA_StringCopyLoop: - MOVE.B (A2,D3),(A0,D3) - DBRA D3,_SocketInetNtoA_StringCopyLoop - - ; make the address even - EvenOutStringAddress A0,D3 - - MOVE.L A0,HiChaine(A5) ; Does L_Demande nuke A5 too? + MOVE.B (A2,D4),(A0,D4) + DBRA D4,_SocketInetNtoA_StringCopyLoop MOVE.L A1,D3 ; string return @@ -2146,7 +2140,12 @@ _SocketCloseSocket_LibraryOpen: Lib_Par SocketHerrno ; - - - - - - - - - - - - - PreserveStackFunction + EnsureBSDSocketLibrary _SocketHerrno_LibraryOpen + RestoreStackFunction + Ret_Int + +_SocketHerrno_LibraryOpen: ; set up tag list memory and place for herrno to go Dlea AcceptScratchArea,A0 MOVE.L A0,A2 diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index e449567..edcfc99 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 26-04-2024 14:45:36 +; BSDSocket.s, list of the library functions on the 26-04-2024 20:54:05 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index 7aa7186..9109d2a 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 26-04-2024 14:45:36 +; BSDSocket.s, library size on the 26-04-2024 20:54:05 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 diff --git a/src/absdsocket b/src/absdsocket index c7bcab6..7d36159 100644 --- a/src/absdsocket +++ b/src/absdsocket @@ -9,5 +9,4 @@ FAILAT 21 copy AMOSPro_System:APSystem/AMOSPro_BSDSocket.lib AMOSPro_System:APSystem/AMOSPro_BSDSocket.lib.bak FAILAT 10 copy AMOSPro_BSDSocket.Lib AMOSPro_System:APSystem/ -;use an amos file here that includes the plugin to quickly build a test program -;apcmp "aqua_test_plugin.amos" inclib +apcmp "/test/TestSuite.amos" inclib diff --git a/src/report.txt b/src/report.txt deleted file mode 100644 index 9caf71b..0000000 --- a/src/report.txt +++ /dev/null @@ -1,34 +0,0 @@ -[Socket Library Open/Open Library] 1075577444 -[Socket Library Open/Double open] 1075577444 -[Socket Create Inet Socket] 0 -[Socket Set Nonblocking/False] 0 -[Socket Set Nonblocking/True] 0 -[Socket Set Nonblocking/True] Preserving this state for rest of tests -[Dns Get Address By Name$/Bad domain name] -[Dns Get Address By Name$/localhost] 127.0.0.1 -[Dns Get Address By Name$/aminet.net] 35.223.124.178 -[Dns Get Address By Name$/aminet.net] Using this IP address for connection tests -[Dns Get Address By Name$/Returned string can be manipulated] Cat35.223.124.178Dog -[Socket Connect/port too high] -11 -[Socket Connect/blank ip] -14 -[Socket Connect/invalid ip] -1 -[Socket Connect/aminet IP (35.223.124.178) from above] -1 (ok to be -1, will Wait Async Writing next) -[Socket Wait Async Writing/With unconnected socket/2 second timeout] 1 -[Socket Wait Async Writing/With unconnected socket/Zero timeout] 1 -[Socket Wait Async Writing/Connected socket/Two second timeout] 1 -[Socket Wait Async Writing/Connected socket/Zero timeout] 1 -[Socket Wait Async Writing/Connected socket/Attempt to get actual connection] 1 -[Socket Wait Async Writing/Socket Send and Socket Send$/Socket send$ first half] 10 -[Socket Wait Async Writing/Socket Send and Socket Send$/Socket send second half] 18 -[Socket Wait Async Writing/Socket wait Async Reading/With unconnected socket/2 second timeout] 1 -[Socket Wait Async Writing/Socket wait Async Reading/With unconnected socket/Zero timeout] 1 -[Socket Wait Async Writing/Socket wait Async Reading/With aminet socket/2 second timeout] 1 -[Socket Wait Async Writing/Socket wait Async Reading/With aminet socket/Zero timeout] 1 -[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Recv$/Read 20 characters] HTTP/1.1 302 Found - -[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Recv$/String can be manipulated] CatHTTP/1.1 302 Found -Dog -[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Read/Read 20 bytes] 20 -[Socket Wait Async Writing/Socket Recv$ and Socket Recv/Socket Read/Data was read] Date: Fri, 26 Apr 20 -[Socket Wait Async Writing/Socket Library Close/Close] Success -[Socket Wait Async Writing/Socket Library Close/Double close] Success diff --git a/test/TestSuite b/test/TestSuite index 01256c2b0ac118b5486db423a28d07ab4acc556e..77dbabe0564f85a138d85e856567cac9e1e85b3f 100644 GIT binary patch delta 6502 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 MJ>nWW6u-^?584@IS^xk5 delta 3988 zcmb7H4@?`^8GmpBttRXSi+k5GaM3Op$F5ORkUn{Xs7wk&{elDKQL(LklCE=G$I%eUO4U+Ybq7uu;>(rO80n#IyUI@!2w8DqU{d0;v8vYFYsl%E;>zPqE( zdV%Asq%-0fIAuSD4~-L!`$5wQX+E3zq^x&Bj-HU?g>%N#=6?jODE>0RnX)gC=v0T)hk(78`4>9T*UEW&y7XshDoW2 zA}Q7;&IvDAgseIkz%k6p4HA&?WrvXQRWi($Ap(Db z42MfIWIkoj8`Hq}&UD zP#yusfa3r}$sm(20<*w80CDm%u#UWtqXUGFYG4o01@r+4;1F;G0G9(?jw#>;;2haP z9IxZ%7rB!DurOL_Puc{{A-r((r^u|sq{Fo-|{wAEx9NrbH2!^GUhmDn; zz`_z$F_oJXSU(V;N^?xCYN9>OPYRdl`R4EK{_{8qOW!4*ZCAIVt$yPQ5eOM0pSh3X zgNl!@tYPx2nv&H+WGzM8T3QimvL&Xk*+U)bR`siAroT?ICt+;UCSs&fmPJBF1{)px zHzA{NBYk3=RAv^Qt^Hu`_j5geA#=;qqZK<;<2pDsa{FNXTXw&C;Mciq-=8F`E;b%o zG%j=8x5&n|32;f^dfFmenjW3=tHxy-7n5PU!nbH#=D11rcpDKO#hQ>-k-+V62U<-gTMq~cTG#f7FhG0T#>MrI>D9J6as6F-t1Tg}-^%QL z?4(WH5usP(`^6oBjHkUxq?exmWW#0sr$6ft1-Hol@?9*9X_mJr*E diff --git a/test/TestSuite.amos b/test/TestSuite.amos index 58bbeea156371e1e023739d1b7d1f0e283b68858..51ce26b9233b2bf326b1b28b545d6faf9ca6da00 100644 GIT binary patch literal 11938 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 delta 1661 zcma)6L1-IC6#YB0){?Ervbs(eOInX?S*WTBvg4>mZiQ-6W75_wZZ0)0W-YHQ5k*RN z*G>+F=Fn3x#mN^vs3r=)Kd<eiz2;isQ{!54I^Qsg_+=Vv*<_{%%W?+oD1YmI@71JWpi04Ajb&EY3f zl17hh>5@kb5Bhc)gmKxM6XCXZ-unZ{^!1CEDyaBC&WrGue3yZSc7MhXnhaLGc*Ve> zcpQK2&#I7+!8EMxs(rK%%i$w-8*HkfVbqsqkih5BNxbSScH!XA#l7;KYvDfdzk53F zmfyiW^1oq_#)ku!M9>0UhBRZ9Yxt-?f)@s-#cX*ncRZ`%&x4ei#y5k+-ANIl5co|5 z<;;GvlLD+ZTXU(}&>%u-{Ns$kKC*|)U zMF`ziE{$uU+*Dh0S7FEjC=#`lVXzKO)!S-53l$cdf*c({5(4k=l3BmX^^N+D0lNS( zk=Su$r|?}GcKF^Lemw)(0MzZWVXixef1;7MdpDBBMtHf4I$Lyv&Eh}dwnUluR5a3~ zsW$e{F$Wt`zr^>Hk4HP3cX8xPER2yN!f`3g#51Suu3>&;riHsV^3nWHq{#a+*k;AB zgq(R0zlIYB08|gHcPQ4{6i3g_Ts&TcuZ6@x4|@u!|0F$ei-On7?n4w*0FQ?q0{A5= zMcd=v*&MD!3Jeyo5qYS>(f}(}Ov_#`>($cHzBlD4w}6+U$!@>e9e!P-l1um?>iTt) z)5QeKDAsG6PQ7)@)=itZ%1WzjjPAzeyPAS~F`sDSUMyKSCgxu4OpkqfRtC`lmCFj9 z=d@SdXHj-awVe=B6ZrjDk27oG+Ahe`s}sTNyoVE-*#F}M7uj+`NX_HZiBTLMzpuio z%uc>%((@*1d@)XPuA*<^TM@pSI1t=EPdGQWl%SJyoab{c1Ox$JB$D57NnU|DZkH<- z-_fhv2ES3MR(Y|k*R~8^snLoEwqaf~4f^N0#cji~EpBet=q*=7KIb%}XT z+Ln{FRoSrWHBML3aB!qI^sx=yGU%+5piIx4pS^%1lf&~dDgL8WAQHmY3R!gRCxA1yO^~>N+(F?0RemS`-;oiCMzsSb3hX4Qo From 3452973001ec7a4e8cee7d13f4dfbd9eba10a87a Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 22:35:36 -0400 Subject: [PATCH 11/22] Update README --- .gitignore | 2 ++ README.md | 37 ++++++++++++++++++++++++++++--------- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index afe86f5..04c527d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ patches/ .vamosrc activate test/report.txt +test/TestSuite.info +src/report.txt diff --git a/README.md b/README.md index a46a986..0a844d2 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,7 @@ Socket Library Close * [Hop to the Top: Bunny's Revenge](https://rabbit.robsmithdev.co.uk/) * The game uses this extension to send and receive high score information. I also did some of the art for the game! +* [Gopherized](https://allanon71.itch.io/gopherized) Doing something cool with the extension? [Contact me](https://theindustriousrabbit.com/about) and I'll add it to the list! @@ -168,10 +169,12 @@ throw a link to theindustriousrabbit.com somewhere! You can also find a donate link on [the About section on The Industrious Rabbit](https://theindustriousrabbit.com/about). -## Feedback? Bug reports? +## Feedback? Bug reports? Patches? -Go to the [About section on The Industrious Rabbit](https://theindustriousrabbit.com/about) -to contact me. +First, run `test/TestSuite` to generate a `report.txt` file. + +Then, go to the [About section on The Industrious Rabbit](https://theindustriousrabbit.com/about) +to contact me, send the `report.txt` along with the details on your issue. ## Changelog @@ -213,13 +216,13 @@ Internal release. ### 1.1.4 (2024-04-26) -* Fix bug in fdset macro where using D3 for a parameter could cause corruption -* Copy a null-terminated copy of IP address for `SocketIPAddressPortToSockaddr` -* Add test suite to exercise extension functionality -* Fix several crash bugs found due to the test suite -* Retructure API docs for easier reading +* Fix bug in fdset macro where using D3 for a parameter could cause corruption. +* Copy a null-terminated copy of IP address for `SocketIPAddressPortToSockaddr`. +* Add test suite to exercise extension functionality. +* Fix several crash bugs found due to the test suite. +* Retructure API docs for easier reading. -# Development +## Development ### Environment @@ -251,9 +254,25 @@ Run `bin/setup` to do most of the setups above. ### Debugging +#### Cross-platform + Modify data in the `DebugArea` and read it by `Peek`/`Deek`/`Leek`ing from the base address provided by `Socket Get Debug Area`. +#### WinUAE/FS-UAE + +In the debugger, set a memory breakpoint at `$100` for two written bytes: + +``` +w 0 100 2 +``` + +Then, in your code, clear those two bytes to stop execution at that point: + +```asm + CLR.W $100 +``` + ### Releasing #### Ubuntu/Debian diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index edcfc99..83b9efb 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 26-04-2024 20:54:05 +; BSDSocket.s, list of the library functions on the 26-04-2024 22:25:06 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index 9109d2a..56fa0e9 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 26-04-2024 20:54:05 +; BSDSocket.s, library size on the 26-04-2024 22:25:06 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 From 534f04273bb60a774ce9ed192e988a7bd169f93f Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 22:37:58 -0400 Subject: [PATCH 12/22] Rebuild source --- test/TestSuite.basic | 90 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 4 deletions(-) diff --git a/test/TestSuite.basic b/test/TestSuite.basic index 372e6ed..5581634 100644 --- a/test/TestSuite.basic +++ b/test/TestSuite.basic @@ -177,6 +177,41 @@ Next TRIES _END_CONTEXT _END_CONTEXT +_BEGIN_CONTEXT["Socket Get Host"] +_BEGIN_CONTEXT["socket id too high"] +RESULT=Socket Get Host(999999) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["socket id is valid"] +RESULT=Socket Get Host(SOCKET) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Get Port"] +_BEGIN_CONTEXT["socket id too high"] +RESULT=Socket Get Port(999999) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT + +_BEGIN_CONTEXT["socket id is valid"] +RESULT=Socket Get Port(SOCKET) +_ADD_TO_REPORT[Str$(RESULT)] +_END_CONTEXT +_END_CONTEXT + +_BEGIN_CONTEXT["Socket Inet Ntoa$"] +_BEGIN_CONTEXT["Use the socket host"] +RESULT$=Socket Inet Ntoa$(Socket Get Host(SOCKET)) +_ADD_TO_REPORT[RESULT$] +_END_CONTEXT + +_BEGIN_CONTEXT["String can be manipulated"] +_ADD_TO_REPORT["Cat"+RESULT$+"Dog"] +_END_CONTEXT +_END_CONTEXT + _BEGIN_CONTEXT["Socket Send and Socket Send$"] HTTP_REQUEST_HEADERS$="GET / HTTP/1.0"+Chr$(10)+"Host: amiga"+Chr$(10)+Chr$(10) @@ -221,6 +256,8 @@ _END_CONTEXT _END_CONTEXT +'Goto _FINISH_SUITE + _BEGIN_CONTEXT["Socket Recv$ and Socket Recv"] _BEGIN_CONTEXT["Socket Recv$"] _BEGIN_CONTEXT["Read 20 characters"] @@ -243,11 +280,11 @@ _ADD_TO_REPORT[Str$(RESULT)] _END_CONTEXT _BEGIN_CONTEXT["Data was read"] -' this value will change in the interpreter as tests run -' we are hacking the gibson here BASE$="12345678901234567890" -Copy Start(20),Start(20)+20 To Varptr(DEST$) -_ADD_TO_REPORT[DEST$] +For I=0 To 19 + Mid$(BASE$,I+1,1)=Chr$(Peek(Start(20)+I)) +Next I +_ADD_TO_REPORT[BASE$] _END_CONTEXT Erase 20 @@ -268,4 +305,49 @@ _ADD_TO_REPORT["Success"] _END_CONTEXT _END_CONTEXT +_BEGIN_CONTEXT["Call functions with library closed"] +_=Socket Set Nonblocking(0,True) +_ADD_TO_REPORT["Socket Set Nonblocking"] +_=Socket Reuse Addr(0) +_ADD_TO_REPORT["Socket Reuse Addr"] +_=Socket Create Inet Socket +_ADD_TO_REPORT["Socket Create Inet Socket"] +_=Socket Connect(0 To "",0) +_ADD_TO_REPORT["Socket Connect"] +_=Socket Bind(0 To "",0) +_ADD_TO_REPORT["Socket Bind"] +_=Socket Listen(0) +_ADD_TO_REPORT["Socket Listen"] +_=Socket Accept(0) +_ADD_TO_REPORT["Socket Accept"] +_=Socket Wait Async Reading(0,0) +_ADD_TO_REPORT["Socket Wait Async Reading"] +_=Socket Wait Async Writing(0,0) +_ADD_TO_REPORT["Socket Wait Async Writing"] +_=Socket Set Timeout(0,0) +_ADD_TO_REPORT["Socket Set Timeout"] +_=Socket Close Socket(0) +_ADD_TO_REPORT["Socket Close Socket"] +_=Socket Send$(0,"") +_ADD_TO_REPORT["Socket Send$"] +_=Socket Send(0,0,0) +_ADD_TO_REPORT["Socket Send"] +_$=Socket Recv$(0,0) +_ADD_TO_REPORT["Socket Recv$"] +_=Socket Recv(0 To 0,0) +_ADD_TO_REPORT["Socket Recv"] +_=Socket Get Host(0) +_ADD_TO_REPORT["Socket Get Host"] +_=Socket Get Port(0) +_ADD_TO_REPORT["Socket Get Port"] +_$=Socket Inet Ntoa$(0) +_ADD_TO_REPORT["Socket Inet Ntoa$"] +_=Socket Errno +_ADD_TO_REPORT["Socket Errno"] +_= Extension_18_02F8 +_ADD_TO_REPORT["Socket Herrno"] +_$=Dns Get Address By Name$("") +_ADD_TO_REPORT["Dns Get Address By Name$"] +_END_CONTEXT + Close 1 From 6db285d328dd6a10639ca8f18c6ec5ccbd40f738 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 22:39:41 -0400 Subject: [PATCH 13/22] Use build in src directory for source rebuilds --- bin/rebuild_raw_source | 2 +- test/TestSuite.basic | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/rebuild_raw_source b/bin/rebuild_raw_source index 3c2c04a..c6fa8e2 100755 --- a/bin/rebuild_raw_source +++ b/bin/rebuild_raw_source @@ -2,5 +2,5 @@ for i in examples/*.amos test/*.amos; do echo "$i" - ~/Projects/amostools/listamos -e AMOSPro_BSDSocket.Lib "${i}" > "${i%.amos}.basic" 2>/dev/null + ~/Projects/amostools/listamos -e src/AMOSPro_BSDSocket.Lib "${i}" > "${i%.amos}.basic" 2>/dev/null done diff --git a/test/TestSuite.basic b/test/TestSuite.basic index 5581634..3d9dda7 100644 --- a/test/TestSuite.basic +++ b/test/TestSuite.basic @@ -344,7 +344,7 @@ _$=Socket Inet Ntoa$(0) _ADD_TO_REPORT["Socket Inet Ntoa$"] _=Socket Errno _ADD_TO_REPORT["Socket Errno"] -_= Extension_18_02F8 +_=Socket Herrno _ADD_TO_REPORT["Socket Herrno"] _$=Dns Get Address By Name$("") _ADD_TO_REPORT["Dns Get Address By Name$"] From cbb822f8952db906f96a9a2ea31a60046ebc8286 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 26 Apr 2024 22:44:33 -0400 Subject: [PATCH 14/22] fix api thing --- API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/API.md b/API.md index 246a089..989ccda 100644 --- a/API.md +++ b/API.md @@ -409,4 +409,4 @@ how many sockets were left. * 0 on timeout * -1 on error -* # of interesting sockets on success +* Count of interesting sockets on success From bd6d8a129549f1176b6280d8dd97293d14a6c9ec Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sat, 27 Apr 2024 07:03:51 -0400 Subject: [PATCH 15/22] Fix test contexts --- src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- test/TestSuite | Bin 68324 -> 68332 bytes test/TestSuite.amos | Bin 11938 -> 11960 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index 83b9efb..5a289de 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 26-04-2024 22:25:06 +; BSDSocket.s, list of the library functions on the 27-04-2024 07:03:15 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index 56fa0e9..472b193 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 26-04-2024 22:25:06 +; BSDSocket.s, library size on the 27-04-2024 07:03:15 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 diff --git a/test/TestSuite b/test/TestSuite index 77dbabe0564f85a138d85e856567cac9e1e85b3f..a3b418bfb66381bea33c65e2229c286e43de4ed6 100644 GIT binary patch delta 3249 zcmZveZD>ZHLDQ>H*YAp`kwHwY4MW%=oDIy}8i4+q= zM23{Iqh%BsLqtXi;#!gEWRy`haWeKnhAZL+DIy|8L_}S{{m;31PVQ~|@C!M4{?GqD z&w0z8KUekiT-BKFX#6SuwQptPuIhtt55F~ztk~*42~Hc=8LRC#3a<|)d+}{#-D`ZF z-5@?k_>6CJ^Q2L5jiwO`T|35vI(SBo?$C&5{JN`GMvC0hF=c0^9DQ;ZPGp%jq29|8^WJ#m&-re*PySLPLlU}Nj)4GFSscmR2 zIZMqZ(#X*+8u6Y$bAwg4Pet|zn%DM9^#SuY)la$7??^3mQ#5K9UC#2`fz)QJ_X}%0 zjJZUmv*<39?qnJJGlXB*Z_`JGUrtsOZhMD%kkm5wFy%^&cD8`GcBRlclHd4>qNE(jrQMJ(Y$F_xpWbO9wge24AV$$xix5eP4=xAH(tUb zt(Llzq~pW2shDLVBI6Vhc|23sxU3W{Pjcj<(uilOdbEHexr(MP{mv zB}b1a#>X0TT1pwQZ7nTqUji*|U4qIL&|1hh8%i(9hKxe>yl~aZGl%;|{O&p=2!P=$PM=s)K(+2ra_z2Y~J;RF+gjSw?kugH~^00?x1*L;cHOt>d-=RBi{zf{Q z&m3$okvz*#{GyvfE1l_@-mH1?@1Q$Hdsw#2n}2umuF+o7@4`RFsq2t|FyB6H$)&x20bb3VmEDelF*V2b&Lvg8v!yrhm5wMQY+EQV+<qiVV%{)ZzMWvsd#bc24d9qa(Z;3)V8jDc}*5ln&Kz+Es09)p*Rx!j-zgg^`E z0`PMU0(iRifYV?UoCOyE@^da2xM1Lhfm;Jf&H zg_$=4J_P8@i{iY)U<8~1F!W9Ucz7S-^_T$^<3lk%6yr;PHn1A>fdQ}$7mW{<`Ou{g zmHA-igPHF%7zdZYRWJko0{4J0M^Sz+Kwip$@6nOU> delta 3288 zcmaKueP|R%7{=$kcptlace&&~chB=;a!E|jP^DZ`NmHv)FqYLq8j45^VoMQ`AbOP` zTnIs=ln^>qq(});ipUbwfK)3*MA{-nM5L5fq?J&#gc3x8+M<1C_GWI^Oa0?_-0b_j z&%879&fU%(tD8MmH)(i`bD59TRmPBS`1yh7=D}CC2FAfr^CBVjJ*M?!IMQ(N!^`1)$dj(!1gGa>tqy$6ZP`(-fVLBbiBwMZv%kC;YXX9mGeQcX+Yfj0_#T~mv9zERPcHAZ+ z(s9NAI99Hc{WFp}B=YFfhUI0)j;36fD|H6Gz14KG@linvHymPwa zi*!!V?f$5CN&2kF=XJ`S;-fnyMRcFp&xB5FsfI#M3OOB0#>yULtK?R+JI2bM%&#(3 zxymB4EGr{xoyNB1idGrztBvL~8U3&}+ESjD;jwC%?L>Y+Mk;?DtQ`AK%CMNiI4%{_ z)m$_ORCZ~`9jUnNRK+$35>;pZg_!yTN`i4n6^s;7eeE%ispM4eo(?Li|fW0APB526O=U`TGDo{exf(90e2LBtX6& z`DH&00x$@~fDYQhTJR3o1rC4_Fba?yKyu&=_zv6zKZ9BDh>)NU;ARIK02UVP1nWUR z*bY7dhX588oCL>7nFL`NgkkU-@I8QG5S0b*g9Snq6s5pSX$7wVtV}_13U)~;fx`fX z%I5$c%J1MQ-knj5iegk0qozO>6u?@r4w#@H*IvacRaB`22h>t5x6Y?}y>&}f`iI#_ NJzF2lJlN{}_CExS_3!`y diff --git a/test/TestSuite.amos b/test/TestSuite.amos index 51ce26b9233b2bf326b1b28b545d6faf9ca6da00..7cc9b2a0b5439033d2baef4ce8621e45b053fcc7 100644 GIT binary patch delta 1971 zcma)6O=ufe5T1Sd|FNV9*;-5TdL2v3N?NNMH&uhv3e}{ENmDhrAvDIREz1%Xb*e_% zh8%qGq4W?!aWbaR9D;C4$*CAp+z>)AJ@n8+Frm<5O6aMCK%tkWB^2EEb|qPsWQZ=K zdHc=0neTlwYZvZa@V)i!d+&?mxoRmdo;&>N5fLDH>$>k}0&xAAK){T4E>Vj(ciNHgIp+ z68qzpZ5nRf_MAW*@7PZVg6ozbzUDa0P8S?wyQc#F=%A5teD0vVYaz^J zoR69D^{hqPTYxFOw0f&5tkQcBP=nBT?X8EA z+WrlQy5N?!`s`<7WshRY>T@+O!dWj=3;FWL^IE={s+y~)^i9mZM%n>7!&5f| zAFd2oSrIn}qM6+X(1(F2UGC|c8CV50U5YVxRCwA!GFi}4H5KdO!}#T37i~3gO|>#Q zgLp~oqF5dKGK#Gu8;bStX?!>wK;yv&JdB%3>)z$I^rrFGgOtveH``>roe683r5L6! zr%P)qOow0=jgdp9B}zgOm5AViStFUtRSOy~MVyW(J}43>0af-AfJIkp5o;0A+Q8Dq zE8P7f@|Yu_;Qd4AnDI(kX6B^R%&bcvFk_Et-{xX;b1V3*ZeGMbWZqO1RFjwwb9>Pwjrk&Vtqj|V8=ZvCrdwA^EA5QUViRVYlH7>| z*@x_5loD2tPd;o#`ml#SI66w7N*JXNGK!S42NBsr8C@B&r?Lmh-T!~@O^n7gFDLih z-}(BTkNfD#$`$MTXU={qelS(Yro`E!?;H~WqTk=Kz98~HcU}ub-okdyMdUT~b6%>$ zan4Vl9!T729eXUd+$Qp`n9vV1aZ7(f55UuZYkKNo8SnBVO#I0&61jv@Ys?^*cqrsj zU!?IDrw3!E7K}OF_;;(@AusTdPZz$Nk>nLfbjjovNYqyezj6kNynrRM53jeS8gQ_o z;a;^xtGM?Jq2{=63<_@5@P^1m{JH%!6M|9X3o4DHQ#^W7FnKsigysH)PX$Q3| z;+qc2fnvhMsPTCfbHCq0PzJ0B)GhHOHMY$5mXCiGR&jMt+UO08Us=hHHJ$*oI*MD@W7G6PN_G12txUvy6_Z zgykebBAVTGP&*7IKX0SQ%c)u1?Pi!pw-y6-jfS;A%OAj3SfUTlsTu_>66 zIe^Qy4^OZKIM0KW&!!8E$Pr+_B}KLaICPC%X{nXaWgk4XOC-!Qa!oq&m^!E@_@U+$ z^m_86;vRH5vH@V=s4E&Cf3Oc>(h)*)#DJEbAyz}Yhwdm_qX1pGp@wp}mA&h>)qM%S zc6`K4es{dxa%Zn)RJ?>b*V&*P=SlrSbB`#FE_O9iZ42hH(nn8C9EJYxn7G#;uB}nV zJxb&#u6pcPb}u?)p`A=;^95-#Gc_|Uujm6xYzF8#ep%yqzR5&NYM!;Ymnl^OKJ2Y+ zpUHEQ$UKgFdexZDNV(d!emYT=?Jg*!Q@IVg&<*%-H<%UYQzclE)mo{?&AA2WAap{>efYZ~arZ(Yu|stLW=!h;>(bB@S)Tt9Mwi9jI1#9UyU ziKl^!Oo#)@ySV{+^7Hsa6_(&Prp)di!^@t5S!!}ZRf!?rJ z)p+n)xRXI=!*!T8^SN|t7TEfl*(suFg?pr5F$0rCsae7&g^P_in#52PVrp; nI|p4#7QsEQ$bSIzV6s=1XqfpKiMpz>a#2yw0~i69qTc@jgLTqD From e041696136985ec8ee5f76d8d1fd0bab8f1646c4 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sat, 27 Apr 2024 07:04:15 -0400 Subject: [PATCH 16/22] Source build --- test/TestSuite.basic | 1 + 1 file changed, 1 insertion(+) diff --git a/test/TestSuite.basic b/test/TestSuite.basic index 3d9dda7..5bef365 100644 --- a/test/TestSuite.basic +++ b/test/TestSuite.basic @@ -176,6 +176,7 @@ For TRIES=0 To 10 Next TRIES _END_CONTEXT _END_CONTEXT +_END_CONTEXT _BEGIN_CONTEXT["Socket Get Host"] _BEGIN_CONTEXT["socket id too high"] From f93a33ee0d1226484298819423be5413897ef06c Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sun, 28 Apr 2024 21:15:19 -0400 Subject: [PATCH 17/22] Even more bugfixes, this test suite breaks the system around AMOS --- src/AMOSPro_BSDSocket.Lib | Bin 6200 -> 6284 bytes src/BSDSocket.s | 45 ++++++++++++++++++++++++++------------ src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- test/TestSuite | Bin 68332 -> 68648 bytes test/TestSuite.amos | Bin 11960 -> 12728 bytes 6 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index 5ed4bb227a74f7d1b2d68f263f30f5e74a4f89a5..26b227ab1278d46709db01ee603495ad58dad848 100644 GIT binary patch delta 231 zcmdmC&|^43JW`5*f%zo^0~?TL@B^}i7#Kw60NEi742}Ut28?qVm>AR;*co^j!WoPi zY=LY81~Udl1{DT(AYYEb0m#o`NM)G7z{{Y-pv>UNP{*LhAkT1bW5G2xHm6Dk21bU> zZtN0_Q1;{kE~U*49LbE6<;9gJvvG+`PU14!?8C*!I$1$nX>t_55{TYh!+(T{+2eV` zWJe)0&L`On3}<}qGcZoB6PnIwv{_8pgjvq$NU)30t-v$?{}^#HIWjO_I;ic*mZiqw UbHC(33De|tf(Dysh%I0Q09-*e*Z=?k delta 224 zcmeA%++i?5Jd%}xf%zo^0~?TL@B^}i7#Ku6fb0+k2FCy+1ID=wOblua>g~1)jmt$}M@^ctc8746BG6*sVF*q{RG3YVKGu+u&aE)!V54!~8*Nl8rOjvfk1#RnPo6AfCh#bmf#H;byhbh) zhd$7%qRIY3Vv`q(s7w|W4q-IdoF#0+Ea&{efJxhvElZ8V;7G8G;3fy48v@V#|KW4L SPA))xd>S)jewZA|Cznn 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 delta 5987 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 DpD2k- diff --git a/test/TestSuite.amos b/test/TestSuite.amos index 7cc9b2a0b5439033d2baef4ce8621e45b053fcc7..3a345c649a6e94965ebe5ebaab8161399ded4230 100644 GIT binary patch delta 2610 zcmb7GT})GF7=FJ)f1s@`wxvImwuiRT@>48R!6`66G&r#!5DZRN3YN85rK~*~vXHsO zEnAkwsjpXF8Mh_7@Pfs}c(rh`xWp`mo82r6F-vCV#mtgryE0?%cY2Q01MDY(m*(aD z`<~}}-mmx0+?#duA0HVP2hye7tT@@RXRip*an#)^U;w*GkTNAHl`WJc zSic2L;E}SK-2B<|C8?MzoG%sAGc!4|I?e z-mx{IQQu?O$t!y>sXtidsRev&NZ^XThI#OT{(Ba{n}%1&J~F(7%PtottU62>53vYJ z#*XTU0ZN70H#7K^*I)jZ*N0Dx4ek~L6f>psd5MNh+Si4TL82xRe8=0$TJW+hh6~kc zZ4~^VMEz2|TZ!tcY2G&K-5MUXTyqKIMk9voK|EpdW6`vaCGbnrF|q+mqdp-BxdmJ{ z2JpVwhvQ}^`LpJO75=AT?;#De@CksE!y;!ZXSgL#_W}j51Yl&k3p|o{quPCzJOQL* zjrdk|J$`E$Ryy4d4{$$D?nv*_paZAM=T^X!;JRGz#~msPJa4Zxz6l8>4;QU3D|k_) zUZC3&mAn68-M?+lpzWxflP3F{t&RxY;O10qPhO=~VGs@|h;#~&;#ZGYRrz{8_i1}C zN5syNtB6zCe;!9Md`R`Tg@*NHG!(3_(CyZXM@PjN&}Wqj?zJ?FbH&0rF+Eebkl|GM zdBgt(>d;OO>f+7?A|r}syPGx0Q2iY6ciMQFZVMDhQ^k~gu`5pR)|^T?eK%gWk7!XA zj>wF5V=~B@dFY&o__ml)4O3fUUtI@}ertM(cA)#s z|C#_iRhx-ZK#5?zi?>U<++^om&1?X#xI}r&JPrHs(@^!lpN2-b7IIZAE*(yLTG1A- z!CH40)g5vlB+DmFc)PR*XJy5!%2;zu;YH6d#ee7dr>tjXH7j~*7pJhQezbYWAXIKd zc8{V+Lu!u=ZQx&_AREF!_ye+^hubQrr$x-S$|YZ;p@*}W#AUw=SA0>AVThiD1EQ>y z$`ysb`=;F!CSfjDX4(-fd8KlhxnD zPT{cM&v-p=d`0Cp%mVLSV8^D)N|dUh4Y{!}$2F)wnUk_&dEHck$URM9#6JVw z4W2F3qqN@;+hz@wTSu_0p*6>WEodDNz3y63;@>~3DS4dX!YXdQ0mEzQXiMl{7 z{iT~IB23a(M=awAj%?9rK;+(ilWlF?-@f)sJig@dhY!0 znKR?n$<uM{eik$d|x`2KysLQZOv&pRZNOP8?L3dzl_dN-J4T*oc7otu`)rtj*_bosHqEqm$2DZRZz zH~vOqE-nS>!z(cH3S@WX3Bocx!3&42<^i-!b(7oiWIEZJ`+D$AzYXsfMsT-qnvz{8 z@?oczfb===K~c9S_hF+s=-iV-+6?@eJ60dwG}K#;@xe7iOUBAwJanwpo#KdMwN%oQ zYb0zd>9f7`;TI(xo!Mq(TG$F;=9q*8h{CaLJp+V_003?dwn?vmDnvK!T#5>z7i1j9S+RnR z;w`b6Fy9b=%k7UaBYW-hEoOG3<3#vas{{Tm+8xF#32BDIMH@*}NRH0xqvNZj$f2lH zq3FL+%T#kfS>g*V_^KkNxdg`ZNhv8tdm{ajq2B1w<;ZZiGRaCqe{_Ff$tA~@0tpU# z8i)Y_@lKHoSG?BThq5Obk6rJ%45?#2J5JY_-jR1pOeIW=r{grsUNDDGHl8}& z)cjIQ=->oU!i08Wg$AYsNbo(xc>-`x{x$*Bs?-KKNhTI>W+=7_2N-F%4}*E?_$82B zR1~Z0Bqy#mlbY`-*@Y6xOJ3;7YQTiQI&9iZboy&?Vyo{2Xa0( Date: Thu, 2 May 2024 17:04:43 -0400 Subject: [PATCH 18/22] Improve build script --- bin/release | 65 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/bin/release b/bin/release index dd9dd06..edd9a4f 100755 --- a/bin/release +++ b/bin/release @@ -6,14 +6,14 @@ require 'erb' source = File.read('src/BSDSocket.s') -aminet_template = ERB.new(File.read("aminet.readme.erb")) +aminet_template = ERB.new(File.read('aminet.readme.erb')) capture_version = false version = nil source.lines.each do |line| if capture_version - version = line[/dc\.b "([^"]+)"/,1] + version = line[/dc\.b "([^"]+)"/, 1] break end @@ -34,48 +34,67 @@ FileUtils.rm_rf build_dir FileUtils.mkdir_p build_dir FileUtils.mkdir_p 'aminet' +FileUtils.cp 'src/AMOSPro_BSDSocket.Lib', 'AMOSPro_BSDSocket.lib' + hackerbun_target = File.expand_path("dist/AMOSPro_BSDSocket_#{version}.lha") [ - "AMOSPro_BSDSocket.Lib", - "README.md", - "API.md", - "LICENSE", + 'AMOSPro_BSDSocket.Lib', + 'README.md', + 'API.md', + 'LICENSE' ].each do |file| target = "#{build_dir}/#{file}" FileUtils.mkdir_p File.dirname(target) FileUtils.cp file, target end -[ - "src", - "examples" +%w[ + src + examples ].each do |dir| FileUtils.cp_r dir, "#{build_dir}/#{dir}" end -Dir["icons/**/*.info"].each do |info| - target = info.gsub("icons/", build_base + "/") +Dir['icons/**/*.info'].each do |info| + target = info.gsub('icons/', build_base + '/') FileUtils.mkdir_p File.dirname(target) FileUtils.cp info, target end +Dir[File.join(build_base, '**', '*.uaem')].each do |file| + FileUtils.rm file +end + +Dir[File.join(build_base, '**', '*.bak')].each do |file| + FileUtils.rm file +end + +Dir[File.join(build_base, 'src', '*.Lib')].each do |file| + pp file + FileUtils.rm file +end + +Dir[File.join(build_base, 'src', 'bsdsocket_l*')].each do |file| + FileUtils.rm file +end + Dir.chdir build_base do Open3.popen2e( - "jlha", "c", hackerbun_target, - *(Dir["*"])) do |stdin, stdout_and_stderr, wait_thr| - - Thread.new do - stdout_and_stderr.each { |l| puts l } - end - - stdin.close - - wait_thr.value + 'jlha', 'c', hackerbun_target, + *(Dir['*']) + ) do |stdin, stdout_and_stderr, wait_thr| + Thread.new do + stdout_and_stderr.each { |l| puts l } end + + stdin.close + + wait_thr.value + end end -FileUtils.cp hackerbun_target, "aminet/BSDSocket-Extension.lha" -File.open("aminet/BSDSocket-Extension.readme", "w") do |fh| +FileUtils.cp hackerbun_target, 'aminet/BSDSocket-Extension.lha' +File.open('aminet/BSDSocket-Extension.readme', 'w') do |fh| fh.puts aminet_template.result(binding) end From cf1dff31b9d7225ca6b5c488365728e810a39045 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 2 May 2024 17:04:54 -0400 Subject: [PATCH 19/22] Change HiChaine approach for Dns Get Address By Name$ --- src/BSDSocket.s | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 6af1ca8..e0b697d 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -2033,6 +2033,9 @@ _DnsGetHostAddressByName_GetIPAddressLength: ADDQ #2,D3 Rjsr L_Demande ; string is in A0/A1 + LEA 2(A0,D3.W),A1 + MOVE.L A1,HiChaine(A5) + MOVE.L A0,A1 MOVE.W D4,(A1)+ @@ -2042,11 +2045,6 @@ _DnsGetHostAddressByName_KeepCopying: MOVE.B (A2)+,(A1)+ DBRA D4,_DnsGetHostAddressByName_KeepCopying - MOVE.W A1,D1 - AND.W #$0001,D1 - ADD.W D1,A1 - - MOVE.L A1,HiChaine(A5) MOVE.L A0,D3 RestoreStackFunction From 4ba099348341623a74e6fc72f1e63024002fa111 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 2 May 2024 17:06:03 -0400 Subject: [PATCH 20/22] Update README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a844d2..aa7d094 100644 --- a/README.md +++ b/README.md @@ -214,13 +214,14 @@ to contact me, send the `report.txt` along with the details on your issue. Internal release. -### 1.1.4 (2024-04-26) +### 1.1.4 (2024-05-02) * Fix bug in fdset macro where using D3 for a parameter could cause corruption. * Copy a null-terminated copy of IP address for `SocketIPAddressPortToSockaddr`. * Add test suite to exercise extension functionality. * Fix several crash bugs found due to the test suite. * Retructure API docs for easier reading. +* Improve build and release tooling. ## Development From ab20c1b1ea1c92f5090998c6986df90e8f1b5603 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 2 May 2024 17:08:44 -0400 Subject: [PATCH 21/22] Preparing for release --- AMOSPro_BSDSocket.Lib | Bin 5892 -> 6272 bytes bin/release | 2 +- src/AMOSPro_BSDSocket.Lib | Bin 6284 -> 6272 bytes src/BSDSocket_Labels.s | 2 +- src/BSDSocket_Size.s | 2 +- test/TestSuite | Bin 68648 -> 68632 bytes 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/AMOSPro_BSDSocket.Lib b/AMOSPro_BSDSocket.Lib index 14341093646faa280e4ac5d92a7d950d73e443e2..7995e0afb4502526f6a4d4622797cbbd480e2e34 100644 GIT binary patch delta 991 zcma)5OH30{6umRk(DLncI$$-CK8G@?0{sk4HP}c?F^r@VYKfl>M4(7OfmB)(Kcqoc zE)4N)G>t4+x*$qjn8>0=7ZOPnSIB}c{8ZdX*a%7O_&SgPi3Vr!-gz(Yo_o)^cP4Cc z=VZk|!2tkf6(GMu8^Ig^f1ltE0AIW0pdJGaB50w6+|)w@!47c45wJiDIah+0oUcL{ zCZQArr~)61fep;C0#jslfeCKF1#*At+1PK|NP*@0aL-_P6!nKAk)fXs1(G+J73P?n zVb=to`(Pgc7f9=Mfpnn`c@#xiZ;M*wke~k)e5YjjIRHGOl`7deU=6oPX_T`G=$7xG z5mQZxrUX(0@l;`La!LE1!YBEvGJCOjjn>r;5`8mDCq_jll5Ein+9GF6AW}aP^j#uX z`!%un+Dg$A1e;^j>PvwMq``#0l|22ghso!qofP))0_OCBy1VqpadkP5Z|M)$T6GWa zg_=bT?N@Rg{+!_#P%;0SgRVJKFd)c|H=$<3te03BTu?UfoIWL4WIGijKL0&HN`<^) zt8tdp3c9(lg4f(jG;JlLMvH-{{ zXHb04G}y$hK$_CnL68xxa-2qH++OYxLw+ms5A#X4xMk9*tf<2?n3V8#5LD{9fu78MP6x}v(#X>-*{4$0+k pNp58A8SV|+`Y)3|C(<1qvh{{zN5OLb^tlG)wC#SGPewjw{ST`aBVPaj delta 657 zcma)4J!n%=7(MsC*!R*lX{|bs6kYe21Sr6PX5p}Q-)dv z!KrdV3dP+?Y#)e_B^Wmc?c$`1Qc9iFMTeOBJvziL>hk?@?)RN@xGRPG-dgJBk(YqB z2ZR}C0X_h%<5V|++J&NIPrxCdV;nVTlr&))0ej>5xP;5dZm#^|!6WUXmNwf+02Db`VII7(oA~O~nhmwC7bDp!BEct}arI3cM0s{^1Vr+Bq0Ns9Mqr zb!mrIgeH*m-Hr&QN31JMswHbH1peigDktm4by|PbvHxdr@FF?KQrmqx#{Drt3{TMG z^UwA@aZN3x=5j+Dh9*dZSILBKXo85Ur>VYj(^KQpE6fySu_Vi~q|T)?)}I49K!5Q2 EZ``V?Gynhq diff --git a/bin/release b/bin/release index edd9a4f..f32fe09 100755 --- a/bin/release +++ b/bin/release @@ -34,7 +34,7 @@ FileUtils.rm_rf build_dir FileUtils.mkdir_p build_dir FileUtils.mkdir_p 'aminet' -FileUtils.cp 'src/AMOSPro_BSDSocket.Lib', 'AMOSPro_BSDSocket.lib' +FileUtils.cp 'src/AMOSPro_BSDSocket.Lib', 'AMOSPro_BSDSocket.Lib' hackerbun_target = File.expand_path("dist/AMOSPro_BSDSocket_#{version}.lha") diff --git a/src/AMOSPro_BSDSocket.Lib b/src/AMOSPro_BSDSocket.Lib index 26b227ab1278d46709db01ee603495ad58dad848..7995e0afb4502526f6a4d4622797cbbd480e2e34 100644 GIT binary patch delta 120 zcmeA%Y%rW4t}o8O!2FVdfelDA_yO5M3=ATDKz0ZNgJXb^0pnZ-CI&SIb_O1xh%tlJ zL^or`@{Ltz*f#sHOE6BJz@xOeheL=@#`%K*leQ;YmXe3jkzg00TY+c(|54-cxnFXi UglY0WL4(b2#O5)w0L}jd0L+yiBLDyZ delta 122 zcmZoL>@l1mt}n&F!2FVdfelDA_yO5M3=AT3fb0+k2FCy+1ID=wOblua>>48z^CtjmZ5!qQ diff --git a/src/BSDSocket_Labels.s b/src/BSDSocket_Labels.s index ff534f4..94dbfc0 100644 --- a/src/BSDSocket_Labels.s +++ b/src/BSDSocket_Labels.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, list of the library functions on the 28-04-2024 19:05:54 +; BSDSocket.s, list of the library functions on the 02-05-2024 14:22:07 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ L_Cold: set 0 diff --git a/src/BSDSocket_Size.s b/src/BSDSocket_Size.s index edeb000..a7da5aa 100644 --- a/src/BSDSocket_Size.s +++ b/src/BSDSocket_Size.s @@ -1,5 +1,5 @@ ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -; BSDSocket.s, library size on the 28-04-2024 19:05:54 +; BSDSocket.s, library size on the 02-05-2024 14:22:07 ; ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lib_Size equ 39 diff --git a/test/TestSuite b/test/TestSuite index 429b8bf24113cb534f240cf6e5d38232924cf98c..386b1d25614b60cf27a7418f33517cd50ed52700 100644 GIT binary patch delta 676 zcmZ8dO=uHQ5Z(#FAJSyAn`FDY>DFCCqSn^z!9obSV$w)N8%^z{Q1J)!BqfOUpb#Wp zBvc4Y4oeWJJ&Ag;50&Vp2T$VBL&&LzU_pv_vQP>-`!IocnfJ~2GjHB|>H1yQ-#7%d zx8~LeWbnFZ;?ZCNvK-wB#yC>Y4W5Nn>;}(J)kDWQHrega6o8GUGLGwFM9fa*g-q&% zkSetw35g7T6JJn#Ic!0X##z`7M+uqAVf+<7NV(l``k!(^3Q^yXEPN<=o`#gBenVQ| zx`MV`;P*`8nw)?ZcW%itA#d8oh#$>J0y><(6_E+``R5U9f6LovT*a!Q<7R}x1YV9= z_%7-|W#H3e)8HfCtNrYo*lEsL7*L{|zY0y7@)YX)dnQL;^IpN9qmSeK^+!$#!kGF% zD76JaoLHul|HO)V4Zh&Es>PSQKjN<1uxo4`P0gTN9I8EB)QtF(fww#CP1@MhEPBU# zsuk=|qKUsXYr5V~81`_&XblwSKc#~gbxl)Azvt~`-0bV#?#T*Pbpuw}GyOvdYHa@4 zjOI)3Vk=jMAGn>X-UYY~8bmERnp`r-75Lco_YYC#z zg;We&DT9bq7eO!^9aMrK6`-!) zC5!c2ERn^A_=MyOK@(bJXJS1Vrpi#_*b4ec_d7VYJvk-`Fo_k(#G8`KsYqkguS;`$ zu3$=@rruD7@u{4EDrauWGF7hIy5EaND1rB-I9>?Ju+c#uhs+&ScbonJEGrs*4LNWC zXCo%Q3R|$$;c1Zx5D0f;+p!io%rO&pDPfMEfi-fu2dn%z!@bXWui*FIJ2C$EJ(G;} zMHgAI&X~A=fil0tO7tvz#;vFtTXZkPS+~1ceecjvb$Z33*ur^LkF9pN&2H|Xg%4Dd z{_&dP5`H1Y8vantiH<@~bu090+e^3pn{425O;rbIe%0MeKi{6ayAPJJtm#m59%*j` zSaweD%c`E_PJEay!7toO-|b1?Ugf>q_ Date: Thu, 2 May 2024 17:13:55 -0400 Subject: [PATCH 22/22] Missing label colon --- src/BSDSocket.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BSDSocket.s b/src/BSDSocket.s index e0b697d..b5515fd 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -1977,7 +1977,7 @@ _DnsGetHostAddressByName_StringRamAllocated: MOVE.L D0,A1 ; a1 contains address SUBQ #1,D1 ; reduce by one for DBRA -_DnsGetHostAddressByName_KeepCopyingAMOSString +_DnsGetHostAddressByName_KeepCopyingAMOSString: MOVE.B (A0)+,(A1)+ ; byte copy DBRA D1,_DnsGetHostAddressByName_KeepCopyingAMOSString ; keep copying MOVE.B #0,(A1)+ ; null terminate string