OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
agent_xmpp_channel.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef _dns_agent_xmpp_channel_h_
6 #define _dns_agent_xmpp_channel_h_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 #include <boost/function.hpp>
12 #include <boost/bind.hpp>
13 
14 #include "xmpp/xmpp_channel.h"
15 #include "bind/bind_util.h"
16 
17 class XmppServer;
19 class AgentData;
20 class AgentDnsData;
21 class TaskTrigger;
22 
24 public:
25  typedef std::set<DnsUpdateData *, DnsUpdateData::Compare> DataSet;
26 
29  virtual ~DnsAgentXmppChannel();
30  void Close();
31  void ReceiveReq(const XmppStanza::XmppMessage *msg);
32  void GetAgentDnsData(AgentDnsData &data);
34 
35 private:
36  std::string GetDnsRecordName(std::string &vdns_name, const DnsItem &item);
37  void HandleAgentUpdate(std::unique_ptr<DnsUpdateData> rcv_data);
38 
42 };
43 
45 public:
46  struct RecordRequest {
48  std::string record_name;
49  std::string vdns_name;
51 
52  RecordRequest(BindUtil::Operation o, const std::string &rec,
53  const std::string &vdns, const DnsItem &it)
54  : op(o), record_name(rec), vdns_name(vdns), item(it) {}
55  };
57 
58  typedef std::map<const XmppChannel *, DnsAgentXmppChannel *> ChannelMap;
59 
62  void RemoveChannel(XmppChannel *ch);
65  bool ProcessRecord(boost::shared_ptr<RecordRequest> req);
66  void EnqueueRecord(boost::shared_ptr<RecordRequest> req);
67 
68  void GetAgentData(std::vector<AgentData> &list);
69  void GetAgentDnsData(std::vector<AgentDnsData> &dt);
70 
71 private:
72  uint8_t ChannelToDscp(const XmppChannel *xc) const;
75  tbb::mutex mutex_;
77 };
78 
79 #endif // _dns_agent_xmpp_channel_h_
void UpdateDnsRecords(BindUtil::Operation op)
std::string GetDnsRecordName(std::string &vdns_name, const DnsItem &item)
uint8_t ChannelToDscp(const XmppChannel *xc) const
void HandleAgentUpdate(std::unique_ptr< DnsUpdateData > rcv_data)
void EnqueueRecord(boost::shared_ptr< RecordRequest > req)
bool ProcessRecord(boost::shared_ptr< RecordRequest > req)
void GetAgentData(std::vector< AgentData > &list)
DnsAgentXmppChannel(XmppChannel *channel, DnsAgentXmppChannelManager *mgr)
std::set< DnsUpdateData *, DnsUpdateData::Compare > DataSet
void RemoveChannel(XmppChannel *ch)
RecordRequestWorkQueue work_queue_
WorkQueue< boost::shared_ptr< RecordRequest > > RecordRequestWorkQueue
DnsAgentXmppChannel * FindChannel(const XmppChannel *ch)
std::map< const XmppChannel *, DnsAgentXmppChannel * > ChannelMap
void GetAgentDnsData(AgentDnsData &data)
void ReceiveReq(const XmppStanza::XmppMessage *msg)
DnsAgentXmppChannelManager * mgr_
DnsAgentXmppChannelManager(XmppServer *server)
void HandleXmppChannelEvent(XmppChannel *channel, xmps::PeerState state)
RecordRequest(BindUtil::Operation o, const std::string &rec, const std::string &vdns, const DnsItem &it)
void GetAgentDnsData(std::vector< AgentDnsData > &dt)