Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: chrome/browser/chromeos/web_socket_proxy.cc

Issue 9716020: Add base::HostToNetXX() & NetToHostXX(), and use them to replace htonX() & ntohX() in Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/sys_byteorder.h ('k') | chrome/browser/safe_browsing/protocol_parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/web_socket_proxy.h" 5 #include "chrome/browser/chromeos/web_socket_proxy.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <string.h> 9 #include <string.h>
10 10
(...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 return; 834 return;
835 } 835 }
836 { 836 {
837 int on = 1; 837 int on = 1;
838 setsockopt(listening_sock_, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); 838 setsockopt(listening_sock_, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
839 } 839 }
840 840
841 struct sockaddr_in addr; 841 struct sockaddr_in addr;
842 memset(&addr, 0, sizeof(addr)); 842 memset(&addr, 0, sizeof(addr));
843 addr.sin_family = AF_INET; 843 addr.sin_family = AF_INET;
844 addr.sin_port = htons(0); // let OS allocatate ephemeral port number. 844 // Let the OS allocate a port number.
845 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 845 addr.sin_port = base::HostToNet16(0);
846 addr.sin_addr.s_addr = base::HostToNet32(INADDR_LOOPBACK);
846 if (bind(listening_sock_, 847 if (bind(listening_sock_,
847 reinterpret_cast<struct sockaddr*>(&addr), 848 reinterpret_cast<struct sockaddr*>(&addr),
848 sizeof(addr))) { 849 sizeof(addr))) {
849 LOG(ERROR) << "WebSocketProxy: Failed to bind server socket"; 850 LOG(ERROR) << "WebSocketProxy: Failed to bind server socket";
850 return; 851 return;
851 } 852 }
852 if (listen(listening_sock_, 12)) { 853 if (listen(listening_sock_, 12)) {
853 LOG(ERROR) << "WebSocketProxy: Failed to listen server socket"; 854 LOG(ERROR) << "WebSocketProxy: Failed to listen server socket";
854 return; 855 return;
855 } 856 }
(...skipping 20 matching lines...) Expand all
876 LOG(ERROR) << "WebSocketProxy: Failed to create socket"; 877 LOG(ERROR) << "WebSocketProxy: Failed to create socket";
877 return; 878 return;
878 } 879 }
879 { 880 {
880 int on = 1; 881 int on = 1;
881 setsockopt(listening_sock_, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); 882 setsockopt(listening_sock_, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
882 } 883 }
883 const int kPort = 10101; 884 const int kPort = 10101;
884 memset(&addr, 0, sizeof(addr)); 885 memset(&addr, 0, sizeof(addr));
885 addr.sin_family = AF_INET; 886 addr.sin_family = AF_INET;
886 addr.sin_port = htons(kPort); 887 addr.sin_port = base::HostToNet16(kPort);
887 addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 888 addr.sin_addr.s_addr = base::HostToNet32(INADDR_LOOPBACK);
888 if (bind(extra_listening_sock_, 889 if (bind(extra_listening_sock_,
889 reinterpret_cast<struct sockaddr*>(&addr), 890 reinterpret_cast<struct sockaddr*>(&addr),
890 sizeof(addr))) { 891 sizeof(addr))) {
891 LOG(ERROR) << "WebSocketProxy: Failed to bind server socket"; 892 LOG(ERROR) << "WebSocketProxy: Failed to bind server socket";
892 return; 893 return;
893 } 894 }
894 if (listen(extra_listening_sock_, 12)) { 895 if (listen(extra_listening_sock_, 12)) {
895 LOG(ERROR) << "WebSocketProxy: Failed to listen server socket"; 896 LOG(ERROR) << "WebSocketProxy: Failed to listen server socket";
896 return; 897 return;
897 } 898 }
(...skipping 29 matching lines...) Expand all
927 928
928 memset(&addr, 0, sizeof(addr)); 929 memset(&addr, 0, sizeof(addr));
929 socklen_t addr_len = sizeof(addr); 930 socklen_t addr_len = sizeof(addr);
930 if (getsockname( 931 if (getsockname(
931 listening_sock_, reinterpret_cast<struct sockaddr*>(&addr), &addr_len)) { 932 listening_sock_, reinterpret_cast<struct sockaddr*>(&addr), &addr_len)) {
932 LOG(ERROR) << "Failed to determine listening port"; 933 LOG(ERROR) << "Failed to determine listening port";
933 return; 934 return;
934 } 935 }
935 BrowserThread::PostTask( 936 BrowserThread::PostTask(
936 BrowserThread::UI, FROM_HERE, 937 BrowserThread::UI, FROM_HERE,
937 base::Bind(&SendNotification, ntohs(addr.sin_port))); 938 base::Bind(&SendNotification, base::NetToHost16(addr.sin_port)));
938 939
939 LOG(INFO) << "WebSocketProxy: Starting event dispatch loop."; 940 LOG(INFO) << "WebSocketProxy: Starting event dispatch loop.";
940 event_base_dispatch(evbase_); 941 event_base_dispatch(evbase_);
941 if (shutdown_requested_) 942 if (shutdown_requested_)
942 LOG(INFO) << "WebSocketProxy: Event dispatch loop terminated upon request"; 943 LOG(INFO) << "WebSocketProxy: Event dispatch loop terminated upon request";
943 else 944 else
944 LOG(ERROR) << "WebSocketProxy: Event dispatch loop terminated unexpectedly"; 945 LOG(ERROR) << "WebSocketProxy: Event dispatch loop terminated unexpectedly";
945 CloseAll(); 946 CloseAll();
946 } 947 }
947 948
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 // There seems to be no easy API to perform only "local" part of 1568 // There seems to be no easy API to perform only "local" part of
1568 // getaddrinfo resolution. Hence this hack for "localhost". 1569 // getaddrinfo resolution. Hence this hack for "localhost".
1569 if (cs->destname_ == "localhost") 1570 if (cs->destname_ == "localhost")
1570 cs->destname_ = "127.0.0.1"; 1571 cs->destname_ = "127.0.0.1";
1571 } 1572 }
1572 if (cs->destaddr_.empty()) 1573 if (cs->destaddr_.empty())
1573 cs->destaddr_ = cs->destname_; 1574 cs->destaddr_ = cs->destname_;
1574 { 1575 {
1575 struct sockaddr_in sa; 1576 struct sockaddr_in sa;
1576 memset(&sa, 0, sizeof(sa)); 1577 memset(&sa, 0, sizeof(sa));
1577 sa.sin_port = htons(cs->destport_); 1578 sa.sin_port = base::HostToNet16(cs->destport_);
1578 if (inet_pton(sa.sin_family = AF_INET, 1579 if (inet_pton(sa.sin_family = AF_INET,
1579 cs->destaddr_.c_str(), 1580 cs->destaddr_.c_str(),
1580 &sa.sin_addr) == 1) { 1581 &sa.sin_addr) == 1) {
1581 // valid IPv4 address supplied. 1582 // valid IPv4 address supplied.
1582 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) { 1583 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) {
1583 cs->phase_ = PHASE_WAIT_DESTCONNECT; 1584 cs->phase_ = PHASE_WAIT_DESTCONNECT;
1584 return; 1585 return;
1585 } 1586 }
1586 } 1587 }
1587 } 1588 }
1588 { 1589 {
1589 if (cs->destaddr_.size() >= 2 && 1590 if (cs->destaddr_.size() >= 2 &&
1590 cs->destaddr_[0] == '[' && 1591 cs->destaddr_[0] == '[' &&
1591 cs->destaddr_[cs->destaddr_.size() - 1] == ']') { 1592 cs->destaddr_[cs->destaddr_.size() - 1] == ']') {
1592 // Literal IPv6 address in brackets. 1593 // Literal IPv6 address in brackets.
1593 cs->destaddr_ = 1594 cs->destaddr_ =
1594 cs->destaddr_.substr(1, cs->destaddr_.size() - 2); 1595 cs->destaddr_.substr(1, cs->destaddr_.size() - 2);
1595 } 1596 }
1596 struct sockaddr_in6 sa; 1597 struct sockaddr_in6 sa;
1597 memset(&sa, 0, sizeof(sa)); 1598 memset(&sa, 0, sizeof(sa));
1598 sa.sin6_port = htons(cs->destport_); 1599 sa.sin6_port = base::HostToNet16(cs->destport_);
1599 if (inet_pton(sa.sin6_family = AF_INET6, 1600 if (inet_pton(sa.sin6_family = AF_INET6,
1600 cs->destaddr_.c_str(), 1601 cs->destaddr_.c_str(),
1601 &sa.sin6_addr) == 1) { 1602 &sa.sin6_addr) == 1) {
1602 // valid IPv6 address supplied. 1603 // valid IPv6 address supplied.
1603 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) { 1604 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) {
1604 cs->phase_ = PHASE_WAIT_DESTCONNECT; 1605 cs->phase_ = PHASE_WAIT_DESTCONNECT;
1605 return; 1606 return;
1606 } 1607 }
1607 } 1608 }
1608 } 1609 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1747 if (cs->phase_ != PHASE_WAIT_DESTCONNECT) 1748 if (cs->phase_ != PHASE_WAIT_DESTCONNECT)
1748 return; 1749 return;
1749 if (result == DNS_ERR_NONE && 1750 if (result == DNS_ERR_NONE &&
1750 count >= 1 && 1751 count >= 1 &&
1751 addr_list != NULL && 1752 addr_list != NULL &&
1752 type == DNS_IPv4_A) { 1753 type == DNS_IPv4_A) {
1753 for (int i = 0; i < count; ++i) { 1754 for (int i = 0; i < count; ++i) {
1754 struct sockaddr_in sa; 1755 struct sockaddr_in sa;
1755 memset(&sa, 0, sizeof(sa)); 1756 memset(&sa, 0, sizeof(sa));
1756 sa.sin_family = AF_INET; 1757 sa.sin_family = AF_INET;
1757 sa.sin_port = htons(cs->destport_); 1758 sa.sin_port = base::HostToNet16(cs->destport_);
1758 DCHECK(sizeof(sa.sin_addr) == sizeof(struct in_addr)); 1759 DCHECK(sizeof(sa.sin_addr) == sizeof(struct in_addr));
1759 memcpy(&sa.sin_addr, 1760 memcpy(&sa.sin_addr,
1760 static_cast<struct in_addr*>(addr_list) + i, 1761 static_cast<struct in_addr*>(addr_list) + i,
1761 sizeof(sa.sin_addr)); 1762 sizeof(sa.sin_addr));
1762 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) 1763 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa)))
1763 return; 1764 return;
1764 } 1765 }
1765 } 1766 }
1766 cs->destresolution_ipv4_failed_ = true; 1767 cs->destresolution_ipv4_failed_ = true;
1767 if (cs->destresolution_ipv4_failed_ && cs->destresolution_ipv6_failed_) 1768 if (cs->destresolution_ipv4_failed_ && cs->destresolution_ipv6_failed_)
(...skipping 10 matching lines...) Expand all
1778 if (cs->phase_ != PHASE_WAIT_DESTCONNECT) 1779 if (cs->phase_ != PHASE_WAIT_DESTCONNECT)
1779 return; 1780 return;
1780 if (result == DNS_ERR_NONE && 1781 if (result == DNS_ERR_NONE &&
1781 count >= 1 && 1782 count >= 1 &&
1782 addr_list != NULL && 1783 addr_list != NULL &&
1783 type == DNS_IPv6_AAAA) { 1784 type == DNS_IPv6_AAAA) {
1784 for (int i = 0; i < count; ++i) { 1785 for (int i = 0; i < count; ++i) {
1785 struct sockaddr_in6 sa; 1786 struct sockaddr_in6 sa;
1786 memset(&sa, 0, sizeof(sa)); 1787 memset(&sa, 0, sizeof(sa));
1787 sa.sin6_family = AF_INET6; 1788 sa.sin6_family = AF_INET6;
1788 sa.sin6_port = htons(cs->destport_); 1789 sa.sin6_port = base::HostToNet16(cs->destport_);
1789 DCHECK(sizeof(sa.sin6_addr) == sizeof(struct in6_addr)); 1790 DCHECK(sizeof(sa.sin6_addr) == sizeof(struct in6_addr));
1790 memcpy(&sa.sin6_addr, 1791 memcpy(&sa.sin6_addr,
1791 static_cast<struct in6_addr*>(addr_list) + i, 1792 static_cast<struct in6_addr*>(addr_list) + i,
1792 sizeof(sa.sin6_addr)); 1793 sizeof(sa.sin6_addr));
1793 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa))) 1794 if (cs->TryConnectDest((struct sockaddr*)&sa, sizeof(sa)))
1794 return; 1795 return;
1795 } 1796 }
1796 } 1797 }
1797 cs->destresolution_ipv6_failed_ = true; 1798 cs->destresolution_ipv6_failed_ = true;
1798 if (cs->destresolution_ipv4_failed_ && cs->destresolution_ipv6_failed_) 1799 if (cs->destresolution_ipv4_failed_ && cs->destresolution_ipv6_failed_)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1898 1899
1899 void WebSocketProxy::Shutdown() { 1900 void WebSocketProxy::Shutdown() {
1900 static_cast<Serv*>(impl_)->Shutdown(); 1901 static_cast<Serv*>(impl_)->Shutdown();
1901 } 1902 }
1902 1903
1903 void WebSocketProxy::OnNetworkChange() { 1904 void WebSocketProxy::OnNetworkChange() {
1904 static_cast<Serv*>(impl_)->OnNetworkChange(); 1905 static_cast<Serv*>(impl_)->OnNetworkChange();
1905 } 1906 }
1906 1907
1907 } // namespace chromeos 1908 } // namespace chromeos
OLDNEW
« no previous file with comments | « base/sys_byteorder.h ('k') | chrome/browser/safe_browsing/protocol_parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698