gator: Version 5.18
[firefly-linux-kernel-4.4.55.git] / tools / gator / daemon / ExternalSource.cpp
1 /**
2  * Copyright (C) ARM Limited 2010-2014. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8
9 #include "ExternalSource.h"
10
11 #include <sys/prctl.h>
12
13 #include "Logging.h"
14 #include "OlySocket.h"
15 #include "SessionData.h"
16
17 ExternalSource::ExternalSource(sem_t *senderSem) : mBuffer(0, FRAME_EXTERNAL, 1024, senderSem), mSock("/tmp/gator") {
18 }
19
20 ExternalSource::~ExternalSource() {
21 }
22
23 bool ExternalSource::prepare() {
24         return true;
25 }
26
27 void ExternalSource::run() {
28         prctl(PR_SET_NAME, (unsigned long)&"gatord-uds", 0, 0, 0);
29
30         while (gSessionData->mSessionIsActive) {
31                 // Will be aborted when the socket is closed at the end of the capture
32                 int length = mSock.receive(mBuffer.getWritePos(), mBuffer.contiguousSpaceAvailable());
33                 if (length <= 0) {
34                         break;
35                 }
36
37                 mBuffer.advanceWrite(length);
38                 mBuffer.check(0);
39         }
40
41         mBuffer.setDone();
42 }
43
44 void ExternalSource::interrupt() {
45         // Do nothing
46 }
47
48 bool ExternalSource::isDone() {
49         return mBuffer.isDone();
50 }
51
52 void ExternalSource::write(Sender *sender) {
53         if (!mBuffer.isDone()) {
54                 mBuffer.write(sender);
55         }
56 }