Beamlib  3.0.1
This is the Beam C++ class library.
Boap.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Boap.h Boap RPC protocol
3  * T.Barnaby, BEAM Ltd, 8/5/03
4  * Copyright (c) 2022 All Right Reserved, Beam Ltd, https://www.beam.ltd.uk
5  * For license see LICENSE.txt at the root of the beamlib source tree.
6  *******************************************************************************
7  */
8 #ifndef Boap_HH
9 #define Boap_HH
10 
11 #include <stdint.h>
12 #include <BTypes.h>
13 #include <BPoll.h>
14 #include <BSocket.h>
15 #include <BThread.h>
16 #include <BError.h>
17 #include <BEvent1.h>
18 #include <BMutex.h>
19 #include <BTimeStamp.h>
20 #include <BBuffer.h>
21 
22 // Main BOAP Types
23 const BUInt32 BoapMagic = 0x424F4100;
27 
34 };
35 
37 class BoapPacket : public BBufferStore {
38 public:
39  BoapPacket();
40  ~BoapPacket();
41 
42  BUInt32 getCmd();
43 
47  void updateHead();
48 };
49 
50 /*******************************************************************************
51  * Main Client communications classes
52  *******************************************************************************
53  */
54 
56 class BoapClientObject : public BSocket {
57 public:
58  BoapClientObject(BString name = "");
59  virtual ~BoapClientObject();
60 
65 
68  void setMaxLength(BUInt32 maxLength);
69  void setTimeout(int timeout);
70 
71 
72 protected:
78  virtual BError handleReconnect(BError err);
79 
89  int otimeout;
90  int oreconnect;
91 };
92 
93 
95 class BoapSignalObject : public BSocket {
96 public:
98 
99 protected:
100  BError performSend(BoapPacket& tx); // Performs a send to the named service
103 };
104 
105 
106 /*******************************************************************************
107  * Main Server communications class
108  *******************************************************************************
109  */
110 class BoapServiceObject;
111 
114 public:
115  BoapServiceEntry(BoapService service = 0, BoapServiceObject* object = 0){
116  oservice = service;
117  oobject = object;
118  }
121 };
122 
123 class BoapServer;
124 
127 public:
128  BoapServerConnection(BoapServer& boapServer, int fd);
129  virtual ~BoapServerConnection();
130 
131  virtual BError init();
132  virtual BError process();
133  virtual BSocket& getSocket();
134  virtual void setMaxLength(BUInt32 maxLength);
135  virtual BError getHead(BoapPacketHead& head);
136 
137  virtual BError validate();
138 private:
139  void* function();
140 
141  BoapServer& oboapServer;
142  BSocket osocket;
143  BoapPacket orx;
144  BoapPacket otx;
145  BUInt32 omaxLength;
146 };
147 
148 namespace Boapns {
149 class Boapns;
150 }
151 
153 class BoapServer : public BThread {
154 public:
155  enum { NOTHREADS=0, THREADED=1 };
156 
157  BoapServer();
158  virtual ~BoapServer();
159  virtual BError init(BString boapNsHost = "", int port = 0, int threaded = 0, int isBoapns = 0);
160  virtual BError run(int inThread = 0);
161  virtual BError process(BoapServerConnection* conn, BoapPacket& rx, BoapPacket& tx);
162  virtual BError processEvent(BoapPacket& rx);
163 
164  // Support routines
165  virtual BError addObject(BoapServiceObject* object);
166  virtual BError sendEvent(BoapPacket& tx);
167  virtual BError processEvent(int fd);
168  virtual void clientGone(BoapServerConnection* client);
169  BSocket& getSocket();
172  int getConnectionsNumber();
173  void closeConnections();
174 
175  // Override functions
177 
178 protected:
179  void* function();
180 
193 
194 public:
196 };
197 
198 /*******************************************************************************
199  * Base for all Server Objects
200  *******************************************************************************
201  */
202 class BoapServiceObject;
203 
205 
208 public:
209  BoapFuncEntry(int cmd, BoapFunc func);
212 };
213 
216 public:
217  BoapServiceObject(BoapServer& server, BString name = "");
218  virtual ~BoapServiceObject();
219 
221 
222  BError sendEvent(BString signalName, BInt32 arg);
223  virtual BError processEvent(BString objectName, BString name, BInt32 arg);
224 
225  BString name();
226  BUInt32 apiVersion();
230  virtual BError processEvent(BoapPacket& rx);
231 protected:
233 
238 };
239 #endif
BUInt32 address
Definition: BFirmware.h:7
uint32_t BUInt32
Definition: BTypes.h:24
int32_t BInt32
Definition: BTypes.h:23
uint64_t BUInt64
Definition: BTypes.h:26
BoapMc1PacketHead head
Definition: BoapMc1.h:1
BUInt8 cmd
Definition: BoapMc.h:3
BError(BoapServiceObject::* BoapFunc)(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.h:204
BoapType
Definition: Boap.h:24
@ BoapTypeRpcReply
Definition: Boap.h:24
@ BoapTypeRpcError
Definition: Boap.h:24
@ BoapTypeRpc
Definition: Boap.h:24
@ BoapTypeSignal
Definition: Boap.h:24
const BUInt32 BoapMagic
Definition: Boap.h:23
BUInt32 BoapService
Definition: Boap.h:25
BoapPriority
Definition: Boap.h:26
@ BoapPriorityHigh
Definition: Boap.h:26
@ BoapPriorityLow
Definition: Boap.h:26
@ BoapPriorityNormal
Definition: Boap.h:26
Create and manipulate a variable sized byte data buffer. Has functions to store and retrieve basic an...
Definition: BBuffer.h:47
Error return class. This class is used to return the error status from a function....
Definition: BError.h:31
This class provides an interface for sending simple integer events via a file descriptor....
Definition: BEvent1.h:57
Mutex class. Note these are recursive Mutexes and so you need to make sure the number of unlocks equa...
Definition: BMutex.h:14
This class provides an interface for polling a number of file descriptors. It uses round robin pollin...
Definition: BPoll.h:48
IPV4 aware socket address.
Definition: BSocket.h:58
A network communications socket.
Definition: BSocket.h:80
This class stores and manipulates ASCII strings.
Definition: BString.h:20
Implements a program execution thread.
Definition: BThread.h:14
Base for all Boap client objects.
Definition: Boap.h:56
BUInt32 oapiVersion
Definition: Boap.h:81
BError performSend(BoapPacket &tx)
Performs a send to the named service.
Definition: Boap.cpp:347
BoapPriority opriority
Definition: Boap.h:82
void setMaxLength(BUInt32 maxLength)
Sets the maximum packet length.
Definition: Boap.cpp:322
virtual ~BoapClientObject()
Definition: Boap.cpp:123
BoapPacket orx
Definition: Boap.h:87
BUInt32 omaxLength
Definition: Boap.h:85
BError performRecv(BoapPacket &rx)
Performs a receive.
Definition: Boap.cpp:364
int otimeout
Definition: Boap.h:89
BError pingLocked(BUInt32 &apiVersion)
Definition: Boap.cpp:256
BString getServiceName()
Get the name of the service.
Definition: Boap.cpp:242
BoapService oservice
Definition: Boap.h:83
virtual BError handleReconnect(BError err)
Handle a reconnect performing autorisaztion if required.
Definition: Boap.cpp:465
BError connectService(BString name)
Connects to the named service.
Definition: Boap.cpp:130
BString oname
Definition: Boap.h:80
BError disconnectService()
Disconnects from the named service.
Definition: Boap.cpp:230
BError ping(BUInt32 &apiVersion)
Pings the connection and finds the remotes version number.
Definition: Boap.cpp:246
BError performCall(BoapPacket &tx, BoapPacket &rx)
Performs a RPC call to the named service.
Definition: Boap.cpp:423
int oconnected
Definition: Boap.h:84
void setTimeout(int timeout)
Sets the timeout in micro seconds. -1 is wait indefinitely.
Definition: Boap.cpp:326
BoapClientObject(BString name="")
Definition: Boap.cpp:113
BMutex olock
Definition: Boap.h:88
BUInt32 apiVersion()
Returns the API version.
Definition: Boap.cpp:126
BoapPacket otx
Definition: Boap.h:86
int oreconnect
Handle an automatic reconnect on timeout.
Definition: Boap.h:90
BError setConnectionPriority(BoapPriority priority)
Sets the connection priority.
Definition: Boap.cpp:282
BError checkApiVersion()
Definition: Boap.cpp:330
Boap service function.
Definition: Boap.h:207
BUInt32 ocmd
Definition: Boap.h:210
BoapFuncEntry(int cmd, BoapFunc func)
Definition: Boap.cpp:892
BoapFunc ofunc
Definition: Boap.h:211
Boap packet.
Definition: Boap.h:37
int pushHead(BoapPacketHead &head)
Definition: Boap.cpp:73
int peekHead(BoapPacketHead &head)
Definition: Boap.cpp:84
BoapPacket()
Definition: Boap.cpp:52
~BoapPacket()
Definition: Boap.cpp:54
void updateHead()
Definition: Boap.cpp:57
BUInt32 getCmd()
Definition: Boap.cpp:65
int popHead(BoapPacketHead &head)
Definition: Boap.cpp:93
Boap server connection.
Definition: Boap.h:126
virtual BError process()
Definition: Boap.cpp:512
virtual BSocket & getSocket()
Definition: Boap.cpp:592
virtual ~BoapServerConnection()
Definition: Boap.cpp:503
virtual BError getHead(BoapPacketHead &head)
Definition: Boap.cpp:600
virtual BError validate()
Validate the connection.
Definition: Boap.cpp:608
virtual void setMaxLength(BUInt32 maxLength)
Definition: Boap.cpp:596
BoapServerConnection(BoapServer &boapServer, int fd)
Definition: Boap.cpp:498
virtual BError init()
Initialise connection.
Definition: Boap.cpp:506
Boap server.
Definition: Boap.h:153
BSocket onet
Definition: Boap.h:189
BError run()
Definition: BoapSimple.cc:442
virtual BoapServerConnection * newConnection(int fd, BSocketAddressINET address)
Definition: Boap.cpp:884
BList< BoapServerConnection * > oclients
Definition: Boap.h:185
virtual BError sendEvent(BoapPacket &tx)
Definition: Boap.cpp:831
virtual BError processEvent(BoapPacket &rx)
Definition: Boap.cpp:801
BMutex olock
Definition: Boap.h:181
BList< BoapServiceEntry > oservices
Definition: Boap.h:187
virtual BError process(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:786
BSocket onetEvent
Definition: Boap.h:190
BString getHostName()
Definition: Boap.cpp:861
BEvent1Int oclientGoneEvent
Definition: Boap.h:186
BString ohostName
Definition: Boap.h:192
BSocket & getSocket()
Definition: Boap.cpp:853
@ NOTHREADS
Definition: Boap.h:155
@ THREADED
Definition: Boap.h:155
int getConnectionsNumber()
Definition: Boap.cpp:865
BoapServer()
Definition: Boap.cpp:626
virtual BError init(BString boapNsHost="", int port=0, int threaded=0, int isBoapns=0)
Definition: Boap.cpp:638
int othreaded
Definition: Boap.h:182
virtual void clientGone(BoapServerConnection *client)
Definition: Boap.cpp:695
BPoll opoll
Definition: Boap.h:188
BUInt64 onumOperations
Definition: Boap.h:195
void closeConnections()
Definition: Boap.cpp:871
BSocketAddressINET onetEventAddress
Definition: Boap.h:191
int oisBoapns
Definition: Boap.h:183
Boapns::Boapns * oboapns
Definition: Boap.h:184
virtual ~BoapServer()
Definition: Boap.cpp:634
BSocket & getEventSocket()
Definition: Boap.cpp:857
virtual BError addObject(BoapServiceObject *object)
Definition: Boap.cpp:778
Boap server single service entry.
Definition: Boap.h:113
BoapService oservice
Definition: Boap.h:119
BoapServiceEntry(BoapService service=0, BoapServiceObject *object=0)
Definition: Boap.h:115
BoapServiceObject * oobject
Definition: Boap.h:120
Boap service object.
Definition: Boap.h:215
virtual BError processEvent(BString objectName, BString name, BInt32 arg)
Definition: Boap.cpp:1002
BError sendEvent(BString signalName, BInt32 arg)
Definition: Boap.cpp:983
BoapServer & oserver
Definition: Boap.h:234
BString name()
Definition: Boap.cpp:914
BError process(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:967
BError doConnectionPriority(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:939
BoapServiceObject(BoapServer &server, BString name="")
Definition: Boap.cpp:896
BList< BoapFuncEntry > ofuncList
Definition: Boap.h:237
BError setName(BString name)
Definition: Boap.cpp:906
BError doPing(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:922
BUInt32 oapiVersion
Definition: Boap.h:236
virtual ~BoapServiceObject()
Definition: Boap.cpp:903
BUInt32 apiVersion()
Returns the API version.
Definition: Boap.cpp:918
BString oname
Definition: Boap.h:235
A Boap object to send signals using an RPC mechanism.
Definition: Boap.h:95
BoapSignalObject()
Definition: Boap.cpp:470
BoapPacket otx
Definition: Boap.h:101
BoapPacket orx
Definition: Boap.h:102
BError performSend(BoapPacket &tx)
Definition: Boap.cpp:474
Definition: BoapnsC.h:21
Definition: Boap.h:148
Boap packet header.
Definition: Boap.h:29
BUInt32 length
Definition: Boap.h:31
BUInt32 cmd
Definition: Boap.h:33
BUInt32 service
Definition: Boap.h:32
BUInt32 type
Definition: Boap.h:30