Проблема с заливкой файла на ftp

Тема в разделе "WASM.NETWORKS", создана пользователем Flasher, 25 дек 2006.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Привет господа-хорошие :)
    Посмотрите плиз код, есть ли тут ошибка?
    А то при отправке чексум портится.

    Код (Text):
    1.               push buflen
    2.               call _AllocateHeap
    3.               mov esi,eax
    4.              
    5.               push 0
    6.               push 0
    7.               push buflen
    8.               push esi
    9.               lea eax,iosb
    10.               push eax
    11.               push 0
    12.               push 0
    13.               push 0
    14.               push hFile
    15.               call ZwReadFile
    16.              
    17.            .while buflen != 0
    18.               mov edi,1460
    19.                .IF buflen < edi
    20.                   mov edi,buflen
    21.                .ENDIF
    22.            
    23.               push 0
    24.               push edi
    25.               push esi
    26.               push sock
    27.               call send
    28.                .if eax == -1
    29.                   .break
    30.                .endif
    31.               sub buflen,eax
    32.            .endw
    33.            
    34.               push esi
    35.               call _FreeHeap
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    esi не смещаешь.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1.            push esi ; <--- сразу в стек, так как по ходу изменять значение будем.
    2.  
    3.            .while buflen != 0
    4.               mov edi,1460
    5.                .IF buflen < edi
    6.                   mov edi,buflen
    7.                .ENDIF
    8.            
    9.               push 0
    10.               push edi
    11.               push esi
    12.               push sock
    13.               call send
    14.                .if eax == -1
    15.                   .break
    16.                .endif
    17.               sub buflen,eax
    18.               add esi, eax ; <--- сместим указатель на буфер, иначе одни и те же данные посылать будем
    19.            .endw
    20.            
    21.               call _FreeHeap
     
  4. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    n0name
    Правильно конечно подсказал..., но гдет ещё ошибка должна быть.
    Файл весит 21 969 байт а потом когда залитый файл скачиваю обратно - уже весит 21 946 байт :)
    Получаю размер файла вроде-бы правильно:
    Код (Text):
    1.        push 00000020h;FILE_SYNCHRONOUS_IO_NONALERT
    2.        push FILE_SHARE_READ
    3.        lea eax,iosb
    4.        push eax
    5.        lea eax,oa
    6.        push eax
    7.        push FILE_READ_DATA + SYNCHRONIZE
    8.        lea eax,hFile
    9.        push eax
    10.        call ZwOpenFile
    11.         or eax,eax
    12.         jnz _exit
    13.        push 5;FileStandardInformation
    14.        push sizeof fsi
    15.        lea eax,fsi
    16.        push eax
    17.        lea ecx,iosb
    18.        push ecx
    19.        push hFile
    20.        call ZwQueryInformationFile
    21.         or eax,eax
    22.         jnz _exit
    23.        mov eax,fsi.EndOfFile.LowPart
    24.        inc eax
    25.        mov buflen,eax
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Всё, разобрался господа.
    Одын совет, при работе с ftp всегда внимательно прочтите rfc, а то будите сидеть и тупить как я, из за того что TYPE I забыл отправить ;)