aboutsummaryrefslogtreecommitdiff
path: root/daemon/ExternalSource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/ExternalSource.cpp')
-rw-r--r--daemon/ExternalSource.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/daemon/ExternalSource.cpp b/daemon/ExternalSource.cpp
new file mode 100644
index 0000000..fe5824b
--- /dev/null
+++ b/daemon/ExternalSource.cpp
@@ -0,0 +1,56 @@
+/**
+ * Copyright (C) ARM Limited 2010-2014. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include "ExternalSource.h"
+
+#include <sys/prctl.h>
+
+#include "Logging.h"
+#include "OlySocket.h"
+#include "SessionData.h"
+
+ExternalSource::ExternalSource(sem_t *senderSem) : mBuffer(0, FRAME_EXTERNAL, 1024, senderSem), mSock("/tmp/gator") {
+}
+
+ExternalSource::~ExternalSource() {
+}
+
+bool ExternalSource::prepare() {
+ return true;
+}
+
+void ExternalSource::run() {
+ prctl(PR_SET_NAME, (unsigned long)&"gatord-uds", 0, 0, 0);
+
+ while (gSessionData->mSessionIsActive) {
+ // Will be aborted when the socket is closed at the end of the capture
+ int length = mSock.receive(mBuffer.getWritePos(), mBuffer.contiguousSpaceAvailable());
+ if (length <= 0) {
+ break;
+ }
+
+ mBuffer.advanceWrite(length);
+ mBuffer.check(0);
+ }
+
+ mBuffer.setDone();
+}
+
+void ExternalSource::interrupt() {
+ // Do nothing
+}
+
+bool ExternalSource::isDone() {
+ return mBuffer.isDone();
+}
+
+void ExternalSource::write(Sender *sender) {
+ if (!mBuffer.isDone()) {
+ mBuffer.write(sender);
+ }
+}