IDeliveryCacheFileService.cs 2.1 KB

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