OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/websockets/websocket_basic_handshake_stream.h" | 5 #include "net/websockets/websocket_basic_handshake_stream.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iterator> | 8 #include <iterator> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
43 #include "net/websockets/websocket_handshake_challenge.h" | 43 #include "net/websockets/websocket_handshake_challenge.h" |
44 #include "net/websockets/websocket_handshake_constants.h" | 44 #include "net/websockets/websocket_handshake_constants.h" |
45 #include "net/websockets/websocket_handshake_request_info.h" | 45 #include "net/websockets/websocket_handshake_request_info.h" |
46 #include "net/websockets/websocket_handshake_response_info.h" | 46 #include "net/websockets/websocket_handshake_response_info.h" |
47 #include "net/websockets/websocket_stream.h" | 47 #include "net/websockets/websocket_stream.h" |
48 | 48 |
49 namespace net { | 49 namespace net { |
50 | 50 |
51 namespace { | 51 namespace { |
52 | 52 |
53 const char kConnectionErrorStatusLine[] = "HTTP/1.1 503 Connection Error"; | |
54 | |
53 // TODO(yhirano): Remove these functions once http://crbug.com/399535 is fixed. | 55 // TODO(yhirano): Remove these functions once http://crbug.com/399535 is fixed. |
54 NOINLINE void RunCallbackWithOk(const CompletionCallback& callback, | 56 NOINLINE void RunCallbackWithOk(const CompletionCallback& callback, |
55 int result) { | 57 int result) { |
56 DCHECK_EQ(result, OK); | 58 DCHECK_EQ(result, OK); |
57 callback.Run(OK); | 59 callback.Run(OK); |
58 } | 60 } |
59 | 61 |
60 NOINLINE void RunCallbackWithInvalidResponseCausedByRedirect( | 62 NOINLINE void RunCallbackWithInvalidResponseCausedByRedirect( |
61 const CompletionCallback& callback, | 63 const CompletionCallback& callback, |
62 int result) { | 64 int result) { |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
647 } | 649 } |
648 } else { | 650 } else { |
649 if (rv == ERR_EMPTY_RESPONSE) { | 651 if (rv == ERR_EMPTY_RESPONSE) { |
650 set_failure_message( | 652 set_failure_message( |
651 "Connection closed before receiving a handshake response"); | 653 "Connection closed before receiving a handshake response"); |
652 return rv; | 654 return rv; |
653 } | 655 } |
654 set_failure_message(std::string("Error during WebSocket handshake: ") + | 656 set_failure_message(std::string("Error during WebSocket handshake: ") + |
655 ErrorToString(rv)); | 657 ErrorToString(rv)); |
656 OnFinishOpeningHandshake(); | 658 OnFinishOpeningHandshake(); |
659 // Some error codes (for example ERR_CONNECTION_CLOSED) get changed to OK at | |
660 // higher levels. To prevent an unvalidated connection getting erroneously | |
661 // upgraded, don't pass through the status code unchanged if it is | |
662 // HTTP_SWITCHING_PROTOCOLS. | |
663 if (http_response_info_->headers && | |
664 http_response_info_->headers->response_code() == | |
665 HTTP_SWITCHING_PROTOCOLS) | |
yhirano
2015/02/02 11:06:47
[optional] This condition is not simple and the ac
Adam Rice
2015/02/02 12:10:26
Done. Thanks.
| |
666 http_response_info_->headers->ReplaceStatusLine( | |
667 kConnectionErrorStatusLine); | |
657 return rv; | 668 return rv; |
658 } | 669 } |
659 } | 670 } |
660 | 671 |
661 int WebSocketBasicHandshakeStream::ValidateUpgradeResponse( | 672 int WebSocketBasicHandshakeStream::ValidateUpgradeResponse( |
662 const HttpResponseHeaders* headers) { | 673 const HttpResponseHeaders* headers) { |
663 extension_params_.reset(new WebSocketExtensionParams); | 674 extension_params_.reset(new WebSocketExtensionParams); |
664 std::string failure_message; | 675 std::string failure_message; |
665 if (ValidateUpgrade(headers, &failure_message) && | 676 if (ValidateUpgrade(headers, &failure_message) && |
666 ValidateSecWebSocketAccept( | 677 ValidateSecWebSocketAccept( |
(...skipping 13 matching lines...) Expand all Loading... | |
680 set_failure_message("Error during WebSocket handshake: " + failure_message); | 691 set_failure_message("Error during WebSocket handshake: " + failure_message); |
681 return ERR_INVALID_RESPONSE; | 692 return ERR_INVALID_RESPONSE; |
682 } | 693 } |
683 | 694 |
684 void WebSocketBasicHandshakeStream::set_failure_message( | 695 void WebSocketBasicHandshakeStream::set_failure_message( |
685 const std::string& failure_message) { | 696 const std::string& failure_message) { |
686 *failure_message_ = failure_message; | 697 *failure_message_ = failure_message; |
687 } | 698 } |
688 | 699 |
689 } // namespace net | 700 } // namespace net |
OLD | NEW |