Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8749d51 authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

logd: add EXIT command

Debugging aid. Allows us to run:

$ cat -n '<STUFF>\0EXIT\0' | nc -U /dev/socket/logd

and the pipeline will exit once done. Without the EXIT command
we will have to <CTRL+C> out to terminate the pipeline. This is
necessary since Android's netcat command does not support the -q
feature, and having the EXIT command is faster and cleaner anyways.

Test: manual as noted above.
Bug: 31456426
Change-Id: I65333358188db85e2eb1bb6a14deed1565826ac4
parent 3bde05d9
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ CommandListener::CommandListener(LogBuffer *buf, LogReader * /*reader*/,
    registerCmd(new SetPruneListCmd(buf));
    registerCmd(new GetPruneListCmd(buf));
    registerCmd(new ReinitCmd());
    registerCmd(new ExitCmd(this));
}

CommandListener::ShutdownCmd::ShutdownCmd(LogReader *reader,
@@ -297,6 +298,21 @@ int CommandListener::ReinitCmd::runCommand(SocketClient *cli,
    return 0;
}

CommandListener::ExitCmd::ExitCmd(CommandListener *parent) :
        LogCommand("EXIT"),
        mParent(*parent) {
}

int CommandListener::ExitCmd::runCommand(SocketClient * cli,
                                         int /*argc*/, char ** /*argv*/) {
    setname();

    cli->sendMsg("success");
    release(cli);

    return 0;
}

int CommandListener::getLogSocket() {
    static const char socketName[] = "logd";
    int sock = android_get_control_socket(socketName);
+30 −14
Original line number Diff line number Diff line
@@ -52,22 +52,38 @@ private:
        explicit name##Cmd(LogBuffer *buf);                      \
        virtual ~name##Cmd() {}                                  \
        int runCommand(SocketClient *c, int argc, char ** argv); \
    };
    }

    LogBufferCmd(Clear)
    LogBufferCmd(GetBufSize)
    LogBufferCmd(SetBufSize)
    LogBufferCmd(GetBufSizeUsed)
    LogBufferCmd(GetStatistics)
    LogBufferCmd(GetPruneList)
    LogBufferCmd(SetPruneList)
    LogBufferCmd(Clear);
    LogBufferCmd(GetBufSize);
    LogBufferCmd(SetBufSize);
    LogBufferCmd(GetBufSizeUsed);
    LogBufferCmd(GetStatistics);
    LogBufferCmd(GetPruneList);
    LogBufferCmd(SetPruneList);

    class ReinitCmd : public LogCommand {
    public:
        ReinitCmd();
        virtual ~ReinitCmd() {}
        int runCommand(SocketClient *c, int argc, char ** argv);
    };
#define LogCmd(name)                                             \
    class name##Cmd : public LogCommand {                        \
    public:                                                      \
        name##Cmd();                                             \
        virtual ~name##Cmd() {}                                  \
        int runCommand(SocketClient *c, int argc, char ** argv); \
    }

    LogCmd(Reinit);

#define LogParentCmd(name)                                       \
    class name##Cmd : public LogCommand {                        \
        CommandListener &mParent;                                \
    public:                                                      \
        name##Cmd();                                             \
        explicit name##Cmd(CommandListener *parent);             \
        virtual ~name##Cmd() {}                                  \
        int runCommand(SocketClient *c, int argc, char ** argv); \
        void release(SocketClient *c) { mParent.release(c); }    \
    }

    LogParentCmd(Exit);

};