]> git.ipfire.org Git - thirdparty/squid.git/blame - src/snmpx/Session.cc
Amos requests
[thirdparty/squid.git] / src / snmpx / Session.cc
CommitLineData
51ea0904
CT
1/*
2 * $Id$
3 *
4 * DEBUG: section 49 SNMP Interface
5 *
6 */
7
8#include "config.h"
9#include "base/TextException.h"
10#include "ipc/TypedMsgHdr.h"
11#include "protos.h"
12#include "snmpx/Session.h"
13
14
15Snmp::Session::Session()
16{
17 clear();
18}
19
20Snmp::Session::Session(const Session& session)
21{
22 assign(session);
23}
24
25Snmp::Session::~Session()
26{
27 free();
28}
29
30Snmp::Session&
31Snmp::Session::operator = (const Session& session)
32{
33 free();
34 assign(session);
35 return *this;
36}
37
38void
39Snmp::Session::clear()
40{
41 xmemset(this, 0, sizeof(*this));
42}
43
44void
45Snmp::Session::free()
46{
47 if (community_len > 0) {
48 Must(community != NULL);
49 xfree(community);
50 }
51 if (peername != NULL)
52 xfree(peername);
53 clear();
54}
55
56void
57Snmp::Session::assign(const Session& session)
58{
59 memcpy(this, &session, sizeof(*this));
60 if (session.community != NULL) {
61 community = (u_char*)xstrdup((char*)session.community);
62 Must(community != NULL);
63 }
64 if (session.peername != NULL) {
65 peername = xstrdup(session.peername);
66 Must(peername != NULL);
67 }
68}
69
70void
71Snmp::Session::pack(Ipc::TypedMsgHdr& msg) const
72{
73 msg.putPod(Version);
74 msg.putInt(community_len);
75 if (community_len > 0) {
76 Must(community != NULL);
77 msg.putFixed(community, community_len);
78 }
79 msg.putPod(retries);
80 msg.putPod(timeout);
81 int len = peername != NULL ? strlen(peername) : 0;
82 msg.putInt(len);
83 if (len > 0)
84 msg.putFixed(peername, len);
85 msg.putPod(remote_port);
86 msg.putPod(local_port);
87}
88
89void
90Snmp::Session::unpack(const Ipc::TypedMsgHdr& msg)
91{
92 free();
93 msg.getPod(Version);
94 community_len = msg.getInt();
95 if (community_len > 0) {
96 community = static_cast<u_char*>(xmalloc(community_len + 1));
97 Must(community != NULL);
98 msg.getFixed(community, community_len);
99 community[community_len] = 0;
100 }
101 msg.getPod(retries);
102 msg.getPod(timeout);
103 int len = msg.getInt();
104 if (len > 0) {
105 peername = static_cast<char*>(xmalloc(len + 1));
106 Must(peername != NULL);
107 msg.getFixed(peername, len);
108 peername[len] = 0;
109 }
110 msg.getPod(remote_port);
111 msg.getPod(local_port);
112}