Chromium Code Reviews| Index: chrome/browser/media/webrtc_rtp_dump_handler.h |
| diff --git a/chrome/browser/media/webrtc_rtp_dump_handler.h b/chrome/browser/media/webrtc_rtp_dump_handler.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0b5ba7e048e75201071be68c96c2ae149b4e34bb |
| --- /dev/null |
| +++ b/chrome/browser/media/webrtc_rtp_dump_handler.h |
| @@ -0,0 +1,85 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_MEDIA_WEBRTC_RTP_DUMP_HANDLER_H_ |
| +#define CHROME_BROWSER_MEDIA_WEBRTC_RTP_DUMP_HANDLER_H_ |
| + |
| +#include "base/basictypes.h" |
| +#include "base/callback.h" |
| +#include "base/files/file_path.h" |
| + |
| +namespace base { |
| +class FilePath; |
| +} // namespace base |
| + |
| +class WebRtcRtpDumpWriter; |
| + |
| +// WebRtcRtpDumpHandler handles operations regarding the WebRTC RTP dump: |
| +// - Starts or stops the RTP dumping on behalf of the client. |
| +// - Stops the RTP dumping when the max dump file size is reached. |
| +// - Writes the dump file. |
| +// - Provides the dump file to the client code to be uploaded when |
| +// ReleaseRtpDump is called. |
| +// All public methods should be called on the IO thread. |
| +class WebRtcRtpDumpHandler { |
| + public: |
| + struct PacketType { |
| + bool incoming; |
| + bool outgoing; |
| + }; |
| + |
| + typedef base::Callback<void(bool success, const base::FilePath& dump_file)> |
| + ReleaseDumpCallback; |
| + |
| + // The caller must make sure |dump_dir| exists. RTP dump files are saved under |
| + // |dump_dir| as "rtpdump_XXXXX.gz". |
|
Henrik Grunell
2014/05/07 09:38:19
Explain in the comment what XXXXX is. How is filen
|
| + explicit WebRtcRtpDumpHandler(const base::FilePath& dump_dir); |
| + virtual ~WebRtcRtpDumpHandler(); |
| + |
| + // Incoming/outgoing dumping can be started separately. Returns true if called |
| + // in a valid state, i.e. dumping has not been started for any type specified |
| + // in |type|. |
| + bool StartDump(const PacketType& type); |
| + |
| + // Incoming/outgoing dumping can be stopped separately. Returns true if called |
| + // in a valid state, i.e. dumping has been started and not stopped for any |
| + // type specified in |type|. |
| + bool StopDump(const PacketType& type); |
| + |
| + // It should only be called when both incoming and outgoing dumping has been |
| + // stopped. Returns true if it's called in a valid state and the callback will |
| + // be called when it finishes writing the dump file. |
| + // If the method returns true, the caller will own the dump file and should |
| + // clean it up from the disk when suitable. Otherwise, the dump will be |
| + // deleted before WebRtcRtpDumpHandler goes away. |
| + bool ReleaseDump(const ReleaseDumpCallback& callback); |
| + |
| + virtual void OnRtpPacket(const uint8* packet, size_t length, bool incoming); |
|
Henrik Grunell
2014/05/07 09:38:19
Add comment.
|
| + |
| + private: |
| + // State transitions: |
| + // initial --> STATE_NONE |
| + // StartDump --> STATE_STARTED |
| + // StopDump --> STATE_STOPPED |
| + // ReleaseDump --> STATE_NONE |
| + enum State { |
| + STATE_NONE, |
| + STATE_STARTED, |
| + STATE_STOPPED |
| + }; |
| + |
| + void OnMaxDumpSizeReached(); |
|
Henrik Grunell
2014/05/07 09:38:19
My guess before looking at the implementation is t
|
| + void OnWriterFlushDone(const ReleaseDumpCallback& callback, |
| + bool succeeded); |
| + |
| + base::FilePath dump_dir_; |
|
Henrik Grunell
2014/05/07 09:38:19
Comment all member variables.
|
| + base::FilePath dump_path_; |
| + State incoming_state_; |
| + State outgoing_state_; |
| + scoped_ptr<WebRtcRtpDumpWriter> dump_writer_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(WebRtcRtpDumpHandler); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_MEDIA_WEBRTC_RTP_DUMP_HANDLER_H_ |