private PullResponse PullOneChunk(HgResumeApiParameters request) { var pullResponse = new PullResponse(PullStatus.Fail); try { HgResumeApiResponse response = _apiServer.Execute("pullBundleChunk", request, TimeoutInSeconds); if (response == null) { _progress.WriteVerbose("API REQ: {0} Timeout", _apiServer.Url); pullResponse.Status = PullStatus.Timeout; return(pullResponse); } /* API returns the following HTTP codes: * 200 OK (SUCCESS) * 304 Not Modified (NOCHANGE) * 400 Bad Request (FAIL, UNKNOWNID) */ _progress.WriteVerbose("API REQ: {0} RSP: {1} in {2}ms", _apiServer.Url, response.HttpStatus, response.ResponseTimeInMilliseconds); if (response.ResumableResponse.HasNote) { _progress.WriteMessage(String.Format("Server replied: {0}", response.ResumableResponse.Note)); } if (response.HttpStatus == HttpStatusCode.ServiceUnavailable && response.Content.Length > 0) { var msg = String.Format("Server temporarily unavailable: {0}", Encoding.UTF8.GetString(response.Content)); _progress.WriteError(msg); pullResponse.Status = PullStatus.NotAvailable; return(pullResponse); } if (response.HttpStatus == HttpStatusCode.NotModified) { pullResponse.Status = PullStatus.NoChange; return(pullResponse); } if (response.HttpStatus == HttpStatusCode.Accepted) { pullResponse.Status = PullStatus.InProgress; return(pullResponse); } // chunk pulled OK if (response.HttpStatus == HttpStatusCode.OK) { pullResponse.BundleSize = response.ResumableResponse.BundleSize; pullResponse.Status = PullStatus.OK; pullResponse.ChunkSize = CalculateChunkSize(request.ChunkSize, response.ResponseTimeInMilliseconds); pullResponse.Chunk = response.Content; return(pullResponse); } if (response.HttpStatus == HttpStatusCode.BadRequest && response.ResumableResponse.Status == "UNKNOWNID") { // this is not implemented currently (feb 2012 cjh) _progress.WriteError("The server {0} does not have the project '{1}'", _targetLabel, request.RepoId); return(pullResponse); } if (response.HttpStatus == HttpStatusCode.BadRequest && response.ResumableResponse.Status == "RESET") { pullResponse.Status = PullStatus.Reset; return(pullResponse); } if (response.HttpStatus == HttpStatusCode.BadRequest) { if (response.ResumableResponse.HasError) { if (response.ResumableResponse.Error == "invalid baseHash") { pullResponse.Status = PullStatus.InvalidHash; } else { _progress.WriteWarning("Server Error: {0}", response.ResumableResponse.Error); } } return(pullResponse); } if (response.HttpStatus == HttpStatusCode.Unauthorized) { _progress.WriteWarning(Resources.ksHgTransptUnauthorized); pullResponse.Status = PullStatus.Unauthorized; } _progress.WriteWarning("Invalid Server Response '{0}'", response.HttpStatus); return(pullResponse); } catch (WebException e) { _progress.WriteWarning(String.Format("Pull data chunk failed: {0}", e.Message)); return(pullResponse); } }
private PullResponse PullOneChunk(HgResumeApiParameters request) { var pullResponse = new PullResponse(PullStatus.Fail); try { HgResumeApiResponse response = _apiServer.Execute("pullBundleChunk", request, TimeoutInSeconds); if (response == null) { _progress.WriteVerbose("API REQ: {0} Timeout", _apiServer.Url); pullResponse.Status = PullStatus.Timeout; return pullResponse; } /* API returns the following HTTP codes: * 200 OK (SUCCESS) * 304 Not Modified (NOCHANGE) * 400 Bad Request (FAIL, UNKNOWNID) */ _progress.WriteVerbose("API REQ: {0} RSP: {1} in {2}ms", _apiServer.Url, response.HttpStatus, response.ResponseTimeInMilliseconds); if (response.ResumableResponse.HasNote) { _progress.WriteMessage(String.Format("Server replied: {0}", response.ResumableResponse.Note)); } if (response.HttpStatus == HttpStatusCode.ServiceUnavailable && response.Content.Length > 0) { var msg = String.Format("Server temporarily unavailable: {0}", Encoding.UTF8.GetString(response.Content)); _progress.WriteError(msg); pullResponse.Status = PullStatus.NotAvailable; return pullResponse; } if (response.HttpStatus == HttpStatusCode.NotModified) { pullResponse.Status = PullStatus.NoChange; return pullResponse; } if (response.HttpStatus == HttpStatusCode.Accepted) { pullResponse.Status = PullStatus.InProgress; return pullResponse; } // chunk pulled OK if (response.HttpStatus == HttpStatusCode.OK) { pullResponse.BundleSize = response.ResumableResponse.BundleSize; pullResponse.Status = PullStatus.OK; pullResponse.ChunkSize = CalculateChunkSize(request.ChunkSize, response.ResponseTimeInMilliseconds); pullResponse.Chunk = response.Content; return pullResponse; } if (response.HttpStatus == HttpStatusCode.BadRequest && response.ResumableResponse.Status == "UNKNOWNID") { // this is not implemented currently (feb 2012 cjh) _progress.WriteError("The server {0} does not have the project '{1}'", _targetLabel, request.RepoId); return pullResponse; } if (response.HttpStatus == HttpStatusCode.BadRequest && response.ResumableResponse.Status == "RESET") { pullResponse.Status = PullStatus.Reset; return pullResponse; } if (response.HttpStatus == HttpStatusCode.BadRequest) { if (response.ResumableResponse.HasError) { if (response.ResumableResponse.Error == "invalid baseHash") { pullResponse.Status = PullStatus.InvalidHash; } else { _progress.WriteWarning("Server Error: {0}", response.ResumableResponse.Error); } } return pullResponse; } if (response.HttpStatus == HttpStatusCode.Unauthorized) { _progress.WriteWarning("There is an authorization problem accessing this project. Check the project ID as well as your username and password. Alternatively, you may not be authorized to access this project."); pullResponse.Status = PullStatus.Unauthorized; } _progress.WriteWarning("Invalid Server Response '{0}'", response.HttpStatus); return pullResponse; } catch (WebException e) { _progress.WriteWarning(String.Format("Pull data chunk failed: {0}", e.Message)); return pullResponse; } }