Created
May 2, 2017 09:08
-
-
Save alinradut/789b71c4cd3e63dbca74ba6768345100 to your computer and use it in GitHub Desktop.
WebRTC patch for a callback logger for iOS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/BUILD.gn b/BUILD.gn | |
index 4e6816fd8..d54fef764 100644 | |
--- a/BUILD.gn | |
+++ b/BUILD.gn | |
@@ -12,7 +12,7 @@ group("default") { | |
testonly = true | |
deps = [ | |
"//webrtc", | |
- "//webrtc/examples", | |
+# "//webrtc/examples", | |
"//webrtc/tools", | |
] | |
if (rtc_include_tests) { | |
diff --git a/webrtc/base/logsinks.cc b/webrtc/base/logsinks.cc | |
index 5a6db45ca..9d7098ac2 100644 | |
--- a/webrtc/base/logsinks.cc | |
+++ b/webrtc/base/logsinks.cc | |
@@ -62,3 +62,20 @@ CallSessionFileRotatingLogSink::~CallSessionFileRotatingLogSink() { | |
} | |
} // namespace rtc | |
+ | |
+namespace rtc { | |
+ | |
+ CallbackLogSink::CallbackLogSink(CallbackLogSinkCallback callback) { | |
+ _callback = callback; | |
+ } | |
+ | |
+ CallbackLogSink::~CallbackLogSink() { | |
+ | |
+ } | |
+ | |
+ void CallbackLogSink::OnLogMessage(const std::string& message) { | |
+ if (_callback) { | |
+ _callback(message); | |
+ } | |
+ } | |
+} | |
\ No newline at end of file | |
diff --git a/webrtc/base/logsinks.h b/webrtc/base/logsinks.h | |
index e75120e3f..cfb77b6b0 100644 | |
--- a/webrtc/base/logsinks.h | |
+++ b/webrtc/base/logsinks.h | |
@@ -65,4 +65,18 @@ class CallSessionFileRotatingLogSink : public FileRotatingLogSink { | |
} // namespace rtc | |
+namespace rtc { | |
+ typedef void (*CallbackLogSinkCallback)(const std::string& message); | |
+ | |
+ class CallbackLogSink: public LogSink { | |
+ public: | |
+ CallbackLogSink(CallbackLogSinkCallback callback); | |
+ ~CallbackLogSink() override; | |
+ void OnLogMessage(const std::string& message) override; | |
+ private: | |
+ CallbackLogSinkCallback _callback; | |
+ RTC_DISALLOW_COPY_AND_ASSIGN(CallbackLogSink); | |
+ }; | |
+} | |
+ | |
#endif // WEBRTC_BASE_FILE_ROTATING_LOG_SINK_H_ | |
diff --git a/webrtc/sdk/BUILD.gn b/webrtc/sdk/BUILD.gn | |
index d8e745c83..479eecfd5 100644 | |
--- a/webrtc/sdk/BUILD.gn | |
+++ b/webrtc/sdk/BUILD.gn | |
@@ -88,6 +88,8 @@ if (is_ios || is_mac) { | |
sources += [ | |
"objc/Framework/Classes/RTCFileLogger.mm", | |
"objc/Framework/Headers/WebRTC/RTCFileLogger.h", | |
+ "objc/Framework/Classes/RTCCallbackLogger.mm", | |
+ "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h", | |
] | |
} | |
} | |
@@ -350,8 +352,8 @@ if (is_ios || is_mac) { | |
public_headers = common_objc_headers | |
if (!build_with_chromium) { | |
- sources += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h" ] | |
- public_headers += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h" ] | |
+ sources += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h", "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h" ] | |
+ public_headers += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h", "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h" ] | |
} | |
ldflags = [ | |
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCCallbackLogger.mm b/webrtc/sdk/objc/Framework/Classes/RTCCallbackLogger.mm | |
new file mode 100644 | |
index 000000000..26c7e2f9b | |
--- /dev/null | |
+++ b/webrtc/sdk/objc/Framework/Classes/RTCCallbackLogger.mm | |
@@ -0,0 +1,97 @@ | |
+/* | |
+ * Copyright 2015 The WebRTC project authors. All Rights Reserved. | |
+ * | |
+ * Use of this source code is governed by a BSD-style license | |
+ * that can be found in the LICENSE file in the root of the source | |
+ * tree. An additional intellectual property rights grant can be found | |
+ * in the file PATENTS. All contributing project authors may | |
+ * be found in the AUTHORS file in the root of the source tree. | |
+ */ | |
+ | |
+#import "WebRTC/RTCCallbackLogger.h" | |
+ | |
+#include <memory> | |
+ | |
+#include "webrtc/base/checks.h" | |
+#include "webrtc/base/logging.h" | |
+#include "webrtc/base/logsinks.h" | |
+ | |
+void RTCCallbackLoggerCallback(const std::string& message) { | |
+ NSString *string = [NSString stringWithUTF8String:message.c_str()]; | |
+ [[RTCCallbackLogger sharedInstance] onStringReceived: string]; | |
+} | |
+ | |
+@implementation RTCCallbackLogger { | |
+ BOOL _hasStarted; | |
+ std::unique_ptr<rtc::CallbackLogSink> _logSink; | |
+} | |
+ | |
+@synthesize delegate = _delegate; | |
+@synthesize severity = _severity; | |
+ | |
++ (instancetype)sharedInstance { | |
+ static dispatch_once_t onceToken; | |
+ static RTCCallbackLogger *instance; | |
+ dispatch_once(&onceToken, ^{ | |
+ instance = [[RTCCallbackLogger alloc] init]; | |
+ }); | |
+ return instance; | |
+} | |
+ | |
+- (id)init { | |
+ self = [super init]; | |
+ if (self) { | |
+ _severity = RTCFileLoggerSeverityInfo; | |
+ } | |
+ return self; | |
+} | |
+ | |
+- (void)dealloc { | |
+ [self stop]; | |
+} | |
+ | |
+- (void)start { | |
+ if (_hasStarted) { | |
+ return; | |
+ } | |
+ | |
+ rtc::CallbackLogSinkCallback callback = &RTCCallbackLoggerCallback; | |
+ _logSink.reset( | |
+ new rtc::CallbackLogSink(callback)); | |
+ | |
+ rtc::LogMessage::LogThreads(true); | |
+ rtc::LogMessage::LogTimestamps(false); | |
+ rtc::LogMessage::AddLogToStream(_logSink.get(), [self rtcSeverity]); | |
+ _hasStarted = YES; | |
+} | |
+ | |
+- (void)stop { | |
+ if (!_hasStarted) { | |
+ return; | |
+ } | |
+ RTC_DCHECK(_logSink); | |
+ rtc::LogMessage::RemoveLogToStream(_logSink.get()); | |
+ _hasStarted = NO; | |
+ _logSink.reset(); | |
+} | |
+ | |
+- (void)onStringReceived:(NSString *)string { | |
+ [_delegate callbackLogger:self didReceiveMessage:string]; | |
+} | |
+ | |
+#pragma mark - Private | |
+ | |
+- (rtc::LoggingSeverity)rtcSeverity { | |
+ switch (_severity) { | |
+ case RTCFileLoggerSeverityVerbose: | |
+ return rtc::LS_VERBOSE; | |
+ case RTCFileLoggerSeverityInfo: | |
+ return rtc::LS_INFO; | |
+ case RTCFileLoggerSeverityWarning: | |
+ return rtc::LS_WARNING; | |
+ case RTCFileLoggerSeverityError: | |
+ return rtc::LS_ERROR; | |
+ } | |
+} | |
+ | |
+@end | |
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCFileLogger.mm b/webrtc/sdk/objc/Framework/Classes/RTCFileLogger.mm | |
index c1fbd747c..5fed10ec6 100644 | |
--- a/webrtc/sdk/objc/Framework/Classes/RTCFileLogger.mm | |
+++ b/webrtc/sdk/objc/Framework/Classes/RTCFileLogger.mm | |
@@ -173,4 +173,4 @@ const char *kRTCFileLoggerRotatingLogPrefix = "rotating_log"; | |
} | |
} | |
-@end | |
+@end | |
\ No newline at end of file | |
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCallbackLogger.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCallbackLogger.h | |
new file mode 100644 | |
index 000000000..988342145 | |
--- /dev/null | |
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCallbackLogger.h | |
@@ -0,0 +1,47 @@ | |
+/* | |
+ * Copyright 2015 The WebRTC project authors. All Rights Reserved. | |
+ * | |
+ * Use of this source code is governed by a BSD-style license | |
+ * that can be found in the LICENSE file in the root of the source | |
+ * tree. An additional intellectual property rights grant can be found | |
+ * in the file PATENTS. All contributing project authors may | |
+ * be found in the AUTHORS file in the root of the source tree. | |
+ */ | |
+ | |
+#import <Foundation/Foundation.h> | |
+ | |
+#import <WebRTC/RTCMacros.h> | |
+#import <WebRTC/RTCFileLogger.h> | |
+ | |
+NS_ASSUME_NONNULL_BEGIN | |
+@class RTCCallbackLogger; | |
+ | |
+// This delegate will be called whenever there is a new log statement. | |
+RTC_EXPORT | |
+@protocol RTCCallbackLoggerDelegate | |
+- (void)callbackLogger:(RTCCallbackLogger *)callbackLogger didReceiveMessage:(NSString *)message; | |
+@end | |
+ | |
+// This class intercepts WebRTC logs and sends them to a delegate. | |
+// This class is not threadsafe. | |
+RTC_EXPORT | |
+@interface RTCCallbackLogger : NSObject | |
+ | |
++ (instancetype)sharedInstance; | |
+ | |
+- (void)onStringReceived:(NSString *)string; | |
+ | |
+// The severity level to capture. The default is kRTCFileLoggerSeverityInfo. | |
+@property(nonatomic, assign) RTCFileLoggerSeverity severity; | |
+@property(nonatomic, weak, nullable) id<RTCCallbackLoggerDelegate> delegate; | |
+ | |
+// Starts processing WebRTC logs and forwards them to the delegate. | |
+- (void)start; | |
+ | |
+// Stops processing WebRTC logs. This method is also called on dealloc. | |
+- (void)stop; | |
+ | |
+@end | |
+ | |
+NS_ASSUME_NONNULL_END | |
+ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment