fsInternetResult vmsInternetSession::Create(LPCSTR pszAgent, fsInternetAccessTypeEx enAT, LPCSTR pszProxyName, fsNetworkProtocol enProtocol) { if (enAT != IATE_FIREFOXPROXY) { return fsInternetSession::Create (pszAgent, (fsInternetAccessType)enAT, pszProxyName); } else { if (1 != _pDllCaller->GetSettings ()->FirefoxSettings_Proxy_Type ()) return fsInternetSession::Create (pszAgent, IAT_NOPROXY, ""); LPCSTR ppszProts [] = { "http", "ssl", "ftp" }; if (enProtocol > 2) enProtocol = NP_HTTP; CString strProxy; strProxy.Format ("%s:%d", _pDllCaller->GetSettings ()->FirefoxSettings_Proxy_Addr (ppszProts [enProtocol]), _pDllCaller->GetSettings ()->FirefoxSettings_Proxy_Port (ppszProts [enProtocol])); char szProxy [10000]; vmsMakeWinInetProxy (strProxy, enProtocol, enProtocol, szProxy); return fsInternetSession::Create (pszAgent, IAT_MANUALPROXY, szProxy); } }
fsInternetResult fsInternetUploader::OpenUrl() { fsInternetResult ir; fsUpload_NetworkProperties* dnp = &m_unp; BOOL bOpenAnotherReq = m_pInetFile != NULL; if (bOpenAnotherReq == FALSE) { m_pInetFile = new fsInternetURLFile; m_pInetFile->SetDialogFunc (_InetFileDialogFunc, this, 0); vmsInternetSession* pSession = new vmsInternetSession; char szProxy [10000]; vmsMakeWinInetProxy (dnp->pszProxyName, dnp->enProtocol, dnp->enProtocol, szProxy); ir = pSession->Create (dnp->pszAgent, dnp->enAccType, szProxy, dnp->enProtocol); if (ir != IR_SUCCESS) { delete pSession; SAFE_DELETE (m_pInetFile); return ir; } ApplyProxySettings (pSession, dnp); m_pInetFile->Initialize (pSession, TRUE); ApplyProperties (m_pInetFile, dnp); if (dnp->enProtocol == NP_FTP && dnp->enFtpTransferType == FTT_UNKNOWN) { int posPath = strlen (dnp->pszPathName) - 1; int posExt = 0; LPSTR pszExt = new char [MAX_PATH]; while (posPath && dnp->pszPathName [posPath] != '.') pszExt [posExt++] = dnp->pszPathName [posPath--]; if (posPath) { LPSTR pszExtension = new char [MAX_PATH]; pszExt [posExt] = 0; int i = 0; for (i = 0; i < posExt; i++) pszExtension [i] = pszExt [posExt - i - 1]; pszExtension [i] = 0; if (IsExtInExtsStr (_pDllCaller->GetSettings ()->FtpAsciiExts (), pszExtension)) m_pInetFile->FtpSetTransferType (FTT_ASCII); else m_pInetFile->FtpSetTransferType (FTT_BINARY); delete [] pszExtension; } else { m_pInetFile->FtpSetTransferType (FTT_BINARY); } delete [] pszExt; } } m_uPosition -= m_uPosition % m_dwUploadPartSize; if (bOpenAnotherReq) { ir = m_pInetFile->OpenAnotherRequestOnServer (dnp->pszPathName, m_uPosition, min (m_dwUploadPartSize, m_uFileSize - m_uPosition), m_uFileSize); } else { ir = m_pInetFile->OpenEx (fsNPToScheme (dnp->enProtocol), dnp->pszServerName, dnp->pszUserName, dnp->pszPassword, dnp->uServerPort, dnp->pszPathName, m_uPosition, FALSE, min (m_dwUploadPartSize, m_uFileSize - m_uPosition), m_uFileSize); } if (m_bNeedStop) { SAFE_DELETE (m_pInetFile); return IR_S_FALSE; } if (ir != IR_SUCCESS) { SAFE_DELETE (m_pInetFile); return ir; } return IR_SUCCESS; }
fsInternetResult fsUploadMgr::ValidateCaptcha() { if (m_bCaptchaValidated) return IR_S_FALSE; Event (UMGRE_VALIDATING_UPLOAD); fsString strCookie; CString strPngFile, strCaptchaValidateUrl, strCaptchaVal; fsUpload_Properties up; ZeroMemory (&up, sizeof (up)); vmsInternetSession* pSession = NULL; fsInternetResult ir = fsUP_GetByUrl (&up, m_strCaptchaUrl); if (ir != IR_SUCCESS) goto _lErr; pSession = new vmsInternetSession; char szProxy [10000]; vmsMakeWinInetProxy (up.pszProxyName, up.enProtocol, up.enProtocol, szProxy); ir = pSession->Create (up.pszAgent, up.enAccType, szProxy, up.enProtocol); if (ir != IR_SUCCESS) goto _lErr; pSession->SetProxyAuth (up.pszProxyUserName, up.pszProxyPassword); pSession->SetTimeout (up.uTimeout); m_memDldr.Initialize (pSession); m_memDldr.Get_File ()->UseHttp11 (TRUE); m_memDldr.Get_File ()->UseCookie (TRUE); ir = m_memDldr.Download (m_strCaptchaUrl); if (ir != IR_SUCCESS) goto _lErr; if (m_bNeedStop) { ir = IR_S_FALSE; goto _lErr; } strCookie = m_memDldr.Get_File ()->GetCookiesFromResponse (); m_memDldr.Get_File ()->CloseHandle (); fsUP_GetByUrl_Free (&up); char szTmpPath [MAX_PATH]; GetTempPath (MAX_PATH, szTmpPath); if (szTmpPath [lstrlen (szTmpPath) - 1] != '\\') lstrcat (szTmpPath, "\\"); int i; i = 0; do { strPngFile.Format ("%s%u%d.png", szTmpPath, m_nFileId, i++); } while (GetFileAttributes (strPngFile) != DWORD (-1)); HANDLE hFile; hFile = CreateFile (strPngFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL); DWORD dw; WriteFile (hFile, m_memDldr.Get_FileBuffer (), m_memDldr.Get_FileSize (), &dw, NULL); CloseHandle (hFile); _lAskCaptchaValue: LPSTR pszCV; pszCV = strCaptchaVal.GetBuffer (100); *pszCV = 0; Event (UMGRE_NEED_ASK_CAPTCHA_VALUE, (DWORD)(LPCSTR)strPngFile, pszCV); strCaptchaVal.ReleaseBuffer (); if (strCaptchaVal.IsEmpty ()) { DeleteFile (strPngFile); ir = IR_S_FALSE; goto _lErr; } strCaptchaVal = fsHttpUrlEncode (strCaptchaVal); strCaptchaValidateUrl = m_strCaptchaValidateUrl; strCaptchaValidateUrl.Replace ("jcaptchaCode", strCaptchaVal); ir = fsUP_GetByUrl (&up, strCaptchaValidateUrl); if (ir != IR_SUCCESS) { DeleteFile (strPngFile); goto _lErr; } m_networkOpFile.Initialize (pSession, FALSE); m_networkOpFile.SetCookies (strCookie); m_networkOpFile.set_EnableAutoRedirect (TRUE); m_networkOpFile.set_Charset (""); ir = m_networkOpFile.OpenEx (fsNPToScheme (up.enProtocol), up.pszServerName, up.pszUserName, up.pszPassword, up.uServerPort, up.pszPathName, 0, FALSE, _UI64_MAX, _UI64_MAX); if (ir == IR_FILENOTFOUND) goto _lAskCaptchaValue; DeleteFile (strPngFile); if (ir != IR_SUCCESS) goto _lErr; m_bCaptchaValidated = TRUE; m_networkOpFile.CloseHandle (); delete pSession; Event (UMGRE_VALIDATING_UPLOAD_DONE); return IR_SUCCESS; _lErr: if (pSession) delete pSession; Event (UMGRE_VALIDATING_UPLOAD_FAILED, ir); return ir; }
fsInternetResult fsUploadMgr::SendUploadDetails() { if (m_bDetailsWasSent) return IR_S_FALSE; Event (UMGRE_SENDING_UPLOAD_DETAILS); CString str; fsString strDet; strDet = "saveDetails=&"; strDet += "fid="; char sz [100]; strDet += itoa (m_nFileId, sz, 10); strDet += "&crc="; str.Format ("%u", m_dwUploadFileCrc32); strDet += str; strDet += "&storagePeriodDays="; strDet += itoa (m_pkg.m_nNumberOfDaysToKeepThisUpload, sz, 10); strDet += "&email="; strDet += fsUtf8HttpUrlEncode (m_pkg.m_strRecipientEmail); strDet += "&description="; strDet += fsUtf8HttpUrlEncode (m_pkg.m_strDescription); strDet += "&password="******"&confirmPassword="******"&packageName="; strDet += fsUtf8HttpUrlEncode (m_pkg.m_strName); strDet += "&packageDescription="; strDet += fsUtf8HttpUrlEncode (m_strZipContentsDescHtml); } strDet += "&userName="******"&userEmail="; strDet += fsUtf8HttpUrlEncode (m_pkg.m_strOwnerEmail); strDet += "&tagString="; strDet += fsUtf8HttpUrlEncode (m_pkg.m_strTags); strDet += "&plannedDownloadCount="; strDet += itoa (m_pkg.m_nSupposedNumberOfDlds, sz, 10); strDet += "&addToDirectory="; strDet += m_pkg.m_bAddLinkToUploadInCatalogue ? "1" : "0"; strDet += "&FUM=1"; fsUpload_Properties up; ZeroMemory (&up, sizeof (up)); fsInternetResult ir = fsUP_GetByUrl (&up, m_strDetailsScriptUrl); if (ir != IR_SUCCESS) goto _lErr; vmsInternetSession* pSession; pSession = new vmsInternetSession; char szProxy [10000]; vmsMakeWinInetProxy (up.pszProxyName, up.enProtocol, up.enProtocol, szProxy); ir = pSession->Create (up.pszAgent, up.enAccType, szProxy, up.enProtocol); if (ir != IR_SUCCESS) { delete pSession; goto _lErr; } pSession->SetProxyAuth (up.pszProxyUserName, up.pszProxyPassword); pSession->SetTimeout (up.uTimeout); m_networkOpFile.Initialize (pSession); m_networkOpFile.UseHttp11 (up.bUseHttp11); m_networkOpFile.UseCookie (up.bUseCookie); m_networkOpFile.set_Charset ("UTF-8"); m_networkOpFile.set_UseMultipart (FALSE); m_networkOpFile.set_EnableAutoRedirect (TRUE); ir = m_networkOpFile.OpenEx (fsNPToScheme (up.enProtocol), up.pszServerName, up.pszUserName, up.pszPassword, up.uServerPort, up.pszPathName, 0, FALSE, strDet.GetLength (), strDet.GetLength ()); if (ir != IR_SUCCESS) goto _lErr; DWORD dw; ir = m_networkOpFile.Write ((LPBYTE)(LPCSTR)strDet, strDet.GetLength (), &dw); delete pSession; if (ir != IR_SUCCESS) goto _lErr; m_bDetailsWasSent = TRUE; fsUP_GetByUrl_Free (&up); Event (UMGRE_SENDING_UPLOAD_DETAILS_DONE); return IR_SUCCESS; _lErr: Event (UMGRE_SENDING_UPLOAD_DETAILS_FAILED, ir); return ir; }
fsInternetResult fsUploadMgr::RequestUploadInfo() { Event (UMGRE_REQ_UPLOAD_INIT); fsUpload_Properties up; ZeroMemory (&up, sizeof (up)); CString strUrl; strUrl = "http://www.wikifortio.com/dispatch-upload.action?getUplAddrAndFileId&fileName="; strUrl += fsHtmlUnicodeEncode (get_UploadName ()); fsInternetResult ir = fsUP_GetByUrl (&up, strUrl); if (ir != IR_SUCCESS) goto _lErr; vmsInternetSession* pSession; pSession = new vmsInternetSession; char szProxy [10000]; vmsMakeWinInetProxy (up.pszProxyName, up.enProtocol, up.enProtocol, szProxy); ir = pSession->Create (up.pszAgent, up.enAccType, szProxy, up.enProtocol); if (ir != IR_SUCCESS) { delete pSession; goto _lErr; } pSession->SetProxyAuth (up.pszProxyUserName, up.pszProxyPassword); pSession->SetTimeout (up.uTimeout); m_memDldr.Initialize (pSession); m_memDldr.Get_File ()->UseHttp11 (up.bUseHttp11); m_memDldr.Get_File ()->UseCookie (up.bUseCookie); ir = m_memDldr.Download (strUrl); m_memDldr.Get_File ()->CloseHandle (); delete pSession; if (ir != IR_SUCCESS) goto _lErr; LPCSTR pszInfo; pszInfo = (LPCSTR) m_memDldr.Get_FileBuffer (); fsUP_GetByUrl_Free (&up); if (FALSE == RequestUploadInfo_parse (pszInfo)) { ir = IR_ERROR; goto _lErr; } Event (UMGRE_REQ_UPLOAD_INIT_DONE); return IR_SUCCESS; _lErr: Event (UMGRE_REQ_UPLOAD_INIT_FAILED, ir); return ir; }