xref: /aosp_15_r20/external/cronet/net/base/net_errors_win.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2011 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/base/net_errors.h"
6 
7 #include <winsock2.h>
8 
9 #include "base/logging.h"
10 
11 namespace net {
12 
13 // Map winsock and system errors to Chromium errors.
MapSystemError(logging::SystemErrorCode os_error)14 Error MapSystemError(logging::SystemErrorCode os_error) {
15   if (os_error != 0)
16     DVLOG(2) << "Error " << os_error;
17 
18   // There are numerous Winsock error codes, but these are the ones we thus far
19   // find interesting.
20   switch (os_error) {
21     case WSAEWOULDBLOCK:
22     case WSA_IO_PENDING:
23       return ERR_IO_PENDING;
24     case WSAEACCES:
25       return ERR_ACCESS_DENIED;
26     case WSAENETDOWN:
27       return ERR_INTERNET_DISCONNECTED;
28     case WSAETIMEDOUT:
29       return ERR_TIMED_OUT;
30     case WSAECONNRESET:
31     case WSAENETRESET:  // Related to keep-alive
32       return ERR_CONNECTION_RESET;
33     case WSAECONNABORTED:
34       return ERR_CONNECTION_ABORTED;
35     case WSAECONNREFUSED:
36       return ERR_CONNECTION_REFUSED;
37     case WSA_IO_INCOMPLETE:
38     case WSAEDISCON:
39       return ERR_CONNECTION_CLOSED;
40     case WSAEISCONN:
41       return ERR_SOCKET_IS_CONNECTED;
42     case WSAEHOSTUNREACH:
43     case WSAENETUNREACH:
44       return ERR_ADDRESS_UNREACHABLE;
45     case WSAEADDRNOTAVAIL:
46       return ERR_ADDRESS_INVALID;
47     case WSAEMSGSIZE:
48       return ERR_MSG_TOO_BIG;
49     case WSAENOTCONN:
50       return ERR_SOCKET_NOT_CONNECTED;
51     case WSAEAFNOSUPPORT:
52       return ERR_ADDRESS_UNREACHABLE;
53     case WSAEINVAL:
54       return ERR_INVALID_ARGUMENT;
55     case WSAEADDRINUSE:
56       return ERR_ADDRESS_IN_USE;
57 
58     // System errors.
59     case ERROR_FILE_NOT_FOUND:  // The system cannot find the file specified.
60       return ERR_FILE_NOT_FOUND;
61     case ERROR_PATH_NOT_FOUND:  // The system cannot find the path specified.
62       return ERR_FILE_NOT_FOUND;
63     case ERROR_TOO_MANY_OPEN_FILES:  // The system cannot open the file.
64       return ERR_INSUFFICIENT_RESOURCES;
65     case ERROR_ACCESS_DENIED:  // Access is denied.
66       return ERR_ACCESS_DENIED;
67     case ERROR_INVALID_HANDLE:  // The handle is invalid.
68       return ERR_INVALID_HANDLE;
69     case ERROR_NOT_ENOUGH_MEMORY:  // Not enough storage is available to
70       return ERR_OUT_OF_MEMORY;    // process this command.
71     case ERROR_OUTOFMEMORY:      // Not enough storage is available to complete
72       return ERR_OUT_OF_MEMORY;  // this operation.
73     case ERROR_WRITE_PROTECT:  // The media is write protected.
74       return ERR_ACCESS_DENIED;
75     case ERROR_SHARING_VIOLATION:  // Cannot access the file because it is
76       return ERR_ACCESS_DENIED;    // being used by another process.
77     case ERROR_LOCK_VIOLATION:   // The process cannot access the file because
78       return ERR_ACCESS_DENIED;  // another process has locked the file.
79     case ERROR_HANDLE_EOF:  // Reached the end of the file.
80       return ERR_FAILED;
81     case ERROR_HANDLE_DISK_FULL:  // The disk is full.
82       return ERR_FILE_NO_SPACE;
83     case ERROR_FILE_EXISTS:  // The file exists.
84       return ERR_FILE_EXISTS;
85     case ERROR_INVALID_PARAMETER:  // The parameter is incorrect.
86       return ERR_INVALID_ARGUMENT;
87     case ERROR_BUFFER_OVERFLOW:  // The file name is too long.
88       return ERR_FILE_PATH_TOO_LONG;
89     case ERROR_DISK_FULL:  // There is not enough space on the disk.
90       return ERR_FILE_NO_SPACE;
91     case ERROR_CALL_NOT_IMPLEMENTED:  // This function is not supported on
92       return ERR_NOT_IMPLEMENTED;     // this system.
93     case ERROR_INVALID_NAME:        // The filename, directory name, or volume
94       return ERR_INVALID_ARGUMENT;  // label syntax is incorrect.
95     case ERROR_DIR_NOT_EMPTY:  // The directory is not empty.
96       return ERR_FAILED;
97     case ERROR_BUSY:  // The requested resource is in use.
98       return ERR_ACCESS_DENIED;
99     case ERROR_ALREADY_EXISTS:  // Cannot create a file when that file
100       return ERR_FILE_EXISTS;   // already exists.
101     case ERROR_FILENAME_EXCED_RANGE:  // The filename or extension is too long.
102       return ERR_FILE_PATH_TOO_LONG;
103     case ERROR_FILE_TOO_LARGE:   // The file size exceeds the limit allowed
104       return ERR_FILE_NO_SPACE;  // and cannot be saved.
105     case ERROR_VIRUS_INFECTED:         // Operation failed because the file
106       return ERR_FILE_VIRUS_INFECTED;  // contains a virus.
107     case ERROR_IO_DEVICE:        // The request could not be performed
108       return ERR_ACCESS_DENIED;  // because of an I/O device error.
109     case ERROR_POSSIBLE_DEADLOCK:  // A potential deadlock condition has
110       return ERR_ACCESS_DENIED;    // been detected.
111     case ERROR_BAD_DEVICE:  // The specified device name is invalid.
112       return ERR_INVALID_ARGUMENT;
113     case ERROR_BROKEN_PIPE:  // Pipe is not connected.
114       return ERR_CONNECTION_RESET;
115 
116     case ERROR_SUCCESS:
117       return OK;
118     default:
119       LOG(WARNING) << "Unknown error " << os_error
120                    << " mapped to net::ERR_FAILED";
121       return ERR_FAILED;
122   }
123 }
124 
125 }  // namespace net
126