1 // generated on Sep 17, 2010 4:11 PM
2
3 #include "yatesnmp.h"
4
5 namespace Snmp {
6
7 /**
8 * ObjectName
9 */
ObjectName()10 ObjectName::ObjectName()
11 {
12 }
13
ObjectName(void * data,int len)14 ObjectName::ObjectName(void* data, int len)
15 {
16 DataBlock db(data,len);
17 decode(db);
18 }
19
~ObjectName()20 ObjectName::~ObjectName()
21 {
22 }
23
decode(DataBlock & data)24 int ObjectName::decode(DataBlock& data)
25 {
26 int length = 0;
27 length = ASNLib::decodeOID(data,&m_ObjectName,true);
28 return length;
29 }
30
encode(DataBlock & data)31 int ObjectName::encode(DataBlock& data)
32 {
33 int length = -1;
34 const DataBlock db = ASNLib::encodeOID(m_ObjectName,true);
35 data.append(db);
36 length = db.length();
37 return length;
38 }
39
getParams(NamedList * params)40 void ObjectName::getParams(NamedList* params)
41 {}
42
setParams(NamedList * params)43 void ObjectName::setParams(NamedList* params)
44 {}
45
46 /**
47 * ObjectSyntax
48 */
ObjectSyntax()49 ObjectSyntax::ObjectSyntax()
50 {
51 m_simple = new SimpleSyntax();
52 m_application_wide = new ApplicationSyntax();
53 }
54
ObjectSyntax(void * data,int len)55 ObjectSyntax::ObjectSyntax(void* data, int len)
56 {
57 m_simple = new SimpleSyntax();
58 m_application_wide = new ApplicationSyntax();
59
60 DataBlock db(data,len);
61 decode(db);
62 }
63
~ObjectSyntax()64 ObjectSyntax::~ObjectSyntax()
65 {
66 TelEngine::destruct(m_simple);
67 TelEngine::destruct(m_application_wide);
68 }
69
decode(DataBlock & data)70 int ObjectSyntax::decode(DataBlock& data)
71 {
72 int length = 0;
73 length = m_simple->decode(data);
74 if (length >= 0) {
75 m_choiceType = SIMPLE;
76 return length;
77 }
78 length = m_application_wide->decode(data);
79 if (length >= 0) {
80 m_choiceType = APPLICATION_WIDE;
81 return length;
82 }
83 return length;
84 }
85
encode(DataBlock & data)86 int ObjectSyntax::encode(DataBlock& data)
87 {
88 int length = -1;
89 if (m_choiceType == SIMPLE) {
90 length = m_simple->encode(data);
91 }
92 if (m_choiceType == APPLICATION_WIDE) {
93 length = m_application_wide->encode(data);
94 }
95 return length;
96 }
97
getParams(NamedList * params)98 void ObjectSyntax::getParams(NamedList* params)
99 {}
100
setParams(NamedList * params)101 void ObjectSyntax::setParams(NamedList* params)
102 {}
103
104 /**
105 * SimpleSyntax
106 */
SimpleSyntax()107 SimpleSyntax::SimpleSyntax()
108 {
109 }
110
SimpleSyntax(void * data,int len)111 SimpleSyntax::SimpleSyntax(void* data, int len)
112 {
113 DataBlock db(data,len);
114 decode(db);
115 }
116
~SimpleSyntax()117 SimpleSyntax::~SimpleSyntax()
118 {
119 }
120
decode(DataBlock & data)121 int SimpleSyntax::decode(DataBlock& data)
122 {
123 int length = 0;
124 length = ASNLib::decodeINT32(data,&m_integer_value,true);
125 if (m_integer_value < s_integer_valueMinSize)
126 DDebug(DebugAll,"Constraint break error");
127 if (s_integer_valueMaxSize < m_integer_value)
128 DDebug(DebugAll,"Constraint break error");
129 if (length >= 0) {
130 m_choiceType = INTEGER_VALUE;
131 return length;
132 }
133 length = ASNLib::decodeOctetString(data,&m_string_value,true);
134 if (length < s_string_valueSizeMinSize)
135 DDebug(DebugAll,"Constraint break error");
136 if (s_string_valueSizeMaxSize < length)
137 DDebug(DebugAll,"Constraint break error");
138 if (length >= 0) {
139 m_choiceType = STRING_VALUE;
140 return length;
141 }
142 length = ASNLib::decodeOID(data,&m_objectID_value,true);
143 if (length >= 0) {
144 m_choiceType = OBJECTID_VALUE;
145 return length;
146 }
147 return length;
148 }
149
encode(DataBlock & data)150 int SimpleSyntax::encode(DataBlock& data)
151 {
152 int length = -1;
153 if (m_choiceType == INTEGER_VALUE) {
154 const DataBlock db = ASNLib::encodeInteger(m_integer_value,true);
155 data.append(db);
156 length = db.length();
157 }
158 if (m_choiceType == STRING_VALUE) {
159 const DataBlock db = ASNLib::encodeOctetString(m_string_value,true);
160 data.append(db);
161 length = db.length();
162 }
163 if (m_choiceType == OBJECTID_VALUE) {
164 const DataBlock db = ASNLib::encodeOID(m_objectID_value,true);
165 data.append(db);
166 length = db.length();
167 }
168 return length;
169 }
170
getParams(NamedList * params)171 void SimpleSyntax::getParams(NamedList* params)
172 {}
173
setParams(NamedList * params)174 void SimpleSyntax::setParams(NamedList* params)
175 {}
176
177 /**
178 * ApplicationSyntax
179 */
ApplicationSyntax()180 ApplicationSyntax::ApplicationSyntax()
181 {
182 m_ipAddress_value = new IpAddress();
183 m_counter_value = new Counter32();
184 m_timeticks_value = new TimeTicks();
185 m_arbitrary_value = new Opaque();
186 m_big_counter_value = new Counter64();
187 m_unsigned_integer_value = new Unsigned32();
188 }
189
ApplicationSyntax(void * data,int len)190 ApplicationSyntax::ApplicationSyntax(void* data, int len)
191 {
192 m_ipAddress_value = new IpAddress();
193 m_counter_value = new Counter32();
194 m_timeticks_value = new TimeTicks();
195 m_arbitrary_value = new Opaque();
196 m_big_counter_value = new Counter64();
197 m_unsigned_integer_value = new Unsigned32();
198
199 DataBlock db(data,len);
200 decode(db);
201 }
202
~ApplicationSyntax()203 ApplicationSyntax::~ApplicationSyntax()
204 {
205 TelEngine::destruct(m_ipAddress_value);
206 TelEngine::destruct(m_counter_value);
207 TelEngine::destruct(m_timeticks_value);
208 TelEngine::destruct(m_arbitrary_value);
209 TelEngine::destruct(m_big_counter_value);
210 TelEngine::destruct(m_unsigned_integer_value);
211 }
212
decode(DataBlock & data)213 int ApplicationSyntax::decode(DataBlock& data)
214 {
215 int length = 0;
216 length = m_ipAddress_value->decode(data);
217 if (length >= 0) {
218 m_choiceType = IPADDRESS_VALUE;
219 return length;
220 }
221 length = m_counter_value->decode(data);
222 if (length >= 0) {
223 m_choiceType = COUNTER_VALUE;
224 return length;
225 }
226 length = m_timeticks_value->decode(data);
227 if (length >= 0) {
228 m_choiceType = TIMETICKS_VALUE;
229 return length;
230 }
231 length = m_arbitrary_value->decode(data);
232 if (length >= 0) {
233 m_choiceType = ARBITRARY_VALUE;
234 return length;
235 }
236 length = m_big_counter_value->decode(data);
237 if (length >= 0) {
238 m_choiceType = BIG_COUNTER_VALUE;
239 return length;
240 }
241 length = m_unsigned_integer_value->decode(data);
242 if (length >= 0) {
243 m_choiceType = UNSIGNED_INTEGER_VALUE;
244 return length;
245 }
246 return length;
247 }
248
encode(DataBlock & data)249 int ApplicationSyntax::encode(DataBlock& data)
250 {
251 int length = -1;
252 if (m_choiceType == IPADDRESS_VALUE) {
253 length = m_ipAddress_value->encode(data);
254 }
255 if (m_choiceType == COUNTER_VALUE) {
256 length = m_counter_value->encode(data);
257 }
258 if (m_choiceType == TIMETICKS_VALUE) {
259 length = m_timeticks_value->encode(data);
260 }
261 if (m_choiceType == ARBITRARY_VALUE) {
262 length = m_arbitrary_value->encode(data);
263 }
264 if (m_choiceType == BIG_COUNTER_VALUE) {
265 length = m_big_counter_value->encode(data);
266 }
267 if (m_choiceType == UNSIGNED_INTEGER_VALUE) {
268 length = m_unsigned_integer_value->encode(data);
269 }
270 return length;
271 }
272
getParams(NamedList * params)273 void ApplicationSyntax::getParams(NamedList* params)
274 {}
275
setParams(NamedList * params)276 void ApplicationSyntax::setParams(NamedList* params)
277 {}
278
279 /**
280 * IpAddress
281 */
IpAddress()282 IpAddress::IpAddress()
283 {
284 }
285
IpAddress(void * data,int len)286 IpAddress::IpAddress(void* data, int len)
287 {
288 DataBlock db(data,len);
289 decode(db);
290 }
291
~IpAddress()292 IpAddress::~IpAddress()
293 {
294 }
295
decode(DataBlock & data)296 int IpAddress::decode(DataBlock& data)
297 {
298 int length = 0;
299 length = -1;
300 if (data.length() < 2)
301 return ASNLib::InvalidLengthOrTag;
302 if (data[0] == tag_IpAddress) {
303 data.cut(-1);
304 length = ASNLib::decodeOctetString(data,&m_IpAddress,false);
305 if (length != s_IpAddressSize)
306 DDebug(DebugAll,"Constraint break error");
307 }
308 return length;
309 }
310
encode(DataBlock & data)311 int IpAddress::encode(DataBlock& data)
312 {
313 int length = -1;
314 DataBlock contents;
315 u_int8_t tag = tag_IpAddress;
316 const DataBlock db = ASNLib::encodeOctetString(m_IpAddress,false);
317 contents.append(db);
318 length = db.length();
319 DataBlock len = ASNLib::buildLength(contents);
320 data.append(&tag,1);
321 data.append(len);
322 data.append(contents);
323 return length;
324 }
325
getParams(NamedList * params)326 void IpAddress::getParams(NamedList* params)
327 {}
328
setParams(NamedList * params)329 void IpAddress::setParams(NamedList* params)
330 {}
331
332 /**
333 * Counter32
334 */
Counter32()335 Counter32::Counter32()
336 {
337 }
338
Counter32(void * data,int len)339 Counter32::Counter32(void* data, int len)
340 {
341 DataBlock db(data,len);
342 decode(db);
343 }
344
~Counter32()345 Counter32::~Counter32()
346 {
347 }
348
decode(DataBlock & data)349 int Counter32::decode(DataBlock& data)
350 {
351 int length = 0;
352 length = -1;
353 if (data.length() < 2)
354 return ASNLib::InvalidLengthOrTag;
355 if (data[0] == tag_Counter32) {
356 data.cut(-1);
357 length = ASNLib::decodeUINT32(data,&m_Counter32,false);
358 if (m_Counter32 < s_Counter32MinSize)
359 DDebug(DebugAll,"Constraint break error");
360 if (s_Counter32MaxSize < m_Counter32)
361 DDebug(DebugAll,"Constraint break error");
362 }
363 return length;
364 }
365
encode(DataBlock & data)366 int Counter32::encode(DataBlock& data)
367 {
368 int length = -1;
369 DataBlock contents;
370 u_int8_t tag = tag_Counter32;
371 const DataBlock db = ASNLib::encodeInteger(m_Counter32,false);
372 contents.append(db);
373 length = db.length();
374 DataBlock len = ASNLib::buildLength(contents);
375 data.append(&tag,1);
376 data.append(len);
377 data.append(contents);
378 return length;
379 }
380
getParams(NamedList * params)381 void Counter32::getParams(NamedList* params)
382 {}
383
setParams(NamedList * params)384 void Counter32::setParams(NamedList* params)
385 {}
386
387 /**
388 * Unsigned32
389 */
Unsigned32()390 Unsigned32::Unsigned32()
391 {
392 }
393
Unsigned32(void * data,int len)394 Unsigned32::Unsigned32(void* data, int len)
395 {
396 DataBlock db(data,len);
397 decode(db);
398 }
399
~Unsigned32()400 Unsigned32::~Unsigned32()
401 {
402 }
403
decode(DataBlock & data)404 int Unsigned32::decode(DataBlock& data)
405 {
406 int length = 0;
407 length = -1;
408 if (data.length() < 2)
409 return ASNLib::InvalidLengthOrTag;
410 if (data[0] == tag_Unsigned32) {
411 data.cut(-1);
412 length = ASNLib::decodeUINT32(data,&m_Unsigned32,false);
413 if (m_Unsigned32 < s_Unsigned32MinSize)
414 DDebug(DebugAll,"Constraint break error");
415 if (s_Unsigned32MaxSize < m_Unsigned32)
416 DDebug(DebugAll,"Constraint break error");
417 }
418 return length;
419 }
420
encode(DataBlock & data)421 int Unsigned32::encode(DataBlock& data)
422 {
423 int length = -1;
424 DataBlock contents;
425 u_int8_t tag = tag_Unsigned32;
426 const DataBlock db = ASNLib::encodeInteger(m_Unsigned32,false);
427 contents.append(db);
428 length = db.length();
429 DataBlock len = ASNLib::buildLength(contents);
430 data.append(&tag,1);
431 data.append(len);
432 data.append(contents);
433 return length;
434 }
435
getParams(NamedList * params)436 void Unsigned32::getParams(NamedList* params)
437 {}
438
setParams(NamedList * params)439 void Unsigned32::setParams(NamedList* params)
440 {}
441
442 /**
443 * Gauge32
444 */
Gauge32()445 Gauge32::Gauge32()
446 {
447 m_Gauge32 = new Unsigned32();
448 }
449
Gauge32(void * data,int len)450 Gauge32::Gauge32(void* data, int len)
451 {
452 m_Gauge32 = new Unsigned32();
453
454 DataBlock db(data,len);
455 decode(db);
456 }
457
~Gauge32()458 Gauge32::~Gauge32()
459 {
460 TelEngine::destruct(m_Gauge32);
461 }
462
decode(DataBlock & data)463 int Gauge32::decode(DataBlock& data)
464 {
465 int length = 0;
466 length = m_Gauge32->decode(data);
467 return length;
468 }
469
encode(DataBlock & data)470 int Gauge32::encode(DataBlock& data)
471 {
472 int length = -1;
473 length = m_Gauge32->encode(data);
474 return length;
475 }
476
getParams(NamedList * params)477 void Gauge32::getParams(NamedList* params)
478 {}
479
setParams(NamedList * params)480 void Gauge32::setParams(NamedList* params)
481 {}
482
483 /**
484 * TimeTicks
485 */
TimeTicks()486 TimeTicks::TimeTicks()
487 {
488 }
489
TimeTicks(void * data,int len)490 TimeTicks::TimeTicks(void* data, int len)
491 {
492 DataBlock db(data,len);
493 decode(db);
494 }
495
~TimeTicks()496 TimeTicks::~TimeTicks()
497 {
498 }
499
decode(DataBlock & data)500 int TimeTicks::decode(DataBlock& data)
501 {
502 int length = 0;
503 length = -1;
504 if (data.length() < 2)
505 return ASNLib::InvalidLengthOrTag;
506 if (data[0] == tag_TimeTicks) {
507 data.cut(-1);
508 length = ASNLib::decodeUINT32(data,&m_TimeTicks,false);
509 if (m_TimeTicks < s_TimeTicksMinSize)
510 DDebug(DebugAll,"Constraint break error");
511 if (s_TimeTicksMaxSize < m_TimeTicks)
512 DDebug(DebugAll,"Constraint break error");
513 }
514 return length;
515 }
516
encode(DataBlock & data)517 int TimeTicks::encode(DataBlock& data)
518 {
519 int length = -1;
520 DataBlock contents;
521 u_int8_t tag = tag_TimeTicks;
522 const DataBlock db = ASNLib::encodeInteger(m_TimeTicks,false);
523 contents.append(db);
524 length = db.length();
525 DataBlock len = ASNLib::buildLength(contents);
526 data.append(&tag,1);
527 data.append(len);
528 data.append(contents);
529 return length;
530 }
531
getParams(NamedList * params)532 void TimeTicks::getParams(NamedList* params)
533 {}
534
setParams(NamedList * params)535 void TimeTicks::setParams(NamedList* params)
536 {}
537
538 /**
539 * Opaque
540 */
Opaque()541 Opaque::Opaque()
542 {
543 }
544
Opaque(void * data,int len)545 Opaque::Opaque(void* data, int len)
546 {
547 DataBlock db(data,len);
548 decode(db);
549 }
550
~Opaque()551 Opaque::~Opaque()
552 {
553 }
554
decode(DataBlock & data)555 int Opaque::decode(DataBlock& data)
556 {
557 int length = 0;
558 length = -1;
559 if (data.length() < 2)
560 return ASNLib::InvalidLengthOrTag;
561 if (data[0] == tag_Opaque) {
562 data.cut(-1);
563 length = ASNLib::decodeOctetString(data,&m_Opaque,false);
564 }
565 return length;
566 }
567
encode(DataBlock & data)568 int Opaque::encode(DataBlock& data)
569 {
570 int length = -1;
571 DataBlock contents;
572 u_int8_t tag = tag_Opaque;
573 const DataBlock db = ASNLib::encodeOctetString(m_Opaque,false);
574 contents.append(db);
575 length = db.length();
576 DataBlock len = ASNLib::buildLength(contents);
577 data.append(&tag,1);
578 data.append(len);
579 data.append(contents);
580 return length;
581 }
582
getParams(NamedList * params)583 void Opaque::getParams(NamedList* params)
584 {}
585
setParams(NamedList * params)586 void Opaque::setParams(NamedList* params)
587 {}
588
589 /**
590 * Counter64
591 */
Counter64()592 Counter64::Counter64()
593 {
594 }
595
Counter64(void * data,int len)596 Counter64::Counter64(void* data, int len)
597 {
598 DataBlock db(data,len);
599 decode(db);
600 }
601
~Counter64()602 Counter64::~Counter64()
603 {
604 }
605
decode(DataBlock & data)606 int Counter64::decode(DataBlock& data)
607 {
608 int length = 0;
609 length = -1;
610 if (data.length() < 2)
611 return ASNLib::InvalidLengthOrTag;
612 if (data[0] == tag_Counter64) {
613 data.cut(-1);
614 length = ASNLib::decodeUINT64(data,&m_Counter64,false);
615 if (m_Counter64 < s_Counter64MinSize)
616 DDebug(DebugAll,"Constraint break error");
617 if (s_Counter64MaxSize < m_Counter64)
618 DDebug(DebugAll,"Constraint break error");
619 }
620 return length;
621 }
622
encode(DataBlock & data)623 int Counter64::encode(DataBlock& data)
624 {
625 int length = -1;
626 DataBlock contents;
627 u_int8_t tag = tag_Counter64;
628 const DataBlock db = ASNLib::encodeInteger(m_Counter64,false);
629 contents.append(db);
630 length = db.length();
631 DataBlock len = ASNLib::buildLength(contents);
632 data.append(&tag,1);
633 data.append(len);
634 data.append(contents);
635 return length;
636 }
637
getParams(NamedList * params)638 void Counter64::getParams(NamedList* params)
639 {}
640
setParams(NamedList * params)641 void Counter64::setParams(NamedList* params)
642 {}
643
644 /**
645 * PDUs
646 */
PDUs()647 PDUs::PDUs()
648 {
649 m_get_request = new GetRequest_PDU();
650 m_get_next_request = new GetNextRequest_PDU();
651 m_get_bulk_request = new GetBulkRequest_PDU();
652 m_response = new Response_PDU();
653 m_set_request = new SetRequest_PDU();
654 m_inform_request = new InformRequest_PDU();
655 m_snmpV2_trap = new SNMPv2_Trap_PDU();
656 m_report = new Report_PDU();
657 }
658
PDUs(void * data,int len)659 PDUs::PDUs(void* data, int len)
660 {
661 m_get_request = new GetRequest_PDU();
662 m_get_next_request = new GetNextRequest_PDU();
663 m_get_bulk_request = new GetBulkRequest_PDU();
664 m_response = new Response_PDU();
665 m_set_request = new SetRequest_PDU();
666 m_inform_request = new InformRequest_PDU();
667 m_snmpV2_trap = new SNMPv2_Trap_PDU();
668 m_report = new Report_PDU();
669
670 DataBlock db(data,len);
671 decode(db);
672 }
673
~PDUs()674 PDUs::~PDUs()
675 {
676 TelEngine::destruct(m_get_request);
677 TelEngine::destruct(m_get_next_request);
678 TelEngine::destruct(m_get_bulk_request);
679 TelEngine::destruct(m_response);
680 TelEngine::destruct(m_set_request);
681 TelEngine::destruct(m_inform_request);
682 TelEngine::destruct(m_snmpV2_trap);
683 TelEngine::destruct(m_report);
684 }
685
decode(DataBlock & data)686 int PDUs::decode(DataBlock& data)
687 {
688 int length = 0;
689 length = m_get_request->decode(data);
690 if (length >= 0) {
691 m_choiceType = GET_REQUEST;
692 return length;
693 }
694 length = m_get_next_request->decode(data);
695 if (length >= 0) {
696 m_choiceType = GET_NEXT_REQUEST;
697 return length;
698 }
699 length = m_get_bulk_request->decode(data);
700 if (length >= 0) {
701 m_choiceType = GET_BULK_REQUEST;
702 return length;
703 }
704 length = m_response->decode(data);
705 if (length >= 0) {
706 m_choiceType = RESPONSE;
707 return length;
708 }
709 length = m_set_request->decode(data);
710 if (length >= 0) {
711 m_choiceType = SET_REQUEST;
712 return length;
713 }
714 length = m_inform_request->decode(data);
715 if (length >= 0) {
716 m_choiceType = INFORM_REQUEST;
717 return length;
718 }
719 length = m_snmpV2_trap->decode(data);
720 if (length >= 0) {
721 m_choiceType = SNMPV2_TRAP;
722 return length;
723 }
724 length = m_report->decode(data);
725 if (length >= 0) {
726 m_choiceType = REPORT;
727 return length;
728 }
729 return length;
730 }
731
encode(DataBlock & data)732 int PDUs::encode(DataBlock& data)
733 {
734 int length = -1;
735 if (m_choiceType == GET_REQUEST) {
736 length = m_get_request->encode(data);
737 }
738 if (m_choiceType == GET_NEXT_REQUEST) {
739 length = m_get_next_request->encode(data);
740 }
741 if (m_choiceType == GET_BULK_REQUEST) {
742 length = m_get_bulk_request->encode(data);
743 }
744 if (m_choiceType == RESPONSE) {
745 length = m_response->encode(data);
746 }
747 if (m_choiceType == SET_REQUEST) {
748 length = m_set_request->encode(data);
749 }
750 if (m_choiceType == INFORM_REQUEST) {
751 length = m_inform_request->encode(data);
752 }
753 if (m_choiceType == SNMPV2_TRAP) {
754 length = m_snmpV2_trap->encode(data);
755 }
756 if (m_choiceType == REPORT) {
757 length = m_report->encode(data);
758 }
759 return length;
760 }
761
getParams(NamedList * params)762 void PDUs::getParams(NamedList* params)
763 {}
764
setParams(NamedList * params)765 void PDUs::setParams(NamedList* params)
766 {}
767
768 /**
769 * GetRequest_PDU
770 */
GetRequest_PDU()771 GetRequest_PDU::GetRequest_PDU()
772 {
773 m_GetRequest_PDU = new PDU();
774 }
775
GetRequest_PDU(void * data,int len)776 GetRequest_PDU::GetRequest_PDU(void* data, int len)
777 {
778 m_GetRequest_PDU = new PDU();
779 DataBlock db(data,len);
780 decode(db);
781 }
782
~GetRequest_PDU()783 GetRequest_PDU::~GetRequest_PDU()
784 {
785 TelEngine::destruct(m_GetRequest_PDU);
786 }
787
decode(DataBlock & data)788 int GetRequest_PDU::decode(DataBlock& data)
789 {
790 int length = 0;
791 length = -1;
792 if (data.length() < 2)
793 return ASNLib::InvalidLengthOrTag;
794 if (data[0] == tag_GetRequest_PDU) {
795 data.cut(-1);
796 length = m_GetRequest_PDU->decode(data);
797 }
798 return length;
799 }
800
encode(DataBlock & data)801 int GetRequest_PDU::encode(DataBlock& data)
802 {
803 int length = -1;
804 DataBlock contents;
805 u_int8_t tag = tag_GetRequest_PDU;
806 length = m_GetRequest_PDU->encode(contents);
807 DataBlock len = ASNLib::buildLength(contents);
808 data.append(&tag,1);
809 data.append(len);
810 data.append(contents);
811 return length;
812 }
813
getParams(NamedList * params)814 void GetRequest_PDU::getParams(NamedList* params)
815 {}
816
setParams(NamedList * params)817 void GetRequest_PDU::setParams(NamedList* params)
818 {}
819
820 /**
821 * GetNextRequest_PDU
822 */
GetNextRequest_PDU()823 GetNextRequest_PDU::GetNextRequest_PDU()
824 {
825 m_GetNextRequest_PDU = new PDU();
826 }
827
GetNextRequest_PDU(void * data,int len)828 GetNextRequest_PDU::GetNextRequest_PDU(void* data, int len)
829 {
830 m_GetNextRequest_PDU = new PDU();
831 DataBlock db(data,len);
832 decode(db);
833 }
834
~GetNextRequest_PDU()835 GetNextRequest_PDU::~GetNextRequest_PDU()
836 {
837 TelEngine::destruct(m_GetNextRequest_PDU);
838 }
839
decode(DataBlock & data)840 int GetNextRequest_PDU::decode(DataBlock& data)
841 {
842 int length = 0;
843 length = -1;
844 if (data.length() < 2)
845 return ASNLib::InvalidLengthOrTag;
846 if (data[0] == tag_GetNextRequest_PDU) {
847 data.cut(-1);
848 length = m_GetNextRequest_PDU->decode(data);
849 }
850 return length;
851 }
852
encode(DataBlock & data)853 int GetNextRequest_PDU::encode(DataBlock& data)
854 {
855 int length = -1;
856 DataBlock contents;
857 u_int8_t tag = tag_GetNextRequest_PDU;
858 length = m_GetNextRequest_PDU->encode(contents);
859 DataBlock len = ASNLib::buildLength(contents);
860 data.append(&tag,1);
861 data.append(len);
862 data.append(contents);
863 return length;
864 }
865
getParams(NamedList * params)866 void GetNextRequest_PDU::getParams(NamedList* params)
867 {}
868
setParams(NamedList * params)869 void GetNextRequest_PDU::setParams(NamedList* params)
870 {}
871
872 /**
873 * Response_PDU
874 */
Response_PDU()875 Response_PDU::Response_PDU()
876 {
877 m_Response_PDU = new PDU();
878 }
879
Response_PDU(void * data,int len)880 Response_PDU::Response_PDU(void* data, int len)
881 {
882 m_Response_PDU = new PDU();
883 DataBlock db(data,len);
884 decode(db);
885 }
886
~Response_PDU()887 Response_PDU::~Response_PDU()
888 {
889 TelEngine::destruct(m_Response_PDU);
890 }
891
decode(DataBlock & data)892 int Response_PDU::decode(DataBlock& data)
893 {
894 int length = 0;
895 length = -1;
896 if (data.length() < 2)
897 return ASNLib::InvalidLengthOrTag;
898 if (data[0] == tag_Response_PDU) {
899 data.cut(-1);
900 length = m_Response_PDU->decode(data);
901 }
902 return length;
903 }
904
encode(DataBlock & data)905 int Response_PDU::encode(DataBlock& data)
906 {
907 int length = -1;
908 DataBlock contents;
909 u_int8_t tag = tag_Response_PDU;
910 length = m_Response_PDU->encode(contents);
911 DataBlock len = ASNLib::buildLength(contents);
912 data.append(&tag,1);
913 data.append(len);
914 data.append(contents);
915 return length;
916 }
917
getParams(NamedList * params)918 void Response_PDU::getParams(NamedList* params)
919 {}
920
setParams(NamedList * params)921 void Response_PDU::setParams(NamedList* params)
922 {}
923
924 /**
925 * SetRequest_PDU
926 */
SetRequest_PDU()927 SetRequest_PDU::SetRequest_PDU()
928 {
929 m_SetRequest_PDU = new PDU();
930 }
931
SetRequest_PDU(void * data,int len)932 SetRequest_PDU::SetRequest_PDU(void* data, int len)
933 {
934 m_SetRequest_PDU = new PDU();
935 DataBlock db(data,len);
936 decode(db);
937 }
938
~SetRequest_PDU()939 SetRequest_PDU::~SetRequest_PDU()
940 {
941 TelEngine::destruct(m_SetRequest_PDU);
942 }
943
decode(DataBlock & data)944 int SetRequest_PDU::decode(DataBlock& data)
945 {
946 int length = 0;
947 length = -1;
948 if (data.length() < 2)
949 return ASNLib::InvalidLengthOrTag;
950 if (data[0] == tag_SetRequest_PDU) {
951 data.cut(-1);
952 length = m_SetRequest_PDU->decode(data);
953 }
954 return length;
955 }
956
encode(DataBlock & data)957 int SetRequest_PDU::encode(DataBlock& data)
958 {
959 int length = -1;
960 DataBlock contents;
961 u_int8_t tag = tag_SetRequest_PDU;
962 length = m_SetRequest_PDU->encode(contents);
963 DataBlock len = ASNLib::buildLength(contents);
964 data.append(&tag,1);
965 data.append(len);
966 data.append(contents);
967 return length;
968 }
969
getParams(NamedList * params)970 void SetRequest_PDU::getParams(NamedList* params)
971 {}
972
setParams(NamedList * params)973 void SetRequest_PDU::setParams(NamedList* params)
974 {}
975
976 /**
977 * GetBulkRequest_PDU
978 */
GetBulkRequest_PDU()979 GetBulkRequest_PDU::GetBulkRequest_PDU()
980 {
981 m_GetBulkRequest_PDU = new BulkPDU();
982 }
983
GetBulkRequest_PDU(void * data,int len)984 GetBulkRequest_PDU::GetBulkRequest_PDU(void* data, int len)
985 {
986 m_GetBulkRequest_PDU = new BulkPDU();
987 DataBlock db(data,len);
988 decode(db);
989 }
990
~GetBulkRequest_PDU()991 GetBulkRequest_PDU::~GetBulkRequest_PDU()
992 {
993 TelEngine::destruct(m_GetBulkRequest_PDU);
994 }
995
decode(DataBlock & data)996 int GetBulkRequest_PDU::decode(DataBlock& data)
997 {
998 int length = 0;
999 length = -1;
1000 if (data.length() < 2)
1001 return ASNLib::InvalidLengthOrTag;
1002 if (data[0] == tag_GetBulkRequest_PDU) {
1003 data.cut(-1);
1004 length = m_GetBulkRequest_PDU->decode(data);
1005 }
1006 return length;
1007 }
1008
encode(DataBlock & data)1009 int GetBulkRequest_PDU::encode(DataBlock& data)
1010 {
1011 int length = -1;
1012 DataBlock contents;
1013 u_int8_t tag = tag_GetBulkRequest_PDU;
1014 length = m_GetBulkRequest_PDU->encode(contents);
1015 DataBlock len = ASNLib::buildLength(contents);
1016 data.append(&tag,1);
1017 data.append(len);
1018 data.append(contents);
1019 return length;
1020 }
1021
getParams(NamedList * params)1022 void GetBulkRequest_PDU::getParams(NamedList* params)
1023 {}
1024
setParams(NamedList * params)1025 void GetBulkRequest_PDU::setParams(NamedList* params)
1026 {}
1027
1028 /**
1029 * InformRequest_PDU
1030 */
InformRequest_PDU()1031 InformRequest_PDU::InformRequest_PDU()
1032 {
1033 m_InformRequest_PDU = new PDU();
1034 }
1035
InformRequest_PDU(void * data,int len)1036 InformRequest_PDU::InformRequest_PDU(void* data, int len)
1037 {
1038 m_InformRequest_PDU = new PDU();
1039 DataBlock db(data,len);
1040 decode(db);
1041 }
1042
~InformRequest_PDU()1043 InformRequest_PDU::~InformRequest_PDU()
1044 {
1045 TelEngine::destruct(m_InformRequest_PDU);
1046 }
1047
decode(DataBlock & data)1048 int InformRequest_PDU::decode(DataBlock& data)
1049 {
1050 int length = 0;
1051 length = -1;
1052 if (data.length() < 2)
1053 return ASNLib::InvalidLengthOrTag;
1054 if (data[0] == tag_InformRequest_PDU) {
1055 data.cut(-1);
1056 length = m_InformRequest_PDU->decode(data);
1057 }
1058 return length;
1059 }
1060
encode(DataBlock & data)1061 int InformRequest_PDU::encode(DataBlock& data)
1062 {
1063 int length = -1;
1064 DataBlock contents;
1065 u_int8_t tag = tag_InformRequest_PDU;
1066 length = m_InformRequest_PDU->encode(contents);
1067 DataBlock len = ASNLib::buildLength(contents);
1068 data.append(&tag,1);
1069 data.append(len);
1070 data.append(contents);
1071 return length;
1072 }
1073
getParams(NamedList * params)1074 void InformRequest_PDU::getParams(NamedList* params)
1075 {}
1076
setParams(NamedList * params)1077 void InformRequest_PDU::setParams(NamedList* params)
1078 {}
1079
1080 /**
1081 * SNMPv2_Trap_PDU
1082 */
SNMPv2_Trap_PDU()1083 SNMPv2_Trap_PDU::SNMPv2_Trap_PDU()
1084 {
1085 m_SNMPv2_Trap_PDU = new PDU();
1086 }
1087
SNMPv2_Trap_PDU(void * data,int len)1088 SNMPv2_Trap_PDU::SNMPv2_Trap_PDU(void* data, int len)
1089 {
1090 m_SNMPv2_Trap_PDU = new PDU();
1091 DataBlock db(data,len);
1092 decode(db);
1093 }
1094
~SNMPv2_Trap_PDU()1095 SNMPv2_Trap_PDU::~SNMPv2_Trap_PDU()
1096 {
1097 TelEngine::destruct(m_SNMPv2_Trap_PDU);
1098 }
1099
decode(DataBlock & data)1100 int SNMPv2_Trap_PDU::decode(DataBlock& data)
1101 {
1102 int length = 0;
1103 length = -1;
1104 if (data.length() < 2)
1105 return ASNLib::InvalidLengthOrTag;
1106 if (data[0] == tag_SNMPv2_Trap_PDU) {
1107 data.cut(-1);
1108 length = m_SNMPv2_Trap_PDU->decode(data);
1109 }
1110 return length;
1111 }
1112
encode(DataBlock & data)1113 int SNMPv2_Trap_PDU::encode(DataBlock& data)
1114 {
1115 int length = -1;
1116 DataBlock contents;
1117 u_int8_t tag = tag_SNMPv2_Trap_PDU;
1118 length = m_SNMPv2_Trap_PDU->encode(contents);
1119 DataBlock len = ASNLib::buildLength(contents);
1120 data.append(&tag,1);
1121 data.append(len);
1122 data.append(contents);
1123 return length;
1124 }
1125
getParams(NamedList * params)1126 void SNMPv2_Trap_PDU::getParams(NamedList* params)
1127 {}
1128
setParams(NamedList * params)1129 void SNMPv2_Trap_PDU::setParams(NamedList* params)
1130 {}
1131
1132 /**
1133 * Report_PDU
1134 */
Report_PDU()1135 Report_PDU::Report_PDU()
1136 {
1137 m_Report_PDU = new PDU();
1138 }
1139
Report_PDU(void * data,int len)1140 Report_PDU::Report_PDU(void* data, int len)
1141 {
1142 m_Report_PDU = new PDU();
1143 DataBlock db(data,len);
1144 decode(db);
1145 }
1146
~Report_PDU()1147 Report_PDU::~Report_PDU()
1148 {
1149 TelEngine::destruct(m_Report_PDU);
1150 }
1151
decode(DataBlock & data)1152 int Report_PDU::decode(DataBlock& data)
1153 {
1154 int length = 0;
1155 length = -1;
1156 if (data.length() < 2)
1157 return ASNLib::InvalidLengthOrTag;
1158 if (data[0] == tag_Report_PDU) {
1159 data.cut(-1);
1160 length = m_Report_PDU->decode(data);
1161 }
1162 return length;
1163 }
1164
encode(DataBlock & data)1165 int Report_PDU::encode(DataBlock& data)
1166 {
1167 int length = -1;
1168 DataBlock contents;
1169 u_int8_t tag = tag_Report_PDU;
1170 length = m_Report_PDU->encode(contents);
1171 DataBlock len = ASNLib::buildLength(contents);
1172 data.append(&tag,1);
1173 data.append(len);
1174 data.append(contents);
1175 return length;
1176 }
1177
getParams(NamedList * params)1178 void Report_PDU::getParams(NamedList* params)
1179 {}
1180
setParams(NamedList * params)1181 void Report_PDU::setParams(NamedList* params)
1182 {}
1183
1184 /**
1185 * PDU
1186 */
PDU()1187 PDU::PDU()
1188 {
1189 m_variable_bindings = new VarBindList();
1190 }
1191
PDU(void * data,int len)1192 PDU::PDU(void* data, int len)
1193 {
1194 m_variable_bindings = new VarBindList();
1195 DataBlock db(data,len);
1196 decode(db);
1197 }
1198
~PDU()1199 PDU::~PDU()
1200 {
1201 TelEngine::destruct(m_variable_bindings);
1202 }
1203
decode(DataBlock & data)1204 int PDU::decode(DataBlock& data)
1205 {
1206 int length = 0;
1207 length = ASNLib::decodeSequence(data,false);
1208 if (length < 0)
1209 return length;
1210 length = ASNLib::decodeINT32(data,&m_request_id,true);
1211 if (m_request_id < s_request_idMinSize)
1212 DDebug(DebugAll,"Constraint break error");
1213 if (s_request_idMaxSize < m_request_id)
1214 DDebug(DebugAll,"Constraint break error");
1215 length = ASNLib::decodeINT32(data,&m_error_status,true);
1216 if ( m_error_status < s_noError_error_status || m_error_status > s_inconsistentName_error_status)
1217 return ASNLib::InvalidContentsError;
1218 length = ASNLib::decodeINT32(data,&m_error_index,true);
1219 if (m_error_index < s_error_indexMinSize)
1220 DDebug(DebugAll,"Constraint break error");
1221 if (s_error_indexMaxSize < m_error_index)
1222 DDebug(DebugAll,"Constraint break error");
1223 length = m_variable_bindings->decode(data);
1224 return length;
1225 }
1226
encode(DataBlock & data)1227 int PDU::encode(DataBlock& data)
1228 {
1229 int length = -1;
1230 DataBlock seqDb;
1231 DataBlock db;
1232 length = 0;
1233 db = ASNLib::encodeInteger(m_request_id,true);
1234 seqDb.append(db);
1235 db = ASNLib::encodeInteger(m_error_status,true);
1236 seqDb.append(db);
1237 db = ASNLib::encodeInteger(m_error_index,true);
1238 seqDb.append(db);
1239 m_variable_bindings->encode(seqDb);
1240 length = ASNLib::encodeSequence(seqDb,false);
1241 data.append(seqDb);
1242 return length;
1243 }
1244
getParams(NamedList * params)1245 void PDU::getParams(NamedList* params)
1246 {}
1247
setParams(NamedList * params)1248 void PDU::setParams(NamedList* params)
1249 {}
1250
1251 /**
1252 * BulkPDU
1253 */
BulkPDU()1254 BulkPDU::BulkPDU()
1255 {
1256 m_variable_bindings = new VarBindList();
1257 }
1258
BulkPDU(void * data,int len)1259 BulkPDU::BulkPDU(void* data, int len)
1260 {
1261 m_variable_bindings = new VarBindList();
1262 DataBlock db(data,len);
1263 decode(db);
1264 }
1265
~BulkPDU()1266 BulkPDU::~BulkPDU()
1267 {
1268 TelEngine::destruct(m_variable_bindings);
1269 }
1270
decode(DataBlock & data)1271 int BulkPDU::decode(DataBlock& data)
1272 {
1273 int length = 0;
1274 length = ASNLib::decodeSequence(data,false);
1275 if (length < 0)
1276 return length;
1277 length = ASNLib::decodeINT32(data,&m_request_id,true);
1278 if (m_request_id < s_request_idMinSize)
1279 DDebug(DebugAll,"Constraint break error");
1280 if (s_request_idMaxSize < m_request_id)
1281 DDebug(DebugAll,"Constraint break error");
1282 length = ASNLib::decodeINT32(data,&m_non_repeaters,true);
1283 if (m_non_repeaters < s_non_repeatersMinSize)
1284 DDebug(DebugAll,"Constraint break error");
1285 if (s_non_repeatersMaxSize < m_non_repeaters)
1286 DDebug(DebugAll,"Constraint break error");
1287 length = ASNLib::decodeINT32(data,&m_max_repetitions,true);
1288 if (m_max_repetitions < s_max_repetitionsMinSize)
1289 DDebug(DebugAll,"Constraint break error");
1290 if (s_max_repetitionsMaxSize < m_max_repetitions)
1291 DDebug(DebugAll,"Constraint break error");
1292 length = m_variable_bindings->decode(data);
1293 return length;
1294 }
1295
encode(DataBlock & data)1296 int BulkPDU::encode(DataBlock& data)
1297 {
1298 int length = -1;
1299 DataBlock seqDb;
1300 DataBlock db;
1301 length = 0;
1302 db = ASNLib::encodeInteger(m_request_id,true);
1303 seqDb.append(db);
1304 db = ASNLib::encodeInteger(m_non_repeaters,true);
1305 seqDb.append(db);
1306 db = ASNLib::encodeInteger(m_max_repetitions,true);
1307 seqDb.append(db);
1308 m_variable_bindings->encode(seqDb);
1309 length = ASNLib::encodeSequence(seqDb,false);
1310 data.append(seqDb);
1311 return length;
1312 }
1313
getParams(NamedList * params)1314 void BulkPDU::getParams(NamedList* params)
1315 {}
1316
setParams(NamedList * params)1317 void BulkPDU::setParams(NamedList* params)
1318 {}
1319
1320 /**
1321 * VarBind
1322 */
VarBind()1323 VarBind::VarBind()
1324 {
1325 m_name = new ObjectName();
1326 m_value = new ObjectSyntax();
1327 }
1328
VarBind(void * data,int len)1329 VarBind::VarBind(void* data, int len)
1330 {
1331 m_name = new ObjectName();
1332 m_value = new ObjectSyntax();
1333 DataBlock db(data,len);
1334 decode(db);
1335 }
1336
~VarBind()1337 VarBind::~VarBind()
1338 {
1339 TelEngine::destruct(m_name);
1340 TelEngine::destruct(m_value);
1341 }
1342
decode(DataBlock & data)1343 int VarBind::decode(DataBlock& data)
1344 {
1345 int length = 0;
1346 length = ASNLib::decodeSequence(data,true);
1347 if (length < 0)
1348 return length;
1349 length = m_name->decode(data);
1350 length = m_value->decode(data);
1351 if (length >= 0) {
1352 m_choiceType = VALUE;
1353 return length;
1354 }
1355 length = ASNLib::decodeNull(data,true);
1356 if (length >= 0) {
1357 m_choiceType = UNSPECIFIED;
1358 return length;
1359 }
1360 length = -1;
1361 if (data.length() < 2)
1362 return ASNLib::InvalidLengthOrTag;
1363 if (data[0] == tag_noSuchObject) {
1364 data.cut(-1);
1365 length = ASNLib::decodeNull(data,false);
1366 }
1367 if (length >= 0) {
1368 m_choiceType = NOSUCHOBJECT;
1369 return length;
1370 }
1371 length = -1;
1372 if (data.length() < 2)
1373 return ASNLib::InvalidLengthOrTag;
1374 if (data[0] == tag_noSuchInstance) {
1375 data.cut(-1);
1376 length = ASNLib::decodeNull(data,false);
1377 }
1378 if (length >= 0) {
1379 m_choiceType = NOSUCHINSTANCE;
1380 return length;
1381 }
1382 length = -1;
1383 if (data.length() < 2)
1384 return ASNLib::InvalidLengthOrTag;
1385 if (data[0] == tag_endOfMibView) {
1386 data.cut(-1);
1387 length = ASNLib::decodeNull(data,false);
1388 }
1389 if (length >= 0) {
1390 m_choiceType = ENDOFMIBVIEW;
1391 return length;
1392 }
1393 return length;
1394 }
1395
encode(DataBlock & data)1396 int VarBind::encode(DataBlock& data)
1397 {
1398 int length = -1;
1399 DataBlock seqDb;
1400 DataBlock db;
1401 length = 0;
1402 m_name->encode(seqDb);
1403 if (m_choiceType == VALUE) {
1404 length = m_value->encode(seqDb);
1405 }
1406 if (m_choiceType == UNSPECIFIED) {
1407 DataBlock db = ASNLib::encodeNull(true);
1408 seqDb.append(db);
1409 length += seqDb.length();
1410 }
1411 if (m_choiceType == NOSUCHOBJECT) {
1412 DataBlock contents;
1413 u_int8_t tag = tag_noSuchObject;
1414 DataBlock db = ASNLib::encodeNull(false);
1415 contents.append(db);
1416 length += contents.length();
1417 DataBlock len = ASNLib::buildLength(contents);
1418 seqDb.append(&tag,1);
1419 seqDb.append(len);
1420 seqDb.append(contents);
1421 }
1422 if (m_choiceType == NOSUCHINSTANCE) {
1423 DataBlock contents;
1424 u_int8_t tag = tag_noSuchInstance;
1425 DataBlock db = ASNLib::encodeNull(false);
1426 contents.append(db);
1427 length += contents.length();
1428 DataBlock len = ASNLib::buildLength(contents);
1429 seqDb.append(&tag,1);
1430 seqDb.append(len);
1431 seqDb.append(contents);
1432 }
1433 if (m_choiceType == ENDOFMIBVIEW) {
1434 DataBlock contents;
1435 u_int8_t tag = tag_endOfMibView;
1436 DataBlock db = ASNLib::encodeNull(false);
1437 contents.append(db);
1438 length += contents.length();
1439 DataBlock len = ASNLib::buildLength(contents);
1440 seqDb.append(&tag,1);
1441 seqDb.append(len);
1442 seqDb.append(contents);
1443 }
1444
1445 seqDb.append(db);
1446 length = ASNLib::encodeSequence(seqDb,true);
1447 data.append(seqDb);
1448 return length;
1449 }
1450
getParams(NamedList * params)1451 void VarBind::getParams(NamedList* params)
1452 {}
1453
setParams(NamedList * params)1454 void VarBind::setParams(NamedList* params)
1455 {}
1456
1457 /**
1458 * VarBindList
1459 */
VarBindList()1460 VarBindList::VarBindList()
1461 {
1462 }
1463
VarBindList(void * data,int len)1464 VarBindList::VarBindList(void* data, int len)
1465 {
1466 DataBlock db(data,len);
1467 decode(db);
1468 }
1469
~VarBindList()1470 VarBindList::~VarBindList()
1471 {
1472 }
1473
decode(DataBlock & data)1474 int VarBindList::decode(DataBlock& data)
1475 {
1476 int length = 0;
1477 length = 0;
1478 length = ASNLib::decodeSequence(data,true);
1479 if (length < 0)
1480 return length;
1481 int l = 0;
1482 while (l > -1) {
1483 VarBind* obj = new VarBind();
1484 l = obj->decode(data);
1485 if (l > -1) {
1486 length += l;
1487 m_list.append(obj);
1488 }
1489 else
1490 TelEngine::destruct(obj);
1491 }
1492 return length;
1493 }
1494
encode(DataBlock & data)1495 int VarBindList::encode(DataBlock& data)
1496 {
1497 int length = -1;
1498 DataBlock db;
1499 length = 0;
1500 for (unsigned int i = 0; i < m_list.count(); i++) {
1501 VarBind* obj = static_cast<VarBind*>(m_list[i]);
1502 int l = obj->encode(db);
1503 if (l <= -1)
1504 return -1;
1505 length += l;
1506 }
1507 length = ASNLib::encodeSequence(db,true);
1508 if (length < 0)
1509 return length;
1510 data.append(db);
1511 return length;
1512 }
1513
getParams(NamedList * params)1514 void VarBindList::getParams(NamedList* params)
1515 {}
1516
setParams(NamedList * params)1517 void VarBindList::setParams(NamedList* params)
1518 {}
1519
1520 /**
1521 * DisplayString
1522 */
DisplayString()1523 DisplayString::DisplayString()
1524 {
1525 }
1526
DisplayString(void * data,int len)1527 DisplayString::DisplayString(void* data, int len)
1528 {
1529 DataBlock db(data,len);
1530 decode(db);
1531 }
1532
~DisplayString()1533 DisplayString::~DisplayString()
1534 {
1535 }
1536
decode(DataBlock & data)1537 int DisplayString::decode(DataBlock& data)
1538 {
1539 int length = 0;
1540 length = ASNLib::decodeOctetString(data,&m_DisplayString,true);
1541 if (length < s_DisplayStringSizeMinSize)
1542 DDebug(DebugAll,"Constraint break error");
1543 if (s_DisplayStringSizeMaxSize < length)
1544 DDebug(DebugAll,"Constraint break error");
1545 return length;
1546 }
1547
encode(DataBlock & data)1548 int DisplayString::encode(DataBlock& data)
1549 {
1550 int length = -1;
1551 const DataBlock db = ASNLib::encodeOctetString(m_DisplayString,true);
1552 data.append(db);
1553 length = db.length();
1554 return length;
1555 }
1556
getParams(NamedList * params)1557 void DisplayString::getParams(NamedList* params)
1558 {}
1559
setParams(NamedList * params)1560 void DisplayString::setParams(NamedList* params)
1561 {}
1562
1563 /**
1564 * PhysAddress
1565 */
PhysAddress()1566 PhysAddress::PhysAddress()
1567 {
1568 }
1569
PhysAddress(void * data,int len)1570 PhysAddress::PhysAddress(void* data, int len)
1571 {
1572 DataBlock db(data,len);
1573 decode(db);
1574 }
1575
~PhysAddress()1576 PhysAddress::~PhysAddress()
1577 {
1578 }
1579
decode(DataBlock & data)1580 int PhysAddress::decode(DataBlock& data)
1581 {
1582 int length = 0;
1583 length = ASNLib::decodeOctetString(data,&m_PhysAddress,true);
1584 return length;
1585 }
1586
encode(DataBlock & data)1587 int PhysAddress::encode(DataBlock& data)
1588 {
1589 int length = -1;
1590 const DataBlock db = ASNLib::encodeOctetString(m_PhysAddress,true);
1591 data.append(db);
1592 length = db.length();
1593 return length;
1594 }
1595
getParams(NamedList * params)1596 void PhysAddress::getParams(NamedList* params)
1597 {}
1598
setParams(NamedList * params)1599 void PhysAddress::setParams(NamedList* params)
1600 {}
1601
1602 /**
1603 * MacAddress
1604 */
MacAddress()1605 MacAddress::MacAddress()
1606 {
1607 }
1608
MacAddress(void * data,int len)1609 MacAddress::MacAddress(void* data, int len)
1610 {
1611 DataBlock db(data,len);
1612 decode(db);
1613 }
1614
~MacAddress()1615 MacAddress::~MacAddress()
1616 {
1617 }
1618
decode(DataBlock & data)1619 int MacAddress::decode(DataBlock& data)
1620 {
1621 int length = 0;
1622 length = ASNLib::decodeOctetString(data,&m_MacAddress,true);
1623 if (length != s_MacAddressSize)
1624 DDebug(DebugAll,"Constraint break error");
1625 return length;
1626 }
1627
encode(DataBlock & data)1628 int MacAddress::encode(DataBlock& data)
1629 {
1630 int length = -1;
1631 const DataBlock db = ASNLib::encodeOctetString(m_MacAddress,true);
1632 data.append(db);
1633 length = db.length();
1634 return length;
1635 }
1636
getParams(NamedList * params)1637 void MacAddress::getParams(NamedList* params)
1638 {}
1639
setParams(NamedList * params)1640 void MacAddress::setParams(NamedList* params)
1641 {}
1642
1643 /**
1644 * TruthValue
1645 */
TruthValue()1646 TruthValue::TruthValue()
1647 {
1648 }
1649
TruthValue(void * data,int len)1650 TruthValue::TruthValue(void* data, int len)
1651 {
1652 DataBlock db(data,len);
1653 decode(db);
1654 }
1655
~TruthValue()1656 TruthValue::~TruthValue()
1657 {
1658 }
1659
decode(DataBlock & data)1660 int TruthValue::decode(DataBlock& data)
1661 {
1662 int length = 0;
1663 length = ASNLib::decodeINT32(data,&m_TruthValue,true);
1664 if ( m_TruthValue < s_true_TruthValue || m_TruthValue > s_false_TruthValue)
1665 return ASNLib::InvalidContentsError;
1666 return length;
1667 }
1668
encode(DataBlock & data)1669 int TruthValue::encode(DataBlock& data)
1670 {
1671 int length = -1;
1672 const DataBlock db = ASNLib::encodeInteger(m_TruthValue,true);
1673 data.append(db);
1674 length = db.length();
1675 return length;
1676 }
1677
getParams(NamedList * params)1678 void TruthValue::getParams(NamedList* params)
1679 {}
1680
setParams(NamedList * params)1681 void TruthValue::setParams(NamedList* params)
1682 {}
1683
1684 /**
1685 * TestAndIncr
1686 */
TestAndIncr()1687 TestAndIncr::TestAndIncr()
1688 {
1689 }
1690
TestAndIncr(void * data,int len)1691 TestAndIncr::TestAndIncr(void* data, int len)
1692 {
1693 DataBlock db(data,len);
1694 decode(db);
1695 }
1696
~TestAndIncr()1697 TestAndIncr::~TestAndIncr()
1698 {
1699 }
1700
decode(DataBlock & data)1701 int TestAndIncr::decode(DataBlock& data)
1702 {
1703 int length = 0;
1704 length = ASNLib::decodeUINT32(data,&m_TestAndIncr,true);
1705 if (m_TestAndIncr < s_TestAndIncrMinSize)
1706 DDebug(DebugAll,"Constraint break error");
1707 if (s_TestAndIncrMaxSize < m_TestAndIncr)
1708 DDebug(DebugAll,"Constraint break error");
1709 return length;
1710 }
1711
encode(DataBlock & data)1712 int TestAndIncr::encode(DataBlock& data)
1713 {
1714 int length = -1;
1715 const DataBlock db = ASNLib::encodeInteger(m_TestAndIncr,true);
1716 data.append(db);
1717 length = db.length();
1718 return length;
1719 }
1720
getParams(NamedList * params)1721 void TestAndIncr::getParams(NamedList* params)
1722 {}
1723
setParams(NamedList * params)1724 void TestAndIncr::setParams(NamedList* params)
1725 {}
1726
1727 /**
1728 * AutonomousType
1729 */
AutonomousType()1730 AutonomousType::AutonomousType()
1731 {
1732 }
1733
AutonomousType(void * data,int len)1734 AutonomousType::AutonomousType(void* data, int len)
1735 {
1736 DataBlock db(data,len);
1737 decode(db);
1738 }
1739
~AutonomousType()1740 AutonomousType::~AutonomousType()
1741 {
1742 }
1743
decode(DataBlock & data)1744 int AutonomousType::decode(DataBlock& data)
1745 {
1746 int length = 0;
1747 length = ASNLib::decodeOID(data,&m_AutonomousType,true);
1748 return length;
1749 }
1750
encode(DataBlock & data)1751 int AutonomousType::encode(DataBlock& data)
1752 {
1753 int length = -1;
1754 const DataBlock db = ASNLib::encodeOID(m_AutonomousType,true);
1755 data.append(db);
1756 length = db.length();
1757 return length;
1758 }
1759
getParams(NamedList * params)1760 void AutonomousType::getParams(NamedList* params)
1761 {}
1762
setParams(NamedList * params)1763 void AutonomousType::setParams(NamedList* params)
1764 {}
1765
1766 /**
1767 * InstancePointer
1768 */
InstancePointer()1769 InstancePointer::InstancePointer()
1770 {
1771 }
1772
InstancePointer(void * data,int len)1773 InstancePointer::InstancePointer(void* data, int len)
1774 {
1775 DataBlock db(data,len);
1776 decode(db);
1777 }
1778
~InstancePointer()1779 InstancePointer::~InstancePointer()
1780 {
1781 }
1782
decode(DataBlock & data)1783 int InstancePointer::decode(DataBlock& data)
1784 {
1785 int length = 0;
1786 length = ASNLib::decodeOID(data,&m_InstancePointer,true);
1787 return length;
1788 }
1789
encode(DataBlock & data)1790 int InstancePointer::encode(DataBlock& data)
1791 {
1792 int length = -1;
1793 const DataBlock db = ASNLib::encodeOID(m_InstancePointer,true);
1794 data.append(db);
1795 length = db.length();
1796 return length;
1797 }
1798
getParams(NamedList * params)1799 void InstancePointer::getParams(NamedList* params)
1800 {}
1801
setParams(NamedList * params)1802 void InstancePointer::setParams(NamedList* params)
1803 {}
1804
1805 /**
1806 * VariablePointer
1807 */
VariablePointer()1808 VariablePointer::VariablePointer()
1809 {
1810 }
1811
VariablePointer(void * data,int len)1812 VariablePointer::VariablePointer(void* data, int len)
1813 {
1814 DataBlock db(data,len);
1815 decode(db);
1816 }
1817
~VariablePointer()1818 VariablePointer::~VariablePointer()
1819 {
1820 }
1821
decode(DataBlock & data)1822 int VariablePointer::decode(DataBlock& data)
1823 {
1824 int length = 0;
1825 length = ASNLib::decodeOID(data,&m_VariablePointer,true);
1826 return length;
1827 }
1828
encode(DataBlock & data)1829 int VariablePointer::encode(DataBlock& data)
1830 {
1831 int length = -1;
1832 const DataBlock db = ASNLib::encodeOID(m_VariablePointer,true);
1833 data.append(db);
1834 length = db.length();
1835 return length;
1836 }
1837
getParams(NamedList * params)1838 void VariablePointer::getParams(NamedList* params)
1839 {}
1840
setParams(NamedList * params)1841 void VariablePointer::setParams(NamedList* params)
1842 {}
1843
1844 /**
1845 * RowPointer
1846 */
RowPointer()1847 RowPointer::RowPointer()
1848 {
1849 }
1850
RowPointer(void * data,int len)1851 RowPointer::RowPointer(void* data, int len)
1852 {
1853 DataBlock db(data,len);
1854 decode(db);
1855 }
1856
~RowPointer()1857 RowPointer::~RowPointer()
1858 {
1859 }
1860
decode(DataBlock & data)1861 int RowPointer::decode(DataBlock& data)
1862 {
1863 int length = 0;
1864 length = ASNLib::decodeOID(data,&m_RowPointer,true);
1865 return length;
1866 }
1867
encode(DataBlock & data)1868 int RowPointer::encode(DataBlock& data)
1869 {
1870 int length = -1;
1871 const DataBlock db = ASNLib::encodeOID(m_RowPointer,true);
1872 data.append(db);
1873 length = db.length();
1874 return length;
1875 }
1876
getParams(NamedList * params)1877 void RowPointer::getParams(NamedList* params)
1878 {}
1879
setParams(NamedList * params)1880 void RowPointer::setParams(NamedList* params)
1881 {}
1882
1883 /**
1884 * RowStatus
1885 */
RowStatus()1886 RowStatus::RowStatus()
1887 {
1888 }
1889
RowStatus(void * data,int len)1890 RowStatus::RowStatus(void* data, int len)
1891 {
1892 DataBlock db(data,len);
1893 decode(db);
1894 }
1895
~RowStatus()1896 RowStatus::~RowStatus()
1897 {
1898 }
1899
decode(DataBlock & data)1900 int RowStatus::decode(DataBlock& data)
1901 {
1902 int length = 0;
1903 length = ASNLib::decodeINT32(data,&m_RowStatus,true);
1904 if ( m_RowStatus < s_active_RowStatus || m_RowStatus > s_destroy_RowStatus)
1905 return ASNLib::InvalidContentsError;
1906 return length;
1907 }
1908
encode(DataBlock & data)1909 int RowStatus::encode(DataBlock& data)
1910 {
1911 int length = -1;
1912 const DataBlock db = ASNLib::encodeInteger(m_RowStatus,true);
1913 data.append(db);
1914 length = db.length();
1915 return length;
1916 }
1917
getParams(NamedList * params)1918 void RowStatus::getParams(NamedList* params)
1919 {}
1920
setParams(NamedList * params)1921 void RowStatus::setParams(NamedList* params)
1922 {}
1923
1924 /**
1925 * TimeStamp
1926 */
TimeStamp()1927 TimeStamp::TimeStamp()
1928 {
1929 }
1930
TimeStamp(void * data,int len)1931 TimeStamp::TimeStamp(void* data, int len)
1932 {
1933 DataBlock db(data,len);
1934 decode(db);
1935 }
1936
~TimeStamp()1937 TimeStamp::~TimeStamp()
1938 {
1939 }
1940
decode(DataBlock & data)1941 int TimeStamp::decode(DataBlock& data)
1942 {
1943 int length = 0;
1944 length = m_TimeStamp->decode(data);
1945 return length;
1946 }
1947
encode(DataBlock & data)1948 int TimeStamp::encode(DataBlock& data)
1949 {
1950 int length = -1;
1951 length = m_TimeStamp->encode(data);
1952 return length;
1953 }
1954
getParams(NamedList * params)1955 void TimeStamp::getParams(NamedList* params)
1956 {}
1957
setParams(NamedList * params)1958 void TimeStamp::setParams(NamedList* params)
1959 {}
1960
1961 /**
1962 * TimeInterval
1963 */
TimeInterval()1964 TimeInterval::TimeInterval()
1965 {
1966 }
1967
TimeInterval(void * data,int len)1968 TimeInterval::TimeInterval(void* data, int len)
1969 {
1970 DataBlock db(data,len);
1971 decode(db);
1972 }
1973
~TimeInterval()1974 TimeInterval::~TimeInterval()
1975 {
1976 }
1977
decode(DataBlock & data)1978 int TimeInterval::decode(DataBlock& data)
1979 {
1980 int length = 0;
1981 length = ASNLib::decodeUINT32(data,&m_TimeInterval,true);
1982 if (m_TimeInterval < s_TimeIntervalMinSize)
1983 DDebug(DebugAll,"Constraint break error");
1984 if (s_TimeIntervalMaxSize < m_TimeInterval)
1985 DDebug(DebugAll,"Constraint break error");
1986 return length;
1987 }
1988
encode(DataBlock & data)1989 int TimeInterval::encode(DataBlock& data)
1990 {
1991 int length = -1;
1992 const DataBlock db = ASNLib::encodeInteger(m_TimeInterval,true);
1993 data.append(db);
1994 length = db.length();
1995 return length;
1996 }
1997
getParams(NamedList * params)1998 void TimeInterval::getParams(NamedList* params)
1999 {}
2000
setParams(NamedList * params)2001 void TimeInterval::setParams(NamedList* params)
2002 {}
2003
2004 /**
2005 * DateAndTime
2006 */
DateAndTime()2007 DateAndTime::DateAndTime()
2008 {
2009 }
2010
DateAndTime(void * data,int len)2011 DateAndTime::DateAndTime(void* data, int len)
2012 {
2013 DataBlock db(data,len);
2014 decode(db);
2015 }
2016
~DateAndTime()2017 DateAndTime::~DateAndTime()
2018 {
2019 }
2020
decode(DataBlock & data)2021 int DateAndTime::decode(DataBlock& data)
2022 {
2023 int length = 0;
2024 length = ASNLib::decodeOctetString(data,&m_DateAndTime,true);
2025 if (length != s_DateAndTimeSize_0)
2026 DDebug(DebugAll,"Constraint break error");
2027 if (length != s_DateAndTimeSize_1)
2028 DDebug(DebugAll,"Constraint break error");
2029 DDebug(DebugAll,"Constraint break error");
2030 return length;
2031 }
2032
encode(DataBlock & data)2033 int DateAndTime::encode(DataBlock& data)
2034 {
2035 int length = -1;
2036 const DataBlock db = ASNLib::encodeOctetString(m_DateAndTime,true);
2037 data.append(db);
2038 length = db.length();
2039 return length;
2040 }
2041
getParams(NamedList * params)2042 void DateAndTime::getParams(NamedList* params)
2043 {}
2044
setParams(NamedList * params)2045 void DateAndTime::setParams(NamedList* params)
2046 {}
2047
2048 /**
2049 * StorageType
2050 */
StorageType()2051 StorageType::StorageType()
2052 {
2053 }
2054
StorageType(void * data,int len)2055 StorageType::StorageType(void* data, int len)
2056 {
2057 DataBlock db(data,len);
2058 decode(db);
2059 }
2060
~StorageType()2061 StorageType::~StorageType()
2062 {
2063 }
2064
decode(DataBlock & data)2065 int StorageType::decode(DataBlock& data)
2066 {
2067 int length = 0;
2068 length = ASNLib::decodeINT32(data,&m_StorageType,true);
2069 if ( m_StorageType < s_other_StorageType || m_StorageType > s_readOnly_StorageType)
2070 return ASNLib::InvalidContentsError;
2071 return length;
2072 }
2073
encode(DataBlock & data)2074 int StorageType::encode(DataBlock& data)
2075 {
2076 int length = -1;
2077 const DataBlock db = ASNLib::encodeInteger(m_StorageType,true);
2078 data.append(db);
2079 length = db.length();
2080 return length;
2081 }
2082
getParams(NamedList * params)2083 void StorageType::getParams(NamedList* params)
2084 {}
2085
setParams(NamedList * params)2086 void StorageType::setParams(NamedList* params)
2087 {}
2088
2089 /**
2090 * TDomain
2091 */
TDomain()2092 TDomain::TDomain()
2093 {
2094 }
2095
TDomain(void * data,int len)2096 TDomain::TDomain(void* data, int len)
2097 {
2098 DataBlock db(data,len);
2099 decode(db);
2100 }
2101
~TDomain()2102 TDomain::~TDomain()
2103 {
2104 }
2105
decode(DataBlock & data)2106 int TDomain::decode(DataBlock& data)
2107 {
2108 int length = 0;
2109 length = ASNLib::decodeOID(data,&m_TDomain,true);
2110 return length;
2111 }
2112
encode(DataBlock & data)2113 int TDomain::encode(DataBlock& data)
2114 {
2115 int length = -1;
2116 const DataBlock db = ASNLib::encodeOID(m_TDomain,true);
2117 data.append(db);
2118 length = db.length();
2119 return length;
2120 }
2121
getParams(NamedList * params)2122 void TDomain::getParams(NamedList* params)
2123 {}
2124
setParams(NamedList * params)2125 void TDomain::setParams(NamedList* params)
2126 {}
2127
2128 /**
2129 * TAddress
2130 */
TAddress()2131 TAddress::TAddress()
2132 {
2133 }
2134
TAddress(void * data,int len)2135 TAddress::TAddress(void* data, int len)
2136 {
2137 DataBlock db(data,len);
2138 decode(db);
2139 }
2140
~TAddress()2141 TAddress::~TAddress()
2142 {
2143 }
2144
decode(DataBlock & data)2145 int TAddress::decode(DataBlock& data)
2146 {
2147 int length = 0;
2148 length = ASNLib::decodeOctetString(data,&m_TAddress,true);
2149 if (length < s_TAddressSizeMinSize)
2150 DDebug(DebugAll,"Constraint break error");
2151 if (s_TAddressSizeMaxSize < length)
2152 DDebug(DebugAll,"Constraint break error");
2153 return length;
2154 }
2155
encode(DataBlock & data)2156 int TAddress::encode(DataBlock& data)
2157 {
2158 int length = -1;
2159 const DataBlock db = ASNLib::encodeOctetString(m_TAddress,true);
2160 data.append(db);
2161 length = db.length();
2162 return length;
2163 }
2164
getParams(NamedList * params)2165 void TAddress::getParams(NamedList* params)
2166 {}
2167
setParams(NamedList * params)2168 void TAddress::setParams(NamedList* params)
2169 {}
2170
2171 /**
2172 * SNMPv3Message
2173 */
SNMPv3Message()2174 SNMPv3Message::SNMPv3Message()
2175 {
2176 m_msgGlobalData = new HeaderData();
2177 m_msgData = new ScopedPduData();
2178 }
2179
SNMPv3Message(void * data,int len)2180 SNMPv3Message::SNMPv3Message(void* data, int len)
2181 {
2182 m_msgGlobalData = new HeaderData();
2183 m_msgData = new ScopedPduData();
2184 DataBlock db(data,len);
2185 decode(db);
2186 }
2187
~SNMPv3Message()2188 SNMPv3Message::~SNMPv3Message()
2189 {
2190 TelEngine::destruct(m_msgGlobalData);
2191 TelEngine::destruct(m_msgData);
2192 }
2193
decode(DataBlock & data)2194 int SNMPv3Message::decode(DataBlock& data)
2195 {
2196 int length = 0;
2197 length = ASNLib::decodeSequence(data,true);
2198 if (length < 0)
2199 return length;
2200 length = ASNLib::decodeUINT32(data,&m_msgVersion,true);
2201 if (m_msgVersion < s_msgVersionMinSize)
2202 DDebug(DebugAll,"Constraint break error");
2203 if (s_msgVersionMaxSize < m_msgVersion)
2204 DDebug(DebugAll,"Constraint break error");
2205 length = m_msgGlobalData->decode(data);
2206 length = ASNLib::decodeOctetString(data,&m_msgSecurityParameters,true);
2207 length = m_msgData->decode(data);
2208 return length;
2209 }
2210
encode(DataBlock & data)2211 int SNMPv3Message::encode(DataBlock& data)
2212 {
2213 int length = -1;
2214 DataBlock seqDb;
2215 DataBlock db;
2216 length = 0;
2217 db = ASNLib::encodeInteger(m_msgVersion,true);
2218 seqDb.append(db);
2219 m_msgGlobalData->encode(seqDb);
2220 db = ASNLib::encodeOctetString(m_msgSecurityParameters,true);
2221 seqDb.append(db);
2222 m_msgData->encode(seqDb);
2223 length = ASNLib::encodeSequence(seqDb,true);
2224 data.append(seqDb);
2225 return length;
2226 }
2227
getParams(NamedList * params)2228 void SNMPv3Message::getParams(NamedList* params)
2229 {}
2230
setParams(NamedList * params)2231 void SNMPv3Message::setParams(NamedList* params)
2232 {}
2233
2234 /**
2235 * HeaderData
2236 */
HeaderData()2237 HeaderData::HeaderData()
2238 {
2239 }
2240
HeaderData(void * data,int len)2241 HeaderData::HeaderData(void* data, int len)
2242 {
2243 DataBlock db(data,len);
2244 decode(db);
2245 }
2246
~HeaderData()2247 HeaderData::~HeaderData()
2248 {
2249 }
2250
decode(DataBlock & data)2251 int HeaderData::decode(DataBlock& data)
2252 {
2253 int length = 0;
2254 length = ASNLib::decodeSequence(data,true);
2255 if (length < 0)
2256 return length;
2257 length = ASNLib::decodeUINT32(data,&m_msgID,true);
2258 if (m_msgID < s_msgIDMinSize)
2259 DDebug(DebugAll,"Constraint break error");
2260 if (s_msgIDMaxSize < m_msgID)
2261 DDebug(DebugAll,"Constraint break error");
2262 length = ASNLib::decodeUINT32(data,&m_msgMaxSize,true);
2263 if (m_msgMaxSize < s_msgMaxSizeMinSize)
2264 DDebug(DebugAll,"Constraint break error");
2265 if (s_msgMaxSizeMaxSize < m_msgMaxSize)
2266 DDebug(DebugAll,"Constraint break error");
2267 length = ASNLib::decodeOctetString(data,&m_msgFlags,true);
2268 if (length != s_msgFlagsSize)
2269 DDebug(DebugAll,"Constraint break error");
2270 length = ASNLib::decodeUINT32(data,&m_msgSecurityModel,true);
2271 if (m_msgSecurityModel < s_msgSecurityModelMinSize)
2272 DDebug(DebugAll,"Constraint break error");
2273 if (s_msgSecurityModelMaxSize < m_msgSecurityModel)
2274 DDebug(DebugAll,"Constraint break error");
2275 return length;
2276 }
2277
encode(DataBlock & data)2278 int HeaderData::encode(DataBlock& data)
2279 {
2280 int length = -1;
2281 DataBlock seqDb;
2282 DataBlock db;
2283 length = 0;
2284 db = ASNLib::encodeInteger(m_msgID,true);
2285 seqDb.append(db);
2286 db = ASNLib::encodeInteger(m_msgMaxSize,true);
2287 seqDb.append(db);
2288 db = ASNLib::encodeOctetString(m_msgFlags,true);
2289 seqDb.append(db);
2290 db = ASNLib::encodeInteger(m_msgSecurityModel,true);
2291 seqDb.append(db);
2292 length = ASNLib::encodeSequence(seqDb,true);
2293 data.append(seqDb);
2294 return length;
2295 }
2296
getParams(NamedList * params)2297 void HeaderData::getParams(NamedList* params)
2298 {}
2299
setParams(NamedList * params)2300 void HeaderData::setParams(NamedList* params)
2301 {}
2302
2303 /**
2304 * ScopedPduData
2305 */
ScopedPduData()2306 ScopedPduData::ScopedPduData()
2307 {
2308 m_plaintext = new ScopedPDU();
2309 }
2310
ScopedPduData(void * data,int len)2311 ScopedPduData::ScopedPduData(void* data, int len)
2312 {
2313 m_plaintext = new ScopedPDU();
2314 DataBlock db(data,len);
2315 decode(db);
2316 }
2317
~ScopedPduData()2318 ScopedPduData::~ScopedPduData()
2319 {
2320 TelEngine::destruct(m_plaintext);
2321 }
2322
decode(DataBlock & data)2323 int ScopedPduData::decode(DataBlock& data)
2324 {
2325 int length = 0;
2326 length = m_plaintext->decode(data);
2327 if (length >= 0) {
2328 m_choiceType = PLAINTEXT;
2329 return length;
2330 }
2331 length = ASNLib::decodeOctetString(data,&m_encryptedPDU,true);
2332 if (length >= 0) {
2333 m_choiceType = ENCRYPTEDPDU;
2334 return length;
2335 }
2336 return length;
2337 }
2338
encode(DataBlock & data)2339 int ScopedPduData::encode(DataBlock& data)
2340 {
2341 int length = -1;
2342 if (m_choiceType == PLAINTEXT) {
2343 length = m_plaintext->encode(data);
2344 }
2345 if (m_choiceType == ENCRYPTEDPDU) {
2346 const DataBlock db = ASNLib::encodeOctetString(m_encryptedPDU,true);
2347 data.append(db);
2348 length = db.length();
2349 }
2350 return length;
2351 }
2352
getParams(NamedList * params)2353 void ScopedPduData::getParams(NamedList* params)
2354 {}
2355
setParams(NamedList * params)2356 void ScopedPduData::setParams(NamedList* params)
2357 {}
2358
2359 /**
2360 * ScopedPDU
2361 */
ScopedPDU()2362 ScopedPDU::ScopedPDU()
2363 {
2364 }
2365
ScopedPDU(void * data,int len)2366 ScopedPDU::ScopedPDU(void* data, int len)
2367 {
2368 DataBlock db(data,len);
2369 decode(db);
2370 }
2371
~ScopedPDU()2372 ScopedPDU::~ScopedPDU()
2373 {
2374 }
2375
decode(DataBlock & data)2376 int ScopedPDU::decode(DataBlock& data)
2377 {
2378 int length = 0;
2379 length = ASNLib::decodeSequence(data,true);
2380 if (length < 0)
2381 return length;
2382 length = ASNLib::decodeOctetString(data,&m_contextEngineID,true);
2383 length = ASNLib::decodeOctetString(data,&m_contextName,true);
2384 length = ASNLib::decodeAny(data,&m_data,true);
2385 if (length < 0)
2386 return length;
2387 return length;
2388 }
2389
encode(DataBlock & data)2390 int ScopedPDU::encode(DataBlock& data)
2391 {
2392 int length = -1;
2393 DataBlock seqDb;
2394 DataBlock db;
2395 length = 0;
2396 db = ASNLib::encodeOctetString(m_contextEngineID,true);
2397 seqDb.append(db);
2398 db = ASNLib::encodeOctetString(m_contextName,true);
2399 seqDb.append(db);
2400 db = ASNLib::encodeAny(m_data,true);
2401 seqDb.append(db);
2402 length = ASNLib::encodeSequence(seqDb,true);
2403 data.append(seqDb);
2404 return length;
2405 }
2406
getParams(NamedList * params)2407 void ScopedPDU::getParams(NamedList* params)
2408 {}
2409
setParams(NamedList * params)2410 void ScopedPDU::setParams(NamedList* params)
2411 {}
2412
2413 /**
2414 * Message
2415 */
Message()2416 Message::Message()
2417 {
2418 }
2419
Message(void * data,int len)2420 Message::Message(void* data, int len)
2421 {
2422 DataBlock db(data,len);
2423 decode(db);
2424 }
2425
~Message()2426 Message::~Message()
2427 {
2428 }
2429
decode(DataBlock & data)2430 int Message::decode(DataBlock& data)
2431 {
2432 int length = 0;
2433 length = ASNLib::decodeSequence(data,true);
2434 if (length < 0)
2435 return length;
2436 length = ASNLib::decodeINT32(data,&m_version,true);
2437 if ( m_version < s_version_1_version || m_version > s_version_2_version)
2438 return ASNLib::InvalidContentsError;
2439 length = ASNLib::decodeOctetString(data,&m_community,true);
2440 length = ASNLib::decodeAny(data,&m_data,true);
2441 if (length < 0)
2442 return length;
2443 return length;
2444 }
2445
encode(DataBlock & data)2446 int Message::encode(DataBlock& data)
2447 {
2448 int length = -1;
2449 DataBlock seqDb;
2450 DataBlock db;
2451 length = 0;
2452 db = ASNLib::encodeInteger(m_version,true);
2453 seqDb.append(db);
2454 db = ASNLib::encodeOctetString(m_community,true);
2455 seqDb.append(db);
2456 db = ASNLib::encodeAny(m_data,true);
2457 seqDb.append(db);
2458 length = ASNLib::encodeSequence(seqDb,true);
2459 data.append(seqDb);
2460 return length;
2461 }
2462
getParams(NamedList * params)2463 void Message::getParams(NamedList* params)
2464 {}
2465
setParams(NamedList * params)2466 void Message::setParams(NamedList* params)
2467 {}
2468
2469 /**
2470 * KeyChange
2471 */
KeyChange()2472 KeyChange::KeyChange()
2473 {
2474 }
2475
KeyChange(void * data,int len)2476 KeyChange::KeyChange(void* data, int len)
2477 {
2478 DataBlock db(data,len);
2479 decode(db);
2480 }
2481
~KeyChange()2482 KeyChange::~KeyChange()
2483 {
2484 }
2485
decode(DataBlock & data)2486 int KeyChange::decode(DataBlock& data)
2487 {
2488 int length = 0;
2489 length = ASNLib::decodeOctetString(data,&m_KeyChange,true);
2490 return length;
2491 }
2492
encode(DataBlock & data)2493 int KeyChange::encode(DataBlock& data)
2494 {
2495 int length = -1;
2496 const DataBlock db = ASNLib::encodeOctetString(m_KeyChange,true);
2497 data.append(db);
2498 length = db.length();
2499 return length;
2500 }
2501
getParams(NamedList * params)2502 void KeyChange::getParams(NamedList* params)
2503 {}
2504
setParams(NamedList * params)2505 void KeyChange::setParams(NamedList* params)
2506 {}
2507
2508 /**
2509 * UsmUserEntry
2510 */
UsmUserEntry()2511 UsmUserEntry::UsmUserEntry()
2512 {
2513 m_usmUserEngineID = new SnmpEngineID();
2514 m_usmUserName = new SnmpAdminString();
2515 m_usmUserSecurityName = new SnmpAdminString();
2516 m_usmUserCloneFrom = new RowPointer();
2517 m_usmUserAuthProtocol = new AutonomousType();
2518 m_usmUserAuthKeyChange = new KeyChange();
2519 m_usmUserOwnAuthKeyChange = new KeyChange();
2520 m_usmUserPrivProtocol = new AutonomousType();
2521 m_usmUserPrivKeyChange = new KeyChange();
2522 m_usmUserOwnPrivKeyChange = new KeyChange();
2523 m_usmUserStorageType = new StorageType();
2524 m_usmUserStatus = new RowStatus();
2525 }
2526
UsmUserEntry(void * data,int len)2527 UsmUserEntry::UsmUserEntry(void* data, int len)
2528 {
2529 m_usmUserEngineID = new SnmpEngineID();
2530 m_usmUserName = new SnmpAdminString();
2531 m_usmUserSecurityName = new SnmpAdminString();
2532 m_usmUserCloneFrom = new RowPointer();
2533 m_usmUserAuthProtocol = new AutonomousType();
2534 m_usmUserAuthKeyChange = new KeyChange();
2535 m_usmUserOwnAuthKeyChange = new KeyChange();
2536 m_usmUserPrivProtocol = new AutonomousType();
2537 m_usmUserPrivKeyChange = new KeyChange();
2538 m_usmUserOwnPrivKeyChange = new KeyChange();
2539 m_usmUserStorageType = new StorageType();
2540 m_usmUserStatus = new RowStatus();
2541
2542 DataBlock db(data,len);
2543 decode(db);
2544 }
2545
~UsmUserEntry()2546 UsmUserEntry::~UsmUserEntry()
2547 {
2548 TelEngine::destruct(m_usmUserEngineID);
2549 TelEngine::destruct(m_usmUserName);
2550 TelEngine::destruct(m_usmUserSecurityName);
2551 TelEngine::destruct(m_usmUserCloneFrom);
2552 TelEngine::destruct(m_usmUserAuthProtocol);
2553 TelEngine::destruct(m_usmUserAuthKeyChange);
2554 TelEngine::destruct(m_usmUserOwnAuthKeyChange);
2555 TelEngine::destruct(m_usmUserPrivProtocol);
2556 TelEngine::destruct(m_usmUserPrivKeyChange);
2557 TelEngine::destruct(m_usmUserOwnPrivKeyChange);
2558 TelEngine::destruct(m_usmUserStorageType);
2559 TelEngine::destruct(m_usmUserStatus);
2560 }
2561
decode(DataBlock & data)2562 int UsmUserEntry::decode(DataBlock& data)
2563 {
2564 int length = 0;
2565 length = ASNLib::decodeSequence(data,true);
2566 if (length < 0)
2567 return length;
2568 length = m_usmUserEngineID->decode(data);
2569 length = m_usmUserName->decode(data);
2570 length = m_usmUserSecurityName->decode(data);
2571 length = m_usmUserCloneFrom->decode(data);
2572 length = m_usmUserAuthProtocol->decode(data);
2573 length = m_usmUserAuthKeyChange->decode(data);
2574 length = m_usmUserOwnAuthKeyChange->decode(data);
2575 length = m_usmUserPrivProtocol->decode(data);
2576 length = m_usmUserPrivKeyChange->decode(data);
2577 length = m_usmUserOwnPrivKeyChange->decode(data);
2578 length = ASNLib::decodeOctetString(data,&m_usmUserPublic,true);
2579 length = m_usmUserStorageType->decode(data);
2580 length = m_usmUserStatus->decode(data);
2581 return length;
2582 }
2583
encode(DataBlock & data)2584 int UsmUserEntry::encode(DataBlock& data)
2585 {
2586 int length = -1;
2587 DataBlock seqDb;
2588 DataBlock db;
2589 length = 0;
2590 m_usmUserEngineID->encode(seqDb);
2591 m_usmUserName->encode(seqDb);
2592 m_usmUserSecurityName->encode(seqDb);
2593 m_usmUserCloneFrom->encode(seqDb);
2594 m_usmUserAuthProtocol->encode(seqDb);
2595 m_usmUserAuthKeyChange->encode(seqDb);
2596 m_usmUserOwnAuthKeyChange->encode(seqDb);
2597 m_usmUserPrivProtocol->encode(seqDb);
2598 m_usmUserPrivKeyChange->encode(seqDb);
2599 m_usmUserOwnPrivKeyChange->encode(seqDb);
2600 db = ASNLib::encodeOctetString(m_usmUserPublic,true);
2601 seqDb.append(db);
2602 m_usmUserStorageType->encode(seqDb);
2603 m_usmUserStatus->encode(seqDb);
2604 length = ASNLib::encodeSequence(seqDb,true);
2605 data.append(seqDb);
2606 return length;
2607 }
2608
getParams(NamedList * params)2609 void UsmUserEntry::getParams(NamedList* params)
2610 {}
2611
setParams(NamedList * params)2612 void UsmUserEntry::setParams(NamedList* params)
2613 {}
2614
2615 /**
2616 * SnmpEngineID
2617 */
SnmpEngineID()2618 SnmpEngineID::SnmpEngineID()
2619 {
2620 }
2621
SnmpEngineID(void * data,int len)2622 SnmpEngineID::SnmpEngineID(void* data, int len)
2623 {
2624 DataBlock db(data,len);
2625 decode(db);
2626 }
2627
~SnmpEngineID()2628 SnmpEngineID::~SnmpEngineID()
2629 {
2630 }
2631
decode(DataBlock & data)2632 int SnmpEngineID::decode(DataBlock& data)
2633 {
2634 int length = 0;
2635 length = ASNLib::decodeOctetString(data,&m_SnmpEngineID,true);
2636 if (length < s_SnmpEngineIDSizeMinSize)
2637 DDebug(DebugAll,"Constraint break error");
2638 if (s_SnmpEngineIDSizeMaxSize < length)
2639 DDebug(DebugAll,"Constraint break error");
2640 return length;
2641 }
2642
encode(DataBlock & data)2643 int SnmpEngineID::encode(DataBlock& data)
2644 {
2645 int length = -1;
2646 const DataBlock db = ASNLib::encodeOctetString(m_SnmpEngineID,true);
2647 data.append(db);
2648 length = db.length();
2649 return length;
2650 }
2651
getParams(NamedList * params)2652 void SnmpEngineID::getParams(NamedList* params)
2653 {}
2654
setParams(NamedList * params)2655 void SnmpEngineID::setParams(NamedList* params)
2656 {}
2657
2658 /**
2659 * SnmpSecurityModel
2660 */
SnmpSecurityModel()2661 SnmpSecurityModel::SnmpSecurityModel()
2662 {
2663 }
2664
SnmpSecurityModel(void * data,int len)2665 SnmpSecurityModel::SnmpSecurityModel(void* data, int len)
2666 {
2667 DataBlock db(data,len);
2668 decode(db);
2669 }
2670
~SnmpSecurityModel()2671 SnmpSecurityModel::~SnmpSecurityModel()
2672 {
2673 }
2674
decode(DataBlock & data)2675 int SnmpSecurityModel::decode(DataBlock& data)
2676 {
2677 int length = 0;
2678 length = ASNLib::decodeUINT32(data,&m_SnmpSecurityModel,true);
2679 if (m_SnmpSecurityModel < s_SnmpSecurityModelMinSize)
2680 DDebug(DebugAll,"Constraint break error");
2681 if (s_SnmpSecurityModelMaxSize < m_SnmpSecurityModel)
2682 DDebug(DebugAll,"Constraint break error");
2683 return length;
2684 }
2685
encode(DataBlock & data)2686 int SnmpSecurityModel::encode(DataBlock& data)
2687 {
2688 int length = -1;
2689 const DataBlock db = ASNLib::encodeInteger(m_SnmpSecurityModel,true);
2690 data.append(db);
2691 length = db.length();
2692 return length;
2693 }
2694
getParams(NamedList * params)2695 void SnmpSecurityModel::getParams(NamedList* params)
2696 {}
2697
setParams(NamedList * params)2698 void SnmpSecurityModel::setParams(NamedList* params)
2699 {}
2700
2701 /**
2702 * SnmpMessageProcessingModel
2703 */
SnmpMessageProcessingModel()2704 SnmpMessageProcessingModel::SnmpMessageProcessingModel()
2705 {
2706 }
2707
SnmpMessageProcessingModel(void * data,int len)2708 SnmpMessageProcessingModel::SnmpMessageProcessingModel(void* data, int len)
2709 {
2710 DataBlock db(data,len);
2711 decode(db);
2712 }
2713
~SnmpMessageProcessingModel()2714 SnmpMessageProcessingModel::~SnmpMessageProcessingModel()
2715 {
2716 }
2717
decode(DataBlock & data)2718 int SnmpMessageProcessingModel::decode(DataBlock& data)
2719 {
2720 int length = 0;
2721 length = ASNLib::decodeUINT32(data,&m_SnmpMessageProcessingModel,true);
2722 if (m_SnmpMessageProcessingModel < s_SnmpMessageProcessingModelMinSize)
2723 DDebug(DebugAll,"Constraint break error");
2724 if (s_SnmpMessageProcessingModelMaxSize < m_SnmpMessageProcessingModel)
2725 DDebug(DebugAll,"Constraint break error");
2726 return length;
2727 }
2728
encode(DataBlock & data)2729 int SnmpMessageProcessingModel::encode(DataBlock& data)
2730 {
2731 int length = -1;
2732 const DataBlock db = ASNLib::encodeInteger(m_SnmpMessageProcessingModel,true);
2733 data.append(db);
2734 length = db.length();
2735 return length;
2736 }
2737
getParams(NamedList * params)2738 void SnmpMessageProcessingModel::getParams(NamedList* params)
2739 {}
2740
setParams(NamedList * params)2741 void SnmpMessageProcessingModel::setParams(NamedList* params)
2742 {}
2743
2744 /**
2745 * SnmpSecurityLevel
2746 */
SnmpSecurityLevel()2747 SnmpSecurityLevel::SnmpSecurityLevel()
2748 {
2749 }
2750
SnmpSecurityLevel(void * data,int len)2751 SnmpSecurityLevel::SnmpSecurityLevel(void* data, int len)
2752 {
2753 DataBlock db(data,len);
2754 decode(db);
2755 }
2756
~SnmpSecurityLevel()2757 SnmpSecurityLevel::~SnmpSecurityLevel()
2758 {
2759 }
2760
decode(DataBlock & data)2761 int SnmpSecurityLevel::decode(DataBlock& data)
2762 {
2763 int length = 0;
2764 length = ASNLib::decodeINT32(data,&m_SnmpSecurityLevel,true);
2765 if ( m_SnmpSecurityLevel < s_noAuthNoPriv_SnmpSecurityLevel || m_SnmpSecurityLevel > s_authPriv_SnmpSecurityLevel)
2766 return ASNLib::InvalidContentsError;
2767 return length;
2768 }
2769
encode(DataBlock & data)2770 int SnmpSecurityLevel::encode(DataBlock& data)
2771 {
2772 int length = -1;
2773 const DataBlock db = ASNLib::encodeInteger(m_SnmpSecurityLevel,true);
2774 data.append(db);
2775 length = db.length();
2776 return length;
2777 }
2778
getParams(NamedList * params)2779 void SnmpSecurityLevel::getParams(NamedList* params)
2780 {}
2781
setParams(NamedList * params)2782 void SnmpSecurityLevel::setParams(NamedList* params)
2783 {}
2784
2785 /**
2786 * SnmpAdminString
2787 */
SnmpAdminString()2788 SnmpAdminString::SnmpAdminString()
2789 {
2790 }
2791
SnmpAdminString(void * data,int len)2792 SnmpAdminString::SnmpAdminString(void* data, int len)
2793 {
2794 DataBlock db(data,len);
2795 decode(db);
2796 }
2797
~SnmpAdminString()2798 SnmpAdminString::~SnmpAdminString()
2799 {
2800 }
2801
decode(DataBlock & data)2802 int SnmpAdminString::decode(DataBlock& data)
2803 {
2804 int length = 0;
2805 length = ASNLib::decodeOctetString(data,&m_SnmpAdminString,true);
2806 if (length < s_SnmpAdminStringSizeMinSize)
2807 DDebug(DebugAll,"Constraint break error");
2808 if (s_SnmpAdminStringSizeMaxSize < length)
2809 DDebug(DebugAll,"Constraint break error");
2810 return length;
2811 }
2812
encode(DataBlock & data)2813 int SnmpAdminString::encode(DataBlock& data)
2814 {
2815 int length = -1;
2816 const DataBlock db = ASNLib::encodeOctetString(m_SnmpAdminString,true);
2817 data.append(db);
2818 length = db.length();
2819 return length;
2820 }
2821
getParams(NamedList * params)2822 void SnmpAdminString::getParams(NamedList* params)
2823 {}
2824
setParams(NamedList * params)2825 void SnmpAdminString::setParams(NamedList* params)
2826 {}
2827
2828 /**
2829 * UsmSecurityParameters
2830 */
UsmSecurityParameters()2831 UsmSecurityParameters::UsmSecurityParameters()
2832 {
2833 }
2834
UsmSecurityParameters(void * data,int len)2835 UsmSecurityParameters::UsmSecurityParameters(void* data, int len)
2836 {
2837 DataBlock db(data,len);
2838 decode(db);
2839 }
2840
~UsmSecurityParameters()2841 UsmSecurityParameters::~UsmSecurityParameters()
2842 {
2843 }
2844
decode(DataBlock & data)2845 int UsmSecurityParameters::decode(DataBlock& data)
2846 {
2847 int length = 0;
2848 length = ASNLib::decodeSequence(data,true);
2849 if (length < 0)
2850 return length;
2851 length = ASNLib::decodeOctetString(data,&m_msgAuthoritativeEngineID,true);
2852 length = ASNLib::decodeUINT32(data,&m_msgAuthoritativeEngineBoots,true);
2853 if (m_msgAuthoritativeEngineBoots < s_msgAuthoritativeEngineBootsMinSize)
2854 DDebug(DebugAll,"Constraint break error");
2855 if (s_msgAuthoritativeEngineBootsMaxSize < m_msgAuthoritativeEngineBoots)
2856 DDebug(DebugAll,"Constraint break error");
2857 length = ASNLib::decodeUINT32(data,&m_msgAuthoritativeEngineTime,true);
2858 if (m_msgAuthoritativeEngineTime < s_msgAuthoritativeEngineTimeMinSize)
2859 DDebug(DebugAll,"Constraint break error");
2860 if (s_msgAuthoritativeEngineTimeMaxSize < m_msgAuthoritativeEngineTime)
2861 DDebug(DebugAll,"Constraint break error");
2862 length = ASNLib::decodeOctetString(data,&m_msgUserName,true);
2863 if (length < s_msgUserNameSizeMinSize)
2864 DDebug(DebugAll,"Constraint break error");
2865 if (s_msgUserNameSizeMaxSize < length)
2866 DDebug(DebugAll,"Constraint break error");
2867 length = ASNLib::decodeOctetString(data,&m_msgAuthenticationParameters,true);
2868 length = ASNLib::decodeOctetString(data,&m_msgPrivacyParameters,true);
2869 return length;
2870 }
2871
encode(DataBlock & data)2872 int UsmSecurityParameters::encode(DataBlock& data)
2873 {
2874 int length = -1;
2875 DataBlock seqDb;
2876 DataBlock db;
2877 length = 0;
2878 db = ASNLib::encodeOctetString(m_msgAuthoritativeEngineID,true);
2879 seqDb.append(db);
2880 db = ASNLib::encodeInteger(m_msgAuthoritativeEngineBoots,true);
2881 seqDb.append(db);
2882 db = ASNLib::encodeInteger(m_msgAuthoritativeEngineTime,true);
2883 seqDb.append(db);
2884 db = ASNLib::encodeOctetString(m_msgUserName,true);
2885 seqDb.append(db);
2886 db = ASNLib::encodeOctetString(m_msgAuthenticationParameters,true);
2887 seqDb.append(db);
2888 db = ASNLib::encodeOctetString(m_msgPrivacyParameters,true);
2889 seqDb.append(db);
2890 length = ASNLib::encodeSequence(seqDb,true);
2891 data.append(seqDb);
2892 return length;
2893 }
2894
getParams(NamedList * params)2895 void UsmSecurityParameters::getParams(NamedList* params)
2896 {}
2897
setParams(NamedList * params)2898 void UsmSecurityParameters::setParams(NamedList* params)
2899 {}
2900
2901 /**
2902 * SysOREntry
2903 */
SysOREntry()2904 SysOREntry::SysOREntry()
2905 {
2906 m_sysORDescr = new DisplayString();
2907 m_sysORUpTime = new TimeStamp();
2908 }
2909
SysOREntry(void * data,int len)2910 SysOREntry::SysOREntry(void* data, int len)
2911 {
2912 m_sysORDescr = new DisplayString();
2913 m_sysORUpTime = new TimeStamp();
2914
2915 DataBlock db(data,len);
2916 decode(db);
2917 }
2918
~SysOREntry()2919 SysOREntry::~SysOREntry()
2920 {
2921 TelEngine::destruct(m_sysORDescr);
2922 TelEngine::destruct(m_sysORUpTime);
2923 }
2924
decode(DataBlock & data)2925 int SysOREntry::decode(DataBlock& data)
2926 {
2927 int length = 0;
2928 length = ASNLib::decodeSequence(data,true);
2929 if (length < 0)
2930 return length;
2931 length = ASNLib::decodeINT32(data,&m_sysORIndex,true);
2932 length = ASNLib::decodeOID(data,&m_sysORID,true);
2933 length = m_sysORDescr->decode(data);
2934 length = m_sysORUpTime->decode(data);
2935 return length;
2936 }
2937
encode(DataBlock & data)2938 int SysOREntry::encode(DataBlock& data)
2939 {
2940 int length = -1;
2941 DataBlock seqDb;
2942 DataBlock db;
2943 length = 0;
2944 db = ASNLib::encodeInteger(m_sysORIndex,true);
2945 seqDb.append(db);
2946 db = ASNLib::encodeOID(m_sysORID,true);
2947 seqDb.append(db);
2948 m_sysORDescr->encode(seqDb);
2949 m_sysORUpTime->encode(seqDb);
2950 length = ASNLib::encodeSequence(seqDb,true);
2951 data.append(seqDb);
2952 return length;
2953 }
2954
getParams(NamedList * params)2955 void SysOREntry::getParams(NamedList* params)
2956 {}
2957
setParams(NamedList * params)2958 void SysOREntry::setParams(NamedList* params)
2959 {}
2960
2961 }
2962