Snap for 9453251 from fede3049bcb4a2e20c9e9d37a3d7b644050a52e7 to mainline-cellbroadcast-release

Change-Id: I346dcde0b3ed40c6f0c751e59a658e1b1e6b7103
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc
index 08c2b68..609ea4b 100644
--- a/host/commands/assemble_cvd/flags.cc
+++ b/host/commands/assemble_cvd/flags.cc
@@ -768,7 +768,7 @@
     const auto vsock_guest_cid = FLAGS_vsock_guest_cid + num - GetInstance();
     instance.set_vsock_guest_cid(vsock_guest_cid);
     auto calc_vsock_port = [vsock_guest_cid](const int base_port) {
-      // a base (vsock) port is like 9200 for modem_simulator, etc
+      // a base (vsock) port is like 9600 for modem_simulator, etc
       return cuttlefish::GetVsockServerPort(base_port, vsock_guest_cid);
     };
     instance.set_session_id(iface_config.mobile_tap.session_id);
@@ -891,10 +891,10 @@
     if (modem_simulator_count > 0) {
       std::stringstream modem_ports;
       for (auto index {0}; index < modem_simulator_count - 1; index++) {
-        auto port = 9200 + (modem_simulator_count * (num - 1)) + index;
+        auto port = 9600 + (modem_simulator_count * (num - 1)) + index;
         modem_ports << calc_vsock_port(port) << ",";
       }
-      auto port = 9200 + (modem_simulator_count * (num - 1)) +
+      auto port = 9600 + (modem_simulator_count * (num - 1)) +
                   modem_simulator_count - 1;
       modem_ports << calc_vsock_port(port);
       instance.set_modem_simulator_ports(modem_ports.str());
diff --git a/host/commands/modem_simulator/call_service.cpp b/host/commands/modem_simulator/call_service.cpp
index 674c153..7e40870 100644
--- a/host/commands/modem_simulator/call_service.cpp
+++ b/host/commands/modem_simulator/call_service.cpp
@@ -37,7 +37,6 @@
   auto instance = nvram_config->ForInstance(service_id_);
   in_emergency_mode_ = instance.emergency_mode();
 
-  last_active_call_index_ = 1;
   mute_on_ = false;
 }
 
@@ -216,7 +215,7 @@
     call_status.is_mobile_terminated = false;
     call_status.call_state = CallStatus::CALL_STATE_DIALING;
     call_status.remote_client = remote_client;
-    int index = last_active_call_index_++;
+    auto index = FindFreeCallIndex();
 
     auto call_token = std::make_pair(index, call_status.number);
     call_status.timeout_serial = thread_looper_->Post(
@@ -232,7 +231,7 @@
     CallStatus call_status(number);
     call_status.is_mobile_terminated = false;
     call_status.call_state = CallStatus::CALL_STATE_DIALING;
-    auto index = last_active_call_index_++;
+    auto index = FindFreeCallIndex();
     active_calls_[index] = call_status;
 
     if (emergency_number) {
@@ -707,7 +706,7 @@
       call_status.remote_client = client.client_fd;
       call_status.call_state = CallStatus::CALL_STATE_INCOMING;
 
-      auto index = last_active_call_index_++;
+      auto index = FindFreeCallIndex();
       active_calls_[index] = call_status;
       break;
     }
diff --git a/host/commands/modem_simulator/call_service.h b/host/commands/modem_simulator/call_service.h
index 1870372..f57eb05 100644
--- a/host/commands/modem_simulator/call_service.h
+++ b/host/commands/modem_simulator/call_service.h
@@ -42,6 +42,13 @@
   void HandleCancelUssd(const Client& client, const std::string& command);
   void HandleEmergencyMode(const Client& client, const std::string& command);
   void HandleRemoteCall(const Client& client, const std::string& command);
+  int FindFreeCallIndex() const {
+    for (int index = 1; true; index++) {
+      if (active_calls_.find(index) == active_calls_.end()) {
+        return index;
+      }
+    }
+  }
 
  private:
   void InitializeServiceState();
@@ -141,7 +148,6 @@
   // private data members
   SimService* sim_service_;
   NetworkService* network_service_;
-  int32_t last_active_call_index_;
   std::map<int, CallStatus> active_calls_;
   bool in_emergency_mode_;
   bool mute_on_;