MyStringArray.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. // MyStringArray.cpp: implementation of the MyStringArray class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "snmp_pp.h"
  6. #include "MyStringArray.h"
  7. #include "SnmpProcess.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. MyStringArray::MyStringArray()
  17. {
  18. err="";
  19. }
  20. MyStringArray::~MyStringArray()
  21. {
  22. }
  23. void MyStringArray::Add(CString &s_Oid,CString &s_Value)
  24. {
  25. OidStr.Add(s_Oid);
  26. Value.Add(s_Value);
  27. }
  28. CString MyStringArray::GetOid(int index)
  29. {
  30. if (index<OidStr.GetSize())
  31. return OidStr.GetAt(index);
  32. else
  33. return err;
  34. }
  35. CString MyStringArray::GetValue(int index)
  36. {
  37. if (index<Value.GetSize())
  38. return Value.GetAt(index);
  39. else
  40. return err;
  41. }
  42. void MyStringArray::SetValue(int index,CString Str)
  43. {
  44. Value.SetAt(index,(LPCTSTR)Str);
  45. }
  46. int MyStringArray::GetCount()
  47. {
  48. return (int)OidStr.GetSize();
  49. }
  50. void MyStringArray::clear()
  51. {
  52. OidStr.RemoveAll();
  53. Value.RemoveAll();
  54. }
  55. void MyStringArray::GetTree(CString &ip,CString &community,CString &oid_str, CString &end_oid_str)
  56. {
  57. Snmp::socket_startup();
  58. UdpAddress address((LPCTSTR)ip);
  59. address.set_port(161); //构造一个地址对象;
  60. Oid Baseoid((LPCTSTR)oid_str); //构造一个OID对象;
  61. snmp_version version=version1;
  62. int status, i = 0;
  63. Snmp snmp(status, 0, false); //构造一个snmp对象;
  64. Pdu pdu;
  65. Vb vb;
  66. vb.set_oid(Baseoid);
  67. pdu += vb; //构造PDU并设置vb;
  68. CTarget ctarget(address);
  69. ctarget.set_version( version);
  70. ctarget.set_retry(1);
  71. ctarget.set_timeout(50);
  72. ctarget.set_readcommunity((LPCTSTR)community); //构造一个CTarget对象并设置相应的参数;
  73. SnmpTarget *target;
  74. target = &ctarget;
  75. Oid NextOid(Baseoid); //构造一个辅助OID;
  76. NextOid+=".1";
  77. CString reply_oid;
  78. CString reply_value; //返回值;
  79. //如果NextOid以Baseoid开始,进行getnext操作;
  80. while (Baseoid.nCompare(Baseoid.len(),NextOid)==0)
  81. {
  82. status=snmp.get_next(pdu, *target);
  83. if (status == SNMP_CLASS_SUCCESS)
  84. {
  85. //取出第一个(仅有一个)VB;
  86. pdu.get_vb(vb,0);
  87. vb.get_oid(NextOid); //取出返回的OID,存放到NextOid;
  88. reply_oid=vb.get_printable_oid();
  89. if( !reply_oid.Compare( end_oid_str ) ) break;
  90. reply_value=vb.get_printable_value();
  91. if (reply_value.GetLength()==0)
  92. reply_value="NULL";
  93. //如操作成功,取出返回的OID以及值;
  94. if (Baseoid.nCompare(Baseoid.len(),NextOid)==0)
  95. {
  96. reply_oid.TrimLeft();
  97. reply_oid.TrimRight();
  98. reply_value.TrimLeft();
  99. reply_value.TrimRight();
  100. OidStr.Add(reply_oid);
  101. Value.Add(reply_value);//s2s.Add(reply_oid,reply_value);
  102. } //保存到CMapStringToString对象中;
  103. }
  104. else
  105. {
  106. //AddToPrintQueue(MSG_ERROR, MSG_SNMP_MD, g_strErrorSnmpTimeOut, strlen(g_strErrorSnmpTimeOut));
  107. continue;
  108. //return;
  109. }
  110. //重新设置vb,准备进入下一循环;
  111. i++;
  112. vb.set_oid(NextOid);
  113. vb.set_null();
  114. pdu.set_vb(vb,0);
  115. }
  116. Snmp::socket_cleanup();
  117. }
  118. int MyStringArray::GetOne(CString &ip,CString &community,
  119. CString &oid_str,CString &reply)
  120. {
  121. Snmp::socket_startup();
  122. UdpAddress address((LPCTSTR)ip);
  123. address.set_port(161);
  124. Oid oid((LPCTSTR)oid_str);
  125. snmp_version version=version1;
  126. int status = 0;
  127. int nRet = 0;
  128. Snmp snmp(status, 0, false);
  129. if( status != SNMP_CLASS_SUCCESS )
  130. {
  131. nRet = ERR_CODE_SNMP_CREATE_FAIL;
  132. }
  133. Pdu pdu;
  134. Vb vb;
  135. vb.set_oid(oid);
  136. pdu += vb;
  137. CTarget ctarget(address);
  138. ctarget.set_version(version);
  139. ctarget.set_retry(1);
  140. ctarget.set_timeout(100);
  141. ctarget.set_readcommunity((LPCTSTR)community);
  142. SnmpTarget *target;
  143. target = &ctarget;
  144. status = snmp.get(pdu, *target);
  145. if (status == SNMP_CLASS_SUCCESS)
  146. {
  147. pdu.get_vb(vb,0);
  148. reply=vb.get_printable_value();
  149. reply.TrimLeft();
  150. reply.TrimRight();
  151. nRet = 0;
  152. }
  153. else
  154. {
  155. nRet = ERR_CODE_SNMP_READ_FAIL;
  156. }
  157. Snmp::socket_cleanup();
  158. return nRet;
  159. }
  160. void MyStringArray::GetNextOne(CString &ip,CString &community,
  161. CString &oid_str,CString &reply)
  162. {
  163. //ip+=":161";
  164. Snmp::socket_startup();
  165. UdpAddress address((LPCTSTR)ip);
  166. address.set_port(161);
  167. Oid oid((LPCTSTR)oid_str);
  168. snmp_version version=version1;
  169. int status;
  170. Snmp snmp(status, 0, false);
  171. Pdu pdu;
  172. Vb vb;
  173. vb.set_oid(oid);
  174. pdu += vb;
  175. CTarget ctarget(address);
  176. ctarget.set_version(version);
  177. ctarget.set_retry(1);
  178. ctarget.set_timeout(100);
  179. ctarget.set_readcommunity((LPCTSTR)community);
  180. SnmpTarget *target;
  181. target = &ctarget;
  182. status = snmp.get(pdu, *target);
  183. if (status == SNMP_CLASS_SUCCESS)
  184. {
  185. pdu.get_vb(vb,0);
  186. oid_str=vb.get_printable_oid();
  187. reply=vb.get_printable_value();
  188. oid_str.TrimLeft();
  189. oid_str.TrimRight();
  190. reply.TrimLeft();
  191. reply.TrimRight();
  192. }
  193. Snmp::socket_cleanup();
  194. }