OLD | NEW |
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 // An implementation of buzz::AsyncSocket that uses Chrome sockets. | 5 // An implementation of buzz::AsyncSocket that uses Chrome sockets. |
6 | 6 |
7 #ifndef JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ | 7 #ifndef JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ |
8 #define JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ | 8 #define JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ |
9 | 9 |
10 #if !defined(FEATURE_ENABLE_SSL) | 10 #if !defined(FEATURE_ENABLE_SSL) |
(...skipping 29 matching lines...) Expand all Loading... |
40 size_t read_buf_size, | 40 size_t read_buf_size, |
41 size_t write_buf_size); | 41 size_t write_buf_size); |
42 | 42 |
43 // Does not raise any signals. | 43 // Does not raise any signals. |
44 virtual ~ChromeAsyncSocket(); | 44 virtual ~ChromeAsyncSocket(); |
45 | 45 |
46 // buzz::AsyncSocket implementation. | 46 // buzz::AsyncSocket implementation. |
47 | 47 |
48 // The current state (see buzz::AsyncSocket::State; all but | 48 // The current state (see buzz::AsyncSocket::State; all but |
49 // STATE_CLOSING is used). | 49 // STATE_CLOSING is used). |
50 virtual State state() OVERRIDE; | 50 virtual State state() override; |
51 | 51 |
52 // The last generated error. Errors are generated when the main | 52 // The last generated error. Errors are generated when the main |
53 // functions below return false or when SignalClosed is raised due | 53 // functions below return false or when SignalClosed is raised due |
54 // to an asynchronous error. | 54 // to an asynchronous error. |
55 virtual Error error() OVERRIDE; | 55 virtual Error error() override; |
56 | 56 |
57 // GetError() (which is of type net::Error) != net::OK only when | 57 // GetError() (which is of type net::Error) != net::OK only when |
58 // error() == ERROR_WINSOCK. | 58 // error() == ERROR_WINSOCK. |
59 virtual int GetError() OVERRIDE; | 59 virtual int GetError() override; |
60 | 60 |
61 // Tries to connect to the given address. | 61 // Tries to connect to the given address. |
62 // | 62 // |
63 // If state() is not STATE_CLOSED, sets error to ERROR_WRONGSTATE | 63 // If state() is not STATE_CLOSED, sets error to ERROR_WRONGSTATE |
64 // and returns false. | 64 // and returns false. |
65 // | 65 // |
66 // If |address| has an empty hostname or a zero port, sets error to | 66 // If |address| has an empty hostname or a zero port, sets error to |
67 // ERROR_DNS and returns false. (We don't use the IP address even | 67 // ERROR_DNS and returns false. (We don't use the IP address even |
68 // if it's present, as DNS resolution is done by | 68 // if it's present, as DNS resolution is done by |
69 // |resolving_client_socket_factory_|. But it's perfectly fine if | 69 // |resolving_client_socket_factory_|. But it's perfectly fine if |
70 // the hostname is a stringified IP address.) | 70 // the hostname is a stringified IP address.) |
71 // | 71 // |
72 // Otherwise, starts the connection process and returns true. | 72 // Otherwise, starts the connection process and returns true. |
73 // SignalConnected will be raised when the connection is successful; | 73 // SignalConnected will be raised when the connection is successful; |
74 // otherwise, SignalClosed will be raised with a net error set. | 74 // otherwise, SignalClosed will be raised with a net error set. |
75 virtual bool Connect(const rtc::SocketAddress& address) OVERRIDE; | 75 virtual bool Connect(const rtc::SocketAddress& address) override; |
76 | 76 |
77 // Tries to read at most |len| bytes into |data|. | 77 // Tries to read at most |len| bytes into |data|. |
78 // | 78 // |
79 // If state() is not STATE_TLS_CONNECTING, STATE_OPEN, or | 79 // If state() is not STATE_TLS_CONNECTING, STATE_OPEN, or |
80 // STATE_TLS_OPEN, sets error to ERROR_WRONGSTATE and returns false. | 80 // STATE_TLS_OPEN, sets error to ERROR_WRONGSTATE and returns false. |
81 // | 81 // |
82 // Otherwise, fills in |len_read| with the number of bytes read and | 82 // Otherwise, fills in |len_read| with the number of bytes read and |
83 // returns true. If this is called when state() is | 83 // returns true. If this is called when state() is |
84 // STATE_TLS_CONNECTING, reads 0 bytes. (We have to handle this | 84 // STATE_TLS_CONNECTING, reads 0 bytes. (We have to handle this |
85 // case because StartTls() is called during a slot connected to | 85 // case because StartTls() is called during a slot connected to |
86 // SignalRead after parsing the final non-TLS reply from the server | 86 // SignalRead after parsing the final non-TLS reply from the server |
87 // [see XmppClient::Private::OnSocketRead()].) | 87 // [see XmppClient::Private::OnSocketRead()].) |
88 virtual bool Read(char* data, size_t len, size_t* len_read) OVERRIDE; | 88 virtual bool Read(char* data, size_t len, size_t* len_read) override; |
89 | 89 |
90 // Queues up |len| bytes of |data| for writing. | 90 // Queues up |len| bytes of |data| for writing. |
91 // | 91 // |
92 // If state() is not STATE_TLS_CONNECTING, STATE_OPEN, or | 92 // If state() is not STATE_TLS_CONNECTING, STATE_OPEN, or |
93 // STATE_TLS_OPEN, sets error to ERROR_WRONGSTATE and returns false. | 93 // STATE_TLS_OPEN, sets error to ERROR_WRONGSTATE and returns false. |
94 // | 94 // |
95 // If the given data is too big for the internal write buffer, sets | 95 // If the given data is too big for the internal write buffer, sets |
96 // error to ERROR_WINSOCK/net::ERR_INSUFFICIENT_RESOURCES and | 96 // error to ERROR_WINSOCK/net::ERR_INSUFFICIENT_RESOURCES and |
97 // returns false. | 97 // returns false. |
98 // | 98 // |
99 // Otherwise, queues up the data and returns true. If this is | 99 // Otherwise, queues up the data and returns true. If this is |
100 // called when state() == STATE_TLS_CONNECTING, the data is will be | 100 // called when state() == STATE_TLS_CONNECTING, the data is will be |
101 // sent only after the TLS connection succeeds. (See StartTls() | 101 // sent only after the TLS connection succeeds. (See StartTls() |
102 // below for why this happens.) | 102 // below for why this happens.) |
103 // | 103 // |
104 // Note that there's no guarantee that the data will actually be | 104 // Note that there's no guarantee that the data will actually be |
105 // sent; however, it is guaranteed that the any data sent will be | 105 // sent; however, it is guaranteed that the any data sent will be |
106 // sent in FIFO order. | 106 // sent in FIFO order. |
107 virtual bool Write(const char* data, size_t len) OVERRIDE; | 107 virtual bool Write(const char* data, size_t len) override; |
108 | 108 |
109 // If the socket is not already closed, closes the socket and raises | 109 // If the socket is not already closed, closes the socket and raises |
110 // SignalClosed. Always returns true. | 110 // SignalClosed. Always returns true. |
111 virtual bool Close() OVERRIDE; | 111 virtual bool Close() override; |
112 | 112 |
113 // Tries to change to a TLS connection with the given domain name. | 113 // Tries to change to a TLS connection with the given domain name. |
114 // | 114 // |
115 // If state() is not STATE_OPEN or there are pending reads or | 115 // If state() is not STATE_OPEN or there are pending reads or |
116 // writes, sets error to ERROR_WRONGSTATE and returns false. (In | 116 // writes, sets error to ERROR_WRONGSTATE and returns false. (In |
117 // practice, this means that StartTls() can only be called from a | 117 // practice, this means that StartTls() can only be called from a |
118 // slot connected to SignalRead.) | 118 // slot connected to SignalRead.) |
119 // | 119 // |
120 // Otherwise, starts the TLS connection process and returns true. | 120 // Otherwise, starts the TLS connection process and returns true. |
121 // SignalSSLConnected will be raised when the connection is | 121 // SignalSSLConnected will be raised when the connection is |
122 // successful; otherwise, SignalClosed will be raised with a net | 122 // successful; otherwise, SignalClosed will be raised with a net |
123 // error set. | 123 // error set. |
124 virtual bool StartTls(const std::string& domain_name) OVERRIDE; | 124 virtual bool StartTls(const std::string& domain_name) override; |
125 | 125 |
126 // Signal behavior: | 126 // Signal behavior: |
127 // | 127 // |
128 // SignalConnected: raised whenever the connect initiated by a call | 128 // SignalConnected: raised whenever the connect initiated by a call |
129 // to Connect() is complete. | 129 // to Connect() is complete. |
130 // | 130 // |
131 // SignalSSLConnected: raised whenever the connect initiated by a | 131 // SignalSSLConnected: raised whenever the connect initiated by a |
132 // call to StartTls() is complete. Not actually used by | 132 // call to StartTls() is complete. Not actually used by |
133 // XmppClient. (It just assumes that if SignalRead is raised after a | 133 // XmppClient. (It just assumes that if SignalRead is raised after a |
134 // call to StartTls(), the connection has been successfully | 134 // call to StartTls(), the connection has been successfully |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 size_t write_end_; | 205 size_t write_end_; |
206 | 206 |
207 base::WeakPtrFactory<ChromeAsyncSocket> weak_ptr_factory_; | 207 base::WeakPtrFactory<ChromeAsyncSocket> weak_ptr_factory_; |
208 | 208 |
209 DISALLOW_COPY_AND_ASSIGN(ChromeAsyncSocket); | 209 DISALLOW_COPY_AND_ASSIGN(ChromeAsyncSocket); |
210 }; | 210 }; |
211 | 211 |
212 } // namespace jingle_glue | 212 } // namespace jingle_glue |
213 | 213 |
214 #endif // JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ | 214 #endif // JINGLE_GLUE_CHROME_ASYNC_SOCKET_H_ |
OLD | NEW |