-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexttask.h
74 lines (58 loc) · 2.3 KB
/
exttask.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#ifndef __EXTTASK_H
#define __EXTTASK_H
#include "server.h"
// ExternalTask
//
// Basis for all task connections external from acnetd
//
class ExternalTask : public TaskInfo {
pid_t const pid_;
sockaddr_in saCmd, saData;
int contSocketErrors;
uint32_t totalSocketErrors;
mutable int64_t lastCommandTime, lastAliveCheckTime;
ExternalTask();
bool checkResult(ssize_t);
protected:
// Client command handlers
virtual void handleCancel(CancelCommand const *);
virtual void handleDisconnect();
virtual void handleDisconnectSingle();
virtual void handleReceiveRequests();
virtual void handleBlockRequests();
virtual void handleRenameTask(RenameTaskCommand const *);
virtual void handleRequestAck(RequestAckCommand const *);
virtual void handleSendReply(SendReplyCommand const *, size_t const);
virtual void handleIgnoreRequest(IgnoreRequestCommand const *);
virtual void handleSendRequest(SendRequestCommand const *, size_t const);
virtual void handleSendRequestWithTimeout(SendRequestWithTimeoutCommand const*, size_t const);
virtual void handleSend(SendCommand const *, size_t const);
virtual void handleTaskPid();
virtual void handleNodeStats();
virtual void handleKeepAlive();
virtual void handleUnknownCommand(CommandHeader const *, size_t len);
void commandReceived() const { lastCommandTime = now(); }
bool sendErrorToClient(status_t);
bool sendAckToClient(void const*, size_t);
bool sendMessageToClient(AcnetClientMessage*);
public:
ExternalTask(TaskPool&, taskhandle_t, taskid_t, pid_t, uint16_t, uint16_t);
virtual ~ExternalTask() {}
bool stillAlive(int = 0) const;
bool isPromiscuous() const { return false; }
pid_t pid() const { return pid_; }
uint16_t commandPort() const { return ntohs(saCmd.sin_port); }
uint16_t dataPort() const { return ntohs(saData.sin_port); }
void handleClientCommand(CommandHeader const* const, size_t const);
bool sendDataToClient(AcnetHeader const*);
bool equals(TaskInfo const*) const;
bool needsToBeThrottled() const { return true; }
char const* name() const { return "ExternalTask"; }
size_t totalProp() const;
char const* propName(size_t) const;
std::string propVal(size_t) const;
};
// Local Variables:
// mode:c++
// End:
#endif