home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / develop™ Technical Journal / develop Issue 6 code / TCP.sea / TCP / NewsWatcher / NW Source / Shared Code / Reusable Source / ftp.c < prev    next >
MacBinary  |  1995-07-08  |  13.6 KB  |  [TEXT/MMCC]

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: MacBinary (archive/macBinary).

ConfidenceProgramDetectionMatch TypeSupport
66% dexvert Compact Compressed (Unix) (archive/compact) ext Supported
10% dexvert MacBinary (archive/macBinary) fallback Supported
10% dexvert Jesper Olsen Module (music/jesperOlsen) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Sat Jul 8 11:46:15 1995, modified Sat Jul 8 11:46:15 1995, creator 'MMCC', type ASCII, 13212 bytes "ftp.c" , at 0x341c 410 bytes resource default (weak)
99% file data default
49% TrID Macintosh plain text (MacBinary) default
33% TrID TTComp archive compressed (bin-2K) default (weak)
16% TrID MacBinary 2 default (weak)
0% TrID Sybase iAnywhere database files default (weak)
100% siegfried fmt/1762 MacBinary (II) default
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[MMCC]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 05 66 74 70 2e 63 00 | 00 00 00 00 00 00 00 00 |..ftp.c.|........|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 4d 43 | 43 01 00 00 00 00 00 00 |.TEXTMMC|C.......|
|00000050| 00 00 00 00 00 33 9c 00 | 00 01 9a ac 24 58 c7 ac |.....3..|....$X..|
|00000060| 24 58 c7 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |$X......|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 a0 ea 00 00 |........|........|
|00000080| 2f 2a 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/*------|--------|
|00000090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 0d 0d |--------|------..|
|000000d0| 09 66 74 70 2e 63 0d 0d | 09 54 68 69 73 20 72 65 |.ftp.c..|.This re|
|000000e0| 75 73 61 62 6c 65 20 61 | 6e 64 20 72 65 65 6e 74 |usable a|nd reent|
|000000f0| 72 61 6e 74 20 6d 6f 64 | 75 6c 65 20 69 6d 70 6c |rant mod|ule impl|
|00000100| 65 6d 65 6e 74 73 20 46 | 54 50 20 6f 70 65 72 61 |ements F|TP opera|
|00000110| 74 69 6f 6e 73 2e 0d 09 | 0d 09 54 68 65 20 66 6f |tions...|..The fo|
|00000120| 6c 6c 6f 77 69 6e 67 20 | 66 75 6e 63 74 69 6f 6e |llowing |function|
|00000130| 73 20 61 72 65 20 65 78 | 70 6f 72 74 65 64 3a 0d |s are ex|ported:.|
|00000140| 09 0d 09 09 46 74 70 4f | 70 65 6e 20 2d 20 4f 70 |....FtpO|pen - Op|
|00000150| 65 6e 20 61 6e 20 46 54 | 50 20 73 74 72 65 61 6d |en an FT|P stream|
|00000160| 2e 0d 09 09 46 74 70 43 | 6c 6f 73 65 20 2d 20 43 |....FtpC|lose - C|
|00000170| 6c 6f 73 65 20 61 6e 20 | 46 54 50 20 73 74 72 65 |lose an |FTP stre|
|00000180| 61 6d 2e 0d 09 09 46 74 | 70 47 65 74 46 69 6c 65 |am....Ft|pGetFile|
|00000190| 20 2d 20 47 65 74 20 61 | 20 66 69 6c 65 2e 0d 09 | - Get a| file...|
|000001a0| 09 46 74 70 47 65 74 4c | 69 73 74 69 6e 67 20 2d |.FtpGetL|isting -|
|000001b0| 20 47 65 74 20 61 20 64 | 69 72 65 63 74 6f 72 79 | Get a d|irectory|
|000001c0| 20 6c 69 73 74 69 6e 67 | 2e 0d 09 09 46 74 70 50 | listing|....FtpP|
|000001d0| 75 74 46 69 6c 65 20 2d | 20 50 75 74 20 61 20 66 |utFile -| Put a f|
|000001e0| 69 6c 65 2e 0d 09 09 46 | 74 70 44 65 6c 65 74 65 |ile....F|tpDelete|
|000001f0| 46 69 6c 65 20 2d 20 44 | 65 6c 65 74 65 20 61 20 |File - D|elete a |
|00000200| 66 69 6c 65 2e 0d 09 09 | 46 74 70 47 65 74 53 65 |file....|FtpGetSe|
|00000210| 72 76 65 72 45 72 72 49 | 6e 66 6f 20 2d 20 47 65 |rverErrI|nfo - Ge|
|00000220| 74 20 73 65 72 76 65 72 | 20 65 72 72 6f 72 20 69 |t server| error i|
|00000230| 6e 66 6f 72 6d 61 74 69 | 6f 6e 2e 0d 09 09 46 74 |nformati|on....Ft|
|00000240| 70 4e 75 6d 42 79 74 65 | 73 54 72 61 6e 73 66 65 |pNumByte|sTransfe|
|00000250| 72 72 65 64 20 2d 20 47 | 65 74 20 6e 75 6d 62 65 |rred - G|et numbe|
|00000260| 72 20 6f 66 20 62 79 74 | 65 73 20 74 72 61 6e 73 |r of byt|es trans|
|00000270| 66 65 72 72 65 64 20 73 | 6f 20 66 61 72 2e 0d 09 |ferred s|o far...|
|00000280| 0d 09 59 6f 75 20 6d 75 | 73 74 20 63 61 6c 6c 20 |..You mu|st call |
|00000290| 6d 65 6d 75 74 69 6c 2e | 63 2f 49 6e 69 74 4d 65 |memutil.|c/InitMe|
|000002a0| 6d 55 74 69 6c 20 61 6e | 64 20 6e 65 74 2e 63 2f |mUtil an|d net.c/|
|000002b0| 4e 65 74 49 6e 69 74 20 | 62 65 66 6f 72 65 20 63 |NetInit |before c|
|000002c0| 61 6c 6c 69 6e 67 20 61 | 6e 79 20 6f 66 0d 09 74 |alling a|ny of..t|
|000002d0| 68 65 20 66 75 6e 63 74 | 69 6f 6e 73 20 69 6e 20 |he funct|ions in |
|000002e0| 74 68 69 73 20 6d 6f 64 | 75 6c 65 2e 20 59 6f 75 |this mod|ule. You|
|000002f0| 20 61 6c 73 6f 20 6d 75 | 73 74 20 63 61 6c 6c 20 | also mu|st call |
|00000300| 74 68 65 20 4e 65 74 49 | 64 6c 65 20 66 75 6e 63 |the NetI|dle func|
|00000310| 74 69 6f 6e 20 69 6e 20 | 79 6f 75 72 0d 09 69 64 |tion in |your..id|
|00000320| 6c 65 20 6c 6f 6f 70 2c | 20 61 6e 64 20 74 68 65 |le loop,| and the|
|00000330| 20 4e 65 74 54 65 72 6d | 20 66 75 6e 63 74 69 6f | NetTerm| functio|
|00000340| 6e 20 61 74 20 70 72 6f | 67 72 61 6d 20 74 65 72 |n at pro|gram ter|
|00000350| 6d 69 6e 61 74 69 6f 6e | 2e 0d 09 09 0d 09 41 20 |mination|......A |
|00000360| 22 73 74 72 65 61 6d 22 | 20 69 73 20 61 6e 20 61 |"stream"| is an a|
|00000370| 62 73 74 72 61 63 74 69 | 6f 6e 20 72 65 70 72 65 |bstracti|on repre|
|00000380| 73 65 6e 74 69 6e 67 20 | 61 20 62 69 64 69 72 65 |senting |a bidire|
|00000390| 63 74 69 6f 6e 61 6c 20 | 6e 65 74 77 6f 72 6b 20 |ctional |network |
|000003a0| 63 6f 6e 6e 65 63 74 69 | 6f 6e 0d 09 74 6f 20 61 |connecti|on..to a|
|000003b0| 6e 20 46 54 50 20 73 65 | 72 76 65 72 2e 20 41 20 |n FTP se|rver. A |
|000003c0| 73 74 72 65 61 6d 20 69 | 73 20 72 65 70 72 65 73 |stream i|s repres|
|000003d0| 65 6e 74 65 64 20 61 73 | 20 61 20 76 61 72 69 61 |ented as| a varia|
|000003e0| 62 6c 65 20 6f 66 20 74 | 79 70 65 20 22 46 74 70 |ble of t|ype "Ftp|
|000003f0| 53 74 72 65 61 6d 52 65 | 66 22 2e 20 0d 09 54 68 |StreamRe|f". ..Th|
|00000400| 65 73 65 20 73 74 72 65 | 61 6d 20 72 65 66 65 72 |ese stre|am refer|
|00000410| 65 6e 63 65 73 20 61 72 | 65 20 6f 70 61 71 75 65 |ences ar|e opaque|
|00000420| 2e 20 59 6f 75 20 6d 61 | 79 20 63 6f 70 79 20 74 |. You ma|y copy t|
|00000430| 68 65 6d 20 61 6e 64 20 | 70 61 73 73 20 74 68 65 |hem and |pass the|
|00000440| 6d 20 61 73 20 70 61 72 | 61 6d 65 74 65 72 73 20 |m as par|ameters |
|00000450| 0d 09 74 6f 20 66 75 6e | 63 74 69 6f 6e 73 20 69 |..to fun|ctions i|
|00000460| 6e 20 66 74 70 2e 63 2c | 20 62 75 74 20 79 6f 75 |n ftp.c,| but you|
|00000470| 20 61 72 65 20 70 72 6f | 68 69 62 69 74 65 64 20 | are pro|hibited |
|00000480| 66 72 6f 6d 20 61 63 63 | 65 73 73 69 6e 67 20 74 |from acc|essing t|
|00000490| 68 65 20 63 6f 6e 74 65 | 6e 74 73 20 6f 66 0d 09 |he conte|nts of..|
|000004a0| 74 68 65 20 6d 65 6d 6f | 72 79 20 62 6c 6f 63 6b |the memo|ry block|
|000004b0| 73 20 70 6f 69 6e 74 65 | 64 20 74 6f 20 62 79 20 |s pointe|d to by |
|000004c0| 74 68 65 20 72 65 66 65 | 72 65 6e 63 65 73 2e 20 |the refe|rences. |
|000004d0| 4f 6e 6c 79 20 74 68 65 | 20 66 75 6e 63 74 69 6f |Only the| functio|
|000004e0| 6e 73 20 69 6e 20 0d 09 | 66 74 70 2e 63 20 61 72 |ns in ..|ftp.c ar|
|000004f0| 65 20 70 65 72 6d 69 74 | 74 65 64 20 74 6f 20 6d |e permit|ted to m|
|00000500| 61 6e 69 70 75 6c 61 74 | 65 20 74 68 65 20 63 6f |anipulat|e the co|
|00000510| 6e 74 65 6e 74 73 20 6f | 66 20 74 68 65 73 65 20 |ntents o|f these |
|00000520| 62 6c 6f 63 6b 73 2e 0d | 09 0d 09 54 68 65 20 66 |blocks..|...The f|
|00000530| 75 6e 63 74 69 6f 6e 73 | 20 72 65 74 75 72 6e 20 |unctions| return |
|00000540| 61 20 76 61 6c 75 65 20 | 6f 66 20 74 79 70 65 20 |a value |of type |
|00000550| 4f 53 45 72 72 20 61 73 | 20 74 68 65 20 66 75 6e |OSErr as| the fun|
|00000560| 63 74 69 6f 6e 20 72 65 | 73 75 6c 74 3a 0d 09 0d |ction re|sult:...|
|00000570| 09 09 6e 6f 45 72 72 09 | 09 09 09 6e 6f 20 65 72 |..noErr.|...no er|
|00000580| 72 6f 72 20 6f 63 63 75 | 72 72 65 64 0d 09 09 66 |ror occu|rred...f|
|00000590| 74 70 53 65 72 76 65 72 | 45 72 72 09 09 73 65 72 |tpServer|Err..ser|
|000005a0| 76 65 72 20 65 72 72 6f | 72 0d 09 09 6f 74 68 65 |ver erro|r...othe|
|000005b0| 72 09 09 09 09 61 6e 79 | 20 6f 74 68 65 72 20 4f |r....any| other O|
|000005c0| 53 20 6f 72 20 54 6f 6f | 6c 62 6f 78 20 65 72 72 |S or Too|lbox err|
|000005d0| 6f 72 20 63 6f 64 65 0d | 09 09 0d 09 49 66 20 74 |or code.|....If t|
|000005e0| 68 65 20 66 75 6e 63 74 | 69 6f 6e 20 72 65 73 75 |he funct|ion resu|
|000005f0| 6c 74 20 69 73 20 66 74 | 70 53 65 72 76 65 72 45 |lt is ft|pServerE|
|00000600| 72 72 2c 20 74 68 65 20 | 46 74 70 47 65 74 53 65 |rr, the |FtpGetSe|
|00000610| 72 76 65 72 45 72 72 49 | 6e 66 6f 20 66 75 6e 63 |rverErrI|nfo func|
|00000620| 74 69 6f 6e 20 63 61 6e | 0d 09 62 65 20 63 61 6c |tion can|..be cal|
|00000630| 6c 65 64 20 74 6f 20 67 | 65 74 20 69 6e 66 6f 72 |led to g|et infor|
|00000640| 6d 61 74 69 6f 6e 20 61 | 62 6f 75 74 20 74 68 65 |mation a|bout the|
|00000650| 20 73 65 72 76 65 72 20 | 65 72 72 6f 72 2e 20 4f | server |error. O|
|00000660| 6e 20 73 65 72 76 65 72 | 20 65 72 72 6f 72 73 2c |n server| errors,|
|00000670| 20 74 68 65 20 0d 09 73 | 74 72 65 61 6d 20 69 73 | the ..s|tream is|
|00000680| 20 73 74 69 6c 6c 20 61 | 6c 6c 6f 63 61 74 65 64 | still a|llocated|
|00000690| 20 61 6e 64 20 6f 70 65 | 6e 20 6f 6e 20 72 65 74 | and ope|n on ret|
|000006a0| 75 72 6e 20 74 6f 20 74 | 68 65 20 63 61 6c 6c 65 |urn to t|he calle|
|000006b0| 72 2e 0d 09 09 0d 09 49 | 66 20 61 6e 20 4f 53 20 |r......I|f an OS |
|000006c0| 6f 72 20 54 6f 6f 6c 62 | 6f 78 20 65 72 72 6f 72 |or Toolb|ox error|
|000006d0| 20 6f 63 63 75 72 73 2c | 20 74 68 65 20 73 74 72 | occurs,| the str|
|000006e0| 65 61 6d 20 69 73 20 61 | 62 6f 72 74 65 64 20 61 |eam is a|borted a|
|000006f0| 6e 64 20 64 65 61 6c 6c | 6f 63 61 74 65 64 20 62 |nd deall|ocated b|
|00000700| 65 66 6f 72 65 0d 09 72 | 65 74 75 72 6e 69 6e 67 |efore..r|eturning|
|00000710| 20 74 6f 20 74 68 65 20 | 63 61 6c 6c 65 72 2e 20 | to the |caller. |
|00000720| 22 41 62 6f 72 74 65 64 | 22 20 6d 65 61 6e 73 20 |"Aborted|" means |
|00000730| 74 68 61 74 20 74 68 65 | 20 73 65 72 76 65 72 20 |that the| server |
|00000740| 63 6f 6e 6e 65 63 74 69 | 6f 6e 20 69 73 20 63 6c |connecti|on is cl|
|00000750| 6f 73 65 64 20 0d 09 61 | 62 72 75 70 74 6c 79 2c |osed ..a|bruptly,|
|00000760| 20 77 69 74 68 6f 75 74 | 20 67 6f 69 6e 67 20 74 | without| going t|
|00000770| 68 72 6f 75 67 68 20 74 | 68 65 20 75 73 75 61 6c |hrough t|he usual|
|00000780| 20 54 43 50 20 73 74 72 | 65 61 6d 20 74 65 61 72 | TCP str|eam tear|
|00000790| 64 6f 77 6e 20 70 72 6f | 63 65 73 73 2e 20 59 6f |down pro|cess. Yo|
|000007a0| 75 20 6d 75 73 74 20 0d | 09 70 65 72 66 6f 72 6d |u must .|.perform|
|000007b0| 20 63 61 72 65 66 75 6c | 20 65 72 72 6f 72 20 63 | careful| error c|
|000007c0| 68 65 63 6b 69 6e 67 2e | 20 54 68 65 20 73 74 72 |hecking.| The str|
|000007d0| 65 61 6d 20 69 73 20 64 | 65 61 6c 6c 6f 63 61 74 |eam is d|eallocat|
|000007e0| 65 64 2c 20 61 6e 64 20 | 6d 75 73 74 20 6e 6f 74 |ed, and |must not|
|000007f0| 20 62 65 20 72 65 75 73 | 65 64 2e 0d 09 0d 09 43 | be reus|ed.....C|
|00000800| 6f 70 79 72 69 67 68 74 | 20 a9 20 31 39 39 34 2d |opyright| . 1994-|
|00000810| 31 39 39 35 2c 20 4e 6f | 72 74 68 77 65 73 74 65 |1995, No|rthweste|
|00000820| 72 6e 20 55 6e 69 76 65 | 72 73 69 74 79 2e 0d 0d |rn Unive|rsity...|
|00000830| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000840| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000850| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2a 2f 0d 0d |--------|----*/..|
|00000880| 23 69 6e 63 6c 75 64 65 | 20 3c 73 74 64 6c 69 62 |#include| <stdlib|
|00000890| 2e 68 3e 0d 23 69 6e 63 | 6c 75 64 65 20 3c 73 74 |.h>.#inc|lude <st|
|000008a0| 72 69 6e 67 2e 68 3e 0d | 23 69 6e 63 6c 75 64 65 |ring.h>.|#include|
|000008b0| 20 3c 73 74 64 69 6f 2e | 68 3e 0d 0d 23 69 6e 63 | <stdio.|h>..#inc|
|000008c0| 6c 75 64 65 20 22 64 65 | 66 2e 68 22 0d 23 69 6e |lude "de|f.h".#in|
|000008d0| 63 6c 75 64 65 20 22 6e | 65 74 2e 68 22 0d 23 69 |clude "n|et.h".#i|
|000008e0| 6e 63 6c 75 64 65 20 22 | 66 74 70 2e 68 22 0d 23 |nclude "|ftp.h".#|
|000008f0| 69 6e 63 6c 75 64 65 20 | 22 6d 65 6d 75 74 69 6c |include |"memutil|
|00000900| 2e 68 22 0d 0d 0d 0d 74 | 79 70 65 64 65 66 20 73 |.h"....t|ypedef s|
|00000910| 74 72 75 63 74 20 54 53 | 74 72 65 61 6d 20 7b 0d |truct TS|tream {.|
|00000920| 09 4e 65 74 53 74 72 65 | 61 6d 52 65 66 20 6e 65 |.NetStre|amRef ne|
|00000930| 74 53 74 72 65 61 6d 3b | 09 09 09 09 09 2f 2a 20 |tStream;|...../* |
|00000940| 6e 65 74 20 73 74 72 65 | 61 6d 20 72 65 66 65 72 |net stre|am refer|
|00000950| 65 6e 63 65 20 66 6f 72 | 20 63 6f 6e 74 72 6f 6c |ence for| control|
|00000960| 20 73 74 72 65 61 6d 20 | 2a 2f 0d 09 75 6e 73 69 | stream |*/..unsi|
|00000970| 67 6e 65 64 20 6c 6f 6e | 67 20 61 64 64 72 3b 09 |gned lon|g addr;.|
|00000980| 09 09 09 09 09 2f 2a 20 | 61 64 64 72 65 73 73 20 |...../* |address |
|00000990| 6f 66 20 73 65 72 76 65 | 72 20 2a 2f 0d 09 42 6f |of serve|r */..Bo|
|000009a0| 6f 6c 65 61 6e 20 74 65 | 78 74 4d 6f 64 65 3b 09 |olean te|xtMode;.|
|000009b0| 09 09 09 09 09 2f 2a 20 | 74 72 75 65 20 69 66 20 |...../* |true if |
|000009c0| 73 74 72 65 61 6d 20 63 | 75 72 72 65 6e 74 6c 79 |stream c|urrently|
|000009d0| 20 69 6e 20 74 65 78 74 | 20 6d 6f 64 65 20 2a 2f | in text| mode */|
|000009e0| 0d 09 42 6f 6f 6c 65 61 | 6e 20 70 61 73 73 69 76 |..Boolea|n passiv|
|000009f0| 65 3b 09 09 09 09 09 09 | 2f 2a 20 74 72 75 65 20 |e;......|/* true |
|00000a00| 74 6f 20 75 73 65 20 70 | 61 73 73 69 76 65 20 6d |to use p|assive m|
|00000a10| 6f 64 65 20 2a 2f 0d 09 | 4e 65 74 53 74 72 65 61 |ode */..|NetStrea|
|00000a20| 6d 52 65 66 20 64 61 74 | 61 53 74 72 65 61 6d 3b |mRef dat|aStream;|
|00000a30| 09 09 09 09 2f 2a 20 6e | 65 74 20 73 74 72 65 61 |..../* n|et strea|
|00000a40| 6d 20 72 65 66 65 72 65 | 6e 63 65 20 66 6f 72 20 |m refere|nce for |
|00000a50| 64 61 74 61 20 73 74 72 | 65 61 6d 2c 20 6f 72 0d |data str|eam, or.|
|00000a60| 09 09 09 09 09 09 09 09 | 09 09 09 20 20 20 6e 69 |........|... ni|
|00000a70| 6c 20 69 66 20 6e 6f 20 | 64 61 74 61 20 73 74 72 |l if no |data str|
|00000a80| 65 61 6d 20 6f 70 65 6e | 20 2a 2f 0d 09 42 6f 6f |eam open| */..Boo|
|00000a90| 6c 65 61 6e 20 67 65 74 | 3b 09 09 09 09 09 09 09 |lean get|;.......|
|00000aa0| 2f 2a 20 74 72 75 65 20 | 69 66 20 67 65 74 2c 20 |/* true |if get, |
|00000ab0| 66 61 6c 73 65 20 69 66 | 20 70 75 74 2c 20 75 6e |false if| put, un|
|00000ac0| 64 65 66 69 6e 65 64 20 | 69 66 0d 09 09 09 09 09 |defined |if......|
|00000ad0| 09 09 09 09 09 09 20 20 | 20 6e 6f 20 64 61 74 61 |...... | no data|
|00000ae0| 20 73 74 72 65 61 6d 20 | 6f 70 65 6e 20 2a 2f 0d | stream |open */.|
|00000af0| 7d 20 54 53 74 72 65 61 | 6d 2c 20 2a 54 53 74 72 |} TStrea|m, *TStr|
|00000b00| 65 61 6d 50 74 72 2c 20 | 2a 2a 54 53 74 72 65 61 |eamPtr, |**TStrea|
|00000b10| 6d 48 61 6e 64 6c 65 3b | 0d 0d 0d 0d 2f 2a 2d 2d |mHandle;|..../*--|
|00000b20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b50| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000b60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 0d 09 46 74 70 4f |--------|--..FtpO|
|00000b70| 70 65 6e 20 0d 09 0d 09 | 4f 70 65 6e 20 61 6e 20 |pen ....|Open an |
|00000b80| 46 54 50 20 73 74 72 65 | 61 6d 2e 0d 09 0d 09 45 |FTP stre|am.....E|
|00000b90| 6e 74 72 79 3a 09 68 6f | 73 74 20 3d 20 73 65 72 |ntry:.ho|st = ser|
|00000ba0| 76 65 72 20 68 6f 73 74 | 20 61 64 64 72 65 73 73 |ver host| address|
|00000bb0| 20 28 64 6f 6d 61 69 6e | 20 6e 61 6d 65 20 6f 72 | (domain| name or|
|00000bc0| 20 64 6f 74 74 65 64 20 | 0d 09 09 09 09 64 65 63 | dotted |.....dec|
|00000bd0| 69 6d 61 6c 20 49 50 20 | 61 64 64 72 65 73 73 29 |imal IP |address)|
|00000be0| 2e 0d 09 09 09 75 73 65 | 72 6e 61 6d 65 20 3d 20 |.....use|rname = |
|00000bf0| 75 73 65 72 20 6e 61 6d | 65 2e 0d 09 09 09 70 61 |user nam|e.....pa|
|00000c00| 73 73 77 6f 72 64 20 3d | 20 70 61 73 73 77 6f 72 |ssword =| passwor|
|00000c10| 64 2e 0d 09 09 09 70 61 | 73 73 69 76 65 20 3d 20 |d.....pa|ssive = |
|00000c20| 74 72 75 65 20 74 6f 20 | 75 73 65 20 70 61 73 73 |true to |use pass|
|00000c30| 69 76 65 20 6d 6f 64 65 | 20 46 54 50 20 28 72 65 |ive mode| FTP (re|
|00000c40| 63 6f 6d 6d 65 6e 64 65 | 64 0d 09 09 09 09 69 66 |commende|d.....if|
|00000c50| 20 6d 6f 72 65 20 74 68 | 61 6e 20 6f 6e 65 20 66 | more th|an one f|
|00000c60| 69 6c 65 20 69 73 20 74 | 6f 20 62 65 20 74 72 61 |ile is t|o be tra|
|00000c70| 6e 73 66 65 72 72 65 64 | 29 2e 0d 09 0d 09 45 78 |nsferred|).....Ex|
|00000c80| 69 74 3a 09 66 75 6e 63 | 74 69 6f 6e 20 72 65 73 |it:.func|tion res|
|00000c90| 75 6c 74 20 3d 20 72 65 | 73 75 6c 74 20 63 6f 64 |ult = re|sult cod|
|00000ca0| 65 2e 0d 09 09 09 73 74 | 72 65 61 6d 20 3d 20 72 |e.....st|ream = r|
|00000cb0| 65 66 65 72 65 6e 63 65 | 20 74 6f 20 6f 70 65 6e |eference| to open|
|00000cc0| 65 64 20 73 74 72 65 61 | 6d 2e 0d 09 09 09 0d 09 |ed strea|m.......|
|00000cd0| 49 6e 20 70 61 73 73 69 | 76 65 20 6d 6f 64 65 2c |In passi|ve mode,|
|00000ce0| 20 74 68 65 20 50 41 53 | 56 20 63 6f 6d 6d 61 6e | the PAS|V comman|
|00000cf0| 64 20 69 73 20 75 73 65 | 64 20 6f 6e 20 61 6c 6c |d is use|d on all|
|00000d00| 20 64 61 74 61 20 74 72 | 61 6e 73 66 65 72 73 20 | data tr|ansfers |
|00000d10| 74 6f 0d 09 74 65 6c 6c | 20 74 68 65 20 46 54 50 |to..tell| the FTP|
|00000d20| 20 73 65 72 76 65 72 20 | 74 6f 20 6f 70 65 6e 20 | server |to open |
|00000d30| 61 20 70 61 73 73 69 76 | 65 20 6c 69 73 74 65 6e |a passiv|e listen|
|00000d40| 69 6e 67 20 64 61 74 61 | 20 73 74 72 65 61 6d 20 |ing data| stream |
|00000d50| 66 6f 72 20 74 68 65 0d | 09 74 72 61 6e 73 66 65 |for the.|.transfe|
|00000d60| 72 20 75 73 69 6e 67 20 | 61 20 75 6e 69 71 75 65 |r using |a unique|
|00000d70| 20 70 6f 72 74 20 6e 75 | 6d 62 65 72 2e 20 54 68 | port nu|mber. Th|
|00000d80| 65 20 46 54 50 20 73 65 | 72 76 65 72 20 73 65 6e |e FTP se|rver sen|
|00000d90| 64 73 20 61 20 72 65 73 | 70 6f 6e 73 65 0d 09 74 |ds a res|ponse..t|
|00000da0| 6f 20 74 68 65 20 50 41 | 53 56 20 63 6f 6d 6d 61 |o the PA|SV comma|
|00000db0| 6e 64 20 74 65 6c 6c 69 | 6e 67 20 74 68 65 20 4d |nd telli|ng the M|
|00000dc0| 61 63 20 74 68 65 20 70 | 6f 72 74 20 6e 75 6d 62 |ac the p|ort numb|
|00000dd0| 65 72 20 74 6f 20 75 73 | 65 2e 20 54 68 65 20 4d |er to us|e. The M|
|00000de0| 61 63 0d 09 63 6f 6e 6e | 65 63 74 73 20 74 6f 20 |ac..conn|ects to |
|00000df0| 74 68 69 73 20 70 6f 72 | 74 20 74 6f 20 65 73 74 |this por|t to est|
|00000e00| 61 62 6c 69 73 68 20 74 | 68 65 20 64 61 74 61 20 |ablish t|he data |
|00000e10| 73 74 72 65 61 6d 20 63 | 6f 6e 6e 65 63 74 69 6f |stream c|onnectio|
|00000e20| 6e 2e 0d 09 0d 09 49 6e | 20 61 63 74 69 76 65 20 |n.....In| active |
|00000e30| 6d 6f 64 65 2c 20 74 68 | 65 20 4d 61 63 20 65 73 |mode, th|e Mac es|
|00000e40| 74 61 62 6c 69 73 68 65 | 73 20 74 68 65 20 6c 69 |tablishe|s the li|
|00000e50| 73 74 65 6e 69 6e 67 20 | 64 61 74 61 20 73 74 72 |stening |data str|
|00000e60| 65 61 6d 20 66 6f 72 0d | 09 74 68 65 20 74 72 61 |eam for.|.the tra|
|00000e70| 6e 73 66 65 72 20 61 6e | 64 20 75 73 65 73 20 74 |nsfer an|d uses t|
|00000e80| 68 65 20 50 4f 52 54 20 | 63 6f 6d 6d 61 6e 64 20 |he PORT |command |
|00000e90| 74 6f 20 74 65 6c 6c 20 | 74 68 65 20 46 54 50 20 |to tell |the FTP |
|00000ea0| 73 65 72 76 65 72 20 74 | 68 65 0d 09 70 6f 72 74 |server t|he..port|
|00000eb0| 20 6e 75 6d 62 65 72 2e | 20 54 68 65 20 46 54 50 | number.| The FTP|
|00000ec0| 20 73 65 72 76 65 72 20 | 63 6f 6e 6e 65 63 74 73 | server |connects|
|00000ed0| 20 74 6f 20 74 68 69 73 | 20 70 6f 72 74 20 74 6f | to this| port to|
|00000ee0| 20 65 73 74 61 62 6c 69 | 73 68 0d 09 74 68 65 20 | establi|sh..the |
|00000ef0| 64 61 74 61 20 73 74 72 | 65 61 6d 20 63 6f 6e 6e |data str|eam conn|
|00000f00| 65 63 74 69 6f 6e 2e 0d | 09 0d 09 57 68 65 6e 20 |ection..|...When |
|00000f10| 74 72 61 6e 73 66 65 72 | 72 69 6e 67 20 6d 6f 72 |transfer|ring mor|
|00000f20| 65 20 74 68 61 6e 20 6f | 6e 65 20 66 69 6c 65 20 |e than o|ne file |
|00000f30| 75 73 69 6e 67 20 61 20 | 73 69 6e 67 6c 65 20 63 |using a |single c|
|00000f40| 6f 6e 74 72 6f 6c 20 73 | 74 72 65 61 6d 2c 0d 09 |ontrol s|tream,..|
|00000f50| 70 61 73 73 69 76 65 20 | 6d 6f 64 65 20 69 73 20 |passive |mode is |
|00000f60| 72 65 63 6f 6d 6d 65 6e | 64 65 64 2e 20 49 6e 20 |recommen|ded. In |
|00000f70| 61 63 74 69 76 65 20 6d | 6f 64 65 2c 20 77 69 74 |active m|ode, wit|
|00000f80| 68 20 73 6f 6d 65 20 6b | 69 6e 64 73 20 6f 66 0d |h some k|inds of.|
|00000f90| 09 73 65 72 76 65 72 73 | 2c 20 74 68 65 72 65 20 |.servers|, there |
|00000fa0| 63 61 6e 20 73 6f 6d 65 | 74 69 6d 65 73 20 62 65 |can some|times be|
|00000fb0| 20 73 69 67 6e 69 66 69 | 63 61 6e 74 20 64 65 6c | signifi|cant del|
|00000fc0| 61 79 73 20 28 33 30 2d | 39 30 20 73 65 63 6f 6e |ays (30-|90 secon|
|00000fd0| 64 73 29 20 0d 09 69 6e | 20 65 73 74 61 62 6c 69 |ds) ..in| establi|
|00000fe0| 73 68 69 6e 67 20 74 68 | 65 20 64 61 74 61 20 73 |shing th|e data s|
|00000ff0| 74 72 65 61 6d 20 63 6f | 6e 6e 65 63 74 69 6f 6e |tream co|nnection|
|00001000| 2e 0d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |..------|--------|
|00001010| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001020| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001030| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001040| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2a 2f |--------|------*/|
|00001050| 0d 0d 4f 53 45 72 72 20 | 46 74 70 4f 70 65 6e 20 |..OSErr |FtpOpen |
|00001060| 28 63 68 61 72 20 2a 68 | 6f 73 74 2c 20 63 68 61 |(char *h|ost, cha|
|00001070| 72 20 2a 75 73 65 72 6e | 61 6d 65 2c 20 63 68 61 |r *usern|ame, cha|
|00001080| 72 20 2a 70 61 73 73 77 | 6f 72 64 2c 20 42 6f 6f |r *passw|ord, Boo|
|00001090| 6c 65 61 6e 20 70 61 73 | 73 69 76 65 2c 0d 09 46 |lean pas|sive,..F|
|000010a0| 74 70 53 74 72 65 61 6d | 52 65 66 20 2a 73 74 72 |tpStream|Ref *str|
|000010b0| 65 61 6d 29 0d 7b 0d 09 | 54 53 74 72 65 61 6d 48 |eam).{..|TStreamH|
|000010c0| 61 6e 64 6c 65 20 73 20 | 3d 20 6e 69 6c 3b 0d 09 |andle s |= nil;..|
|000010d0| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 20 61 64 |unsigned| long ad|
|000010e0| 64 72 3b 0d 09 75 6e 73 | 69 67 6e 65 64 20 73 68 |dr;..uns|igned sh|
|000010f0| 6f 72 74 20 70 6f 72 74 | 3b 0d 09 4e 65 74 53 74 |ort port|;..NetSt|
|00001100| 72 65 61 6d 52 65 66 20 | 6e 65 74 53 74 72 65 61 |reamRef |netStrea|
|00001110| 6d 3b 0d 09 43 53 74 72 | 32 35 35 20 63 6f 6d 6d |m;..CStr|255 comm|
|00001120| 61 6e 64 2c 20 72 65 73 | 70 6f 6e 73 65 3b 0d 09 |and, res|ponse;..|
|00001130| 6c 6f 6e 67 20 72 65 73 | 70 6f 6e 73 65 43 6f 64 |long res|ponseCod|
|00001140| 65 3b 0d 09 4f 53 45 72 | 72 20 65 72 72 20 3d 20 |e;..OSEr|r err = |
|00001150| 6e 6f 45 72 72 3b 0d 09 | 0d 09 65 72 72 20 3d 20 |noErr;..|..err = |
|00001160| 4d 79 4e 65 77 48 61 6e | 64 6c 65 28 73 69 7a 65 |MyNewHan|dle(size|
|00001170| 6f 66 28 54 53 74 72 65 | 61 6d 29 2c 20 26 73 29 |of(TStre|am), &s)|
|00001180| 3b 0d 09 69 66 20 28 65 | 72 72 20 21 3d 20 6e 6f |;..if (e|rr != no|
|00001190| 45 72 72 29 20 72 65 74 | 75 72 6e 20 65 72 72 3b |Err) ret|urn err;|
|000011a0| 0d 0d 09 65 72 72 20 3d | 20 4e 65 74 4e 61 6d 65 |...err =| NetName|
|000011b0| 54 6f 41 64 64 72 28 68 | 6f 73 74 2c 20 6b 46 54 |ToAddr(h|ost, kFT|
|000011c0| 50 50 6f 72 74 2c 20 26 | 61 64 64 72 2c 20 26 70 |PPort, &|addr, &p|
|000011d0| 6f 72 74 29 3b 0d 09 69 | 66 20 28 65 72 72 20 21 |ort);..i|f (err !|
|000011e0| 3d 20 6e 6f 45 72 72 29 | 20 67 6f 74 6f 20 65 78 |= noErr)| goto ex|
|000011f0| 69 74 3b 0d 09 0d 09 65 | 72 72 20 3d 20 4e 65 74 |it;....e|rr = Net|
|00001200| 4f 70 65 6e 28 61 64 64 | 72 2c 20 70 6f 72 74 2c |Open(add|r, port,|
|00001210| 20 74 72 75 65 2c 20 26 | 6e 65 74 53 74 72 65 61 | true, &|netStrea|
|00001220| 6d 2c 20 26 72 65 73 70 | 6f 6e 73 65 43 6f 64 65 |m, &resp|onseCode|
|00001230| 2c 20 72 65 73 70 6f 6e | 73 65 29 3b 0d 09 69 66 |, respon|se);..if|
|00001240| 20 28 65 72 72 20 21 3d | 20 6e 6f 45 72 72 29 20 | (err !=| noErr) |
|00001250| 67 6f 74 6f 20 65 78 69 | 74 3b 0d 0d 09 28 2a 2a |goto exi|t;...(**|
|00001260| 73 29 2e 6e 65 74 53 74 | 72 65 61 6d 20 3d 20 6e |s).netSt|ream = n|
|00001270| 65 74 53 74 72 65 61 6d | 3b 0d 09 28 2a 2a 73 29 |etStream|;..(**s)|
|00001280| 2e 61 64 64 72 20 3d 20 | 61 64 64 72 3b 0d 09 28 |.addr = |addr;..(|
|00001290| 2a 2a 73 29 2e 74 65 78 | 74 4d 6f 64 65 20 3d 20 |**s).tex|tMode = |
|000012a0| 74 72 75 65 3b 0d 09 28 | 2a 2a 73 29 2e 70 61 73 |true;..(|**s).pas|
|000012b0| 73 69 76 65 20 3d 20 70 | 61 73 73 69 76 65 3b 0d |sive = p|assive;.|
|000012c0| 09 2a 73 74 72 65 61 6d | 20 3d 20 28 46 74 70 53 |.*stream| = (FtpS|
|000012d0| 74 72 65 61 6d 52 65 66 | 29 73 3b 0d 09 0d 09 69 |treamRef|)s;....i|
|000012e0| 66 20 28 72 65 73 70 6f | 6e 73 65 43 6f 64 65 20 |f (respo|nseCode |
|000012f0| 21 3d 20 32 32 30 29 20 | 72 65 74 75 72 6e 20 66 |!= 220) |return f|
|00001300| 74 70 53 65 72 76 65 72 | 45 72 72 3b 0d 09 09 0d |tpServer|Err;....|
|00001310| 09 73 70 72 69 6e 74 66 | 28 63 6f 6d 6d 61 6e 64 |.sprintf|(command|
|00001320| 2c 20 22 55 53 45 52 20 | 25 2e 32 35 30 73 22 2c |, "USER |%.250s",|
|00001330| 20 75 73 65 72 6e 61 6d | 65 29 3b 0d 09 65 72 72 | usernam|e);..err|
|00001340| 20 3d 20 4e 65 74 43 6f | 6d 6d 61 6e 64 28 6e 65 | = NetCo|mmand(ne|
|00001350| 74 53 74 72 65 61 6d 2c | 20 63 6f 6d 6d 61 6e 64 |tStream,| command|
|00001360| 2c 20 26 72 65 73 70 6f | 6e 73 65 43 6f 64 65 2c |, &respo|nseCode,|
|00001370| 20 72 65 73 70 6f 6e 73 | 65 29 3b 0d 09 69 66 20 | respons|e);..if |
|00001380| 28 65 72 72 20 21 3d 20 | 6e 6f 45 72 72 29 20 67 |(err != |noErr) g|
|00001390| 6f 74 6f 20 65 78 69 74 | 3b 0d 09 69 66 20 28 72 |oto exit|;..if (r|
|000013a0| 65 73 70 6f 6e 73 65 43 | 6f 64 65 20 21 3d 20 33 |esponseC|ode != 3|
|000013b0| 33 31 29 20 72 65 74 75 | 72 6e 20 66 74 70 53 65 |31) retu|rn ftpSe|
|000013c0| 72 76 65 72 45 72 72 3b | 0d 09 0d 09 73 70 72 69 |rverErr;|....spri|
|000013d0| 6e 74 66 28 63 6f 6d 6d | 61 6e 64 2c 20 22 50 41 |ntf(comm|and, "PA|
|000013e0| 53 53 20 25 2e 32 35 30 | 73 22 2c 20 70 61 73 73 |SS %.250|s", pass|
|000013f0| 77 6f 72 64 29 3b 0d 09 | 65 72 72 20 3d 20 4e 65 |word);..|err = Ne|
|00001400| 74 43 6f 6d 6d 61 6e 64 | 28 6e 65 74 53 74 72 65 |tCommand|(netStre|
|00001410| 61 6d 2c 20 63 6f 6d 6d | 61 6e 64 2c 20 26 72 65 |am, comm|and, &re|
|00001420| 73 70 6f 6e 73 65 43 6f | 64 65 2c 20 72 65 73 70 |sponseCo|de, resp|
|00001430| 6f 6e 73 65 29 3b 0d 09 | 69 66 20 28 65 72 72 20 |onse);..|if (err |
|00001440| 21 3d 20 6e 6f 45 72 72 | 29 20 67 6f 74 6f 20 65 |!= noErr|) goto e|
|00001450| 78 69 74 3b 0d 09 69 66 | 20 28 72 65 73 70 6f 6e |xit;..if| (respon|
|00001460| 73 65 43 6f 64 65 20 21 | 3d 20 32 33 30 29 20 72 |seCode !|= 230) r|
|00001470| 65 74 75 72 6e 20 66 74 | 70 53 65 72 76 65 72 45 |eturn ft|pServerE|
|00001480| 72 72 3b 0d 09 0d 09 72 | 65 74 75 72 6e 20 6e 6f |rr;....r|eturn no|
|00001490| 45 72 72 3b 0d 09 0d 65 | 78 69 74 3a 0d 0d 09 4d |Err;...e|xit:...M|
|000014a0| 79 44 69 73 70 6f 73 65 | 48 61 6e 64 6c 65 28 73 |yDispose|Handle(s|
|000014b0| 29 3b 0d 09 72 65 74 75 | 72 6e 20 65 72 72 3b 0d |);..retu|rn err;.|
|000014c0| 7d 0d 0d 0d 0d 2f 2a 2d | 2d 2d 2d 2d 2d 2d 2d 2d |}..../*-|--------|
|000014d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000014e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000014f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001500| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001510| 2d 2d 2d 0d 09 46 74 70 | 43 6c 6f 73 65 20 0d 09 |---..Ftp|Close ..|
|00001520| 0d 09 43 6c 6f 73 65 20 | 61 6e 20 46 54 50 20 73 |..Close |an FTP s|
|00001530| 74 72 65 61 6d 2e 0d 09 | 0d 09 45 6e 74 72 79 3a |tream...|..Entry:|
|00001540| 09 73 74 72 65 61 6d 20 | 3d 20 73 74 72 65 61 6d |.stream |= stream|
|00001550| 20 72 65 66 65 72 65 6e | 63 65 2e 0d 09 0d 09 45 | referen|ce.....E|
|00001560| 78 69 74 3a 09 66 75 6e | 63 74 69 6f 6e 20 72 65 |xit:.fun|ction re|
|00001570| 73 75 6c 74 20 3d 20 72 | 65 73 75 6c 74 20 63 6f |sult = r|esult co|
|00001580| 64 65 2e 0d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |de..----|--------|
|00001590| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000015a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000015b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000015c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000015d0| 2a 2f 0d 0d 4f 53 45 72 | 72 20 46 74 70 43 6c 6f |*/..OSEr|r FtpClo|
|000015e0| 73 65 20 28 46 74 70 53 | 74 72 65 61 6d 52 65 66 |se (FtpS|treamRef|
|000015f0| 20 73 74 72 65 61 6d 29 | 0d 7b 0d 09 54 53 74 72 | stream)|.{..TStr|
|00001600| 65 61 6d 48 61 6e 64 6c | 65 20 73 3b 0d 09 4f 53 |eamHandl|e s;..OS|
|00001610| 45 72 72 20 65 72 72 20 | 3d 20 6e 6f 45 72 72 3b |Err err |= noErr;|
|00001620| 0d 09 0d 09 73 20 3d 20 | 28 54 53 74 72 65 61 6d |....s = |(TStream|
|00001630| 48 61 6e 64 6c 65 29 73 | 74 72 65 61 6d 3b 0d 09 |Handle)s|tream;..|
|00001640| 65 72 72 20 3d 20 4e 65 | 74 43 6c 6f 73 65 28 28 |err = Ne|tClose((|
|00001650| 2a 2a 73 29 2e 6e 65 74 | 53 74 72 65 61 6d 29 3b |**s).net|Stream);|
|00001660| 0d 09 4d 79 44 69 73 70 | 6f 73 65 48 61 6e 64 6c |..MyDisp|oseHandl|
|00001670| 65 28 73 29 3b 0d 09 72 | 65 74 75 72 6e 20 65 72 |e(s);..r|eturn er|
|00001680| 72 3b 0d 7d 0d 0d 0d 0d | 2f 2a 2d 2d 2d 2d 2d 2d |r;.}....|/*------|
|00001690| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000016d0| 2d 2d 2d 2d 2d 2d 0d 09 | 47 65 74 4f 72 50 75 74 |------..|GetOrPut|
|000016e0| 46 69 6c 65 4f 72 4c 69 | 73 74 69 6e 67 0d 09 0d |FileOrLi|sting...|
|000016f0| 09 47 65 74 20 6f 72 20 | 70 75 74 20 61 20 66 69 |.Get or |put a fi|
|00001700| 6c 65 20 6f 72 20 61 20 | 6c 69 73 74 69 6e 67 20 |le or a |listing |
|00001710| 66 72 6f 6d 20 6f 72 20 | 74 6f 20 61 6e 20 46 54 |from or |to an FT|
|00001720| 50 20 73 65 72 76 65 72 | 2e 0d 09 0d 09 45 6e 74 |P server|.....Ent|
|00001730| 72 79 3a 09 73 74 72 65 | 61 6d 20 3d 20 73 74 72 |ry:.stre|am = str|
|00001740| 65 61 6d 20 72 65 66 65 | 72 65 6e 63 65 2e 0d 09 |eam refe|rence...|
|00001750| 09 09 70 61 74 68 20 3d | 20 66 69 6c 65 20 70 61 |..path =| file pa|
|00001760| 74 68 2e 0d 09 09 09 63 | 6d 64 20 3d 20 22 52 45 |th.....c|md = "RE|
|00001770| 54 52 22 2c 20 22 4c 49 | 53 54 22 2c 20 6f 72 20 |TR", "LI|ST", or |
|00001780| 22 53 54 4f 52 22 2e 0d | 09 09 09 67 65 74 20 3d |"STOR"..|...get =|
|00001790| 20 74 72 75 65 20 69 66 | 20 67 65 74 20 6f 70 65 | true if| get ope|
|000017a0| 72 61 74 69 6f 6e 2c 20 | 66 61 6c 73 65 20 69 66 |ration, |false if|
|000017b0| 20 70 75 74 20 6f 70 65 | 72 61 74 69 6f 6e 2e 0d | put ope|ration..|
|000017c0| 09 09 09 74 65 78 74 46 | 69 6c 65 20 3d 20 74 72 |...textF|ile = tr|
|000017d0| 75 65 20 69 66 20 74 65 | 78 74 20 66 69 6c 65 2c |ue if te|xt file,|
|000017e0| 20 66 61 6c 73 65 20 69 | 66 20 62 69 6e 61 72 79 | false i|f binary|
|000017f0| 20 66 69 6c 65 2e 20 4d | 75 73 74 20 62 65 20 74 | file. M|ust be t|
|00001800| 72 75 65 0d 09 09 09 09 | 66 6f 72 20 67 65 74 20 |rue.....|for get |
|00001810| 6c 69 73 74 69 6e 67 20 | 6f 70 65 72 61 74 69 6f |listing |operatio|
|00001820| 6e 73 2e 0d 09 09 09 64 | 61 74 61 20 3d 20 70 6f |ns.....d|ata = po|
|00001830| 69 6e 74 65 72 20 74 6f | 20 68 61 6e 64 6c 65 2e |inter to| handle.|
|00001840| 20 46 6f 72 20 70 75 74 | 20 6f 70 65 72 61 74 69 | For put| operati|
|00001850| 6f 6e 73 2c 20 74 68 65 | 20 68 61 6e 64 6c 65 0d |ons, the| handle.|
|00001860| 09 09 09 09 63 6f 6e 74 | 61 69 6e 73 20 74 68 65 |....cont|ains the|
|00001870| 20 64 61 74 61 20 74 6f | 20 70 75 74 2e 0d 09 0d | data to| put....|
|00001880| 09 45 78 69 74 3a 09 66 | 75 6e 63 74 69 6f 6e 20 |.Exit:.f|unction |
|00001890| 72 65 73 75 6c 74 20 3d | 20 72 65 73 75 6c 74 20 |result =| result |
|000018a0| 63 6f 64 65 2e 0d 09 09 | 09 2a 64 61 74 61 20 3d |code....|.*data =|
|000018b0| 20 46 6f 72 20 67 65 74 | 20 6f 70 65 72 61 74 69 | For get| operati|
|000018c0| 6f 6e 73 2c 20 63 6f 6e | 74 61 69 6e 73 20 74 68 |ons, con|tains th|
|000018d0| 65 20 64 61 74 61 2e 0d | 2d 2d 2d 2d 2d 2d 2d 2d |e data..|--------|
|000018e0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000018f0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001900| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001910| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00001920| 2d 2d 2d 2d 2a 2f 0d 0d | 73 74 61 74 69 63 20 4f |----*/..|static O|
|00001930| 53 45 72 72 20 47 65 74 | 4f 72 50 75 74 46 69 6c |SErr Get|OrPutFil|
|00001940| 65 4f 72 4c 69 73 74 69 | 6e 67 20 28 46 74 70 53 |eOrListi|ng (FtpS|
|00001950| 74 72 65 61 6d 52 65 66 | 20 73 74 72 65 61 6d 2c |treamRef| stream,|
|00001960| 20 63 68 61 72 20 2a 70 | 61 74 68 2c 20 63 68 61 | char *p|ath, cha|
|00001970| 72 20 2a 63 6d 64 2c 0d | 09 42 6f 6f 6c 65 61 6e |r *cmd,.|.Boolean|
|00001980| 20 67 65 74 2c 20 42 6f | 6f 6c 65 61 6e 20 74 65 | get, Bo|olean te|
|00001990| 78 74 46 69 6c 65 2c 20 | 48 61 6e 64 6c 65 20 2a |xtFile, |Handle *|
|000019a0| 64 61 74 61 29 0d 7b 0d | 09 54 53 74 72 65 61 6d |data).{.|.TStream|
|000019b0| 48 61 6e 64 6c 65 20 73 | 3b 0d 09 4e 65 74 53 74 |Handle s|;..NetSt|
|000019c0| 72 65 61 6d 52 65 66 20 | 63 6f 6e 74 72 6f 6c 53 |reamRef |controlS|
|000019d0| 74 72 65 61 6d 2c 20 64 | 61 74 61 53 74 72 65 61 |tream, d|ataStrea|
|000019e0| 6d 3b 0d 09 75 6e 73 69 | 67 6e 65 64 20 6c 6f 6e |m;..unsi|gned lon|
|000019f0| 67 20 6d 79 41 64 64 72 | 3b 0d 09 75 6e 73 69 67 |g myAddr|;..unsig|
|00001a00| 6e 65 64 20 73 68 6f 72 | 74 20 70 6f 72 74 3b 0d |ned shor|t port;.|
|00001a10| 09 43 53 74 72 32 35 35 | 20 63 6f 6d 6d 61 6e 64 |.CStr255| command|
|00001a20| 2c 20 72 65 73 70 6f 6e | 73 65 3b 0d 09 6c 6f 6e |, respon|se;..lon|
|00001a30| 67 20 72 65 73 70 6f 6e | 73 65 43 6f 64 65 3b 0d |g respon|seCode;.|
|00001a40| 09 4f 53 45 72 72 20 65 | 72 72 20 3d 20 6e 6f 45 |.OSErr e|rr = noE|
|00001a50| 72 72 3b 0d 09 63 68 61 | 72 20 2a 70 3b 0d 09 73 |rr;..cha|r *p;..s|
|00001a60| 68 6f 72 74 20 63 6f 6d | 6d 61 43 6f 75 6e 74 3b |hort com|maCount;|
|00001a70| 0d 09 0d 09 73 20 3d 20 | 28 54 53 74 72 65 61 6d |....s = |(TStream|
|00001a80| 48 61 6e 64 6c 65 29 73 | 74 72 65 61 6d 3b 0d 09 |Handle)s|tream;..|
|00001a90| 63 6f 6e 74 72 6f 6c 53 | 74 72 65 61 6d 20 3d 20 |controlS|tream = |
|00001aa0| 28 2a 2a 73 29 2e 6e 65 | 74 53 74 72 65 61 6d 3b |(**s).ne|tStream;|
|00001ab0| 0d 09 0d 09 69 66 20 28 | 74 65 78 74 46 69 6c 65 |....if (|textFile|
|00001ac0| 20 21 3d 20 28 2a 2a 73 | 29 2e 74 65 78 74 4d 6f | != (**s|).textMo|
|00001ad0| 64 65 29 20 7b 0d 09 09 | 65 72 72 20 3d 20 4e 65 |de) {...|err = Ne|
|00001ae0| 74 43 6f 6d 6d 61 6e 64 | 28 63 6f 6e 74 72 6f 6c |tCommand|(control|
|00001af0| 53 74 72 65 61 6d 2c 20 | 0d 09 09 09 74 65 78 74 |Stream, |....text|
|00001b00| 46 69 6c 65 20 3f 20 22 | 54 59 50 45 20 41 22 20 |File ? "|TYPE A" |
|00001b10| 3a 20 22 54 59 50 45 20 | 49 22 2c 0d 09 09 09 26 |: "TYPE |I",....&|
|00001b20| 72 65 73 70 6f 6e 73 65 | 43 6f 64 65 2c 20 72 65 |response|Code, re|
|00001b30| 73 70 6f 6e 73 65 29 3b | 0d 09 09 69 66 20 28 65 |sponse);|...if (e|
|00001b40| 72 72 20 21 3d 20 6e 6f | 45 72 72 29 20 67 6f 74 |rr != no|Err) got|
|00001b50| 6f 20 65 78 69 74 31 3b | 0d 09 09 69 66 20 28 72 |o exit1;|...if (r|
|00001b60| 65 73 70 6f 6e 73 65 43 | 6f 64 65 20 21 3d 20 32 |esponseC|ode != 2|
|00001b70| 30 30 29 20 72 65 74 75 | 72 6e 20 66 74 70 53 65 |00) retu|rn ftpSe|
|00001b80| 72 76 65 72 45 72 72 3b | 0d 09 09 28 2a 2a 73 29 |rverErr;|...(**s)|
|00001b90| 2e 74 65 78 74 4d 6f 64 | 65 20 3d 20 74 65 78 74 |.textMod|e = text|
|00001ba0| 46 69 6c 65 3b 0d 09 7d | 0d 09 0d 09 69 66 20 28 |File;..}|....if (|
|00001bb0| 28 2a 2a 73 29 2e 70 61 | 73 73 69 76 65 29 20 7b |(**s).pa|ssive) {|
|00001bc0| 0d 09 0d 09 09 2f 2a 20 | 50 61 73 73 69 76 65 20 |...../* |Passive |
|00001bd0| 6d 6f 64 65 3a 20 53 65 | 6e 64 20 50 41 53 56 20 |mode: Se|nd PASV |
|00001be0| 63 6f 6d 6d 61 6e 64 2e | 20 2a 2f 0d 09 09 0d 09 |command.| */.....|
|00001bf0| 09 65 72 72 20 3d 20 4e | 65 74 43 6f 6d 6d 61 6e |.err = N|etComman|
|00001c00| 64 28 63 6f 6e 74 72 6f | 6c 53 74 72 65 61 6d 2c |d(contro|lStream,|
|00001c10| 20 22 50 41 53 56 22 2c | 20 26 72 65 73 70 6f 6e | "PASV",| &respon|
|00001c20| 73 65 43 6f 64 65 2c 20 | 72 65 73 70 6f 6e 73 65 |seCode, |response|
|00001c30| 29 3b 0d 09 09 69 66 20 | 28 65 72 72 20 21 3d 20 |);...if |(err != |
|00001c40| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit|
|00001c50| 31 3b 0d 09 09 69 66 20 | 28 72 65 73 70 6f 6e 73 |1;...if |(respons|
|00001c60| 65 43 6f 64 65 20 21 3d | 20 32 32 37 29 20 72 65 |eCode !=| 227) re|
|00001c70| 74 75 72 6e 20 66 74 70 | 53 65 72 76 65 72 45 72 |turn ftp|ServerEr|
|00001c80| 72 3b 0d 09 09 0d 09 09 | 2f 2a 20 50 61 72 73 65 |r;......|/* Parse|
|00001c90| 20 74 68 65 20 70 6f 72 | 74 20 6e 75 6d 62 65 72 | the por|t number|
|00001ca0| 20 66 72 6f 6d 20 74 68 | 65 20 72 65 73 70 6f 6e | from th|e respon|
|00001cb0| 73 65 20 74 6f 20 74 68 | 65 20 50 41 53 56 20 63 |se to th|e PASV c|
|00001cc0| 6f 6d 6d 61 6e 64 3a 0d | 09 09 20 20 20 32 32 37 |ommand:.|.. 227|
|00001cd0| 20 45 6e 74 65 72 69 6e | 67 20 50 61 73 73 69 76 | Enterin|g Passiv|
|00001ce0| 65 20 4d 6f 64 65 20 28 | 68 31 2c 68 32 2c 68 33 |e Mode (|h1,h2,h3|
|00001cf0| 2c 68 34 2c 70 31 2c 70 | 32 29 2e 20 2a 2f 0d 0d |,h4,p1,p|2). */..|
|00001d00| 09 09 70 20 3d 20 72 65 | 73 70 6f 6e 73 65 3b 0d |..p = re|sponse;.|
|00001d10| 09 09 77 68 69 6c 65 20 | 28 2a 70 20 21 3d 20 30 |..while |(*p != 0|
|00001d20| 20 26 26 20 2a 70 20 21 | 3d 20 27 29 27 29 20 70 | && *p !|= ')') p|
|00001d30| 2b 2b 3b 0d 09 09 69 66 | 20 28 2a 70 20 3d 3d 20 |++;...if| (*p == |
|00001d40| 30 29 20 72 65 74 75 72 | 6e 20 66 74 70 53 65 72 |0) retur|n ftpSer|
|00001d50| 76 65 72 45 72 72 3b 0d | 09 09 63 6f 6d 6d 61 43 |verErr;.|..commaC|
|00001d60| 6f 75 6e 74 20 3d 20 30 | 3b 0d 09 09 77 68 69 6c |ount = 0|;...whil|
|00001d70| 65 20 28 74 72 75 65 29 | 20 7b 0d 09 09 09 77 68 |e (true)| {....wh|
|00001d80| 69 6c 65 20 28 70 20 3e | 20 72 65 73 70 6f 6e 73 |ile (p >| respons|
|00001d90| 65 20 26 26 20 2a 70 20 | 21 3d 20 27 2c 27 29 20 |e && *p |!= ',') |
|00001da0| 70 2d 2d 3b 0d 09 09 09 | 69 66 20 28 70 20 3c 3d |p--;....|if (p <=|
|00001db0| 20 72 65 73 70 6f 6e 73 | 65 29 20 72 65 74 75 72 | respons|e) retur|
|00001dc0| 6e 20 66 74 70 53 65 72 | 76 65 72 45 72 72 3b 0d |n ftpSer|verErr;.|
|00001dd0| 09 09 09 63 6f 6d 6d 61 | 43 6f 75 6e 74 2b 2b 3b |...comma|Count++;|
|00001de0| 0d 09 09 09 69 66 20 28 | 63 6f 6d 6d 61 43 6f 75 |....if (|commaCou|
|00001df0| 6e 74 20 3d 3d 20 32 29 | 20 62 72 65 61 6b 3b 0d |nt == 2)| break;.|
|00001e00| 09 09 09 70 2d 2d 3b 0d | 09 09 7d 0d 09 09 70 2b |...p--;.|..}...p+|
|00001e10| 2b 3b 0d 09 09 70 6f 72 | 74 20 3d 20 61 74 6f 69 |+;...por|t = atoi|
|00001e20| 28 70 29 3b 0d 09 09 77 | 68 69 6c 65 20 28 2a 70 |(p);...w|hile (*p|
|00001e30| 20 21 3d 20 27 2c 27 29 | 20 70 2b 2b 3b 0d 09 09 | != ',')| p++;...|
|00001e40| 70 2b 2b 3b 0d 09 09 70 | 6f 72 74 20 3d 20 28 70 |p++;...p|ort = (p|
|00001e50| 6f 72 74 20 3c 3c 20 38 | 29 20 7c 20 61 74 6f 69 |ort << 8|) | atoi|
|00001e60| 28 70 29 3b 0d 09 09 0d | 09 09 2f 2a 20 43 6f 6e |(p);....|../* Con|
|00001e70| 6e 65 63 74 20 74 6f 20 | 73 65 72 76 65 72 27 73 |nect to |server's|
|00001e80| 20 6c 69 73 74 65 6e 69 | 6e 67 20 64 61 74 61 20 | listeni|ng data |
|00001e90| 73 74 72 65 61 6d 20 70 | 6f 72 74 2e 20 2a 2f 0d |stream p|ort. */.|
|00001ea0| 09 09 0d 09 09 65 72 72 | 20 3d 20 4e 65 74 4f 70 |.....err| = NetOp|
|00001eb0| 65 6e 28 28 2a 2a 73 29 | 2e 61 64 64 72 2c 20 70 |en((**s)|.addr, p|
|00001ec0| 6f 72 74 2c 20 66 61 6c | 73 65 2c 20 26 64 61 74 |ort, fal|se, &dat|
|00001ed0| 61 53 74 72 65 61 6d 2c | 20 26 72 65 73 70 6f 6e |aStream,| &respon|
|00001ee0| 73 65 43 6f 64 65 2c 20 | 72 65 73 70 6f 6e 73 65 |seCode, |response|
|00001ef0| 29 3b 0d 09 09 69 66 20 | 28 65 72 72 20 21 3d 20 |);...if |(err != |
|00001f00| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit|
|00001f10| 31 3b 0d 09 09 0d 09 7d | 20 65 6c 73 65 20 7b 0d |1;.....}| else {.|
|00001f20| 09 0d 09 09 2f 2a 20 41 | 63 74 69 76 65 20 6d 6f |..../* A|ctive mo|
|00001f30| 64 65 3a 20 45 73 74 61 | 62 6c 69 73 68 20 6c 69 |de: Esta|blish li|
|00001f40| 73 74 65 6e 69 6e 67 20 | 64 61 74 61 20 73 74 72 |stening |data str|
|00001f50| 65 61 6d 20 61 6e 64 20 | 73 65 6e 64 20 50 4f 52 |eam and |send POR|
|00001f60| 54 20 63 6f 6d 6d 61 6e | 64 2e 20 2a 2f 0d 09 0d |T comman|d. */...|
|00001f70| 09 09 65 72 72 20 3d 20 | 4e 65 74 47 65 74 4d 79 |..err = |NetGetMy|
|00001f80| 41 64 64 72 28 26 6d 79 | 41 64 64 72 29 3b 0d 09 |Addr(&my|Addr);..|
|00001f90| 09 69 66 20 28 65 72 72 | 20 21 3d 20 6e 6f 45 72 |.if (err| != noEr|
|00001fa0| 72 29 20 67 6f 74 6f 20 | 65 78 69 74 31 3b 0d 09 |r) goto |exit1;..|
|00001fb0| 0d 09 09 65 72 72 20 3d | 20 4e 65 74 46 54 50 44 |...err =| NetFTPD|
|00001fc0| 61 74 61 50 61 73 73 69 | 76 65 4f 70 65 6e 28 26 |ataPassi|veOpen(&|
|00001fd0| 70 6f 72 74 2c 20 26 64 | 61 74 61 53 74 72 65 61 |port, &d|ataStrea|
|00001fe0| 6d 29 3b 0d 09 09 69 66 | 20 28 65 72 72 20 21 3d |m);...if| (err !=|
|00001ff0| 20 6e 6f 45 72 72 29 20 | 67 6f 74 6f 20 65 78 69 | noErr) |goto exi|
|00002000| 74 31 3b 0d 09 09 0d 09 | 09 73 70 72 69 6e 74 66 |t1;.....|.sprintf|
|00002010| 28 63 6f 6d 6d 61 6e 64 | 2c 20 22 50 4f 52 54 20 |(command|, "PORT |
|00002020| 25 68 75 2c 25 68 75 2c | 25 68 75 2c 25 68 75 2c |%hu,%hu,|%hu,%hu,|
|00002030| 25 68 75 2c 25 68 75 22 | 2c 0d 09 09 09 28 75 6e |%hu,%hu"|,....(un|
|00002040| 73 69 67 6e 65 64 20 73 | 68 6f 72 74 29 28 28 6d |signed s|hort)((m|
|00002050| 79 41 64 64 72 3e 3e 32 | 34 29 26 30 78 66 66 29 |yAddr>>2|4)&0xff)|
|00002060| 2c 20 0d 09 09 09 28 75 | 6e 73 69 67 6e 65 64 20 |, ....(u|nsigned |
|00002070| 73 68 6f 72 74 29 28 28 | 6d 79 41 64 64 72 3e 3e |short)((|myAddr>>|
|00002080| 31 36 29 26 30 78 66 66 | 29 2c 20 0d 09 09 09 28 |16)&0xff|), ....(|
|00002090| 75 6e 73 69 67 6e 65 64 | 20 73 68 6f 72 74 29 28 |unsigned| short)(|
|000020a0| 28 6d 79 41 64 64 72 3e | 3e 38 29 26 30 78 66 66 |(myAddr>|>8)&0xff|
|000020b0| 29 2c 20 0d 09 09 09 28 | 75 6e 73 69 67 6e 65 64 |), ....(|unsigned|
|000020c0| 20 73 68 6f 72 74 29 28 | 6d 79 41 64 64 72 26 30 | short)(|myAddr&0|
|000020d0| 78 66 66 29 2c 0d 09 09 | 09 28 75 6e 73 69 67 6e |xff),...|.(unsign|
|000020e0| 65 64 20 73 68 6f 72 74 | 29 28 28 70 6f 72 74 3e |ed short|)((port>|
|000020f0| 3e 38 29 26 30 78 66 66 | 29 2c 20 0d 09 09 09 28 |>8)&0xff|), ....(|
|00002100| 75 6e 73 69 67 6e 65 64 | 20 73 68 6f 72 74 29 28 |unsigned| short)(|
|00002110| 70 6f 72 74 26 30 78 66 | 66 29 29 3b 0d 09 09 65 |port&0xf|f));...e|
|00002120| 72 72 20 3d 20 4e 65 74 | 43 6f 6d 6d 61 6e 64 28 |rr = Net|Command(|
|00002130| 63 6f 6e 74 72 6f 6c 53 | 74 72 65 61 6d 2c 20 63 |controlS|tream, c|
|00002140| 6f 6d 6d 61 6e 64 2c 20 | 26 72 65 73 70 6f 6e 73 |ommand, |&respons|
|00002150| 65 43 6f 64 65 2c 20 72 | 65 73 70 6f 6e 73 65 29 |eCode, r|esponse)|
|00002160| 3b 0d 09 09 69 66 20 28 | 65 72 72 20 21 3d 20 6e |;...if (|err != n|
|00002170| 6f 45 72 72 29 20 67 6f | 74 6f 20 65 78 69 74 32 |oErr) go|to exit2|
|00002180| 3b 20 0d 09 09 69 66 20 | 28 72 65 73 70 6f 6e 73 |; ...if |(respons|
|00002190| 65 43 6f 64 65 20 21 3d | 20 32 30 30 29 20 67 6f |eCode !=| 200) go|
|000021a0| 74 6f 20 65 78 69 74 33 | 3b 0d 09 09 0d 09 7d 0d |to exit3|;.....}.|
|000021b0| 0d 09 28 2a 2a 73 29 2e | 64 61 74 61 53 74 72 65 |..(**s).|dataStre|
|000021c0| 61 6d 20 3d 20 64 61 74 | 61 53 74 72 65 61 6d 3b |am = dat|aStream;|
|000021d0| 0d 09 28 2a 2a 73 29 2e | 67 65 74 20 3d 20 67 65 |..(**s).|get = ge|
|000021e0| 74 3b 0d 09 0d 09 73 70 | 72 69 6e 74 66 28 63 6f |t;....sp|rintf(co|
|000021f0| 6d 6d 61 6e 64 2c 20 22 | 25 73 20 25 2e 32 35 30 |mmand, "|%s %.250|
|00002200| 73 22 2c 20 63 6d 64 2c | 20 70 61 74 68 29 3b 0d |s", cmd,| path);.|
|00002210| 09 65 72 72 20 3d 20 4e | 65 74 43 6f 6d 6d 61 6e |.err = N|etComman|
|00002220| 64 28 63 6f 6e 74 72 6f | 6c 53 74 72 65 61 6d 2c |d(contro|lStream,|
|00002230| 20 63 6f 6d 6d 61 6e 64 | 2c 20 26 72 65 73 70 6f | command|, &respo|
|00002240| 6e 73 65 43 6f 64 65 2c | 20 72 65 73 70 6f 6e 73 |nseCode,| respons|
|00002250| 65 29 3b 0d 09 69 66 20 | 28 65 72 72 20 21 3d 20 |e);..if |(err != |
|00002260| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit|
|00002270| 32 3b 0d 09 69 66 20 28 | 72 65 73 70 6f 6e 73 65 |2;..if (|response|
|00002280| 43 6f 64 65 20 21 3d 20 | 31 35 30 20 26 26 20 72 |Code != |150 && r|
|00002290| 65 73 70 6f 6e 73 65 43 | 6f 64 65 20 21 3d 20 31 |esponseC|ode != 1|
|000022a0| 32 35 29 20 67 6f 74 6f | 20 65 78 69 74 33 3b 0d |25) goto| exit3;.|
|000022b0| 09 0d 09 69 66 20 28 21 | 28 2a 2a 73 29 2e 70 61 |...if (!|(**s).pa|
|000022c0| 73 73 69 76 65 29 20 7b | 0d 09 0d 09 09 2f 2a 20 |ssive) {|...../* |
|000022d0| 41 63 74 69 76 65 20 6d | 6f 64 65 3a 20 57 61 69 |Active m|ode: Wai|
|000022e0| 74 20 66 6f 72 20 73 65 | 72 76 65 72 20 74 6f 20 |t for se|rver to |
|000022f0| 6f 70 65 6e 20 69 74 73 | 20 65 6e 64 20 6f 66 20 |open its| end of |
|00002300| 74 68 65 20 64 61 74 61 | 20 73 74 72 65 61 6d 2e |the data| stream.|
|00002310| 20 2a 2f 0d 09 0d 09 09 | 65 72 72 20 3d 20 4e 65 | */.....|err = Ne|
|00002320| 74 46 54 50 44 61 74 61 | 57 61 69 74 46 6f 72 43 |tFTPData|WaitForC|
|00002330| 6f 6e 6e 65 63 74 69 6f | 6e 28 64 61 74 61 53 74 |onnectio|n(dataSt|
|00002340| 72 65 61 6d 29 3b 0d 09 | 09 69 66 20 28 65 72 72 |ream);..|.if (err|
|00002350| 20 21 3d 20 6e 6f 45 72 | 72 29 20 67 6f 74 6f 20 | != noEr|r) goto |
|00002360| 65 78 69 74 31 3b 0d 09 | 09 0d 09 7d 0d 09 0d 09 |exit1;..|...}....|
|00002370| 69 66 20 28 67 65 74 29 | 20 7b 0d 09 09 65 72 72 |if (get)| {...err|
|00002380| 20 3d 20 4e 65 74 47 65 | 74 46 54 50 44 61 74 61 | = NetGe|tFTPData|
|00002390| 28 64 61 74 61 53 74 72 | 65 61 6d 2c 20 74 65 78 |(dataStr|eam, tex|
|000023a0| 74 46 69 6c 65 2c 20 64 | 61 74 61 29 3b 0d 09 7d |tFile, d|ata);..}|
|000023b0| 20 65 6c 73 65 20 7b 0d | 09 09 65 72 72 20 3d 20 | else {.|..err = |
|000023c0| 4e 65 74 50 75 74 46 54 | 50 44 61 74 61 28 64 61 |NetPutFT|PData(da|
|000023d0| 74 61 53 74 72 65 61 6d | 2c 20 74 65 78 74 46 69 |taStream|, textFi|
|000023e0| 6c 65 2c 20 2a 64 61 74 | 61 29 3b 0d 09 7d 0d 09 |le, *dat|a);..}..|
|000023f0| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr|
|00002400| 29 20 67 6f 74 6f 20 65 | 78 69 74 31 3b 0d 09 0d |) goto e|xit1;...|
|00002410| 09 28 2a 2a 73 29 2e 64 | 61 74 61 53 74 72 65 61 |.(**s).d|ataStrea|
|00002420| 6d 20 3d 20 6e 69 6c 3b | 0d 09 0d 09 65 72 72 20 |m = nil;|....err |
|00002430| 3d 20 4e 65 74 46 54 50 | 44 61 74 61 43 6c 6f 73 |= NetFTP|DataClos|
|00002440| 65 28 64 61 74 61 53 74 | 72 65 61 6d 29 3b 0d 09 |e(dataSt|ream);..|
|00002450| 69 66 20 28 65 72 72 20 | 21 3d 20 6e 6f 45 72 72 |if (err |!= noErr|
|00002460| 29 20 67 6f 74 6f 20 65 | 78 69 74 31 3b 0d 09 0d |) goto e|xit1;...|
|00002470| 09 65 72 72 20 3d 20 4e | 65 74 47 65 74 45 78 74 |.err = N|etGetExt|
|00002480| 72 61 52 65 73 70 6f 6e | 73 65 28 63 6f 6e 74 72 |raRespon|se(contr|
|00002490| 6f 6c 53 74 72 65 61 6d | 2c 20 26 72 65 73 70 6f |olStream|, &respo|
|000024a0| 6e 73 65 43 6f 64 65 2c | 20 72 65 73 70 6f 6e 73 |nseCode,| respons|
|000024b0| 65 29 3b 0d 09 69 66 20 | 28 65 72 72 20 21 3d 20 |e);..if |(err != |
|000024c0| 6e 6f 45 72 72 29 20 67 | 6f 74 6f 20 65 78 69 74 |noErr) g|oto exit|
|000024d0| 34 3b 0d 09 69 66 20 28 | 72 65 73 70 6f 6e 73 65 |4;..if (|response|
|000024e0| 43 6f 64 65 20 21 3d 20 | 32 32 36 29 20 72 65 74 |Code != |226) ret|
|000024f0| 75 72 6e 20 66 74 70 53 | 65 72 76 65 72 45 72 72 |urn ftpS|erverErr|
|00002500| 3b 0d 09 0d 09 72 65 74 | 75 72 6e 20 6e 6f 45 72 |;....ret|urn noEr|
|00002510| 72 3b 0d 09 0d 65 78 69 | 74 31 3a 0d 0d 09 4e 65 |r;...exi|t1:...Ne|
|00002520| 74 43 6c 6f 73 65 28 63 | 6f 6e 74 72 6f 6c 53 74 |tClose(c|ontrolSt|
|00002530| 72 65 61 6d 29 3b 0d 09 | 4d 79 44 69 73 70 6f 73 |ream);..|MyDispos|
|00002540| 65 48 61 6e 64 6c 65 28 | 73 29 3b 0d 09 72 65 74 |eHandle(|s);..ret|
|00002550| 75 72 6e 20 65 72 72 3b | 0d 09 0d 65 78 69 74 32 |urn err;|...exit2|
|00002560| 3a 0d 0d 09 4e 65 74 46 | 54 50 44 61 74 61 43 6c |:...NetF|TPDataCl|
|00002570| 6f 73 65 28 64 61 74 61 | 53 74 72 65 61 6d 29 3b |ose(data|Stream);|
|00002580| 0d 09 4d 79 44 69 73 70 | 6f 73 65 48 61 6e 64 6c |..MyDisp|oseHandl|
|00002590| 65 28 73 29 3b 0d 09 72 | 65 74 75 72 6e 20 65 72 |e(s);..r|eturn er|
|000025a0| 72 3b 0d 09 0d 65 78 69 | 74 33 3a 0d 0d 09 4e 65 |r;...exi|t3:...Ne|
|000025b0| 74 46 54 50 44 61 74 61 | 43 6c 6f 73 65 28 64 61 |tFTPData|Close(da|
|000025c0| 74 61 53 74 72 65 61 6d | 29 3b 0d 09 28 2a 2a 73 |taStream|);..(**s|
|000025d0| 29 2e 64 61 74 61 53 74 | 72 65 61 6d 20 3d 20 6e |).dataSt|ream = n|
|000025e0| 69 6c 3b 0d 09 72 65 74 | 75 72 6e 20 66 74 70 53 |il;..ret|urn ftpS|
|000025f0| 65 72 76 65 72 45 72 72 | 3b 0d 09 0d 65 78 69 74 |erverErr|;...exit|
|00002600| 34 3a 0d 0d 09 4d 79 44 | 69 73 70 6f 73 65 48 61 |4:...MyD|isposeHa|
|00002610| 6e 64 6c 65 28 73 29 3b | 0d 09 72 65 74 75 72 6e |ndle(s);|..return|
|00002620| 20 65 72 72 3b 0d 7d 0d | 0d 0d 0d 2f 2a 2d 2d 2d | err;.}.|.../*---|
|00002630| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002640| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002650| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002660| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002670| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 0d 09 46 74 70 47 65 |--------|-..FtpGe|
|00002680| 74 46 69 6c 65 20 0d 09 | 0d 09 47 65 74 20 61 20 |tFile ..|..Get a |
|00002690| 66 69 6c 65 20 66 72 6f | 6d 20 61 6e 20 46 54 50 |file fro|m an FTP|
|000026a0| 20 73 65 72 76 65 72 2e | 0d 09 0d 09 45 6e 74 72 | server.|....Entr|
|000026b0| 79 3a 09 73 74 72 65 61 | 6d 20 3d 20 73 74 72 65 |y:.strea|m = stre|
|000026c0| 61 6d 20 72 65 66 65 72 | 65 6e 63 65 2e 0d 09 09 |am refer|ence....|
|000026d0| 09 70 61 74 68 20 3d 20 | 66 69 6c 65 20 70 61 74 |.path = |file pat|
|000026e0| 68 2e 0d 09 09 09 74 65 | 78 74 46 69 6c 65 20 3d |h.....te|xtFile =|
|000026f0| 20 74 72 75 65 20 69 66 | 20 74 65 78 74 20 66 69 | true if| text fi|
|00002700| 6c 65 2c 20 66 61 6c 73 | 65 20 69 66 20 62 69 6e |le, fals|e if bin|
|00002710| 61 72 79 20 66 69 6c 65 | 2e 0d 09 0d 09 45 78 69 |ary file|.....Exi|
|00002720| 74 3a 09 66 75 6e 63 74 | 69 6f 6e 20 72 65 73 75 |t:.funct|ion resu|
|00002730| 6c 74 20 3d 20 72 65 73 | 75 6c 74 20 63 6f 64 65 |lt = res|ult code|
|00002740| 2e 0d 09 09 09 64 61 74 | 61 20 3d 20 68 61 6e 64 |.....dat|a = hand|
|00002750| 6c 65 20 74 6f 20 64 61 | 74 61 2e 0d 2d 2d 2d 2d |le to da|ta..----|
|00002760| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002770| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002780| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002790| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000027a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2a 2f 0d 0d 4f 53 45 72 |--------|*/..OSEr|
|000027b0| 72 20 46 74 70 47 65 74 | 46 69 6c 65 20 28 46 74 |r FtpGet|File (Ft|
|000027c0| 70 53 74 72 65 61 6d 52 | 65 66 20 73 74 72 65 61 |pStreamR|ef strea|
|000027d0| 6d 2c 20 63 68 61 72 20 | 2a 70 61 74 68 2c 20 42 |m, char |*path, B|
|000027e0| 6f 6f 6c 65 61 6e 20 74 | 65 78 74 46 69 6c 65 2c |oolean t|extFile,|
|000027f0| 20 48 61 6e 64 6c 65 20 | 2a 64 61 74 61 29 0d 7b | Handle |*data).{|
|00002800| 0d 09 72 65 74 75 72 6e | 20 47 65 74 4f 72 50 75 |..return| GetOrPu|
|00002810| 74 46 69 6c 65 4f 72 4c | 69 73 74 69 6e 67 28 73 |tFileOrL|isting(s|
|00002820| 74 72 65 61 6d 2c 20 70 | 61 74 68 2c 20 22 52 45 |tream, p|ath, "RE|
|00002830| 54 52 22 2c 20 74 72 75 | 65 2c 20 74 65 78 74 46 |TR", tru|e, textF|
|00002840| 69 6c 65 2c 20 64 61 74 | 61 29 3b 0d 7d 0d 0d 0d |ile, dat|a);.}...|
|00002850| 0d 2f 2a 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |./*-----|--------|
|00002860| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002870| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002880| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002890| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 0d |--------|-------.|
|000028a0| 09 46 74 70 47 65 74 4c | 69 73 74 69 6e 67 20 0d |.FtpGetL|isting .|
|000028b0| 09 0d 09 47 65 74 20 61 | 20 64 69 72 65 63 74 6f |...Get a| directo|
|000028c0| 72 79 20 6c 69 73 74 69 | 6e 67 20 66 72 6f 6d 20 |ry listi|ng from |
|000028d0| 61 6e 20 46 54 50 20 73 | 65 72 76 65 72 2e 0d 09 |an FTP s|erver...|
|000028e0| 0d 09 45 6e 74 72 79 3a | 09 73 74 72 65 61 6d 20 |..Entry:|.stream |
|000028f0| 3d 20 73 74 72 65 61 6d | 20 72 65 66 65 72 65 6e |= stream| referen|
|00002900| 63 65 2e 0d 09 09 09 70 | 61 74 68 20 3d 20 64 69 |ce.....p|ath = di|
|00002910| 72 65 63 74 6f 72 79 20 | 6f 72 20 66 69 6c 65 20 |rectory |or file |
|00002920| 70 61 74 68 2e 0d 09 0d | 09 45 78 69 74 3a 09 66 |path....|.Exit:.f|
|00002930| 75 6e 63 74 69 6f 6e 20 | 72 65 73 75 6c 74 20 3d |unction |result =|
|00002940| 20 72 65 73 75 6c 74 20 | 63 6f 64 65 2e 0d 09 09 | result |code....|
|00002950| 09 64 61 74 61 20 3d 20 | 68 61 6e 64 6c 65 20 74 |.data = |handle t|
|00002960| 6f 20 6c 69 73 74 69 6e | 67 2e 0d 2d 2d 2d 2d 2d |o listin|g..-----|
|00002970| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002980| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002990| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000029a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000029b0| 2d 2d 2d 2d 2d 2d 2d 2a | 2f 0d 0d 4f 53 45 72 72 |-------*|/..OSErr|
|000029c0| 20 46 74 70 47 65 74 4c | 69 73 74 69 6e 67 20 28 | FtpGetL|isting (|
|000029d0| 46 74 70 53 74 72 65 61 | 6d 52 65 66 20 73 74 72 |FtpStrea|mRef str|
|000029e0| 65 61 6d 2c 20 63 68 61 | 72 20 2a 70 61 74 68 2c |eam, cha|r *path,|
|000029f0| 20 48 61 6e 64 6c 65 20 | 2a 64 61 74 61 29 0d 7b | Handle |*data).{|
|00002a00| 0d 09 72 65 74 75 72 6e | 20 47 65 74 4f 72 50 75 |..return| GetOrPu|
|00002a10| 74 46 69 6c 65 4f 72 4c | 69 73 74 69 6e 67 28 73 |tFileOrL|isting(s|
|00002a20| 74 72 65 61 6d 2c 20 70 | 61 74 68 2c 20 22 4c 49 |tream, p|ath, "LI|
|00002a30| 53 54 22 2c 20 74 72 75 | 65 2c 20 74 72 75 65 2c |ST", tru|e, true,|
|00002a40| 20 64 61 74 61 29 3b 0d | 7d 0d 0d 0d 0d 2f 2a 2d | data);.|}..../*-|
|00002a50| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 0d 09 46 74 70 |--------|---..Ftp|
|00002aa0| 50 75 74 46 69 6c 65 20 | 0d 09 0d 09 53 65 6e 64 |PutFile |....Send|
|00002ab0| 20 61 20 66 69 6c 65 20 | 74 6f 20 61 6e 20 46 54 | a file |to an FT|
|00002ac0| 50 20 73 65 72 76 65 72 | 2e 0d 09 0d 09 45 6e 74 |P server|.....Ent|
|00002ad0| 72 79 3a 09 73 74 72 65 | 61 6d 20 3d 20 73 74 72 |ry:.stre|am = str|
|00002ae0| 65 61 6d 20 72 65 66 65 | 72 65 6e 63 65 2e 0d 09 |eam refe|rence...|
|00002af0| 09 09 70 61 74 68 20 3d | 20 66 69 6c 65 20 70 61 |..path =| file pa|
|00002b00| 74 68 2e 0d 09 09 09 74 | 65 78 74 46 69 6c 65 20 |th.....t|extFile |
|00002b10| 3d 20 74 72 75 65 20 69 | 66 20 74 65 78 74 20 66 |= true i|f text f|
|00002b20| 69 6c 65 2c 20 66 61 6c | 73 65 20 69 66 20 62 69 |ile, fal|se if bi|
|00002b30| 6e 61 72 79 20 66 69 6c | 65 2e 0d 09 09 09 64 61 |nary fil|e.....da|
|00002b40| 74 61 20 3d 20 68 61 6e | 64 6c 65 20 74 6f 20 64 |ta = han|dle to d|
|00002b50| 61 74 61 2e 0d 09 0d 09 | 45 78 69 74 3a 09 66 75 |ata.....|Exit:.fu|
|00002b60| 6e 63 74 69 6f 6e 20 72 | 65 73 75 6c 74 20 3d 20 |nction r|esult = |
|00002b70| 72 65 73 75 6c 74 20 63 | 6f 64 65 2e 0d 2d 2d 2d |result c|ode..---|
|00002b80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002b90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002ba0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002bb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002bc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 4f 53 45 |--------|-*/..OSE|
|00002bd0| 72 72 20 46 74 70 50 75 | 74 46 69 6c 65 20 28 46 |rr FtpPu|tFile (F|
|00002be0| 74 70 53 74 72 65 61 6d | 52 65 66 20 73 74 72 65 |tpStream|Ref stre|
|00002bf0| 61 6d 2c 20 63 68 61 72 | 20 2a 70 61 74 68 2c 20 |am, char| *path, |
|00002c00| 42 6f 6f 6c 65 61 6e 20 | 74 65 78 74 46 69 6c 65 |Boolean |textFile|
|00002c10| 2c 20 48 61 6e 64 6c 65 | 20 64 61 74 61 29 0d 7b |, Handle| data).{|
|00002c20| 0d 09 72 65 74 75 72 6e | 20 47 65 74 4f 72 50 75 |..return| GetOrPu|
|00002c30| 74 46 69 6c 65 4f 72 4c | 69 73 74 69 6e 67 28 73 |tFileOrL|isting(s|
|00002c40| 74 72 65 61 6d 2c 20 70 | 61 74 68 2c 20 22 53 54 |tream, p|ath, "ST|
|00002c50| 4f 52 22 2c 20 66 61 6c | 73 65 2c 20 74 65 78 74 |OR", fal|se, text|
|00002c60| 46 69 6c 65 2c 20 26 64 | 61 74 61 29 3b 0d 7d 0d |File, &d|ata);.}.|
|00002c70| 0d 0d 0d 2f 2a 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.../*---|--------|
|00002c80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002c90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002ca0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002cb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002cc0| 2d 0d 09 46 74 70 44 65 | 6c 65 74 65 46 69 6c 65 |-..FtpDe|leteFile|
|00002cd0| 20 0d 09 0d 09 44 65 6c | 65 74 65 20 61 20 66 69 | ....Del|ete a fi|
|00002ce0| 6c 65 20 6f 6e 20 61 6e | 20 46 54 50 20 73 65 72 |le on an| FTP ser|
|00002cf0| 76 65 72 2e 0d 09 0d 09 | 45 6e 74 72 79 3a 09 73 |ver.....|Entry:.s|
|00002d00| 74 72 65 61 6d 20 3d 20 | 73 74 72 65 61 6d 20 72 |tream = |stream r|
|00002d10| 65 66 65 72 65 6e 63 65 | 2e 0d 09 09 09 70 61 74 |eference|.....pat|
|00002d20| 68 20 3d 20 66 69 6c 65 | 20 70 61 74 68 2e 0d 09 |h = file| path...|
|00002d30| 0d 09 45 78 69 74 3a 09 | 66 75 6e 63 74 69 6f 6e |..Exit:.|function|
|00002d40| 20 72 65 73 75 6c 74 20 | 3d 20 72 65 73 75 6c 74 | result |= result|
|00002d50| 20 63 6f 64 65 2e 0d 2d | 2d 2d 2d 2d 2d 2d 2d 2d | code..-|--------|
|00002d60| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002d70| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002d80| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002d90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002da0| 2d 2d 2d 2a 2f 0d 0d 4f | 53 45 72 72 20 46 74 70 |---*/..O|SErr Ftp|
|00002db0| 44 65 6c 65 74 65 46 69 | 6c 65 20 28 46 74 70 53 |DeleteFi|le (FtpS|
|00002dc0| 74 72 65 61 6d 52 65 66 | 20 73 74 72 65 61 6d 2c |treamRef| stream,|
|00002dd0| 20 63 68 61 72 20 2a 70 | 61 74 68 29 0d 7b 0d 09 | char *p|ath).{..|
|00002de0| 54 53 74 72 65 61 6d 48 | 61 6e 64 6c 65 20 73 3b |TStreamH|andle s;|
|00002df0| 0d 09 4e 65 74 53 74 72 | 65 61 6d 52 65 66 20 63 |..NetStr|eamRef c|
|00002e00| 6f 6e 74 72 6f 6c 53 74 | 72 65 61 6d 3b 0d 09 43 |ontrolSt|ream;..C|
|00002e10| 53 74 72 32 35 35 20 63 | 6f 6d 6d 61 6e 64 2c 20 |Str255 c|ommand, |
|00002e20| 72 65 73 70 6f 6e 73 65 | 3b 0d 09 6c 6f 6e 67 20 |response|;..long |
|00002e30| 72 65 73 70 6f 6e 73 65 | 43 6f 64 65 3b 0d 09 4f |response|Code;..O|
|00002e40| 53 45 72 72 20 65 72 72 | 20 3d 20 6e 6f 45 72 72 |SErr err| = noErr|
|00002e50| 3b 0d 09 0d 09 73 20 3d | 20 28 54 53 74 72 65 61 |;....s =| (TStrea|
|00002e60| 6d 48 61 6e 64 6c 65 29 | 73 74 72 65 61 6d 3b 0d |mHandle)|stream;.|
|00002e70| 09 63 6f 6e 74 72 6f 6c | 53 74 72 65 61 6d 20 3d |.control|Stream =|
|00002e80| 20 28 2a 2a 73 29 2e 6e | 65 74 53 74 72 65 61 6d | (**s).n|etStream|
|00002e90| 3b 0d 09 0d 09 73 70 72 | 69 6e 74 66 28 63 6f 6d |;....spr|intf(com|
|00002ea0| 6d 61 6e 64 2c 20 22 44 | 45 4c 45 20 25 2e 32 35 |mand, "D|ELE %.25|
|00002eb0| 30 73 22 2c 20 70 61 74 | 68 29 3b 0d 09 65 72 72 |0s", pat|h);..err|
|00002ec0| 20 3d 20 4e 65 74 43 6f | 6d 6d 61 6e 64 28 63 6f | = NetCo|mmand(co|
|00002ed0| 6e 74 72 6f 6c 53 74 72 | 65 61 6d 2c 20 63 6f 6d |ntrolStr|eam, com|
|00002ee0| 6d 61 6e 64 2c 20 26 72 | 65 73 70 6f 6e 73 65 43 |mand, &r|esponseC|
|00002ef0| 6f 64 65 2c 20 72 65 73 | 70 6f 6e 73 65 29 3b 0d |ode, res|ponse);.|
|00002f00| 09 69 66 20 28 65 72 72 | 20 21 3d 20 6e 6f 45 72 |.if (err| != noEr|
|00002f10| 72 29 20 67 6f 74 6f 20 | 65 78 69 74 3b 0d 09 69 |r) goto |exit;..i|
|00002f20| 66 20 28 72 65 73 70 6f | 6e 73 65 43 6f 64 65 20 |f (respo|nseCode |
|00002f30| 21 3d 20 32 35 30 29 20 | 72 65 74 75 72 6e 20 66 |!= 250) |return f|
|00002f40| 74 70 53 65 72 76 65 72 | 45 72 72 3b 0d 09 0d 09 |tpServer|Err;....|
|00002f50| 72 65 74 75 72 6e 20 6e | 6f 45 72 72 3b 0d 09 0d |return n|oErr;...|
|00002f60| 65 78 69 74 3a 0d 0d 09 | 4d 79 44 69 73 70 6f 73 |exit:...|MyDispos|
|00002f70| 65 48 61 6e 64 6c 65 28 | 73 29 3b 0d 09 72 65 74 |eHandle(|s);..ret|
|00002f80| 75 72 6e 20 65 72 72 3b | 0d 7d 0d 0d 0d 0d 2f 2a |urn err;|.}..../*|
|00002f90| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002fa0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002fb0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002fc0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002fd0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 09 46 74 |--------|----..Ft|
|00002fe0| 70 47 65 74 53 65 72 76 | 65 72 45 72 72 49 6e 66 |pGetServ|erErrInf|
|00002ff0| 6f 20 0d 09 0d 09 47 65 | 74 20 73 65 72 76 65 72 |o ....Ge|t server|
|00003000| 20 65 72 72 6f 72 20 69 | 6e 66 6f 72 6d 61 74 69 | error i|nformati|
|00003010| 6f 6e 2e 0d 09 0d 09 45 | 6e 74 72 79 3a 09 73 74 |on.....E|ntry:.st|
|00003020| 72 65 61 6d 20 3d 20 73 | 74 72 65 61 6d 20 72 65 |ream = s|tream re|
|00003030| 66 65 72 65 6e 63 65 2e | 0d 09 0d 09 45 78 69 74 |ference.|....Exit|
|00003040| 3a 09 2a 73 65 72 76 65 | 72 45 72 72 49 6e 66 6f |:.*serve|rErrInfo|
|00003050| 20 3d 20 73 65 72 76 65 | 72 20 65 72 72 6f 72 20 | = serve|r error |
|00003060| 69 6e 66 6f 72 6d 61 74 | 69 6f 6e 2e 0d 2d 2d 2d |informat|ion..---|
|00003070| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003080| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000030a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000030b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 76 6f 69 |--------|-*/..voi|
|000030c0| 64 20 46 74 70 47 65 74 | 53 65 72 76 65 72 45 72 |d FtpGet|ServerEr|
|000030d0| 72 49 6e 66 6f 20 28 46 | 74 70 53 74 72 65 61 6d |rInfo (F|tpStream|
|000030e0| 52 65 66 20 73 74 72 65 | 61 6d 2c 20 4e 65 74 53 |Ref stre|am, NetS|
|000030f0| 65 72 76 65 72 45 72 72 | 49 6e 66 6f 20 2a 73 65 |erverErr|Info *se|
|00003100| 72 76 65 72 45 72 72 49 | 6e 66 6f 29 0d 7b 0d 09 |rverErrI|nfo).{..|
|00003110| 54 53 74 72 65 61 6d 48 | 61 6e 64 6c 65 20 73 3b |TStreamH|andle s;|
|00003120| 0d 09 0d 09 73 20 3d 20 | 28 54 53 74 72 65 61 6d |....s = |(TStream|
|00003130| 48 61 6e 64 6c 65 29 73 | 74 72 65 61 6d 3b 0d 09 |Handle)s|tream;..|
|00003140| 4e 65 74 47 65 74 53 65 | 72 76 65 72 45 72 72 49 |NetGetSe|rverErrI|
|00003150| 6e 66 6f 28 28 2a 2a 73 | 29 2e 6e 65 74 53 74 72 |nfo((**s|).netStr|
|00003160| 65 61 6d 2c 20 73 65 72 | 76 65 72 45 72 72 49 6e |eam, ser|verErrIn|
|00003170| 66 6f 29 3b 0d 7d 0d 0d | 0d 0d 2f 2a 2d 2d 2d 2d |fo);.}..|../*----|
|00003180| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00003190| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000031c0| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 09 46 74 70 4e 75 6d |--------|..FtpNum|
|000031d0| 42 79 74 65 73 54 72 61 | 6e 73 66 65 72 72 65 64 |BytesTra|nsferred|
|000031e0| 20 0d 09 0d 09 47 65 74 | 20 74 68 65 20 6e 75 6d | ....Get| the num|
|000031f0| 62 65 72 20 6f 66 20 64 | 61 74 61 20 62 79 74 65 |ber of d|ata byte|
|00003200| 73 20 74 72 61 6e 73 66 | 65 72 72 65 64 20 73 6f |s transf|erred so|
|00003210| 20 66 61 72 2e 0d 09 0d | 09 45 6e 74 72 79 3a 09 | far....|.Entry:.|
|00003220| 73 74 72 65 61 6d 20 3d | 20 73 74 72 65 61 6d 20 |stream =| stream |
|00003230| 72 65 66 65 72 65 6e 63 | 65 2e 0d 09 0d 09 45 78 |referenc|e.....Ex|
|00003240| 69 74 3a 09 66 75 6e 63 | 74 69 6f 6e 20 72 65 73 |it:.func|tion res|
|00003250| 75 6c 74 20 3d 20 6e 75 | 6d 62 65 72 20 6f 66 20 |ult = nu|mber of |
|00003260| 62 79 74 65 73 20 74 72 | 61 6e 73 66 65 72 72 65 |bytes tr|ansferre|
|00003270| 64 2c 20 6f 72 20 30 20 | 69 66 20 6e 6f 20 64 61 |d, or 0 |if no da|
|00003280| 74 61 0d 09 09 09 09 73 | 74 72 65 61 6d 20 6f 70 |ta.....s|tream op|
|00003290| 65 6e 2e 0d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |en..----|--------|
|000032a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000032b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000032c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000032d0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000032e0| 2a 2f 0d 0d 6c 6f 6e 67 | 20 46 74 70 4e 75 6d 42 |*/..long| FtpNumB|
|000032f0| 79 74 65 73 54 72 61 6e | 73 66 65 72 72 65 64 20 |ytesTran|sferred |
|00003300| 28 46 74 70 53 74 72 65 | 61 6d 52 65 66 20 73 74 |(FtpStre|amRef st|
|00003310| 72 65 61 6d 29 0d 7b 0d | 09 54 53 74 72 65 61 6d |ream).{.|.TStream|
|00003320| 48 61 6e 64 6c 65 20 73 | 3b 0d 09 4e 65 74 53 74 |Handle s|;..NetSt|
|00003330| 72 65 61 6d 52 65 66 20 | 64 61 74 61 53 74 72 65 |reamRef |dataStre|
|00003340| 61 6d 3b 0d 09 6c 6f 6e | 67 20 62 79 74 65 73 49 |am;..lon|g bytesI|
|00003350| 6e 2c 20 62 79 74 65 73 | 4f 75 74 3b 0d 09 0d 09 |n, bytes|Out;....|
|00003360| 73 20 3d 20 28 54 53 74 | 72 65 61 6d 48 61 6e 64 |s = (TSt|reamHand|
|00003370| 6c 65 29 73 74 72 65 61 | 6d 3b 0d 09 64 61 74 61 |le)strea|m;..data|
|00003380| 53 74 72 65 61 6d 20 3d | 20 28 2a 2a 73 29 2e 64 |Stream =| (**s).d|
|00003390| 61 74 61 53 74 72 65 61 | 6d 3b 0d 09 69 66 20 28 |ataStrea|m;..if (|
|000033a0| 64 61 74 61 53 74 72 65 | 61 6d 20 3d 3d 20 6e 69 |dataStre|am == ni|
|000033b0| 6c 29 20 72 65 74 75 72 | 6e 20 30 3b 0d 09 4e 65 |l) retur|n 0;..Ne|
|000033c0| 74 47 65 74 53 74 72 65 | 61 6d 53 74 61 74 73 28 |tGetStre|amStats(|
|000033d0| 64 61 74 61 53 74 72 65 | 61 6d 2c 20 26 62 79 74 |dataStre|am, &byt|
|000033e0| 65 73 49 6e 2c 20 26 62 | 79 74 65 73 4f 75 74 29 |esIn, &b|ytesOut)|
|000033f0| 3b 0d 09 72 65 74 75 72 | 6e 20 28 2a 2a 73 29 2e |;..retur|n (**s).|
|00003400| 67 65 74 20 3f 20 62 79 | 74 65 73 49 6e 20 3a 20 |get ? by|tesIn : |
|00003410| 62 79 74 65 73 4f 75 74 | 3b 0d 7d 0d 00 00 00 00 |bytesOut|;.}.....|
|00003420| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003430| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003440| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003450| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003460| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003470| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003480| 00 00 01 00 00 00 01 54 | 00 00 00 54 00 00 00 46 |.......T|...T...F|
|00003490| 20 2f 2a 20 5f 4f 70 65 | 6e 20 3d 3e 20 6f 70 65 | /* _Ope|n => ope|
|000034a0| 6e 20 65 74 63 2e 20 2a | 2f 0d 23 69 66 64 65 66 |n etc. *|/.#ifdef|
|000034b0| 05 66 74 70 2e 63 02 00 | 00 00 54 45 58 54 4d 4d |.ftp.c..|..TEXTMM|
|000034c0| 43 43 01 00 00 34 00 40 | 00 00 00 00 12 5d 00 00 |CC...4.@|.....]..|
|000034d0| 00 00 54 45 58 54 4d 4d | 43 43 01 00 00 34 00 40 |..TEXTMM|CC...4.@|
|000034e0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000034f0| 00 00 aa 4f 89 f3 00 00 | 33 9c 00 00 01 9a 64 65 |...O....|3.....de|
|00003500| 66 69 6e 65 20 5f 45 58 | 54 45 52 4e 5f 43 0d 20 |fine _EX|TERN_C. |
|00003510| 23 64 65 66 69 6e 65 20 | 5f 45 4e 44 5f 45 58 54 |#define |_END_EXT|
|00003520| 45 52 4e 5f 43 0d 23 65 | 6e 64 69 66 20 2f 2a 20 |ERN_C.#e|ndif /* |
|00003530| 5f 5f 63 70 6c 75 73 70 | 6c 75 73 20 2a 2f 0d 23 |__cplusp|lus */.#|
|00003540| 69 66 20 64 65 66 69 6e | 65 64 28 5f 5f 63 70 6c |if defin|ed(__cpl|
|00003550| 75 73 70 6c 75 73 29 20 | 26 26 20 64 65 66 69 6e |usplus) |&& defin|
|00003560| 65 64 28 5f 43 5f 4c 49 | 42 5f 49 53 5f 45 58 54 |ed(_C_LI|B_IS_EXT|
|00003570| 45 52 4e 5f 43 29 0d 20 | 23 64 65 66 69 6e 65 20 |ERN_C). |#define |
|00003580| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 00 00 00 |...H..Mo|naco....|
|00003590| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|000035a0| 00 00 00 00 00 00 00 03 | 00 04 fe d9 02 91 01 f1 |........|........|
|000035b0| 04 ea fe d9 02 91 01 f1 | 04 ea ac 24 12 79 00 00 |........|...$.y..|
|000035c0| 25 63 00 00 25 63 00 00 | 21 03 01 00 00 00 00 04 |%c..%c..|!.......|
|000035d0| 00 01 00 01 00 00 01 00 | 00 00 01 54 00 00 00 54 |........|...T...T|
|000035e0| 00 00 00 46 01 4e 2c a8 | 11 44 00 00 00 1c 00 46 |...F.N,.|.D.....F|
|000035f0| 00 01 4d 50 53 52 00 00 | 00 12 4d 57 42 42 00 00 |..MPSR..|..MWBB..|
|00003600| 00 1e 03 ed ff ff 00 00 | 00 00 00 00 00 00 03 f0 |........|........|
|00003610| ff ff 00 00 00 4c 00 00 | 00 00 00 00 00 00 00 00 |.....L..|........|
|00003620| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003630| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003640| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003650| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003660| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003670| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+