FtpPutFile - не работает под wine
От: PPA Россия http://flylinkdc.blogspot.com/
Дата: 29.07.12 15:04
Оценка:
Привет.
Может кто сталкивался или знает обходной путь?
код работающий под Windows не пашет под эмуляцией
GetLastError() возвращает 317
вот результат работы:
https://www.box.net/shared/5f27679d2ad4fa1d662c


    const wstring l_bz2_name = p_DumpFileName + _T(".bz2");
    if (File::bz2CompressFile(p_DumpFileName, l_bz2_name) > 0)
    {
        const TCHAR* l_url = _T("nightorion.dyndns.ws");
        CInternetHandle hInternet(InternetOpen(T_VERSIONSTRING, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
        if (!hInternet)
            return false;
        CInternetHandle hFTP(InternetConnect(hInternet, l_url, INTERNET_DEFAULT_FTP_PORT, NULL, NULL, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE | INTERNET_FLAG_EXISTING_CONNECT, 0));
        if (!hFTP)
        {
            LogManager::getInstance()->getInstance()->message("[stack-dmp-sender][InternetConnect][Error] " + Util::translateError(GetLastError()));
            return false;
        }
        if (FtpSetCurrentDirectory(hFTP, _T("dumps")))
        {
            GUID l_Guid = { 0 };
            ::CoCreateGuid(&l_Guid);
            OLECHAR l_szGuid[40] = {0};
            ::StringFromGUID2(l_Guid, l_szGuid, 40);
            wstring l_guid_str, l_guid_str_guid(l_szGuid);
            if (l_guid_str_guid.length() > 1)
                l_guid_str_guid = l_guid_str_guid.substr(1, 8);
            l_guid_str += Util::getCompileDate();
            l_guid_str += L'_';
            l_guid_str += Util::getCompileTime();
            l_guid_str += L'_';
            l_guid_str += Text::acpToWide(SETTING(PRIVATE_ID));
            l_guid_str += L'_';
            l_guid_str += l_guid_str_guid;
            l_guid_str += L'_';
            if (CompatibilityManager::isWine())
                l_guid_str += L"wine_";
            if(!p_mediainfo_crash_info.empty())
                l_guid_str += L"mediainfo_";
            l_guid_str += Util::getFileName(l_bz2_name);
            LogManager::getInstance()->getInstance()->message("[stack-dmp-sender][FtpPutFile] Start upload: " + Text::fromT(l_bz2_name));
            if (FtpPutFile(hFTP, l_bz2_name.c_str(), l_guid_str.c_str(), FTP_TRANSFER_TYPE_BINARY, 0) != 0)
            {
                LogManager::getInstance()->getInstance()->message("[stack-dmp-sender][FtpPutFile][OK!]");
                File::deleteFile(l_bz2_name);
                return true;    
            }
            else
            {
                TCHAR l_msg[2000]; l_msg[0] = 0;
                _sntprintf(l_msg, sizeof(l_msg),_T("Ошибка передачи файлов на сервер разрабоитчиков\r\nЕсли не сложно вышлите их по почте на адрес ppa74@ya.ru!\r\n")
                    _T("Код ошибки GetLastError() = %d [%s]\r\n")
                    _T("Файл l_bz2_name = %s\r\n")
                    _T("Файл l_guid_str = %s\r\n"),
                    GetLastError(),
                    Text::toT(Util::translateError(GetLastError())).c_str(),
                    l_bz2_name.c_str(),
                    l_guid_str.c_str()
                    );
                ::MessageBox(NULL,l_msg, _T("Ошибка передачи дампа на ftp-сервер разработчиков"), MB_ICONSTOP | MB_OK);
                LogManager::getInstance()->getInstance()->message("[stack-dmp-sender][FtpPutFile][Error] " + Util::translateError(GetLastError()));
            }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.