BDS Public
Beamlib 3.3.4
This is the Beam C++ class library.
Loading...
Searching...
No Matches
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
23const BUInt32 BoapMagic = 0x424F4100;
27
34};
35
37class BoapPacket : public BBufferStore {
38public:
39 BoapPacket();
41
43
47 void updateHead();
48};
49
50/*******************************************************************************
51 * Main Client communications classes
52 *******************************************************************************
53 */
54
56class BoapClientObject : public BSocket {
57public:
58 BoapClientObject(BString name = "");
59 virtual ~BoapClientObject();
60
65
68 void setMaxLength(BUInt32 maxLength);
69 void setTimeout(int timeout);
70
71
72protected:
78 virtual BError handleReconnect(BError err);
79
91};
92
93
95class BoapSignalObject : public BSocket {
96public:
98
99protected:
100 BError performSend(BoapPacket& tx); // Performs a send to the named service
103};
104
105
106/*******************************************************************************
107 * Main Server communications class
108 *******************************************************************************
109 */
111
114public:
116 oservice = service;
117 oobject = object;
118 }
121};
122
123class BoapServer;
124
127public:
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);
136
137 virtual BError validate();
138private:
139 void* function();
140
141 BoapServer& oboapServer;
142 BSocket osocket;
143 BoapPacket orx;
144 BoapPacket otx;
145 BUInt32 omaxLength;
146};
147
148namespace Boapns {
149class Boapns;
150}
151
153class BoapServer : public BThread {
154public:
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);
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);
173 void closeConnections();
174
175 // Override functions
177
178protected:
179 void* function();
180
193
194public:
196};
197
198/*******************************************************************************
199 * Base for all Server Objects
200 *******************************************************************************
201 */
203
205
208public:
209 BoapFuncEntry(int cmd, BoapFunc func);
212};
213
216public:
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();
230 virtual BError processEvent(BoapPacket& rx);
231protected:
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
uint32_t BoapService
Definition BoapSimple.h:24
BError(BoapServiceObject::* BoapFunc)(BoapPacket &rx, BoapPacket &tx)
Definition BoapSimple.h:166
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
Template based list class.
Definition BList.h:31
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
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
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
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
void * function()
Definition Boap.cpp:699
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
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