Subversion Repositories Kolibri OS

Rev

Rev 2554 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2.  
  3.  
  4. align 4
  5. parse_cmd:                              ; esi must point to command
  6.  
  7.         cmp     byte [esi+3], 0x20
  8.         jae     @f
  9.         mov     byte [esi+3], 0
  10.        @@:
  11.  
  12.         mov     eax, [esi]
  13.         and     eax, not 0x20202020     ; convert to upper case
  14.                                         ; (also convert spaces to null)
  15.         mov     edi, commands           ; list of commands to scan
  16.   .scanloop:
  17.         cmp     eax, [edi]
  18.         jne     .try_next
  19.  
  20.         jmp     dword [edi+4]
  21.  
  22.   .try_next:
  23.         add     edi, 8
  24.         cmp     byte [edi], 0
  25.         jne     .scanloop
  26.  
  27.   .error:
  28.         mcall   send, [socketnum2], str500, str500.length, 0
  29.  
  30.         ret
  31.  
  32.  
  33. align 4
  34. commands:                               ; all commands must be in uppercase
  35.  
  36.         db 'ABOR'
  37.         dd cmdABOR
  38.  
  39.         db 'CWD', 0
  40.         dd cmdCWD
  41.  
  42.         db 'DELE'
  43.         dd cmdDELE
  44.  
  45.         db 'LIST'
  46.         dd cmdLIST
  47.  
  48.         db 'NLST'
  49.         dd cmdNLST
  50.  
  51.         db 'NOOP'
  52.         dd cmdNOOP
  53.  
  54.         db 'PASS'
  55.         dd cmdPASS
  56.  
  57.         db 'PWD', 0
  58.         dd cmdPWD
  59.  
  60.         db 'PORT'
  61.         dd cmdPORT
  62.  
  63.         db 'QUIT'
  64.         dd cmdQUIT
  65.  
  66.         db 'RETR'
  67.         dd cmdRETR
  68.  
  69.         db 'STOR'
  70.         dd cmdSTOR
  71.  
  72.         db 'SYST'
  73.         dd cmdSYST
  74.  
  75.         db 'TYPE'
  76.         dd cmdTYPE
  77.  
  78.         db 'USER'
  79.         dd cmdUSER
  80.  
  81.         db 'XPWD'
  82.         dd cmdPWD
  83.  
  84.         db 0                    ; end marker
  85.  
  86.  
  87. align 4
  88. cmdABOR:
  89.  
  90.         ret
  91.  
  92. align 4
  93. cmdCWD:
  94.  
  95.         ret
  96.  
  97. align 4
  98. cmdDELE:
  99.  
  100.         ret
  101.  
  102. align 4
  103. cmdLIST:
  104.  
  105.         ret
  106.  
  107. align 4
  108. cmdNLST:
  109.  
  110.         ret
  111.  
  112. align 4
  113. cmdNOOP:
  114.  
  115.         ret
  116.  
  117. align 4
  118. cmdPASS:
  119.  
  120.         mcall   send, [socketnum2], str230, str230.length, 0
  121.         mov     [state], STATE_ACTIVE
  122.  
  123.         ret
  124.  
  125. align 4
  126. cmdPWD:
  127.  
  128.         ret
  129.  
  130. align 4
  131. cmdPORT:
  132.  
  133.         ret
  134.  
  135. align 4
  136. cmdQUIT:
  137.  
  138.         mcall   send, [socketnum2], str221, str221.length, 0
  139.         mcall   close, [socketnum2]
  140.  
  141.         ret
  142.  
  143. align 4
  144. cmdRETR:
  145.  
  146.         ret
  147.  
  148. align 4
  149. cmdSTOR:
  150.  
  151.         ret
  152.  
  153. align 4
  154. cmdSYST:
  155.  
  156.         mcall   send, [socketnum2], str215, str215.length, 0
  157.  
  158.         ret
  159.  
  160. align 4
  161. cmdTYPE:
  162.  
  163.         ret
  164.  
  165. align 4
  166. cmdUSER:
  167.  
  168.         mcall   send, [socketnum2], str331, str331.length, 0
  169.         mov     [state], STATE_LOGIN
  170.  
  171.         ret
  172.  
  173.  
  174.  
  175. str150  db '150 Here it comes...', 13, 10
  176. str200  db '200 Command OK.', 13, 10
  177. str215  db '215 UNIX type: L8', 13, 10
  178. .length = $ - str215
  179. str220  db '220 KolibriOS FTP Daemon 1.0', 13, 10
  180. .length = $ - str220
  181. str221  db '221 Bye!', 13, 10
  182. .length = $ - str221
  183. str225  db '225 Abort successful', 13, 10
  184. str226  db '226 Transfer OK, Closing connection', 13, 10
  185. str230  db '230 You are now logged in.', 13, 10
  186. .length = $ - str230
  187. str250  db '250 command successful', 13, 10
  188. str257  db '257 ""', 13, 10
  189. str331  db '331 Please specify the password.', 13, 10
  190. .length = $ - str331
  191. str500  db '500 Unsupported command', 13, 10
  192. .length = $ - str500
  193. str550  db '550 No such file', 13, 10
  194.