NetworkJob.cpp 2.2 KB

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