amiga-bsdsocket-coding/amos_pro_original/BSDSocket.readme

122 lines
3.6 KiB
Plaintext
Raw Normal View History

2023-01-11 13:03:46 +00:00
Short: Use bsdsocket.library calls in AmosPro
Uploader: John Bintz (hello@theindustriousrabbit.com)
Author: John Bintz (hello@theindustriousrabbit.com)
Type: dev/amos
These procedures directly call bsdsocket.library, the TCP library created by
your Internet Dialer (Miami, AmiTCP, TermiteTCP). They are much faster and more
friendly than the TCP: device equivalents, as they allow transfers to be
Non-Blocking. Normally, with TCP:, if there was no data to get, TCP: would lock
until it got some. Now, the program will simply ignore lack of data and move
on.
You need a lot of memory to run a Stack and Amos at the same time. I would say
three or four meg would do it, depending on what else you have running.
The EasyLife extension is required.
Licensed under the MIT license.
Commands (port 80 is http):
BSD_OPEN
Open the bsdsocket.library
BSD_CLOSE
Close the bsdsocket.library and all sockets attached
SOCK_OPENCONNECTION[HOST$,SPORT]
Open a connection to a computer in the fashion tcp://HOST$:SPORT/
Returns Socket ID
Example: SOCK_OPENCONNECTION["www.yahoo.com",80]
SOCK_OPENSERVER[SPORT]
Create a server port on your computer
Returns Socket ID
Example: SOCK_OPENSERVER[80]
SOCK_CHECKHOSTPORT[SOCKET]
Check Host Socket for a connection
Returns Connected Socket ID (use this for transfers) or -1
Example: SOCK_CHECKHOSTPORT[MYPORT]
SOCK_GETYOURHOST
Returns your host computer's name
Example: SOCK_GETYOURHOST : Print Param$
"as1s23-wmn.erols.com"
SOCK_SENDSTRING[SOCKET,A$]
SOCK_READSTRING[SOCKET,MXSIZE]
Writes and reads strings over a socket
SENDSTRING returns characters sent
READSTRING returns string received
SOCK_SEND[SOCKET,ADR,LEN]
SOCK_READ[SOCKET,ADR,LEN]
Send and receive large chunks of data over a socket
Both return numbers of characters sent/received
SOCK_CLOSE[SOCKET]
Close a socket and save some memory
SOCK_ERR[VARADDR]
Set a certain 4-byte memory address to receive TCP errors
SOCK_NEW
Create a new socket
Returns socket ID of new socket
SOCK_SETIO[SOCKET]
Set Non-Blocking, Asynchronous IO on a Socket
There are also a collection of commands especially for working with FTP, as it
uses a crazy system of ports and data links. I decided to save youall the
trouble of figuring out FTP. Grab the RFC for FTP. With these commands, you'll
have it all figured out.
FTP_OPENCONNECTION[HOST$,SPORT]
Open an FTP connection (ftp://HOST$:SPORT/)
FTP_HOSTSOCK
Returns Socket ID of Host machine (where to send FTP commands)
FTP_YOURSOCK
Returns your Socket ID for transfers (where to check for files)
FTP_YOURPORT$
Returns the PORT string to use
FTP_CLOSECONNECTION
Close FTP connections
'A Sample TCP/FTP Session
'All the major commands are used in here
(FTP port is 23)
FTP_OPENCONNECTION["ftp.wustl.edu",23]
Proc FTP_HOSTSOCK : HOSTSOCK=Param
Proc FTP_YOURSOCK : YOURSOCK=Param
Proc FTP_YOURPORT$ : YOURPORT$=Param$
E$=Chr$(13)+Chr$(10)
SOCK_SENDSTRING[HOSTSOCK,"USER anonymous"+E$]
SOCK_SENDSTRING[HOSTSOCK,"PASS uv334@victoria.tc.ca"+E$]
Repeat
SOCK_READSTRING[HOSTSOCK,256]
Print Param$
Until Param$=""
SOCK_SENDSTRING[HOSTSOCK,"CD /pub/aminet/game/rpg/"+E$]
SOCK_SENDSTRING[HOSTSOCK,YOURPORT$]
Repeat
SOCK_READSTRING[HOSTSOCK,256]
Print Param$
Until Param$=""
SOCK_SENDSTRING[HOSTSOCK,"GET FinalExistence.lha"] : Rem Shameless, aren't I?
CONN=-1
Repeat
SOCK_CHECKHOSTPORT[YOURSOCK]
If Param>-1
CONN=Param
Reserve As Work 23,2048
Open Out 1,"FinalExistence.lha"
Repeat
SOCK_READ[CONN,Start(23),2048] : BYTES=Param
If BYTES>-1
Ssave 1,Start(23) to Start(23)+BYTES-1
End If
Until BYTES=-1
End If
Until CONN>-1
SOCK_CLOSE[CONN]
FTP_CLOSECONNECTION