OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef NET_WEBSOCKETS_WEBSOCKET_STREAM_H_ | |
6 #define NET_WEBSOCKETS_WEBSOCKET_STREAM_H_ | |
7 | |
8 #include "base/basictypes.h" | |
9 #include "base/memory/scoped_vector.h" | |
10 #include "net/base/completion_callback.h" | |
11 | |
12 namespace net { | |
13 | |
14 class BoundNetLog; | |
15 class HttpRequestHeaders; | |
16 struct HttpRequestInfo; | |
17 class HttpResponseInfo; | |
18 struct WebSocketFrameChunk; | |
19 | |
20 // WebSocketStream is a transport-agnostic interface for reading and writing | |
21 // WebSocket frames. This class provides an abstraction for WebSocket streams | |
22 // based on various transport layer, such as normal WebSocket connections | |
23 // (WebSocket protocol upgraded from HTTP handshake), SPDY transports, or | |
24 // WebSocket connections with multiplexing extension. Subtypes of | |
25 // WebSocketStream are responsible for managing the underlying transport | |
26 // appropriately. | |
27 | |
28 class WebSocketStream { | |
29 public: | |
30 WebSocketStream() {} | |
31 virtual ~WebSocketStream() {} | |
willchan no longer on Chromium
2012/07/23 21:28:52
Document that ~WebSocketStream will Close() the st
Yuta Kitamura
2012/08/06 11:34:29
Done.
| |
32 | |
33 // Initialize stream. Must be called before calling SendHandshakeRequest(). | |
34 // Returns a net error code, possibly ERR_IO_PENDING. If return value is | |
35 // ERR_IO_PENDING, |callback| is called when the operation is finished. This | |
willchan no longer on Chromium
2012/07/23 21:28:52
In all these APIs, document that !callback.is_null
Yuta Kitamura
2012/08/06 11:34:29
Done. Requirement for asynchronous operations is m
| |
36 // convention applies to other functions defined in this class. | |
37 // | |
38 // |request_info->url| must be a URL starting with "ws://" or "wss://". | |
39 // |request_info->method| must be "GET". |request_info->upload_data| is | |
40 // ignored. | |
41 virtual int InitializeStream(const HttpRequestInfo* request_info, | |
willchan no longer on Chromium
2012/07/23 21:28:52
const HttpRequestInfo&? I don't think it should be
Yuta Kitamura
2012/08/06 11:34:29
Correct. Fixed. (I just copied this from HttpStrea
| |
42 const BoundNetLog& net_log, | |
43 const CompletionCallback& callback) = 0; | |
44 | |
45 // Writes WebSocket handshake request to the underlying socket. Must be | |
46 // called after InitializeStream() completes and before | |
47 // ReadHandshakeResponse() is called. | |
48 virtual int SendHandshakeRequest(const HttpRequestHeaders& headers, | |
49 HttpResponseInfo* response_info, | |
50 const CompletionCallback& callback) = 0; | |
51 | |
52 // Reads WebSocket handshake response from the underlying socket. This | |
53 // function completes when the response headers have been completely | |
54 // received. Must be called after SendHandshakeRequest() completes. | |
55 virtual int ReadHandshakeResponse(const CompletionCallback& callback) = 0; | |
willchan no longer on Chromium
2012/07/23 21:28:52
Why is this split out from SendHandshakeRequest()?
Yuta Kitamura
2012/08/06 11:34:29
Good point, there is not much reason except that H
| |
56 | |
57 // Reads WebSocket frame data. This operation finishes when new frame data | |
58 // becomes available. Each frame message might be chopped off in the middle | |
59 // as specified in the description of WebSocketFrameChunk struct. | |
60 // |frame_chunks| must be valid until the operation completes. | |
willchan no longer on Chromium
2012/07/23 21:28:52
or canceled via Close()
Yuta Kitamura
2012/08/06 11:34:29
Done.
| |
61 // | |
62 // This function can be called after ReadHandshakeResponse(). This function | |
63 // should not be called while previous call of ReadFrames() is still pending. | |
64 virtual int ReadFrames(ScopedVector<WebSocketFrameChunk>* frame_chunks, | |
65 const CompletionCallback& callback) = 0; | |
66 | |
67 // Writes WebSocket frame data. |frame_chunks| must obey the rule specified | |
68 // in the documentation of WebSocketFrameChunk struct. It is allowed to | |
69 // send part of WebSocket frame data. | |
70 // | |
71 // This function can be called after ReadHandshakeResponse(). This function | |
72 // should not be called while previous call of WriteFrames() is still pending. | |
73 virtual int WriteFrames(ScopedVector<WebSocketFrameChunk>* frame_chunks, | |
74 const CompletionCallback& callback) = 0; | |
mmenke
2012/07/23 17:46:05
How is this supposed to work when it sends only pa
Yuta Kitamura
2012/08/06 11:34:29
Users are expected to send one or more WebSocketFr
mmenke
2012/08/06 16:15:37
Thanks. You're right - the old comment had confus
| |
75 | |
76 // Disconnects the underlying connection. We don't support reuse of | |
77 // connections for now, because it is not clear whether existing WebSocket | |
78 // servers really support it. | |
79 virtual int Disconnect() = 0; | |
mmenke
2012/07/23 17:46:05
Should this be Close()? Also, what about the mult
mmenke
2012/07/23 17:46:05
Why do we need a return value?
willchan no longer on Chromium
2012/07/23 21:28:52
Yeah, this should be called closing the WebSocketS
Yuta Kitamura
2012/08/06 11:34:29
OK, fixed.
| |
80 | |
81 // TODO(yutak): Add following interfaces: | |
82 // - RenewStreamForAuth for authentication (is this necessary?) | |
83 // - GetSSLInfo, GetSSLCertRequsetInfo for SSL | |
84 | |
85 private: | |
86 DISALLOW_COPY_AND_ASSIGN(WebSocketStream); | |
87 }; | |
88 | |
89 } // namespace net | |
90 | |
91 #endif // NET_WEBSOCKETS_WEBSOCKET_STREAM_H_ | |
OLD | NEW |