Просмотр исходного кода

UDS: Return the correct error messages in SendTo when not connected to a network or trying to send to itself.

Subv 9 лет назад
Родитель
Сommit
61ce89a55a
1 измененных файлов с 13 добавлено и 6 удалено
  1. 13 6
      src/core/hle/service/nwm/nwm_uds.cpp

+ 13 - 6
src/core/hle/service/nwm/nwm_uds.cpp

@@ -404,15 +404,22 @@ static void SendTo(Interface* self) {
     const VAddr input_address = rp.PopStaticBuffer(&desc_size, false);
     const VAddr input_address = rp.PopStaticBuffer(&desc_size, false);
     ASSERT(desc_size == data_size);
     ASSERT(desc_size == data_size);
 
 
-    // TODO(Subv): Figure out the error if this is called while not connected to a network.
-    if (connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsClient) ||
-        connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
-        ASSERT_MSG(false, "Not connected to a network (unimplemented)");
+    IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
+
+    if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsClient) &&
+        connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
+        rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS,
+                           ErrorSummary::InvalidState, ErrorLevel::Status));
+        return;
     }
     }
 
 
-    // TODO(Subv): Do something with the flags.
+    if (dest_node_id == connection_status.network_node_id) {
+        rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS,
+                           ErrorSummary::WrongArgument, ErrorLevel::Status));
+        return;
+    }
 
 
-    IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
+    // TODO(Subv): Do something with the flags.
 
 
     constexpr size_t MaxSize = 0x5C6;
     constexpr size_t MaxSize = 0x5C6;
     if (data_size > MaxSize) {
     if (data_size > MaxSize) {