mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-11 06:36:11 +03:00
126 lines
4.9 KiB
C++
126 lines
4.9 KiB
C++
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "net/base/net_errors.h"
|
||
|
|
||
|
#include <winsock2.h>
|
||
|
|
||
|
#include "base/logging.h"
|
||
|
|
||
|
namespace net {
|
||
|
|
||
|
// Map winsock and system errors to Chromium errors.
|
||
|
Error MapSystemError(logging::SystemErrorCode os_error) {
|
||
|
if (os_error != 0)
|
||
|
DVLOG(2) << "Error " << os_error;
|
||
|
|
||
|
// There are numerous Winsock error codes, but these are the ones we thus far
|
||
|
// find interesting.
|
||
|
switch (os_error) {
|
||
|
case WSAEWOULDBLOCK:
|
||
|
case WSA_IO_PENDING:
|
||
|
return ERR_IO_PENDING;
|
||
|
case WSAEACCES:
|
||
|
return ERR_ACCESS_DENIED;
|
||
|
case WSAENETDOWN:
|
||
|
return ERR_INTERNET_DISCONNECTED;
|
||
|
case WSAETIMEDOUT:
|
||
|
return ERR_TIMED_OUT;
|
||
|
case WSAECONNRESET:
|
||
|
case WSAENETRESET: // Related to keep-alive
|
||
|
return ERR_CONNECTION_RESET;
|
||
|
case WSAECONNABORTED:
|
||
|
return ERR_CONNECTION_ABORTED;
|
||
|
case WSAECONNREFUSED:
|
||
|
return ERR_CONNECTION_REFUSED;
|
||
|
case WSA_IO_INCOMPLETE:
|
||
|
case WSAEDISCON:
|
||
|
return ERR_CONNECTION_CLOSED;
|
||
|
case WSAEISCONN:
|
||
|
return ERR_SOCKET_IS_CONNECTED;
|
||
|
case WSAEHOSTUNREACH:
|
||
|
case WSAENETUNREACH:
|
||
|
return ERR_ADDRESS_UNREACHABLE;
|
||
|
case WSAEADDRNOTAVAIL:
|
||
|
return ERR_ADDRESS_INVALID;
|
||
|
case WSAEMSGSIZE:
|
||
|
return ERR_MSG_TOO_BIG;
|
||
|
case WSAENOTCONN:
|
||
|
return ERR_SOCKET_NOT_CONNECTED;
|
||
|
case WSAEAFNOSUPPORT:
|
||
|
return ERR_ADDRESS_UNREACHABLE;
|
||
|
case WSAEINVAL:
|
||
|
return ERR_INVALID_ARGUMENT;
|
||
|
case WSAEADDRINUSE:
|
||
|
return ERR_ADDRESS_IN_USE;
|
||
|
|
||
|
// System errors.
|
||
|
case ERROR_FILE_NOT_FOUND: // The system cannot find the file specified.
|
||
|
return ERR_FILE_NOT_FOUND;
|
||
|
case ERROR_PATH_NOT_FOUND: // The system cannot find the path specified.
|
||
|
return ERR_FILE_NOT_FOUND;
|
||
|
case ERROR_TOO_MANY_OPEN_FILES: // The system cannot open the file.
|
||
|
return ERR_INSUFFICIENT_RESOURCES;
|
||
|
case ERROR_ACCESS_DENIED: // Access is denied.
|
||
|
return ERR_ACCESS_DENIED;
|
||
|
case ERROR_INVALID_HANDLE: // The handle is invalid.
|
||
|
return ERR_INVALID_HANDLE;
|
||
|
case ERROR_NOT_ENOUGH_MEMORY: // Not enough storage is available to
|
||
|
return ERR_OUT_OF_MEMORY; // process this command.
|
||
|
case ERROR_OUTOFMEMORY: // Not enough storage is available to complete
|
||
|
return ERR_OUT_OF_MEMORY; // this operation.
|
||
|
case ERROR_WRITE_PROTECT: // The media is write protected.
|
||
|
return ERR_ACCESS_DENIED;
|
||
|
case ERROR_SHARING_VIOLATION: // Cannot access the file because it is
|
||
|
return ERR_ACCESS_DENIED; // being used by another process.
|
||
|
case ERROR_LOCK_VIOLATION: // The process cannot access the file because
|
||
|
return ERR_ACCESS_DENIED; // another process has locked the file.
|
||
|
case ERROR_HANDLE_EOF: // Reached the end of the file.
|
||
|
return ERR_FAILED;
|
||
|
case ERROR_HANDLE_DISK_FULL: // The disk is full.
|
||
|
return ERR_FILE_NO_SPACE;
|
||
|
case ERROR_FILE_EXISTS: // The file exists.
|
||
|
return ERR_FILE_EXISTS;
|
||
|
case ERROR_INVALID_PARAMETER: // The parameter is incorrect.
|
||
|
return ERR_INVALID_ARGUMENT;
|
||
|
case ERROR_BUFFER_OVERFLOW: // The file name is too long.
|
||
|
return ERR_FILE_PATH_TOO_LONG;
|
||
|
case ERROR_DISK_FULL: // There is not enough space on the disk.
|
||
|
return ERR_FILE_NO_SPACE;
|
||
|
case ERROR_CALL_NOT_IMPLEMENTED: // This function is not supported on
|
||
|
return ERR_NOT_IMPLEMENTED; // this system.
|
||
|
case ERROR_INVALID_NAME: // The filename, directory name, or volume
|
||
|
return ERR_INVALID_ARGUMENT; // label syntax is incorrect.
|
||
|
case ERROR_DIR_NOT_EMPTY: // The directory is not empty.
|
||
|
return ERR_FAILED;
|
||
|
case ERROR_BUSY: // The requested resource is in use.
|
||
|
return ERR_ACCESS_DENIED;
|
||
|
case ERROR_ALREADY_EXISTS: // Cannot create a file when that file
|
||
|
return ERR_FILE_EXISTS; // already exists.
|
||
|
case ERROR_FILENAME_EXCED_RANGE: // The filename or extension is too long.
|
||
|
return ERR_FILE_PATH_TOO_LONG;
|
||
|
case ERROR_FILE_TOO_LARGE: // The file size exceeds the limit allowed
|
||
|
return ERR_FILE_NO_SPACE; // and cannot be saved.
|
||
|
case ERROR_VIRUS_INFECTED: // Operation failed because the file
|
||
|
return ERR_FILE_VIRUS_INFECTED; // contains a virus.
|
||
|
case ERROR_IO_DEVICE: // The request could not be performed
|
||
|
return ERR_ACCESS_DENIED; // because of an I/O device error.
|
||
|
case ERROR_POSSIBLE_DEADLOCK: // A potential deadlock condition has
|
||
|
return ERR_ACCESS_DENIED; // been detected.
|
||
|
case ERROR_BAD_DEVICE: // The specified device name is invalid.
|
||
|
return ERR_INVALID_ARGUMENT;
|
||
|
case ERROR_BROKEN_PIPE: // Pipe is not connected.
|
||
|
return ERR_CONNECTION_RESET;
|
||
|
|
||
|
case ERROR_SUCCESS:
|
||
|
return OK;
|
||
|
default:
|
||
|
LOG(WARNING) << "Unknown error " << os_error
|
||
|
<< " mapped to net::ERR_FAILED";
|
||
|
return ERR_FAILED;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // namespace net
|