MCPcopy Create free account
hub / github.com/apache/brpc / HandleStreamConnection

Method HandleStreamConnection

src/brpc/controller.cpp:1430–1480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1428}
1429
1430void Controller::HandleStreamConnection(Socket *host_socket) {
1431 if (_request_streams.empty()) {
1432 CHECK(!has_remote_stream());
1433 return;
1434 }
1435 size_t stream_num = _request_streams.size();
1436 std::vector<SocketUniquePtr> ptrs(stream_num);
1437 if (!FailedInline()) {
1438 if (_remote_stream_settings == NULL) {
1439 if (!FailedInline()) {
1440 SetFailed(EREQUEST, "The server didn't accept the stream");
1441 }
1442 } else {
1443 for (size_t i = 0; i < stream_num; ++i) {
1444 if (Socket::Address(_request_streams[i], &ptrs[i]) != 0) {
1445 if (!FailedInline()) {
1446 SetFailed(EREQUEST, "Request stream=%" PRIu64 " was closed before responded",
1447 _request_streams[i]);
1448 break;
1449 }
1450 }
1451 }
1452 }
1453 }
1454 if (FailedInline()) {
1455 Stream::SetFailed(_request_streams, _error_code,
1456 "%s", _error_text.c_str());
1457 if (_remote_stream_settings != NULL) {
1458 policy::SendStreamRst(host_socket,
1459 _remote_stream_settings->stream_id());
1460 for (int i = 0; i < _remote_stream_settings->extra_stream_ids().size(); ++i) {
1461 policy::SendStreamRst(host_socket,
1462 _remote_stream_settings->extra_stream_ids()[i]);
1463 }
1464 }
1465 return;
1466 }
1467 Stream* s = (Stream*)ptrs[0]->conn();
1468 s->SetConnected(_remote_stream_settings);
1469 if (stream_num > 1) {
1470 auto extra_stream_ids = std::move(*_remote_stream_settings->mutable_extra_stream_ids());
1471 _remote_stream_settings->clear_extra_stream_ids();
1472 for (size_t i = 1; i < stream_num; ++i) {
1473 if(!ptrs[i]) continue;
1474 Stream* extra_stream = (Stream *) ptrs[i]->conn();
1475 _remote_stream_settings->set_stream_id(extra_stream_ids[i - 1]);
1476 s->SetHostSocket(host_socket);
1477 extra_stream->SetConnected(_remote_stream_settings);
1478 }
1479 }
1480}
1481
1482// TODO: Need more security advices from professionals.
1483// TODO: Is percent encoding better?

Callers

nothing calls this directly

Calls 8

SendStreamRstFunction · 0.85
SetConnectedMethod · 0.80
SetHostSocketMethod · 0.80
moveFunction · 0.50
emptyMethod · 0.45
sizeMethod · 0.45
c_strMethod · 0.45
stream_idMethod · 0.45

Tested by

no test coverage detected