IDeliveryCacheFileService.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using LibHac;
  2. using LibHac.Bcat;
  3. using Ryujinx.Common;
  4. namespace Ryujinx.HLE.HOS.Services.Bcat.ServiceCreator
  5. {
  6. class IDeliveryCacheFileService : DisposableIpcService
  7. {
  8. private LibHac.Bcat.Detail.Ipc.IDeliveryCacheFileService _base;
  9. public IDeliveryCacheFileService(LibHac.Bcat.Detail.Ipc.IDeliveryCacheFileService baseService)
  10. {
  11. _base = baseService;
  12. }
  13. [CommandHipc(0)]
  14. // Open(nn::bcat::DirectoryName, nn::bcat::FileName)
  15. public ResultCode Open(ServiceCtx context)
  16. {
  17. DirectoryName directoryName = context.RequestData.ReadStruct<DirectoryName>();
  18. FileName fileName = context.RequestData.ReadStruct<FileName>();
  19. Result result = _base.Open(ref directoryName, ref fileName);
  20. return (ResultCode)result.Value;
  21. }
  22. [CommandHipc(1)]
  23. // Read(u64) -> (u64, buffer<bytes, 6>)
  24. public ResultCode Read(ServiceCtx context)
  25. {
  26. ulong position = context.Request.ReceiveBuff[0].Position;
  27. ulong size = context.Request.ReceiveBuff[0].Size;
  28. long offset = context.RequestData.ReadInt64();
  29. byte[] data = new byte[size];
  30. Result result = _base.Read(out long bytesRead, offset, data);
  31. context.Memory.Write(position, data);
  32. context.ResponseData.Write(bytesRead);
  33. return (ResultCode)result.Value;
  34. }
  35. [CommandHipc(2)]
  36. // GetSize() -> u64
  37. public ResultCode GetSize(ServiceCtx context)
  38. {
  39. Result result = _base.GetSize(out long size);
  40. context.ResponseData.Write(size);
  41. return (ResultCode)result.Value;
  42. }
  43. [CommandHipc(3)]
  44. // GetDigest() -> nn::bcat::Digest
  45. public ResultCode GetDigest(ServiceCtx context)
  46. {
  47. Result result = _base.GetDigest(out Digest digest);
  48. context.ResponseData.WriteStruct(digest);
  49. return (ResultCode)result.Value;
  50. }
  51. protected override void Dispose(bool isDisposing)
  52. {
  53. if (isDisposing)
  54. {
  55. _base?.Dispose();
  56. }
  57. }
  58. }
  59. }