public NetResponse pullFile(String strUrl, String strFileName, IRhoSession oSession, Hashtable <String, String> headers) { NetResponse resp = null; m_isPullFile = true; m_bCancel = false; try{ if (!strFileName.startsWith("file:")) { try{ strFileName = CFilePath.join(CRhodesApp.getRhoRootPath(), strFileName); } catch (IOException e) { LOG.ERROR("getDirPath failed.", e); } } m_pulledFile = RhoClassFactory.createFile(); m_pulledFile.open(strFileName, CRhoFile.EOpenModes.OpenForReadWrite); m_pulledFile.setPosTo(m_pulledFile.size()); do { resp = doRequest("GET", strUrl, null, oSession, headers, m_pulledFile.size()); }while(!m_bCancel && (resp == null || resp.isOK()) && m_nCurDownloadSize > 0); }finally{ if (m_pulledFile != null) { try { m_pulledFile.close(); } catch (IOException e) { LOG.ERROR("file closing failed.", e); } m_pulledFile = null; } } copyHashtable(m_OutHeaders, headers); m_isPullFile = false; m_nCurDownloadSize = 0; return(resp != null && !m_bCancel ? resp : makeResponse("", Convert.ToInt32(HttpStatusCode.InternalServerError))); }
private void loadLogPosition() { if (m_pPosFile == null) { m_pPosFile = new CRhoFile(); } if (!m_pPosFile.isOpened()) { String strPosPath = getLogConf().getLogFilePath() + "_pos"; m_pPosFile.open(strPosPath, CRhoFile.EOpenModes.OpenForReadWrite); } if (!m_pPosFile.isOpened()) { return; } m_pPosFile.movePosToStart(); String strPos = m_pPosFile.readString(); if (strPos.length() == 0) { return; } m_nCirclePos = int.Parse(strPos); if (m_nCirclePos < 0 || m_nCirclePos > (int)m_nFileLogSize) { m_nCirclePos = -1; } if (m_nCirclePos >= 0) { m_pFile.setPosTo(m_nCirclePos); } }
private void GetPullFileCallback(IAsyncResult asyncResult) { HttpWebResponse response = null; try { response = m_webRequest.EndGetResponse(asyncResult) as HttpWebResponse; } catch (WebException e) { if (!m_bCancel) { LOG.ERROR("EndGetResponse", e); response = (HttpWebResponse)e.Response; m_code = response != null?Convert.ToInt32(response.StatusCode) : 0; } else { LOG.INFO("Request was cancelled by user."); } } if (response == null || m_bCancel) { return; } Stream stream = response.GetResponseStream(); m_code = Convert.ToInt32(response.StatusCode); LOG.INFO("getResponseCode : " + m_code); m_strCookies = makeClientCookie(response); readHeaders(m_headers, response); copyHashtable(m_OutHeaders, m_headers); try { if (m_code == Convert.ToInt32(HttpStatusCode.OK)) { m_pulledFile.setPosTo(0); } if (m_code == Convert.ToInt32(HttpStatusCode.RequestedRangeNotSatisfiable)) { m_code = Convert.ToInt32(HttpStatusCode.PartialContent); } else { if (m_code >= 400 && m_code != Convert.ToInt32(HttpStatusCode.PartialContent)) { LOG.ERROR("Error retrieving data: " + m_code); if (m_code == Convert.ToInt32(HttpStatusCode.Unauthorized) && m_oSession != null) { LOG.ERROR("Unauthorize error.Client will be logged out"); m_oSession.logout(); } m_strRespBody = readFully(stream, getResponseEncoding()); LOG.TRACE("Response body: " + m_strRespBody); } else { int nRead = 0; byte[] byteBuffer = new byte[1024 * 20]; do { nRead = stream.Read(byteBuffer, 0, 1024 * 20); if (nRead > 0) { m_pulledFile.write(byteBuffer, nRead); m_pulledFile.flush(); m_nCurDownloadSize += nRead; } }while(!m_bCancel && nRead > 0); if (m_code == Convert.ToInt32(HttpStatusCode.OK) || (m_code == Convert.ToInt32(HttpStatusCode.PartialContent) && isFinishDownload(response.Headers["Content-Range"]))) { m_nCurDownloadSize = 0; } } } } finally { stream.Close(); response.Close(); m_respWaitEvent.Set(); } }