public VfsPathParserContext(PathParser parser, string[] pathElements, VfsEntity root) { this.Parser = parser; foreach (string element in pathElements) { this.RemainingPathElements.Enqueue(element); } this.SpecifiedPath = this.Parser.BuildAbsolutePathStringFromElements(pathElements); Exception = new VfsException(SpecifiedPath, "Unknown path parser error."); AddToEntityStack(root); }
public static void AuditException(IAuditor auditor, Exception exception, AuditLevel level, FileSystemTask context, AuditEvent eventId, string message) { if (!auditor.IsAuditEnabled(level, context)) { return; } VfsException vfsException = exception as VfsException; if (vfsException != null) { //don't create duplicate or unneccessary entries if (vfsException.IsAudited || vfsException.SuppressAuditing) { return; } } if (String.IsNullOrEmpty(message)) { message = exception.ToString(); } else { message = String.Format("{0}\n\n{1}", message, exception); } #if !SILVERLIGHT if (exception.StackTrace == null) { //add stack trace, if not available yet message = String.Format("{0}\n{1}", message, Environment.StackTrace); } #endif //submit incident auditor.Audit(level, context, eventId, message); //set audition flag if (vfsException != null) { vfsException.IsAudited = true; } }
protected T CreateFaultResult <T>(Exception exception, Func <int, VfsFault, T> func) where T : OperationResult { //set content type //Response.Headers.ContentType = new MediaType(VfsHttpHeaders.Default.VfsFaultContentType); //get exception VfsException ve = exception as VfsException; VfsFault fault = ve == null ? new VfsFault { Message = exception.Message } : VfsFault.CreateFromException(ve); int statusCode = 0; //set HTTP status code switch (fault.FaultType) { case VfsFaultType.ResourceNotFound: case VfsFaultType.TransferUnknown: //404 return(func(404, fault)); case VfsFaultType.ResourceAccess: case VfsFaultType.ResourceOverwrite: case VfsFaultType.ResourceLocked: case VfsFaultType.TransferError: case VfsFaultType.TransferStatusError: case VfsFaultType.DataBlockError: case VfsFaultType.ResourcePathInvalid: //forbidden return(func(403, fault)); case VfsFaultType.Undefined: return(func(500, fault)); default: string msg = String.Format("Exception contains unknown fault type [{0}]", fault.FaultType); throw new ArgumentOutOfRangeException("exception", msg); } }