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

Side by Side Diff: net/tools/flip_server/spdy_interface.cc

Issue 1535363003: Switch to standard integer types in net/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: stddef Created 5 years 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
« no previous file with comments | « net/tools/flip_server/spdy_interface.h ('k') | net/tools/flip_server/spdy_interface_test.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 "net/tools/flip_server/spdy_interface.h" 5 #include "net/tools/flip_server/spdy_interface.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "net/spdy/spdy_framer.h" 10 #include "net/spdy/spdy_framer.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Creating new HTTP interface"; 86 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Creating new HTTP interface";
87 SMInterface* sm_http_interface = 87 SMInterface* sm_http_interface =
88 new HttpSM(server_connection, this, memory_cache_, acceptor_); 88 new HttpSM(server_connection, this, memory_cache_, acceptor_);
89 return sm_http_interface; 89 return sm_http_interface;
90 } 90 }
91 91
92 SMInterface* SpdySM::FindOrMakeNewSMConnectionInterface( 92 SMInterface* SpdySM::FindOrMakeNewSMConnectionInterface(
93 const std::string& server_ip, 93 const std::string& server_ip,
94 const std::string& server_port) { 94 const std::string& server_port) {
95 SMInterface* sm_http_interface; 95 SMInterface* sm_http_interface;
96 int32 server_idx; 96 int32_t server_idx;
97 if (unused_server_interface_list.empty()) { 97 if (unused_server_interface_list.empty()) {
98 sm_http_interface = NewConnectionInterface(); 98 sm_http_interface = NewConnectionInterface();
99 server_idx = server_interface_list.size(); 99 server_idx = server_interface_list.size();
100 server_interface_list.push_back(sm_http_interface); 100 server_interface_list.push_back(sm_http_interface);
101 VLOG(2) << ACCEPTOR_CLIENT_IDENT 101 VLOG(2) << ACCEPTOR_CLIENT_IDENT
102 << "SpdySM: Making new server connection on index: " << server_idx; 102 << "SpdySM: Making new server connection on index: " << server_idx;
103 } else { 103 } else {
104 server_idx = unused_server_interface_list.back(); 104 server_idx = unused_server_interface_list.back();
105 unused_server_interface_list.pop_back(); 105 unused_server_interface_list.pop_back();
106 sm_http_interface = server_interface_list.at(server_idx); 106 sm_http_interface = server_interface_list.at(server_idx);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 DCHECK(buffered_spdy_framer_); 336 DCHECK(buffered_spdy_framer_);
337 return close_on_error_ || buffered_spdy_framer_->HasError(); 337 return close_on_error_ || buffered_spdy_framer_->HasError();
338 } 338 }
339 339
340 const char* SpdySM::ErrorAsString() const { 340 const char* SpdySM::ErrorAsString() const {
341 DCHECK(Error()); 341 DCHECK(Error());
342 DCHECK(buffered_spdy_framer_); 342 DCHECK(buffered_spdy_framer_);
343 return SpdyFramer::ErrorCodeToString(buffered_spdy_framer_->error_code()); 343 return SpdyFramer::ErrorCodeToString(buffered_spdy_framer_->error_code());
344 } 344 }
345 345
346 void SpdySM::ResetForNewInterface(int32 server_idx) { 346 void SpdySM::ResetForNewInterface(int32_t server_idx) {
347 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Reset for new interface: " 347 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Reset for new interface: "
348 << "server_idx: " << server_idx; 348 << "server_idx: " << server_idx;
349 unused_server_interface_list.push_back(server_idx); 349 unused_server_interface_list.push_back(server_idx);
350 } 350 }
351 351
352 void SpdySM::ResetForNewConnection() { 352 void SpdySM::ResetForNewConnection() {
353 // seq_num is not cleared, intentionally. 353 // seq_num is not cleared, intentionally.
354 buffered_spdy_framer_.reset(); 354 buffered_spdy_framer_.reset();
355 valid_spdy_session_ = false; 355 valid_spdy_session_ = false;
356 client_output_ordering_.Reset(); 356 client_output_ordering_.Reset();
357 next_outgoing_stream_id_ = 2; 357 next_outgoing_stream_id_ = 2;
358 } 358 }
359 359
360 // Send a settings frame 360 // Send a settings frame
361 int SpdySM::PostAcceptHook() { 361 int SpdySM::PostAcceptHook() {
362 // We should have buffered_spdy_framer_ set after reuse 362 // We should have buffered_spdy_framer_ set after reuse
363 DCHECK(buffered_spdy_framer_); 363 DCHECK(buffered_spdy_framer_);
364 SettingsMap settings; 364 SettingsMap settings;
365 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 365 settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
366 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 100); 366 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 100);
367 SpdyFrame* settings_frame = buffered_spdy_framer_->CreateSettings(settings); 367 SpdyFrame* settings_frame = buffered_spdy_framer_->CreateSettings(settings);
368 368
369 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Sending Settings Frame"; 369 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Sending Settings Frame";
370 EnqueueDataFrame(new SpdyFrameDataFrame(settings_frame)); 370 EnqueueDataFrame(new SpdyFrameDataFrame(settings_frame));
371 return 1; 371 return 1;
372 } 372 }
373 373
374 void SpdySM::NewStream(uint32 stream_id, 374 void SpdySM::NewStream(uint32_t stream_id,
375 uint32 priority, 375 uint32_t priority,
376 const std::string& filename) { 376 const std::string& filename) {
377 MemCacheIter mci; 377 MemCacheIter mci;
378 mci.stream_id = stream_id; 378 mci.stream_id = stream_id;
379 mci.priority = priority; 379 mci.priority = priority;
380 // TODO(yhirano): The program will crash when 380 // TODO(yhirano): The program will crash when
381 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER. 381 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER.
382 // It should be fixed or an assertion should be placed. 382 // It should be fixed or an assertion should be placed.
383 if (acceptor_->flip_handler_type_ == FLIP_HANDLER_SPDY_SERVER) { 383 if (acceptor_->flip_handler_type_ == FLIP_HANDLER_SPDY_SERVER) {
384 if (!memory_cache_->AssignFileData(filename, &mci)) { 384 if (!memory_cache_->AssignFileData(filename, &mci)) {
385 // error creating new stream. 385 // error creating new stream.
386 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Sending ErrorNotFound"; 386 VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Sending ErrorNotFound";
387 SendErrorNotFound(stream_id); 387 SendErrorNotFound(stream_id);
388 } else { 388 } else {
389 AddToOutputOrder(mci); 389 AddToOutputOrder(mci);
390 } 390 }
391 } else { 391 } else {
392 AddToOutputOrder(mci); 392 AddToOutputOrder(mci);
393 } 393 }
394 } 394 }
395 395
396 void SpdySM::AddToOutputOrder(const MemCacheIter& mci) { 396 void SpdySM::AddToOutputOrder(const MemCacheIter& mci) {
397 client_output_ordering_.AddToOutputOrder(mci); 397 client_output_ordering_.AddToOutputOrder(mci);
398 } 398 }
399 399
400 void SpdySM::SendEOF(uint32 stream_id) { SendEOFImpl(stream_id); } 400 void SpdySM::SendEOF(uint32_t stream_id) {
401 SendEOFImpl(stream_id);
402 }
401 403
402 void SpdySM::SendErrorNotFound(uint32 stream_id) { 404 void SpdySM::SendErrorNotFound(uint32_t stream_id) {
403 SendErrorNotFoundImpl(stream_id); 405 SendErrorNotFoundImpl(stream_id);
404 } 406 }
405 407
406 size_t SpdySM::SendSynStream(uint32 stream_id, const BalsaHeaders& headers) { 408 size_t SpdySM::SendSynStream(uint32_t stream_id, const BalsaHeaders& headers) {
407 return SendSynStreamImpl(stream_id, headers); 409 return SendSynStreamImpl(stream_id, headers);
408 } 410 }
409 411
410 size_t SpdySM::SendSynReply(uint32 stream_id, const BalsaHeaders& headers) { 412 size_t SpdySM::SendSynReply(uint32_t stream_id, const BalsaHeaders& headers) {
411 return SendSynReplyImpl(stream_id, headers); 413 return SendSynReplyImpl(stream_id, headers);
412 } 414 }
413 415
414 void SpdySM::SendDataFrame(uint32 stream_id, 416 void SpdySM::SendDataFrame(uint32_t stream_id,
415 const char* data, 417 const char* data,
416 int64 len, 418 int64_t len,
417 uint32 flags, 419 uint32_t flags,
418 bool compress) { 420 bool compress) {
419 SpdyDataFlags spdy_flags = static_cast<SpdyDataFlags>(flags); 421 SpdyDataFlags spdy_flags = static_cast<SpdyDataFlags>(flags);
420 SendDataFrameImpl(stream_id, data, len, spdy_flags, compress); 422 SendDataFrameImpl(stream_id, data, len, spdy_flags, compress);
421 } 423 }
422 424
423 void SpdySM::SendEOFImpl(uint32 stream_id) { 425 void SpdySM::SendEOFImpl(uint32_t stream_id) {
424 SendDataFrame(stream_id, NULL, 0, DATA_FLAG_FIN, false); 426 SendDataFrame(stream_id, NULL, 0, DATA_FLAG_FIN, false);
425 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending EOF: " << stream_id; 427 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending EOF: " << stream_id;
426 KillStream(stream_id); 428 KillStream(stream_id);
427 stream_to_smif_.erase(stream_id); 429 stream_to_smif_.erase(stream_id);
428 } 430 }
429 431
430 void SpdySM::SendErrorNotFoundImpl(uint32 stream_id) { 432 void SpdySM::SendErrorNotFoundImpl(uint32_t stream_id) {
431 BalsaHeaders my_headers; 433 BalsaHeaders my_headers;
432 my_headers.SetFirstlineFromStringPieces("HTTP/1.1", "404", "Not Found"); 434 my_headers.SetFirstlineFromStringPieces("HTTP/1.1", "404", "Not Found");
433 SendSynReplyImpl(stream_id, my_headers); 435 SendSynReplyImpl(stream_id, my_headers);
434 SendDataFrame(stream_id, "wtf?", 4, DATA_FLAG_FIN, false); 436 SendDataFrame(stream_id, "wtf?", 4, DATA_FLAG_FIN, false);
435 client_output_ordering_.RemoveStreamId(stream_id); 437 client_output_ordering_.RemoveStreamId(stream_id);
436 } 438 }
437 439
438 void SpdySM::KillStream(uint32 stream_id) { 440 void SpdySM::KillStream(uint32_t stream_id) {
439 client_output_ordering_.RemoveStreamId(stream_id); 441 client_output_ordering_.RemoveStreamId(stream_id);
440 } 442 }
441 443
442 void SpdySM::CopyHeaders(SpdyHeaderBlock& dest, const BalsaHeaders& headers) { 444 void SpdySM::CopyHeaders(SpdyHeaderBlock& dest, const BalsaHeaders& headers) {
443 for (BalsaHeaders::const_header_lines_iterator hi = 445 for (BalsaHeaders::const_header_lines_iterator hi =
444 headers.header_lines_begin(); 446 headers.header_lines_begin();
445 hi != headers.header_lines_end(); 447 hi != headers.header_lines_end();
446 ++hi) { 448 ++hi) {
447 // It is illegal to send SPDY headers with empty value or header 449 // It is illegal to send SPDY headers with empty value or header
448 // names. 450 // names.
(...skipping 10 matching lines...) Expand all
459 dest[key] = (std::string(fhi->second.data(), fhi->second.size()) + "\0" + 461 dest[key] = (std::string(fhi->second.data(), fhi->second.size()) + "\0" +
460 std::string(hi->second.data(), hi->second.size())); 462 std::string(hi->second.data(), hi->second.size()));
461 } 463 }
462 } 464 }
463 465
464 // These headers have no value 466 // These headers have no value
465 dest.erase("X-Associated-Content"); // TODO(mbelshe): case-sensitive 467 dest.erase("X-Associated-Content"); // TODO(mbelshe): case-sensitive
466 dest.erase("X-Original-Url"); // TODO(mbelshe): case-sensitive 468 dest.erase("X-Original-Url"); // TODO(mbelshe): case-sensitive
467 } 469 }
468 470
469 size_t SpdySM::SendSynStreamImpl(uint32 stream_id, 471 size_t SpdySM::SendSynStreamImpl(uint32_t stream_id,
470 const BalsaHeaders& headers) { 472 const BalsaHeaders& headers) {
471 SpdyHeaderBlock block; 473 SpdyHeaderBlock block;
472 CopyHeaders(block, headers); 474 CopyHeaders(block, headers);
473 if (spdy_version() == SPDY2) { 475 if (spdy_version() == SPDY2) {
474 block["method"] = headers.request_method().as_string(); 476 block["method"] = headers.request_method().as_string();
475 if (!headers.HasHeader("version")) 477 if (!headers.HasHeader("version"))
476 block["version"] = headers.request_version().as_string(); 478 block["version"] = headers.request_version().as_string();
477 if (headers.HasHeader("X-Original-Url")) { 479 if (headers.HasHeader("X-Original-Url")) {
478 std::string original_url = 480 std::string original_url =
479 headers.GetHeader("X-Original-Url").as_string(); 481 headers.GetHeader("X-Original-Url").as_string();
(...skipping 22 matching lines...) Expand all
502 SpdyFrame* fsrcf = buffered_spdy_framer_->CreateSynStream( 504 SpdyFrame* fsrcf = buffered_spdy_framer_->CreateSynStream(
503 stream_id, 0, 0, CONTROL_FLAG_NONE, &block); 505 stream_id, 0, 0, CONTROL_FLAG_NONE, &block);
504 size_t df_size = fsrcf->size(); 506 size_t df_size = fsrcf->size();
505 EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf)); 507 EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf));
506 508
507 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynStreamheader " 509 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynStreamheader "
508 << stream_id; 510 << stream_id;
509 return df_size; 511 return df_size;
510 } 512 }
511 513
512 size_t SpdySM::SendSynReplyImpl(uint32 stream_id, const BalsaHeaders& headers) { 514 size_t SpdySM::SendSynReplyImpl(uint32_t stream_id,
515 const BalsaHeaders& headers) {
513 SpdyHeaderBlock block; 516 SpdyHeaderBlock block;
514 CopyHeaders(block, headers); 517 CopyHeaders(block, headers);
515 if (spdy_version() == SPDY2) { 518 if (spdy_version() == SPDY2) {
516 block["status"] = headers.response_code().as_string() + " " + 519 block["status"] = headers.response_code().as_string() + " " +
517 headers.response_reason_phrase().as_string(); 520 headers.response_reason_phrase().as_string();
518 block["version"] = headers.response_version().as_string(); 521 block["version"] = headers.response_version().as_string();
519 } else { 522 } else {
520 block[":status"] = headers.response_code().as_string() + " " + 523 block[":status"] = headers.response_code().as_string() + " " +
521 headers.response_reason_phrase().as_string(); 524 headers.response_reason_phrase().as_string();
522 block[":version"] = headers.response_version().as_string(); 525 block[":version"] = headers.response_version().as_string();
523 } 526 }
524 527
525 DCHECK(buffered_spdy_framer_); 528 DCHECK(buffered_spdy_framer_);
526 SpdyFrame* fsrcf = buffered_spdy_framer_->CreateSynReply( 529 SpdyFrame* fsrcf = buffered_spdy_framer_->CreateSynReply(
527 stream_id, CONTROL_FLAG_NONE, &block); 530 stream_id, CONTROL_FLAG_NONE, &block);
528 size_t df_size = fsrcf->size(); 531 size_t df_size = fsrcf->size();
529 EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf)); 532 EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf));
530 533
531 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynReplyheader " 534 VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynReplyheader "
532 << stream_id; 535 << stream_id;
533 return df_size; 536 return df_size;
534 } 537 }
535 538
536 void SpdySM::SendDataFrameImpl(uint32 stream_id, 539 void SpdySM::SendDataFrameImpl(uint32_t stream_id,
537 const char* data, 540 const char* data,
538 int64 len, 541 int64_t len,
539 SpdyDataFlags flags, 542 SpdyDataFlags flags,
540 bool compress) { 543 bool compress) {
541 DCHECK(buffered_spdy_framer_); 544 DCHECK(buffered_spdy_framer_);
542 // TODO(mbelshe): We can't compress here - before going into the 545 // TODO(mbelshe): We can't compress here - before going into the
543 // priority queue. Compression needs to be done 546 // priority queue. Compression needs to be done
544 // with late binding. 547 // with late binding.
545 if (len == 0) { 548 if (len == 0) {
546 SpdyFrame* fdf = 549 SpdyFrame* fdf =
547 buffered_spdy_framer_->CreateDataFrame(stream_id, data, len, flags); 550 buffered_spdy_framer_->CreateDataFrame(stream_id, data, len, flags);
548 EnqueueDataFrame(new SpdyFrameDataFrame(fdf)); 551 EnqueueDataFrame(new SpdyFrameDataFrame(fdf));
549 return; 552 return;
550 } 553 }
551 554
552 // Chop data frames into chunks so that one stream can't monopolize the 555 // Chop data frames into chunks so that one stream can't monopolize the
553 // output channel. 556 // output channel.
554 while (len > 0) { 557 while (len > 0) {
555 int64 size = std::min(len, static_cast<int64>(kSpdySegmentSize)); 558 int64_t size = std::min(len, static_cast<int64_t>(kSpdySegmentSize));
556 SpdyDataFlags chunk_flags = flags; 559 SpdyDataFlags chunk_flags = flags;
557 560
558 // If we chunked this block, and the FIN flag was set, there is more 561 // If we chunked this block, and the FIN flag was set, there is more
559 // data coming. So, remove the flag. 562 // data coming. So, remove the flag.
560 if ((size < len) && (flags & DATA_FLAG_FIN)) 563 if ((size < len) && (flags & DATA_FLAG_FIN))
561 chunk_flags = static_cast<SpdyDataFlags>(chunk_flags & ~DATA_FLAG_FIN); 564 chunk_flags = static_cast<SpdyDataFlags>(chunk_flags & ~DATA_FLAG_FIN);
562 565
563 SpdyFrame* fdf = buffered_spdy_framer_->CreateDataFrame( 566 SpdyFrame* fdf = buffered_spdy_framer_->CreateDataFrame(
564 stream_id, data, size, chunk_flags); 567 stream_id, data, size, chunk_flags);
565 EnqueueDataFrame(new SpdyFrameDataFrame(fdf)); 568 EnqueueDataFrame(new SpdyFrameDataFrame(fdf));
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 } 642 }
640 } 643 }
641 644
642 void SpdySM::CreateFramer(SpdyMajorVersion spdy_version) { 645 void SpdySM::CreateFramer(SpdyMajorVersion spdy_version) {
643 DCHECK(!buffered_spdy_framer_); 646 DCHECK(!buffered_spdy_framer_);
644 buffered_spdy_framer_.reset(new BufferedSpdyFramer(spdy_version, true)); 647 buffered_spdy_framer_.reset(new BufferedSpdyFramer(spdy_version, true));
645 buffered_spdy_framer_->set_visitor(this); 648 buffered_spdy_framer_->set_visitor(this);
646 } 649 }
647 650
648 } // namespace net 651 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/flip_server/spdy_interface.h ('k') | net/tools/flip_server/spdy_interface_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698