| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #ifndef NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ | 5 #ifndef NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ |
| 6 #define NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ | 6 #define NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/ref_counted.h" | 10 #include "base/ref_counted.h" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 } | 48 } |
| 49 | 49 |
| 50 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback); | 50 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback); |
| 51 virtual const HttpResponseInfo* GetResponseInfo() const; | 51 virtual const HttpResponseInfo* GetResponseInfo() const; |
| 52 virtual LoadState GetLoadState() const; | 52 virtual LoadState GetLoadState() const; |
| 53 virtual uint64 GetUploadProgress() const; | 53 virtual uint64 GetUploadProgress() const; |
| 54 | 54 |
| 55 private: | 55 private: |
| 56 FRIEND_TEST(HttpNetworkTransactionTest, ResetStateForRestart); | 56 FRIEND_TEST(HttpNetworkTransactionTest, ResetStateForRestart); |
| 57 | 57 |
| 58 // This version of IOBuffer lets us use a string as the real storage and |
| 59 // "move" the data pointer inside the string before using it to do actual IO. |
| 60 class RequestHeaders : public net::IOBuffer { |
| 61 public: |
| 62 RequestHeaders() : net::IOBuffer() {} |
| 63 ~RequestHeaders() { data_ = NULL; } |
| 64 |
| 65 void SetDataOffset(size_t offset) { |
| 66 data_ = const_cast<char*>(headers_.data()) + offset; |
| 67 } |
| 68 |
| 69 // This is intentionally a public member. |
| 70 std::string headers_; |
| 71 }; |
| 72 |
| 73 // This version of IOBuffer lets us use a malloc'ed buffer as the real storage |
| 74 // and "move" the data pointer inside the buffer before using it to do actual |
| 75 // IO. |
| 76 class ResponseHeaders : public net::IOBuffer { |
| 77 public: |
| 78 ResponseHeaders() : net::IOBuffer() {} |
| 79 ~ResponseHeaders() { data_ = NULL; } |
| 80 |
| 81 void set_data(size_t offset) { data_ = headers_.get() + offset; } |
| 82 char* headers() { return headers_.get(); } |
| 83 void Reset() { headers_.reset(); } |
| 84 void Realloc(size_t new_size); |
| 85 |
| 86 private: |
| 87 scoped_ptr_malloc<char> headers_; |
| 88 }; |
| 89 |
| 58 void BuildRequestHeaders(); | 90 void BuildRequestHeaders(); |
| 59 void BuildTunnelRequest(); | 91 void BuildTunnelRequest(); |
| 60 void DoCallback(int result); | 92 void DoCallback(int result); |
| 61 void OnIOComplete(int result); | 93 void OnIOComplete(int result); |
| 62 | 94 |
| 63 // Runs the state transition loop. | 95 // Runs the state transition loop. |
| 64 int DoLoop(int result); | 96 int DoLoop(int result); |
| 65 | 97 |
| 66 // Each of these methods corresponds to a State value. Those with an input | 98 // Each of these methods corresponds to a State value. Those with an input |
| 67 // argument receive the result from the previous state. If a method returns | 99 // argument receive the result from the previous state. If a method returns |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 // | 297 // |
| 266 // TODO(wtc): this is similar to the |ignore_ok_result_| member of the | 298 // TODO(wtc): this is similar to the |ignore_ok_result_| member of the |
| 267 // SSLClientSocketWin class. We may want to add an internal error code, say | 299 // SSLClientSocketWin class. We may want to add an internal error code, say |
| 268 // ERR_EOF, to indicate a connection closure, so that 0 simply means 0 bytes | 300 // ERR_EOF, to indicate a connection closure, so that 0 simply means 0 bytes |
| 269 // or OK. Note that we already have an ERR_CONNECTION_CLOSED error code, | 301 // or OK. Note that we already have an ERR_CONNECTION_CLOSED error code, |
| 270 // but it isn't really being used. | 302 // but it isn't really being used. |
| 271 bool reading_body_from_socket_; | 303 bool reading_body_from_socket_; |
| 272 | 304 |
| 273 SSLConfig ssl_config_; | 305 SSLConfig ssl_config_; |
| 274 | 306 |
| 275 std::string request_headers_; | 307 scoped_refptr<RequestHeaders> request_headers_; |
| 276 size_t request_headers_bytes_sent_; | 308 size_t request_headers_bytes_sent_; |
| 277 scoped_ptr<UploadDataStream> request_body_stream_; | 309 scoped_ptr<UploadDataStream> request_body_stream_; |
| 310 scoped_refptr<IOBuffer> write_buffer_; |
| 278 | 311 |
| 279 // The read buffer may be larger than it is full. The 'capacity' indicates | 312 // The read buffer may be larger than it is full. The 'capacity' indicates |
| 280 // the allocation size of the buffer, and the 'len' indicates how much data | 313 // the allocation size of the buffer, and the 'len' indicates how much data |
| 281 // is in the buffer already. The 'body offset' indicates the offset of the | 314 // is in the buffer already. The 'body offset' indicates the offset of the |
| 282 // start of the response body within the read buffer. | 315 // start of the response body within the read buffer. |
| 283 scoped_ptr_malloc<char> header_buf_; | 316 scoped_refptr<ResponseHeaders> header_buf_; |
| 284 int header_buf_capacity_; | 317 int header_buf_capacity_; |
| 285 int header_buf_len_; | 318 int header_buf_len_; |
| 286 int header_buf_body_offset_; | 319 int header_buf_body_offset_; |
| 287 | 320 |
| 288 // The number of bytes by which the header buffer is grown when it reaches | 321 // The number of bytes by which the header buffer is grown when it reaches |
| 289 // capacity. | 322 // capacity. |
| 290 enum { kHeaderBufInitialSize = 4096 }; | 323 enum { kHeaderBufInitialSize = 4096 }; |
| 291 | 324 |
| 292 // |kMaxHeaderBufSize| is the number of bytes that the response headers can | 325 // |kMaxHeaderBufSize| is the number of bytes that the response headers can |
| 293 // grow to. If the body start is not found within this range of the | 326 // grow to. If the body start is not found within this range of the |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 STATE_DRAIN_BODY_FOR_AUTH_RESTART, | 378 STATE_DRAIN_BODY_FOR_AUTH_RESTART, |
| 346 STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE, | 379 STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE, |
| 347 STATE_NONE | 380 STATE_NONE |
| 348 }; | 381 }; |
| 349 State next_state_; | 382 State next_state_; |
| 350 }; | 383 }; |
| 351 | 384 |
| 352 } // namespace net | 385 } // namespace net |
| 353 | 386 |
| 354 #endif // NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ | 387 #endif // NET_HTTP_HTTP_NETWORK_TRANSACTION_H_ |
| OLD | NEW |