Beam-lib  2.16.3
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) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk
5  *******************************************************************************
6  */
7 #ifndef Boap_HH
8 #define Boap_HH
9 
10 #include <stdint.h>
11 #include <BTypes.h>
12 #include <BPoll.h>
13 #include <BSocket.h>
14 #include <BThread.h>
15 #include <BError.h>
16 #include <BEvent1.h>
17 #include <BMutex.h>
18 #include <BTimeStamp.h>
19 #include <BBuffer.h>
20 
21 // Main BOAP Types
22 const BUInt32 BoapMagic = 0x424F4100;
26 
27 // Boap packet header
33 };
34 
35 // Boap packet
36 class BoapPacket : public BBufferStore {
37 public:
38  BoapPacket();
39  ~BoapPacket();
40 
41  BUInt32 getCmd();
42 
46  void updateHead();
47 };
48 
49 /*******************************************************************************
50  * Main Client communications classes
51  *******************************************************************************
52  */
53 
54 /*******************************************************************************
55  * Base for all Client Objects
56  *******************************************************************************
57  */
58 class BoapClientObject : public BSocket {
59 public:
60  BoapClientObject(BString name = "");
61  virtual ~BoapClientObject();
62 
66 
69  void setMaxLength(BUInt32 maxLength);
70  void setTimeout(int timeout);
71 
72 
73 protected:
79  virtual BError handleReconnect(BError err);
80 
90  int otimeout;
91  int oreconnect;
92 };
93 
94 class BoapSignalObject : public BSocket {
95 public:
97 
98 protected:
99  BError performSend(BoapPacket& tx); // Performs a send to the named service
102 };
103 
104 
105 /*******************************************************************************
106  * Main Server communications class
107  *******************************************************************************
108  */
109 class BoapServiceObject;
110 
112 public:
113  BoapServiceEntry(BoapService service = 0, BoapServiceObject* object = 0){
114  oservice = service;
115  oobject = object;
116  }
119 };
120 
121 class BoapServer;
122 
124 public:
125  BoapServerConnection(BoapServer& boapServer, int fd);
126  virtual ~BoapServerConnection();
127 
128  virtual BError init();
129  virtual BError process();
130  virtual BSocket& getSocket();
131  virtual void setMaxLength(BUInt32 maxLength);
132  virtual BError getHead(BoapPacketHead& head);
133 
134  virtual BError validate();
135 private:
136  void* function();
137 
138  BoapServer& oboapServer;
139  BSocket osocket;
140  BoapPacket orx;
141  BoapPacket otx;
142  BUInt32 omaxLength;
143 };
144 
145 namespace Boapns {
146 class Boapns;
147 }
148 
149 class BoapServer : public BThread {
150 public:
151  enum { NOTHREADS=0, THREADED=1 };
152 
153  BoapServer();
154  virtual ~BoapServer();
155  virtual BError init(BString boapNsHost = "", int port = 0, int threaded = 0, int isBoapns = 0);
156  virtual BError run(int inThread = 0);
157  virtual BError process(BoapServerConnection* conn, BoapPacket& rx, BoapPacket& tx);
158  virtual BError processEvent(BoapPacket& rx);
159 
160  // Support routines
161  virtual BError addObject(BoapServiceObject* object);
162  virtual BError sendEvent(BoapPacket& tx);
163  virtual BError processEvent(int fd);
164  virtual void clientGone(BoapServerConnection* client);
165  BSocket& getSocket();
168  int getConnectionsNumber();
169  void closeConnections();
170 
171  // Override functions
173 
174 private:
175  void* function();
176 
177  BMutex olock;
178  int othreaded;
179  int oisBoapns;
180  Boapns::Boapns* oboapns;
182  BEvent1Int oclientGoneEvent;
183  BList<BoapServiceEntry> oservices;
184  BPoll opoll;
185  BSocket onet;
186  BSocket onetEvent;
187  BSocketAddressINET onetEventAddress;
188  BString ohostName;
189 
190 public:
192 };
193 
194 /*******************************************************************************
195  * Base for all Server Objects
196  *******************************************************************************
197  */
198 class BoapServiceObject;
199 
201 
203 public:
204  BoapFuncEntry(int cmd, BoapFunc func);
207 };
208 
210 public:
211  BoapServiceObject(BoapServer& server, BString name = "");
212  virtual ~BoapServiceObject();
213 
215 
216  BError sendEvent(BString signalName, BInt32 arg);
217  virtual BError processEvent(BString objectName, BString name, BInt32 arg);
218 
219  BString name();
223  virtual BError processEvent(BoapPacket& rx);
224 protected:
226 
231 };
232 #endif
Definition: Boap.h:25
Definition: Boap.h:151
BError process(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:961
BError pingLocked(BUInt32 &apiVersion)
Definition: Boap.cpp:254
BoapPacket()
Definition: Boap.cpp:54
BError(BoapServiceObject::* BoapFunc)(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.h:200
BoapPacket orx
Definition: Boap.h:88
virtual BError process(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:784
BoapPacket orx
Definition: Boap.h:101
Definition: Boap.h:25
This class provides an interface for sending simple integer events via a file descriptor....
Definition: BEvent1.h:60
virtual BError validate()
Validate the connection.
Definition: Boap.cpp:606
virtual BError processEvent(BString objectName, BString name, BInt32 arg)
Definition: Boap.cpp:996
int oreconnect
Handle an automatic reconnect on timeout.
Definition: Boap.h:91
BUInt32 omaxLength
Definition: Boap.h:86
Definition: Boap.h:94
BError sendEvent(BString signalName, BInt32 arg)
Definition: Boap.cpp:977
Definition: BString.h:18
BoapServiceObject * oobject
Definition: Boap.h:118
virtual void setMaxLength(BUInt32 maxLength)
Definition: Boap.cpp:594
BString getHostName()
Definition: Boap.cpp:859
Definition: BSocket.h:78
BString oname
Definition: Boap.h:81
Definition: Boap.h:23
BoapPacket otx
Definition: Boap.h:87
Definition: Boap.h:149
Definition: BBuffer.h:44
Definition: Boap.h:123
BUInt32 oapiVersion
Definition: Boap.h:229
void setTimeout(int timeout)
Sets the timeout in micro seconds. -1 is wait indefinitely.
Definition: Boap.cpp:324
~BoapPacket()
Definition: Boap.cpp:56
BUInt32 BoapService
Definition: Boap.h:24
virtual BError process()
Definition: Boap.cpp:510
int peekHead(BoapPacketHead &head)
Definition: Boap.cpp:86
BoapServer()
Definition: Boap.cpp:624
BUInt32 service
Definition: Boap.h:31
BError performSend(BoapPacket &tx)
Performs a send to the named service.
Definition: Boap.cpp:345
BoapSignalObject()
Definition: Boap.cpp:468
uint64_t BUInt64
Definition: BTypes.h:23
BUInt8 cmd
Definition: BoapMc.h:385
BoapMc1PacketHead head
Definition: BoapMc1.h:20
virtual ~BoapClientObject()
Definition: Boap.cpp:125
BUInt32 length
Definition: Boap.h:30
BString oname
Definition: Boap.h:228
BoapServiceEntry(BoapService service=0, BoapServiceObject *object=0)
Definition: Boap.h:113
BError ping(BUInt32 &apiVersion)
Pings the connection and finds the remotes version number.
Definition: Boap.cpp:244
Definition: Boap.h:209
BoapType
Definition: Boap.h:23
BError connectService(BString name)
Connects to the named service.
Definition: Boap.cpp:128
int popHead(BoapPacketHead &head)
Definition: Boap.cpp:95
BoapPriority
Definition: Boap.h:25
BList< BoapFuncEntry > ofuncList
Definition: Boap.h:230
virtual ~BoapServiceObject()
Definition: Boap.cpp:901
BSocket & getSocket()
Definition: Boap.cpp:851
Definition: Boap.h:28
BError doConnectionPriority(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:933
BUInt32 oapiVersion
Definition: Boap.h:82
BString name()
Definition: Boap.cpp:912
BError performRecv(BoapPacket &rx)
Performs a receive.
Definition: Boap.cpp:362
BoapPacket otx
Definition: Boap.h:100
BError setName(BString name)
Definition: Boap.cpp:904
Definition: Boap.h:111
Definition: Boap.h:23
BSocket & getEventSocket()
Definition: Boap.cpp:855
BoapService oservice
Definition: Boap.h:84
Definition: Boap.h:202
int getConnectionsNumber()
Definition: Boap.cpp:863
This class provides an interface for polling a number of file descriptors. It uses round robin pollin...
Definition: BPoll.h:43
BString getServiceName()
Get the name of the service.
Definition: Boap.cpp:240
BMutex olock
Definition: Boap.h:89
BError setConnectionPriority(BoapPriority priority)
Sets the connection priority.
Definition: Boap.cpp:280
BUInt32 ocmd
Definition: Boap.h:205
int32_t BInt32
Definition: BTypes.h:20
virtual ~BoapServer()
Definition: Boap.cpp:632
uint32_t BUInt32
Definition: BTypes.h:21
BError run()
Definition: BoapSimple.cc:443
BoapService oservice
Definition: Boap.h:117
virtual BError handleReconnect(BError err)
Handle a reconnect performing autorisaztion if required.
Definition: Boap.cpp:463
virtual BError init(BString boapNsHost="", int port=0, int threaded=0, int isBoapns=0)
Definition: Boap.cpp:636
virtual BError processEvent(BoapPacket &rx)
Definition: Boap.cpp:799
BoapFunc ofunc
Definition: Boap.h:206
BError performSend(BoapPacket &tx)
Definition: Boap.cpp:472
BoapClientObject(BString name="")
Definition: Boap.cpp:115
Definition: Boap.h:23
Definition: BMutex.h:14
Definition: Boap.h:145
int pushHead(BoapPacketHead &head)
Definition: Boap.cpp:75
virtual BSocket & getSocket()
Definition: Boap.cpp:590
virtual BError getHead(BoapPacketHead &head)
Definition: Boap.cpp:598
Definition: Boap.h:25
Definition: BoapnsC.h:22
Definition: Boap.h:36
void setMaxLength(BUInt32 maxLength)
Sets the maximum packet length.
Definition: Boap.cpp:320
BUInt32 cmd
Definition: Boap.h:32
const BUInt32 apiVersion
Definition: BoapnsC.h:20
virtual void clientGone(BoapServerConnection *client)
Definition: Boap.cpp:693
BUInt64 onumOperations
Definition: Boap.h:191
virtual BError sendEvent(BoapPacket &tx)
Definition: Boap.cpp:829
BError checkApiVersion()
Definition: Boap.cpp:328
int otimeout
Definition: Boap.h:90
BoapServerConnection(BoapServer &boapServer, int fd)
Definition: Boap.cpp:496
int oconnected
Definition: Boap.h:85
BUInt32 address
Definition: BFirmware.h:53
IP aware socket address.
Definition: BSocket.h:57
BError disconnectService()
Disconnects from the named service.
Definition: Boap.cpp:228
virtual BoapServerConnection * newConnection(int fd, BSocketAddressINET address)
Definition: Boap.cpp:882
Definition: Boap.h:58
Definition: BError.h:25
BoapServiceObject(BoapServer &server, BString name="")
Definition: Boap.cpp:894
BError doPing(BoapServerConnection *conn, BoapPacket &rx, BoapPacket &tx)
Definition: Boap.cpp:916
virtual BError init()
Initialise connection.
Definition: Boap.cpp:504
Definition: BThread.h:12
void closeConnections()
Definition: Boap.cpp:869
const BUInt32 BoapMagic
Definition: Boap.h:22
BUInt32 type
Definition: Boap.h:29
BError performCall(BoapPacket &tx, BoapPacket &rx)
Performs a RPC call to the named service.
Definition: Boap.cpp:421
BoapPriority opriority
Definition: Boap.h:83
BUInt32 getCmd()
Definition: Boap.cpp:67
virtual BError addObject(BoapServiceObject *object)
Definition: Boap.cpp:776
BoapFuncEntry(int cmd, BoapFunc func)
Definition: Boap.cpp:890
Definition: Boap.h:23
Definition: Boap.h:151
BoapServer & oserver
Definition: Boap.h:227
void updateHead()
Definition: Boap.cpp:59
virtual ~BoapServerConnection()
Definition: Boap.cpp:501