[rialto] Enable rialto to receive messages longer than recv buffer

This cl allows rialto to receive messages longer then the receive
buffer of the connection manager. It achieves this by sending a
credit update to the peer when the receive buffer is empty.

Test: atest rialto_test
Bug: 292080257
Change-Id: Ia301d12b200c967e00796695748ff6cd9334b44d
diff --git a/rialto/src/communication.rs b/rialto/src/communication.rs
index 50722f2..1b94912 100644
--- a/rialto/src/communication.rs
+++ b/rialto/src/communication.rs
@@ -100,7 +100,16 @@
     }
 
     fn recv(&mut self, buffer: &mut [u8]) -> virtio_drivers::Result<usize> {
-        self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)
+        let bytes_read =
+            self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)?;
+
+        let buffer_available_bytes = self
+            .connection_manager
+            .recv_buffer_available_bytes(self.peer_addr, self.peer_addr.port)?;
+        if buffer_available_bytes == 0 && bytes_read > 0 {
+            self.connection_manager.update_credit(self.peer_addr, self.peer_addr.port)?;
+        }
+        Ok(bytes_read)
     }
 
     fn wait_for_send(&mut self, buffer: &[u8]) -> virtio_drivers::Result {
diff --git a/rialto/tests/test.rs b/rialto/tests/test.rs
index ee7ecb4..e13b7a1 100644
--- a/rialto/tests/test.rs
+++ b/rialto/tests/test.rs
@@ -57,9 +57,7 @@
 }
 
 fn check_processing_reverse_request(vm: &mut ServiceVm) -> Result<()> {
-    // TODO(b/292080257): Test with message longer than the receiver's buffer capacity
-    // 1024 bytes once the guest virtio-vsock driver fixes the credit update in recv().
-    let message = "abc".repeat(166);
+    let message = "abc".repeat(500);
     let request = Request::Reverse(message.as_bytes().to_vec());
 
     let response = vm.process_request(request)?;