pvAccessCPP  7.1.1
serverChannelImpl.h
1 /**
2  * Copyright - See the COPYRIGHT that is included with this distribution.
3  * pvAccessCPP is distributed subject to a Software License Agreement found
4  * in file LICENSE that is included with this distribution.
5  */
6 
7 #ifndef SERVERCHANNEL_H_
8 #define SERVERCHANNEL_H_
9 
10 #include <pv/destroyable.h>
11 #include <pv/remote.h>
12 #include <pv/security.h>
13 #include <pv/baseChannelRequester.h>
14 
15 namespace epics {
16 namespace pvAccess {
17 
18 class BaseChannelRequester;
19 
20 class ServerChannel
21 {
22 public:
23  POINTER_DEFINITIONS(ServerChannel);
24 
25  static size_t num_instances;
26 
27  /**
28  * Create server channel for given process variable.
29  * @param channel local channel.
30  * @param cid channel CID.
31  * @param sid channel SID.
32  * @param css channel security session.
33  */
34  ServerChannel(Channel::shared_pointer const & channel,
35  const ChannelRequester::shared_pointer& requester,
36  pvAccessID cid, pvAccessID sid);
37  ~ServerChannel();
38 
39  const Channel::shared_pointer& getChannel() const { return _channel; }
40 
41  pvAccessID getCID() const { return _cid; }
42 
43  pvAccessID getSID() const { return _sid; }
44 
45  void registerRequest(pvAccessID id, const std::tr1::shared_ptr<BaseChannelRequester>& request);
46 
47  void unregisterRequest(pvAccessID id);
48 
49  void installGetField(const GetFieldRequester::shared_pointer& gf);
50  void completeGetField(GetFieldRequester *req);
51 
52  //! may return NULL
53  std::tr1::shared_ptr<BaseChannelRequester> getRequest(pvAccessID id);
54 
55  void destroy();
56 
57  void printInfo() const;
58 
59  void printInfo(FILE *fd) const;
60 private:
61  const Channel::shared_pointer _channel;
62 
63  const ChannelRequester::shared_pointer _requester;
64 
65  const pvAccessID _cid, _sid;
66 
67  //! keep alive in-progress GetField()
68  GetFieldRequester::shared_pointer _active_requester;
69 
70  typedef std::map<pvAccessID, std::tr1::shared_ptr<BaseChannelRequester> > _requests_t;
71  _requests_t _requests;
72 
73  bool _destroyed;
74 
75  mutable epics::pvData::Mutex _mutex;
76 };
77 
78 }
79 }
80 
81 
82 #endif /* SERVERCHANNEL_H_ */
virtual void authNZMessage(epics::pvData::PVStructure::shared_pointer const &data)=0
Pass data to the active security plug-in session.