OpenSDN source code
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 <mutex>
12 
13 #include <boost/function.hpp>
14 #include <boost/bind/bind.hpp>
15 
16 #include "xmpp/xmpp_channel.h"
17 #include "bind/bind_util.h"
18 
19 using namespace boost::placeholders;
20 
21 class XmppServer;
23 class AgentData;
24 class AgentDnsData;
25 class TaskTrigger;
26 
28 public:
29  typedef std::set<DnsUpdateData *, DnsUpdateData::Compare> DataSet;
30 
33  virtual ~DnsAgentXmppChannel();
34  void Close();
35  void ReceiveReq(const XmppStanza::XmppMessage *msg);
36  void GetAgentDnsData(AgentDnsData &data);
37  void UpdateDnsRecords(BindUtil::Operation op);
38 
39 private:
40  std::string GetDnsRecordName(std::string &vdns_name, const DnsItem &item);
41  void HandleAgentUpdate(std::unique_ptr<DnsUpdateData> rcv_data);
42 
46 };
47 
49 public:
50  struct RecordRequest {
52  std::string record_name;
53  std::string vdns_name;
55 
56  RecordRequest(BindUtil::Operation o, const std::string &rec,
57  const std::string &vdns, const DnsItem &it)
58  : op(o), record_name(rec), vdns_name(vdns), item(it) {}
59  };
61 
62  typedef std::map<const XmppChannel *, DnsAgentXmppChannel *> ChannelMap;
63 
65  virtual ~DnsAgentXmppChannelManager();
66  void RemoveChannel(XmppChannel *ch);
68  void HandleXmppChannelEvent(XmppChannel *channel, xmps::PeerState state);
69  bool ProcessRecord(boost::shared_ptr<RecordRequest> req);
70  void EnqueueRecord(boost::shared_ptr<RecordRequest> req);
71 
72  void GetAgentData(std::vector<AgentData> &list);
73  void GetAgentDnsData(std::vector<AgentDnsData> &dt);
74 
75 private:
76  uint8_t ChannelToDscp(const XmppChannel *xc) const;
79  std::mutex mutex_;
81 };
82 
83 #endif // _dns_agent_xmpp_channel_h_
RecordRequestWorkQueue work_queue_
DnsAgentXmppChannel * FindChannel(const XmppChannel *ch)
std::map< const XmppChannel *, DnsAgentXmppChannel * > ChannelMap
WorkQueue< boost::shared_ptr< RecordRequest > > RecordRequestWorkQueue
DnsAgentXmppChannelManager * mgr_
std::set< DnsUpdateData *, DnsUpdateData::Compare > DataSet
static uint8_t ChannelToDscp(XmppChannel *xc)
RecordRequest(BindUtil::Operation o, const std::string &rec, const std::string &vdns, const DnsItem &it)