15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/websockets/websocket_errors.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Error WebSocketErrorToNetError(WebSocketError error) {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (error) {
13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketNormalClosure:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return OK;
15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorGoingAway:  // TODO(ricea): More specific code?
17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorProtocolError:
18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorUnsupportedData:
19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorInvalidFramePayloadData:
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorPolicyViolation:
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorMandatoryExtension:
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorInternalServerError:
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ERR_WS_PROTOCOL_ERROR;
24b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorNoStatusReceived:
26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorAbnormalClosure:
27b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      return ERR_CONNECTION_CLOSED;
28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorTlsHandshake:
30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      // This error will probably be reported with more detail at a lower layer;
31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      // this is the best we can do at this layer.
32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      return ERR_SSL_PROTOCOL_ERROR;
33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
34b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    case kWebSocketErrorMessageTooBig:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ERR_MSG_TOO_BIG;
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return ERR_UNEXPECTED;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
43