| 1236 | } |
| 1237 | |
| 1238 | error_code sceNpBasicSendMessageGui(ppu_thread& ppu, |
| 1239 | vm::cptr<SceNpBasicMessageDetails> msg, |
| 1240 | sys_memory_container_t containerId) |
| 1241 | { |
| 1242 | sceNp.warning("sceNpBasicSendMessageGui(msg=*0x%x, containerId=%d)", msg, |
| 1243 | containerId); |
| 1244 | |
| 1245 | if (msg) |
| 1246 | { |
| 1247 | sceNp.notice("sceNpBasicSendMessageGui: msgId: %d, mainType: %d, subType: " |
| 1248 | "%d, msgFeatures: %d, count: %d, npids: *0x%x", |
| 1249 | msg->msgId, msg->mainType, msg->subType, msg->msgFeatures, |
| 1250 | msg->count, msg->npids); |
| 1251 | for (u32 i = 0; i < msg->count && msg->npids; i++) |
| 1252 | { |
| 1253 | sceNp.trace("sceNpBasicSendMessageGui: NpId[%d] = %s", i, |
| 1254 | static_cast<char*>(&msg->npids[i].handle.data[0])); |
| 1255 | } |
| 1256 | sceNp.notice("sceNpBasicSendMessageGui: subject: %s", msg->subject); |
| 1257 | sceNp.notice("sceNpBasicSendMessageGui: body: %s", msg->body); |
| 1258 | } |
| 1259 | |
| 1260 | auto& nph = g_fxo->get<named_thread<np::np_handler>>(); |
| 1261 | |
| 1262 | if (!nph.is_NP_init) |
| 1263 | { |
| 1264 | return SCE_NP_BASIC_ERROR_NOT_INITIALIZED; |
| 1265 | } |
| 1266 | |
| 1267 | if (!nph.basic_handler_registered) |
| 1268 | { |
| 1269 | return SCE_NP_BASIC_ERROR_NOT_REGISTERED; |
| 1270 | } |
| 1271 | |
| 1272 | if (!msg || msg->count > SCE_NP_BASIC_SEND_MESSAGE_MAX_RECIPIENTS || |
| 1273 | (msg->msgFeatures & ~SCE_NP_BASIC_MESSAGE_FEATURES_ALL_FEATURES) || |
| 1274 | msg->mainType > SCE_NP_BASIC_MESSAGE_MAIN_TYPE_URL_ATTACHMENT || |
| 1275 | msg->msgId != 0ull) |
| 1276 | { |
| 1277 | return SCE_NP_BASIC_ERROR_INVALID_ARGUMENT; |
| 1278 | } |
| 1279 | |
| 1280 | if (!(msg->msgFeatures & SCE_NP_BASIC_MESSAGE_FEATURES_BOOTABLE)) |
| 1281 | { |
| 1282 | switch (msg->mainType) |
| 1283 | { |
| 1284 | case SCE_NP_BASIC_MESSAGE_MAIN_TYPE_DATA_ATTACHMENT: |
| 1285 | if (msg->subType != |
| 1286 | SCE_NP_BASIC_MESSAGE_DATA_ATTACHMENT_SUBTYPE_ACTION_USE) |
| 1287 | return SCE_NP_BASIC_ERROR_NOT_SUPPORTED; |
| 1288 | break; |
| 1289 | case SCE_NP_BASIC_MESSAGE_MAIN_TYPE_CUSTOM_DATA: |
| 1290 | if (msg->subType != SCE_NP_BASIC_MESSAGE_CUSTOM_DATA_SUBTYPE_ACTION_USE) |
| 1291 | return SCE_NP_BASIC_ERROR_NOT_SUPPORTED; |
| 1292 | break; |
| 1293 | case SCE_NP_BASIC_MESSAGE_MAIN_TYPE_URL_ATTACHMENT: |
| 1294 | if (msg->subType != |
| 1295 | SCE_NP_BASIC_MESSAGE_URL_ATTACHMENT_SUBTYPE_ACTION_USE) |
no test coverage detected