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 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 return ValidateUpgradeResponse(headers); | 558 return ValidateUpgradeResponse(headers); |
559 | 559 |
560 // We need to pass these through for authentication to work. | 560 // We need to pass these through for authentication to work. |
561 case HTTP_UNAUTHORIZED: | 561 case HTTP_UNAUTHORIZED: |
562 case HTTP_PROXY_AUTHENTICATION_REQUIRED: | 562 case HTTP_PROXY_AUTHENTICATION_REQUIRED: |
563 return OK; | 563 return OK; |
564 | 564 |
565 // Other status codes are potentially risky (see the warnings in the | 565 // Other status codes are potentially risky (see the warnings in the |
566 // WHATWG WebSocket API spec) and so are dropped by default. | 566 // WHATWG WebSocket API spec) and so are dropped by default. |
567 default: | 567 default: |
568 failure_message_ = base::StringPrintf( | 568 // A WebSocket server cannot be using HTTP/0.9, so if we see version |
569 "Error during WebSocket handshake: Unexpected response code: %d", | 569 // 0.9, it means the response was garbage. |
570 headers->response_code()); | 570 // Reporting "Unexpected response code: 200" in this case is not |
| 571 // helpful, so use a different error message. |
| 572 if (headers->GetHttpVersion() == HttpVersion(0, 9)) { |
| 573 failure_message_ = |
| 574 "Error during WebSocket handshake: Invalid status line"; |
| 575 } else { |
| 576 failure_message_ = base::StringPrintf( |
| 577 "Error during WebSocket handshake: Unexpected response code: %d", |
| 578 headers->response_code()); |
| 579 } |
571 OnFinishOpeningHandshake(); | 580 OnFinishOpeningHandshake(); |
572 return ERR_INVALID_RESPONSE; | 581 return ERR_INVALID_RESPONSE; |
573 } | 582 } |
574 } else { | 583 } else { |
575 if (rv == ERR_EMPTY_RESPONSE) { | 584 if (rv == ERR_EMPTY_RESPONSE) { |
576 failure_message_ = | 585 failure_message_ = |
577 "Connection closed before receiving a handshake response"; | 586 "Connection closed before receiving a handshake response"; |
578 return rv; | 587 return rv; |
579 } | 588 } |
580 failure_message_ = | 589 failure_message_ = |
(...skipping 20 matching lines...) Expand all Loading... |
601 &extensions_, | 610 &extensions_, |
602 &failure_message_, | 611 &failure_message_, |
603 extension_params_.get())) { | 612 extension_params_.get())) { |
604 return OK; | 613 return OK; |
605 } | 614 } |
606 failure_message_ = "Error during WebSocket handshake: " + failure_message_; | 615 failure_message_ = "Error during WebSocket handshake: " + failure_message_; |
607 return ERR_INVALID_RESPONSE; | 616 return ERR_INVALID_RESPONSE; |
608 } | 617 } |
609 | 618 |
610 } // namespace net | 619 } // namespace net |
OLD | NEW |