1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "net/base/net_errors.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <errno.h>
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/logging.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net {
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenError MapSystemError(int os_error) {
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // There are numerous posix error codes, but these are the ones we thus far
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // find interesting.
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  switch (os_error) {
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EAGAIN:
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if EWOULDBLOCK != EAGAIN
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EWOULDBLOCK:
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_IO_PENDING;
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EACCES:
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_ACCESS_DENIED;
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ENETDOWN:
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_INTERNET_DISCONNECTED;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ETIMEDOUT:
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_TIMED_OUT;
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ECONNRESET:
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ENETRESET:  // Related to keep-alive
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EPIPE:
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_CONNECTION_RESET;
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ECONNABORTED:
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_CONNECTION_ABORTED;
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ECONNREFUSED:
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_CONNECTION_REFUSED;
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EHOSTUNREACH:
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EHOSTDOWN:
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ENETUNREACH:
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_ADDRESS_UNREACHABLE;
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EADDRNOTAVAIL:
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_ADDRESS_INVALID;
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case EMSGSIZE:
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_MSG_TOO_BIG;
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case ENOTCONN:
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_SOCKET_NOT_CONNECTED;
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    case 0:
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return OK;
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    default:
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      LOG(WARNING) << "Unknown error " << os_error
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                   << " mapped to net::ERR_FAILED";
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return ERR_FAILED;
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace net
56