Loading system/gd/l2cap/classic/internal/dynamic_channel_allocator.cc +9 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,15 @@ std::shared_ptr<DynamicChannelImpl> DynamicChannelAllocator::FindChannelByCid(Ci return channels_.find(cid)->second; } std::shared_ptr<DynamicChannelImpl> DynamicChannelAllocator::FindChannelByRemoteCid(Cid remote_cid) { for (auto& channel : channels_) { if (channel.second->GetRemoteCid() == remote_cid) { return channel.second; } } return nullptr; } size_t DynamicChannelAllocator::NumberOfChannels() const { return channels_.size(); } Loading system/gd/l2cap/classic/internal/dynamic_channel_allocator.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ class DynamicChannelAllocator { bool IsPsmUsed(Psm psm) const; std::shared_ptr<DynamicChannelImpl> FindChannelByCid(Cid cid); std::shared_ptr<DynamicChannelImpl> FindChannelByRemoteCid(Cid cid); // Returns number of open, but not reserved channels size_t NumberOfChannels() const; Loading system/gd/l2cap/classic/internal/signalling_manager.cc +16 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ void ClassicSignallingManager::OnConnectionRequest(SignalId signal_id, Psm psm, dynamic_service_manager_->GetService(psm)->NotifyChannelCreation(std::move(channel)); } void ClassicSignallingManager::OnConnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid, void ClassicSignallingManager::OnConnectionResponse(SignalId signal_id, Cid remote_cid, Cid cid, ConnectionResponseResult result, ConnectionResponseStatus status) { if (pending_commands_.empty()) { LOG_WARN("Unexpected response: no pending request"); Loading Loading @@ -207,6 +207,15 @@ void ClassicSignallingManager::OnConfigurationResponse(SignalId signal_id, Cid c auto last_sent_command = std::move(pending_commands_.front()); pending_commands_.pop(); auto channel = channel_allocator_->FindChannelByRemoteCid(cid); if (channel == nullptr) { LOG_WARN("Configuration request for an unknown channel"); return; } // TODO(cmanton) verify configuration parameters are satisfied // TODO(cmanton) Indicate channel is open if config params are agreed upon handle_send_next_command(); } void ClassicSignallingManager::OnDisconnectionRequest(SignalId signal_id, Cid cid, Cid remote_cid) { Loading @@ -220,6 +229,7 @@ void ClassicSignallingManager::OnDisconnectionRequest(SignalId signal_id, Cid ci enqueue_buffer_->Enqueue(std::move(builder), handler_); channel->OnClosed(hci::ErrorCode::SUCCESS); link_->FreeDynamicChannel(cid); handle_send_next_command(); } void ClassicSignallingManager::OnDisconnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid) { Loading @@ -243,6 +253,7 @@ void ClassicSignallingManager::OnDisconnectionResponse(SignalId signal_id, Cid c channel->OnClosed(hci::ErrorCode::SUCCESS); link_->FreeDynamicChannel(cid); handle_send_next_command(); } void ClassicSignallingManager::OnEchoRequest(SignalId signal_id, const PacketView<kLittleEndian>& packet) { Loading @@ -251,6 +262,7 @@ void ClassicSignallingManager::OnEchoRequest(SignalId signal_id, const PacketVie raw_builder->AddOctets(packet_vector); auto builder = EchoResponseBuilder::Create(signal_id.Value(), std::move(raw_builder)); enqueue_buffer_->Enqueue(std::move(builder), handler_); handle_send_next_command(); } void ClassicSignallingManager::OnEchoResponse(SignalId signal_id, const PacketView<kLittleEndian>& packet) { Loading @@ -265,6 +277,7 @@ void ClassicSignallingManager::OnEchoResponse(SignalId signal_id, const PacketVi return; } LOG_INFO("Echo response received"); handle_send_next_command(); } void ClassicSignallingManager::OnInformationRequest(SignalId signal_id, InformationRequestInfoType type) { Loading @@ -289,6 +302,7 @@ void ClassicSignallingManager::OnInformationRequest(SignalId signal_id, Informat return; } } handle_send_next_command(); } void ClassicSignallingManager::OnInformationResponse(SignalId signal_id, const InformationResponseView& view) { Loading @@ -306,6 +320,7 @@ void ClassicSignallingManager::OnInformationResponse(SignalId signal_id, const I if (view.GetResult() != InformationRequestResult::SUCCESS) { return; } handle_send_next_command(); } void ClassicSignallingManager::on_incoming_packet() { Loading system/gd/l2cap/classic/internal/signalling_manager.h +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ class ClassicSignallingManager { void OnConnectionRequest(SignalId signal_id, Psm psm, Cid remote_cid); void OnConnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid, ConnectionResponseResult result, void OnConnectionResponse(SignalId signal_id, Cid remote_cid, Cid cid, ConnectionResponseResult result, ConnectionResponseStatus status); void OnDisconnectionRequest(SignalId signal_id, Cid cid, Cid remote_cid); Loading Loading
system/gd/l2cap/classic/internal/dynamic_channel_allocator.cc +9 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,15 @@ std::shared_ptr<DynamicChannelImpl> DynamicChannelAllocator::FindChannelByCid(Ci return channels_.find(cid)->second; } std::shared_ptr<DynamicChannelImpl> DynamicChannelAllocator::FindChannelByRemoteCid(Cid remote_cid) { for (auto& channel : channels_) { if (channel.second->GetRemoteCid() == remote_cid) { return channel.second; } } return nullptr; } size_t DynamicChannelAllocator::NumberOfChannels() const { return channels_.size(); } Loading
system/gd/l2cap/classic/internal/dynamic_channel_allocator.h +1 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ class DynamicChannelAllocator { bool IsPsmUsed(Psm psm) const; std::shared_ptr<DynamicChannelImpl> FindChannelByCid(Cid cid); std::shared_ptr<DynamicChannelImpl> FindChannelByRemoteCid(Cid cid); // Returns number of open, but not reserved channels size_t NumberOfChannels() const; Loading
system/gd/l2cap/classic/internal/signalling_manager.cc +16 −1 Original line number Diff line number Diff line Loading @@ -152,7 +152,7 @@ void ClassicSignallingManager::OnConnectionRequest(SignalId signal_id, Psm psm, dynamic_service_manager_->GetService(psm)->NotifyChannelCreation(std::move(channel)); } void ClassicSignallingManager::OnConnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid, void ClassicSignallingManager::OnConnectionResponse(SignalId signal_id, Cid remote_cid, Cid cid, ConnectionResponseResult result, ConnectionResponseStatus status) { if (pending_commands_.empty()) { LOG_WARN("Unexpected response: no pending request"); Loading Loading @@ -207,6 +207,15 @@ void ClassicSignallingManager::OnConfigurationResponse(SignalId signal_id, Cid c auto last_sent_command = std::move(pending_commands_.front()); pending_commands_.pop(); auto channel = channel_allocator_->FindChannelByRemoteCid(cid); if (channel == nullptr) { LOG_WARN("Configuration request for an unknown channel"); return; } // TODO(cmanton) verify configuration parameters are satisfied // TODO(cmanton) Indicate channel is open if config params are agreed upon handle_send_next_command(); } void ClassicSignallingManager::OnDisconnectionRequest(SignalId signal_id, Cid cid, Cid remote_cid) { Loading @@ -220,6 +229,7 @@ void ClassicSignallingManager::OnDisconnectionRequest(SignalId signal_id, Cid ci enqueue_buffer_->Enqueue(std::move(builder), handler_); channel->OnClosed(hci::ErrorCode::SUCCESS); link_->FreeDynamicChannel(cid); handle_send_next_command(); } void ClassicSignallingManager::OnDisconnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid) { Loading @@ -243,6 +253,7 @@ void ClassicSignallingManager::OnDisconnectionResponse(SignalId signal_id, Cid c channel->OnClosed(hci::ErrorCode::SUCCESS); link_->FreeDynamicChannel(cid); handle_send_next_command(); } void ClassicSignallingManager::OnEchoRequest(SignalId signal_id, const PacketView<kLittleEndian>& packet) { Loading @@ -251,6 +262,7 @@ void ClassicSignallingManager::OnEchoRequest(SignalId signal_id, const PacketVie raw_builder->AddOctets(packet_vector); auto builder = EchoResponseBuilder::Create(signal_id.Value(), std::move(raw_builder)); enqueue_buffer_->Enqueue(std::move(builder), handler_); handle_send_next_command(); } void ClassicSignallingManager::OnEchoResponse(SignalId signal_id, const PacketView<kLittleEndian>& packet) { Loading @@ -265,6 +277,7 @@ void ClassicSignallingManager::OnEchoResponse(SignalId signal_id, const PacketVi return; } LOG_INFO("Echo response received"); handle_send_next_command(); } void ClassicSignallingManager::OnInformationRequest(SignalId signal_id, InformationRequestInfoType type) { Loading @@ -289,6 +302,7 @@ void ClassicSignallingManager::OnInformationRequest(SignalId signal_id, Informat return; } } handle_send_next_command(); } void ClassicSignallingManager::OnInformationResponse(SignalId signal_id, const InformationResponseView& view) { Loading @@ -306,6 +320,7 @@ void ClassicSignallingManager::OnInformationResponse(SignalId signal_id, const I if (view.GetResult() != InformationRequestResult::SUCCESS) { return; } handle_send_next_command(); } void ClassicSignallingManager::on_incoming_packet() { Loading
system/gd/l2cap/classic/internal/signalling_manager.h +1 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,7 @@ class ClassicSignallingManager { void OnConnectionRequest(SignalId signal_id, Psm psm, Cid remote_cid); void OnConnectionResponse(SignalId signal_id, Cid cid, Cid remote_cid, ConnectionResponseResult result, void OnConnectionResponse(SignalId signal_id, Cid remote_cid, Cid cid, ConnectionResponseResult result, ConnectionResponseStatus status); void OnDisconnectionRequest(SignalId signal_id, Cid cid, Cid remote_cid); Loading