NetworkJob.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include <AK/Debug.h>
  8. #include <LibCore/NetworkJob.h>
  9. #include <LibCore/NetworkResponse.h>
  10. namespace Core {
  11. NetworkJob::NetworkJob(Stream& output_stream)
  12. : m_output_stream(output_stream)
  13. {
  14. }
  15. void NetworkJob::start(Core::Socket&)
  16. {
  17. }
  18. void NetworkJob::shutdown(ShutdownMode)
  19. {
  20. }
  21. void NetworkJob::did_finish(NonnullRefPtr<NetworkResponse>&& response)
  22. {
  23. if (is_cancelled())
  24. return;
  25. // NOTE: We protect ourselves here, since the on_finish callback may otherwise
  26. // trigger destruction of this job somehow.
  27. NonnullRefPtr<NetworkJob> protector(*this);
  28. m_response = move(response);
  29. dbgln_if(NETWORKJOB_DEBUG, "{} job did_finish", *this);
  30. VERIFY(on_finish);
  31. on_finish(true);
  32. shutdown(ShutdownMode::DetachFromSocket);
  33. }
  34. void NetworkJob::did_fail(Error error)
  35. {
  36. if (is_cancelled())
  37. return;
  38. // NOTE: We protect ourselves here, since the on_finish callback may otherwise
  39. // trigger destruction of this job somehow.
  40. NonnullRefPtr<NetworkJob> protector(*this);
  41. m_error = error;
  42. dbgln_if(NETWORKJOB_DEBUG, "{}{{{:p}}} job did_fail! error: {} ({})", class_name(), this, (unsigned)error, to_string(error));
  43. VERIFY(on_finish);
  44. on_finish(false);
  45. shutdown(ShutdownMode::DetachFromSocket);
  46. }
  47. void NetworkJob::did_progress(Optional<u32> total_size, u32 downloaded)
  48. {
  49. if (is_cancelled())
  50. return;
  51. // NOTE: We protect ourselves here, since the callback may otherwise
  52. // trigger destruction of this job somehow.
  53. NonnullRefPtr<NetworkJob> protector(*this);
  54. if (on_progress)
  55. on_progress(total_size, downloaded);
  56. }
  57. char const* to_string(NetworkJob::Error error)
  58. {
  59. switch (error) {
  60. case NetworkJob::Error::ProtocolFailed:
  61. return "ProtocolFailed";
  62. case NetworkJob::Error::ConnectionFailed:
  63. return "ConnectionFailed";
  64. case NetworkJob::Error::TransmissionFailed:
  65. return "TransmissionFailed";
  66. case NetworkJob::Error::Cancelled:
  67. return "Cancelled";
  68. default:
  69. return "(Unknown error)";
  70. }
  71. }
  72. }