1*35238bceSAndroid Build Coastguard Worker #ifndef _XSPROTOCOL_HPP 2*35238bceSAndroid Build Coastguard Worker #define _XSPROTOCOL_HPP 3*35238bceSAndroid Build Coastguard Worker /*------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker * drawElements Quality Program Execution Server 5*35238bceSAndroid Build Coastguard Worker * --------------------------------------------- 6*35238bceSAndroid Build Coastguard Worker * 7*35238bceSAndroid Build Coastguard Worker * Copyright 2014 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker * 9*35238bceSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker * You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker * 13*35238bceSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker * 15*35238bceSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker * limitations under the License. 20*35238bceSAndroid Build Coastguard Worker * 21*35238bceSAndroid Build Coastguard Worker *//*! 22*35238bceSAndroid Build Coastguard Worker * \file 23*35238bceSAndroid Build Coastguard Worker * \brief Execution Server Protocol. 24*35238bceSAndroid Build Coastguard Worker *//*--------------------------------------------------------------------*/ 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker #include "xsDefs.hpp" 27*35238bceSAndroid Build Coastguard Worker #include "deMemory.h" 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard Worker #include <string> 30*35238bceSAndroid Build Coastguard Worker #include <vector> 31*35238bceSAndroid Build Coastguard Worker 32*35238bceSAndroid Build Coastguard Worker namespace xs 33*35238bceSAndroid Build Coastguard Worker { 34*35238bceSAndroid Build Coastguard Worker 35*35238bceSAndroid Build Coastguard Worker enum 36*35238bceSAndroid Build Coastguard Worker { 37*35238bceSAndroid Build Coastguard Worker PROTOCOL_VERSION = 18, 38*35238bceSAndroid Build Coastguard Worker MESSAGE_HEADER_SIZE = 8, 39*35238bceSAndroid Build Coastguard Worker 40*35238bceSAndroid Build Coastguard Worker // Times are in milliseconds. 41*35238bceSAndroid Build Coastguard Worker KEEPALIVE_SEND_INTERVAL = 5000, 42*35238bceSAndroid Build Coastguard Worker KEEPALIVE_TIMEOUT = 30000, 43*35238bceSAndroid Build Coastguard Worker }; 44*35238bceSAndroid Build Coastguard Worker 45*35238bceSAndroid Build Coastguard Worker enum MessageType 46*35238bceSAndroid Build Coastguard Worker { 47*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_NONE = 0, //!< Not valid. 48*35238bceSAndroid Build Coastguard Worker 49*35238bceSAndroid Build Coastguard Worker // Commands (from Client to ExecServer). 50*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_HELLO = 100, //!< First message from client, specifies the protocol version 51*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_TEST = 101, //!< Debug only 52*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_EXECUTE_BINARY = 111, //!< Request execution of a test package binary. 53*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_STOP_EXECUTION = 112, //!< Request cancellation of the currently executing binary. 54*35238bceSAndroid Build Coastguard Worker 55*35238bceSAndroid Build Coastguard Worker // Responses (from ExecServer to Client) 56*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_PROCESS_STARTED = 200, //!< Requested process has started. 57*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_PROCESS_LAUNCH_FAILED = 201, //!< Requested process failed to launch. 58*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_PROCESS_FINISHED = 202, //!< Requested process has finished (for any reason). 59*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_PROCESS_LOG_DATA = 203, //!< Unprocessed log data from TestResults.qpa. 60*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_INFO = 204, //!< Generic info message from ExecServer (for debugging purposes). 61*35238bceSAndroid Build Coastguard Worker 62*35238bceSAndroid Build Coastguard Worker MESSAGETYPE_KEEPALIVE = 102 //!< Keep-alive packet 63*35238bceSAndroid Build Coastguard Worker }; 64*35238bceSAndroid Build Coastguard Worker 65*35238bceSAndroid Build Coastguard Worker class MessageWriter; 66*35238bceSAndroid Build Coastguard Worker 67*35238bceSAndroid Build Coastguard Worker class Message 68*35238bceSAndroid Build Coastguard Worker { 69*35238bceSAndroid Build Coastguard Worker public: 70*35238bceSAndroid Build Coastguard Worker MessageType type; 71*35238bceSAndroid Build Coastguard Worker Message(MessageType type_)72*35238bceSAndroid Build Coastguard Worker Message(MessageType type_) : type(type_) 73*35238bceSAndroid Build Coastguard Worker { 74*35238bceSAndroid Build Coastguard Worker } ~Message(void)75*35238bceSAndroid Build Coastguard Worker virtual ~Message(void) 76*35238bceSAndroid Build Coastguard Worker { 77*35238bceSAndroid Build Coastguard Worker } 78*35238bceSAndroid Build Coastguard Worker 79*35238bceSAndroid Build Coastguard Worker virtual void write(std::vector<uint8_t> &buf) const = DE_NULL; 80*35238bceSAndroid Build Coastguard Worker 81*35238bceSAndroid Build Coastguard Worker static void parseHeader(const uint8_t *data, size_t dataSize, MessageType &type, size_t &messageSize); 82*35238bceSAndroid Build Coastguard Worker static void writeHeader(MessageType type, size_t messageSize, uint8_t *dst, size_t bufSize); 83*35238bceSAndroid Build Coastguard Worker 84*35238bceSAndroid Build Coastguard Worker protected: 85*35238bceSAndroid Build Coastguard Worker void writeNoData(std::vector<uint8_t> &buf) const; 86*35238bceSAndroid Build Coastguard Worker 87*35238bceSAndroid Build Coastguard Worker Message(const Message &other); 88*35238bceSAndroid Build Coastguard Worker Message &operator=(const Message &other); 89*35238bceSAndroid Build Coastguard Worker }; 90*35238bceSAndroid Build Coastguard Worker 91*35238bceSAndroid Build Coastguard Worker // Simple messages without any data. 92*35238bceSAndroid Build Coastguard Worker template <int MsgType> 93*35238bceSAndroid Build Coastguard Worker class SimpleMessage : public Message 94*35238bceSAndroid Build Coastguard Worker { 95*35238bceSAndroid Build Coastguard Worker public: SimpleMessage(const uint8_t * data,size_t dataSize)96*35238bceSAndroid Build Coastguard Worker SimpleMessage(const uint8_t *data, size_t dataSize) : Message((MessageType)MsgType) 97*35238bceSAndroid Build Coastguard Worker { 98*35238bceSAndroid Build Coastguard Worker DE_UNREF(data); 99*35238bceSAndroid Build Coastguard Worker XS_CHECK_MSG(dataSize == 0, "No payload expected"); 100*35238bceSAndroid Build Coastguard Worker } SimpleMessage(void)101*35238bceSAndroid Build Coastguard Worker SimpleMessage(void) : Message((MessageType)MsgType) 102*35238bceSAndroid Build Coastguard Worker { 103*35238bceSAndroid Build Coastguard Worker } ~SimpleMessage(void)104*35238bceSAndroid Build Coastguard Worker ~SimpleMessage(void) 105*35238bceSAndroid Build Coastguard Worker { 106*35238bceSAndroid Build Coastguard Worker } 107*35238bceSAndroid Build Coastguard Worker write(std::vector<uint8_t> & buf) const108*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const 109*35238bceSAndroid Build Coastguard Worker { 110*35238bceSAndroid Build Coastguard Worker writeNoData(buf); 111*35238bceSAndroid Build Coastguard Worker } 112*35238bceSAndroid Build Coastguard Worker }; 113*35238bceSAndroid Build Coastguard Worker 114*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_STOP_EXECUTION> StopExecutionMessage; 115*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_PROCESS_STARTED> ProcessStartedMessage; 116*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_KEEPALIVE> KeepAliveMessage; 117*35238bceSAndroid Build Coastguard Worker 118*35238bceSAndroid Build Coastguard Worker class HelloMessage : public Message 119*35238bceSAndroid Build Coastguard Worker { 120*35238bceSAndroid Build Coastguard Worker public: 121*35238bceSAndroid Build Coastguard Worker int version; 122*35238bceSAndroid Build Coastguard Worker 123*35238bceSAndroid Build Coastguard Worker HelloMessage(const uint8_t *data, size_t dataSize); HelloMessage(void)124*35238bceSAndroid Build Coastguard Worker HelloMessage(void) : Message(MESSAGETYPE_HELLO), version(PROTOCOL_VERSION) 125*35238bceSAndroid Build Coastguard Worker { 126*35238bceSAndroid Build Coastguard Worker } ~HelloMessage(void)127*35238bceSAndroid Build Coastguard Worker ~HelloMessage(void) 128*35238bceSAndroid Build Coastguard Worker { 129*35238bceSAndroid Build Coastguard Worker } 130*35238bceSAndroid Build Coastguard Worker 131*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 132*35238bceSAndroid Build Coastguard Worker }; 133*35238bceSAndroid Build Coastguard Worker 134*35238bceSAndroid Build Coastguard Worker class ExecuteBinaryMessage : public Message 135*35238bceSAndroid Build Coastguard Worker { 136*35238bceSAndroid Build Coastguard Worker public: 137*35238bceSAndroid Build Coastguard Worker std::string name; 138*35238bceSAndroid Build Coastguard Worker std::string params; 139*35238bceSAndroid Build Coastguard Worker std::string workDir; 140*35238bceSAndroid Build Coastguard Worker std::string caseList; 141*35238bceSAndroid Build Coastguard Worker 142*35238bceSAndroid Build Coastguard Worker ExecuteBinaryMessage(const uint8_t *data, size_t dataSize); ExecuteBinaryMessage(void)143*35238bceSAndroid Build Coastguard Worker ExecuteBinaryMessage(void) : Message(MESSAGETYPE_EXECUTE_BINARY) 144*35238bceSAndroid Build Coastguard Worker { 145*35238bceSAndroid Build Coastguard Worker } ~ExecuteBinaryMessage(void)146*35238bceSAndroid Build Coastguard Worker ~ExecuteBinaryMessage(void) 147*35238bceSAndroid Build Coastguard Worker { 148*35238bceSAndroid Build Coastguard Worker } 149*35238bceSAndroid Build Coastguard Worker 150*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 151*35238bceSAndroid Build Coastguard Worker }; 152*35238bceSAndroid Build Coastguard Worker 153*35238bceSAndroid Build Coastguard Worker class ProcessLogDataMessage : public Message 154*35238bceSAndroid Build Coastguard Worker { 155*35238bceSAndroid Build Coastguard Worker public: 156*35238bceSAndroid Build Coastguard Worker std::string logData; 157*35238bceSAndroid Build Coastguard Worker 158*35238bceSAndroid Build Coastguard Worker ProcessLogDataMessage(const uint8_t *data, size_t dataSize); ~ProcessLogDataMessage(void)159*35238bceSAndroid Build Coastguard Worker ~ProcessLogDataMessage(void) 160*35238bceSAndroid Build Coastguard Worker { 161*35238bceSAndroid Build Coastguard Worker } 162*35238bceSAndroid Build Coastguard Worker 163*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 164*35238bceSAndroid Build Coastguard Worker }; 165*35238bceSAndroid Build Coastguard Worker 166*35238bceSAndroid Build Coastguard Worker class ProcessLaunchFailedMessage : public Message 167*35238bceSAndroid Build Coastguard Worker { 168*35238bceSAndroid Build Coastguard Worker public: 169*35238bceSAndroid Build Coastguard Worker std::string reason; 170*35238bceSAndroid Build Coastguard Worker 171*35238bceSAndroid Build Coastguard Worker ProcessLaunchFailedMessage(const uint8_t *data, size_t dataSize); ProcessLaunchFailedMessage(const char * reason_)172*35238bceSAndroid Build Coastguard Worker ProcessLaunchFailedMessage(const char *reason_) : Message(MESSAGETYPE_PROCESS_LAUNCH_FAILED), reason(reason_) 173*35238bceSAndroid Build Coastguard Worker { 174*35238bceSAndroid Build Coastguard Worker } ~ProcessLaunchFailedMessage(void)175*35238bceSAndroid Build Coastguard Worker ~ProcessLaunchFailedMessage(void) 176*35238bceSAndroid Build Coastguard Worker { 177*35238bceSAndroid Build Coastguard Worker } 178*35238bceSAndroid Build Coastguard Worker 179*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 180*35238bceSAndroid Build Coastguard Worker }; 181*35238bceSAndroid Build Coastguard Worker 182*35238bceSAndroid Build Coastguard Worker class ProcessFinishedMessage : public Message 183*35238bceSAndroid Build Coastguard Worker { 184*35238bceSAndroid Build Coastguard Worker public: 185*35238bceSAndroid Build Coastguard Worker int exitCode; 186*35238bceSAndroid Build Coastguard Worker 187*35238bceSAndroid Build Coastguard Worker ProcessFinishedMessage(const uint8_t *data, size_t dataSize); ProcessFinishedMessage(int exitCode_)188*35238bceSAndroid Build Coastguard Worker ProcessFinishedMessage(int exitCode_) : Message(MESSAGETYPE_PROCESS_FINISHED), exitCode(exitCode_) 189*35238bceSAndroid Build Coastguard Worker { 190*35238bceSAndroid Build Coastguard Worker } ~ProcessFinishedMessage(void)191*35238bceSAndroid Build Coastguard Worker ~ProcessFinishedMessage(void) 192*35238bceSAndroid Build Coastguard Worker { 193*35238bceSAndroid Build Coastguard Worker } 194*35238bceSAndroid Build Coastguard Worker 195*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 196*35238bceSAndroid Build Coastguard Worker }; 197*35238bceSAndroid Build Coastguard Worker 198*35238bceSAndroid Build Coastguard Worker class InfoMessage : public Message 199*35238bceSAndroid Build Coastguard Worker { 200*35238bceSAndroid Build Coastguard Worker public: 201*35238bceSAndroid Build Coastguard Worker std::string info; 202*35238bceSAndroid Build Coastguard Worker 203*35238bceSAndroid Build Coastguard Worker InfoMessage(const uint8_t *data, size_t dataSize); ~InfoMessage(void)204*35238bceSAndroid Build Coastguard Worker ~InfoMessage(void) 205*35238bceSAndroid Build Coastguard Worker { 206*35238bceSAndroid Build Coastguard Worker } 207*35238bceSAndroid Build Coastguard Worker 208*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 209*35238bceSAndroid Build Coastguard Worker }; 210*35238bceSAndroid Build Coastguard Worker 211*35238bceSAndroid Build Coastguard Worker // For debug purposes only. 212*35238bceSAndroid Build Coastguard Worker class TestMessage : public Message 213*35238bceSAndroid Build Coastguard Worker { 214*35238bceSAndroid Build Coastguard Worker public: 215*35238bceSAndroid Build Coastguard Worker std::string test; 216*35238bceSAndroid Build Coastguard Worker 217*35238bceSAndroid Build Coastguard Worker TestMessage(const uint8_t *data, size_t dataSize); ~TestMessage(void)218*35238bceSAndroid Build Coastguard Worker ~TestMessage(void) 219*35238bceSAndroid Build Coastguard Worker { 220*35238bceSAndroid Build Coastguard Worker } 221*35238bceSAndroid Build Coastguard Worker 222*35238bceSAndroid Build Coastguard Worker void write(std::vector<uint8_t> &buf) const; 223*35238bceSAndroid Build Coastguard Worker }; 224*35238bceSAndroid Build Coastguard Worker 225*35238bceSAndroid Build Coastguard Worker } // namespace xs 226*35238bceSAndroid Build Coastguard Worker 227*35238bceSAndroid Build Coastguard Worker #endif // _XSPROTOCOL_HPP 228