OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/server/web_socket_encoder.h" | 5 #include "net/server/web_socket_encoder.h" |
6 | 6 |
| 7 #include <utility> |
7 #include <vector> | 8 #include <vector> |
8 | 9 |
9 #include "base/logging.h" | 10 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
12 #include "net/base/io_buffer.h" | 13 #include "net/base/io_buffer.h" |
13 #include "net/websockets/websocket_deflate_parameters.h" | 14 #include "net/websockets/websocket_deflate_parameters.h" |
14 #include "net/websockets/websocket_extension.h" | 15 #include "net/websockets/websocket_extension.h" |
15 #include "net/websockets/websocket_extension_parser.h" | 16 #include "net/websockets/websocket_extension_parser.h" |
16 | 17 |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 auto deflater = make_scoped_ptr( | 220 auto deflater = make_scoped_ptr( |
220 new WebSocketDeflater(response.server_context_take_over_mode())); | 221 new WebSocketDeflater(response.server_context_take_over_mode())); |
221 auto inflater = make_scoped_ptr( | 222 auto inflater = make_scoped_ptr( |
222 new WebSocketInflater(kInflaterChunkSize, kInflaterChunkSize)); | 223 new WebSocketInflater(kInflaterChunkSize, kInflaterChunkSize)); |
223 if (!deflater->Initialize(response.PermissiveServerMaxWindowBits()) || | 224 if (!deflater->Initialize(response.PermissiveServerMaxWindowBits()) || |
224 !inflater->Initialize(response.PermissiveClientMaxWindowBits())) { | 225 !inflater->Initialize(response.PermissiveClientMaxWindowBits())) { |
225 // For some reason we cannot accept the parameters. | 226 // For some reason we cannot accept the parameters. |
226 continue; | 227 continue; |
227 } | 228 } |
228 *deflate_parameters = response; | 229 *deflate_parameters = response; |
229 return make_scoped_ptr( | 230 return make_scoped_ptr(new WebSocketEncoder(FOR_SERVER, std::move(deflater), |
230 new WebSocketEncoder(FOR_SERVER, deflater.Pass(), inflater.Pass())); | 231 std::move(inflater))); |
231 } | 232 } |
232 | 233 |
233 // We cannot find an acceptable offer. | 234 // We cannot find an acceptable offer. |
234 return make_scoped_ptr(new WebSocketEncoder(FOR_SERVER, nullptr, nullptr)); | 235 return make_scoped_ptr(new WebSocketEncoder(FOR_SERVER, nullptr, nullptr)); |
235 } | 236 } |
236 | 237 |
237 // static | 238 // static |
238 scoped_ptr<WebSocketEncoder> WebSocketEncoder::CreateClient( | 239 scoped_ptr<WebSocketEncoder> WebSocketEncoder::CreateClient( |
239 const std::string& response_extensions) { | 240 const std::string& response_extensions) { |
240 // TODO(yhirano): Add a way to return an error. | 241 // TODO(yhirano): Add a way to return an error. |
(...skipping 24 matching lines...) Expand all Loading... |
265 auto deflater = make_scoped_ptr( | 266 auto deflater = make_scoped_ptr( |
266 new WebSocketDeflater(params.client_context_take_over_mode())); | 267 new WebSocketDeflater(params.client_context_take_over_mode())); |
267 auto inflater = make_scoped_ptr( | 268 auto inflater = make_scoped_ptr( |
268 new WebSocketInflater(kInflaterChunkSize, kInflaterChunkSize)); | 269 new WebSocketInflater(kInflaterChunkSize, kInflaterChunkSize)); |
269 if (!deflater->Initialize(params.PermissiveClientMaxWindowBits()) || | 270 if (!deflater->Initialize(params.PermissiveClientMaxWindowBits()) || |
270 !inflater->Initialize(params.PermissiveServerMaxWindowBits())) { | 271 !inflater->Initialize(params.PermissiveServerMaxWindowBits())) { |
271 // TODO (yhirano): Fail the connection. | 272 // TODO (yhirano): Fail the connection. |
272 return make_scoped_ptr(new WebSocketEncoder(FOR_CLIENT, nullptr, nullptr)); | 273 return make_scoped_ptr(new WebSocketEncoder(FOR_CLIENT, nullptr, nullptr)); |
273 } | 274 } |
274 | 275 |
275 return make_scoped_ptr( | 276 return make_scoped_ptr(new WebSocketEncoder(FOR_CLIENT, std::move(deflater), |
276 new WebSocketEncoder(FOR_CLIENT, deflater.Pass(), inflater.Pass())); | 277 std::move(inflater))); |
277 } | 278 } |
278 | 279 |
279 WebSocketEncoder::WebSocketEncoder(Type type, | 280 WebSocketEncoder::WebSocketEncoder(Type type, |
280 scoped_ptr<WebSocketDeflater> deflater, | 281 scoped_ptr<WebSocketDeflater> deflater, |
281 scoped_ptr<WebSocketInflater> inflater) | 282 scoped_ptr<WebSocketInflater> inflater) |
282 : type_(type), deflater_(deflater.Pass()), inflater_(inflater.Pass()) {} | 283 : type_(type), |
| 284 deflater_(std::move(deflater)), |
| 285 inflater_(std::move(inflater)) {} |
283 | 286 |
284 WebSocketEncoder::~WebSocketEncoder() {} | 287 WebSocketEncoder::~WebSocketEncoder() {} |
285 | 288 |
286 WebSocket::ParseResult WebSocketEncoder::DecodeFrame( | 289 WebSocket::ParseResult WebSocketEncoder::DecodeFrame( |
287 const base::StringPiece& frame, | 290 const base::StringPiece& frame, |
288 int* bytes_consumed, | 291 int* bytes_consumed, |
289 std::string* output) { | 292 std::string* output) { |
290 bool compressed; | 293 bool compressed; |
291 WebSocket::ParseResult result = DecodeFrameHybi17( | 294 WebSocket::ParseResult result = DecodeFrameHybi17( |
292 frame, type_ == FOR_SERVER, bytes_consumed, output, &compressed); | 295 frame, type_ == FOR_SERVER, bytes_consumed, output, &compressed); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 return false; | 344 return false; |
342 scoped_refptr<IOBufferWithSize> buffer = | 345 scoped_refptr<IOBufferWithSize> buffer = |
343 deflater_->GetOutput(deflater_->CurrentOutputSize()); | 346 deflater_->GetOutput(deflater_->CurrentOutputSize()); |
344 if (!buffer.get()) | 347 if (!buffer.get()) |
345 return false; | 348 return false; |
346 *output = std::string(buffer->data(), buffer->size()); | 349 *output = std::string(buffer->data(), buffer->size()); |
347 return true; | 350 return true; |
348 } | 351 } |
349 | 352 |
350 } // namespace net | 353 } // namespace net |
OLD | NEW |