home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / CDROM / GetCDDB / src / MYTCP_~1.BB2 < prev    next >
Text File  |  2000-01-07  |  8KB  |  350 lines

  1. ;MyTCP_ASM.bb2
  2.  
  3. ; Attempt to convert TCP funcs into ASM...
  4.  
  5. ;-----------------------------------------------------------
  6. ; Standard Blitz TCP Functions V1.8 by Paul Burkey (c)1997-1998
  7. ; Compiled with help from Ercole Spiteri and Anton Reinauer
  8. ; You *must* have the bsdsocket.library setup in Blitz!!
  9. ; Contact me at burkey@bigfoot.com
  10. ;-----------------------------------------------------------
  11. ;History
  12. ;-------
  13. ;<16.2.97> Version 1.8
  14. ;Added NLPrintTCP{} for easy send string with carrage return and newline.
  15. ;Removed need for 3rd Party libs (only bsdsocket.library needed)
  16. ;
  17. ;<24.12.97> Version 1.7
  18. ;ReadTCP{} Updated with extra safety and Speed
  19. ;
  20. ;<18.9.97> Version 1.6
  21. ;Added PrintTCP{}  for an easy "send string" command.
  22. ;Added NPrintTCP{} for easy send string with carrage return
  23. ;CheckTCP{} merged into the ConnectTCP{} function.
  24. ;
  25. ;---------------
  26. ; Function List
  27. ;---------------
  28. ;
  29. ;ReadTCP{}                       ; Similar to Edit$() - recives data via TCP connection
  30. ;ReadMemTCP{ReadAdd.l,MaxSize.l} ; Similar to ReamMem - recives data via TCP connection
  31. ;ConnectTCP{host$,port.w}        ; Connect to a remote machine (Full error checking)
  32. ;PrintTCP{text$}                 ; Similar to Print - sends data via TCP connection
  33. ;CloseTCP{}                      ; Closes TCP Connection
  34.  
  35. ;---------------------------------
  36. ; TCP library Variables/Constants
  37. ;---------------------------------
  38.  
  39. #TCPBuflen=$2048                ;Maximum data size to read at any time
  40. TCPmem.l=AllocMem(#TCPBuflen,0) ;Allocate the temp buffer used for all TCP reads
  41. #FIONREAD=$4004667f             ;FIONREAD request
  42.  
  43. ;---------------------------------
  44. ; Standard TCP library structures
  45. ;---------------------------------
  46.  
  47. NEWTYPE.list
  48.   *ItemA.b
  49.   *ItemB.b
  50. End NEWTYPE
  51. NEWTYPE.inaddr
  52.   s_addr.l
  53. End NEWTYPE
  54. NEWTYPE.sockaddrin
  55.   sin_len.b
  56.   sin_family.b
  57.   sin_port.w
  58.   sin_addr.inaddr
  59.   sin_zero.b[8]
  60. End NEWTYPE
  61. NEWTYPE.hostent
  62.   *h_name.b
  63.   *h_aliases.list
  64.   h_addrtype.l
  65.   h_length.l
  66.   *h_addr_list.list
  67. End NEWTYPE
  68.  
  69. Statement CloseSocket{sock.l}
  70.   SHARED SocketBase.l
  71.  
  72.   PutReg a6,temp.l
  73.  
  74.   GetReg d1,SocketBase ; put SocketBase into d1
  75.   MOVE.l d1,a6         ; move SocketBase from d1 to a6
  76. ;  GetReg d0,sock.l
  77.   JSR -120(a6)
  78.   GetReg d1,temp.l
  79.   MOVE.l d1,a6            ; restore a6
  80.   AsmExit
  81.  
  82. End Statement
  83.  
  84. Function.l gethostbyname{host$}
  85.   SHARED SocketBase.l
  86.  
  87.   PutReg a6,temp.l
  88.  
  89.   GetReg d1,SocketBase ; put SocketBase into d1
  90.   MOVE.l d1,a6         ; move SocketBase from d1 to a6
  91.   GetReg d1,&host$
  92.   MOVE.l d1,a0          ; put address of host into a0
  93.   JSR -210(a6)
  94. ;  PutReg d0,res.l
  95.  
  96.   GetReg d1,temp.l      ; restore a6
  97.   MOVE.l d1,a6
  98.  
  99.   AsmExit
  100. End Function
  101.  
  102. Function.l socket{d.l, t.l, p.l}
  103.   SHARED SocketBase.l
  104.  
  105.   PutReg a6,temp.l
  106.  
  107.   GetReg d3,SocketBase ; put SocketBase into d1
  108.   MOVE.l d3,a6         ; move SocketBase from d1 to a6
  109. ;  GetReg d0,d.l        ; store vars in registers
  110. ;  GetReg d1,t.l
  111. ;  GetReg d2,p.l
  112.   JSR -30(a6)
  113. ;  PutReg d0,res.l  ; not needed
  114.   GetReg d1,temp.l
  115.   MOVE.l d1,a6
  116.  
  117.   AsmExit
  118. End Function
  119.  
  120.  
  121. Function.l connect{sock.l, host.l, StructLength.l}
  122.   SHARED SocketBase.l
  123.  
  124.   PutReg a6,temp.l
  125.  
  126.   GetReg d3,SocketBase ; put SocketBase into d1
  127.   MOVE.l d3,a6         ; move SocketBase from d1 to a6
  128.  
  129. ;  GetReg d0,sock.l
  130.   MOVE.l d1,a0 ; put host.l into a0
  131.   MOVE.l d2,d1 ; move StructLength into d1
  132.   JSR -54(a6)
  133. ;  PutReg d0,res.l
  134.   GetReg d3,temp.l  ; restore a6
  135.   MOVE.l d3,a6
  136.   AsmExit
  137.  
  138. End Function
  139.  
  140. Function.l recv{sock.l, buf.l,lenght.l,flags.l}
  141.   SHARED SocketBase.l
  142.  
  143.   PutReg a6,temp.l
  144.   GetReg d4,SocketBase.l
  145.   MOVE.l d4,a6
  146. ;  GetReg d0,sock.l
  147. ;  GetReg a0,buf.l
  148.   MOVE.l d1,a0
  149. ;  GetReg d1,lenght.l
  150.   MOVE.l d2,d1
  151. ;  GetReg d2,flags.l
  152.   MOVE.l d3,d2
  153.   JSR -78(a6)
  154. ;  PutReg d0,res.l
  155.   GetReg d4,temp.l
  156.   MOVE.l d4,a6
  157.  
  158.   AsmExit
  159. End Function
  160.  
  161. Function.l IoctlSocket{sock.l, req.l, argp.l}
  162.   SHARED SocketBase.l
  163.  
  164.   PutReg a6,temp.l
  165.   GetReg d3,SocketBase.l
  166.   MOVE.l d3,a6
  167. ;  GetReg d0,sock.l
  168. ;  GetReg d1,req.l
  169. ;  GetReg a0,argp.l
  170.   MOVE.l d3,a0
  171.   JSR -144(a6)
  172. ;  PutReg d0,res.l
  173.   GetReg d3,temp.l
  174.   MOVE.l d3,a6
  175.   AsmExit
  176.  
  177. End Function
  178.  
  179. Function WaitSelect{nfds.l, readfds.l, writefds.l, exceptfds.l, timeout.l, signals.l}
  180.   SHARED SocketBase.l
  181.  
  182.   PutReg a6,temp.l
  183.   GetReg d6,SocketBase.l
  184.   MOVE.l d6,a6
  185. ;  GetReg d0, nfds.l
  186. ;  GetReg a0, readfds.l
  187.   MOVE.l d1,a0
  188. ;  GetReg a1, writefds.l
  189.   MOVE.l d2,a1
  190. ;  GetReg a2, exceptfds.l
  191.   MOVE.l d3,a2
  192. ;  GetReg a3, timeout.l
  193.   MOVE.l d4,a3
  194. ;  GetReg d1, signals.l
  195.   MOVE.l d5,d1
  196.   JSR -126(a6)
  197. ;  PutReg d0, res.l
  198.   GetReg d6,temp.l
  199.   MOVE.l d6,a6
  200.   AsmExit
  201. End Function
  202.  
  203. Function.l send{sock.l, buf.l, lenght.l, flags.l}
  204.   SHARED SocketBase.l
  205.  
  206.   PutReg a6,temp.l
  207.   GetReg d4,SocketBase.l
  208.   MOVE.l d4,a6
  209. ;  GetReg d0, sock.l
  210. ;  GetReg a0, buf.l
  211.   MOVE.l d1,a0
  212. ;  GetReg d1, lenght.l
  213.   MOVE.l d2,d1
  214. ;  GetReg d2, flags.l
  215.   MOVE.l d3,d2
  216.   JSR -66(a6)
  217. ;  PutReg d0, res.l
  218.  
  219.   GetReg d4,temp.l
  220.   MOVE.l d4,a6
  221.   AsmExit
  222. End Function
  223.  
  224.  
  225. ;---------------------------------
  226. ; Standard TCP Blitz Functions
  227. ;---------------------------------
  228.  
  229. .ReadTCP
  230. Function .s ReadTCP{}
  231.   SHARED sock.l,TCPmem.l
  232.   ;
  233.   ; This Function reads data from the server the result is passed back in a
  234.   ; string. If there is no messages then it will return an empty string =""
  235.   ;
  236.   sockread.l=0                                ;Clear Readmask
  237.   sockread.l BitSet sock.l                    ;Set Readmask on our socket
  238.   e.l=IoctlSocket{sock.l,#FIONREAD,TCPmem.l} ;How much data is there?
  239.   f.l=Peek.l(TCPmem.l)                        ;Place value in f
  240.   If f>0
  241.     If f>#TCPBuflen Then f=#TCPBuflen         ;Don't read more than #TCPBuflen
  242.     c=recv{sock.l,TCPmem.l,f,0}              ;Read all Data
  243.     c$=String$(" ",f)                         ;Reserve String
  244.     CopyMem_ TCPmem.l,&c$,f                   ;Copy Data to string
  245.     Function Return c$
  246.   Else
  247.     Function Return ""
  248.   EndIf
  249. End Function
  250.  
  251.  
  252. .WriteMemTCP
  253. Statement WriteMemTCP{ad.l,size.w}
  254.   SHARED sock.l
  255.   ;
  256.   ; This routine writes data via TCP.
  257.   ;
  258.   sockwrite.l=0                           ;Clear Writemask
  259.   sockwrite.l BitSet sock.l               ;set Writemask on our socket
  260.   g.l=WaitSelect{2,0,&sockwrite.l,0,0,0} ;Wait until server is ready to read our data
  261.   c.l=send{sock.l,ad,size,0}             ;Send data to server
  262. End Statement
  263.  
  264.  
  265.  
  266. .ConnectTCP
  267. Function .b ConnectTCP{host$,port.w}
  268.   SHARED sock.l
  269.   SHARED SocketBase.l
  270.   ;
  271.   ; Check if Miami/AmiTCP stack is available
  272.   ; Connect to host at specified port
  273.   ; Return true or False if Connection is made
  274.  
  275.   SocketBase.l=OpenLibrary_("bsdsocket.library",0)
  276.   If SocketBase=0
  277.     Function Return 0
  278.   Else
  279.  
  280. ;    CloseLibrary_(SocketBase)
  281.  
  282.     sock.l=socket{2,1,0}
  283.  
  284. ;    Request "Hmm","Sock="+Str$(sock.l),"OK"
  285.     *a.hostent=gethostbyname{host$}
  286. ;    Request "Hmm","*a="+Str$(*a),"OK"
  287.  
  288.     If *a=0
  289.       CloseLibrary_(SocketBase.l)
  290.       Function Return 0   ; host not found (or internal TCP error)
  291.     Else
  292.       ;
  293.       ; Copy Details to our Sockaddrin structure
  294.       ;
  295.       CopyMem_ *a\h_addr_list\ItemA,&host.sockaddrin\sin_addr,*a\h_length
  296.       host.sockaddrin\sin_port=port       ;Set port number
  297.       host.sockaddrin\sin_family=2        ;Set type to AT_INET
  298.       StructLength.l=SizeOf .sockaddrin   ;Get lenght of structure sockaddrin
  299.       Request "o",Str$(host.sockaddrin),"OK"
  300.       If connect{sock.l,host.sockaddrin,StructLength}
  301.         CloseSocket{sock.l}
  302.         CloseLibrary_(SocketBase)
  303.         Function Return 0
  304.       Else
  305.         Function Return -1
  306.       EndIf
  307.     EndIf
  308.   EndIf
  309. End Function
  310.  
  311.  
  312.  
  313. .PrintTCP
  314. Statement PrintTCP{text$}
  315.   ;
  316.   ; Send String via TCP
  317.   ;
  318.   WriteMemTCP{&text$,Len(text$)}
  319. End Statement
  320.  
  321. .CloseTCP
  322. Statement CloseTCP{}
  323.   SHARED sock.l
  324.   SHARED SocketBase.l
  325.   ;
  326.   ; This is a simple close socket command
  327.   ; Provided for the shear hell of it :)
  328.   ;
  329.   CloseSocket{sock.l}
  330.  
  331.   CloseLibrary_(SocketBase)
  332.   SocketBase=0
  333. End Statement
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341. ;  If NOT ConnectTCP{"cddb.cddb.com",80};#_FALSE
  342. ;    Request "moo","Unable to connect to CDDB server","OK"
  343. ;    End
  344. ;  EndIf
  345. ;
  346. ;  CloseTCP{}
  347. ;
  348. ;  End
  349.  
  350.