本文整理汇总了C++中Pdu::get_vb方法的典型用法代码示例。如果您正苦于以下问题:C++ Pdu::get_vb方法的具体用法?C++ Pdu::get_vb怎么用?C++ Pdu::get_vb使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Pdu
的用法示例。
在下文中一共展示了Pdu::get_vb方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: KeyChange
void KeyChange(Snmp* snmp, Pdu& myPdu,
const OctetStr& user, const OctetStr& newpass,
SnmpTarget& target, int type)
{
struct UsmKeyUpdate *uku = NULL;
int stat;
int status;
uku = usm->key_update_prepare(user, target, newpass,
myPdu, type, stat);
if (uku == NULL)
cout << "Key update preparation failed *************" << endl
<< "with " << snmp->error_msg(stat) << endl <<endl;
if (( status = snmp->set( myPdu,target)) == SNMP_CLASS_SUCCESS) {
Vb vb3;
Oid oid3;
myPdu.get_vb( vb3,0);
vb3.get_oid(oid3);
Vb vb4;
Oid oid4;
myPdu.get_vb( vb4,1);
vb4.get_oid(oid4);
if (myPdu.get_type() == REPORT_MSG) {
cout << "Received a reportPDU! with Oid "
<< oid3.get_printable() << endl
<< snmp->error_msg(oid3) << endl;
usm->key_update_abort(uku);
}
else {
cout << flush << endl
<< "Oid = " << vb3.get_printable_oid() << endl
<< "Value = " << vb3.get_printable_value() << endl;
cout << flush << endl
<< "Oid = " << vb4.get_printable_oid() << endl
<< "Value = " << vb4.get_printable_value() << endl;
int resul = usm->key_update_commit(uku, USM_PasswordAllKeyUpdate);
cout << endl << "result of local key update: "
<< resul << endl;
}
}
else {
cout << "SNMP++ KeyChange Error, " << snmp->error_msg( status)
<< " (" << status <<")"<< endl;
usm->key_update_abort(uku);
}
cout << "******************************** END"
<< endl << endl << flush;
}
示例2: handle_get
// callback : have received a Pdu from the target host with given read comm str
// this is really simplistic, but gives the general idea
int agent_impl::handle_get( Pdu &pdu, UdpTarget &target)
{
ACE_TRACE("agent_impl::handle_get");
OctetStr mgr_rd_str, agent_rd_str;
target.get_read_community(mgr_rd_str); // requster's read community string
tgt_.get_read_community(agent_rd_str); // this agent's read community string
// 1. verify we have a valid read string else drop pdu (no response to caller)
if (mgr_rd_str != agent_rd_str) {
ACE_DEBUG((LM_DEBUG, "agent_impl::handle_get: invalid read community recvd\n"));
return 0;
}
// 2. iterate over each varbind in the pdu, filling providing responses
int fdone = 0;
for (int i = 0; (i < pdu.get_vb_count()) && !fdone; i++) {
Vb vb;
pdu.get_vb(vb, i);
if (get_response(vb)) { // set a value for the oid if we can else
set_error_status(&pdu, SNMP_ERROR_NO_SUCH_NAME); // these ought to be member
set_error_index(&pdu, i); // functions but are not yet...
fdone++; // trigger flag to exit loop early
}
else // failed, return noSuch error
pdu.set_vb(vb, i);
}
// 3. lastly, return the pkt to the caller
return respond(pdu, target);
}
示例3: callback
void callback( int reason, Snmp *snmp, Pdu &pdu, SnmpTarget &target, void *cd)
{
Vb nextVb;
int pdu_error;
cout << "reason: " << reason << endl
<< "msg: " << snmp->error_msg(reason) << endl;
pdu_error = pdu.get_error_status();
if (pdu_error) {
cout << "Response contains error: "
<< snmp->error_msg(pdu_error)<< endl;
}
for (int i=0; i<pdu.get_vb_count(); i++)
{
pdu.get_vb(nextVb, i);
cout << "Oid: " << nextVb.get_printable_oid() << endl
<< "Val: " << nextVb.get_printable_value() << endl;
}
if (pdu.get_type() == sNMP_PDU_INFORM) {
cout << "pdu type: " << pdu.get_type() << endl;
cout << "sending response to inform: " << endl;
nextVb.set_value("This is the response.");
pdu.set_vb(nextVb, 0);
snmp->response(pdu, target);
}
cout << endl;
}
示例4: load_vbs
int wpdu::load_vbs(snmp_pdu *raw_pdu, const Pdu& pdu)
{
int status = 0;
// load up the payload
// for all Vbs in list, add them to the pdu
int vb_count;
Vb tempvb;
Oid tempoid;
SmiLPOID smioid;
SmiVALUE smival;
vb_count = pdu.get_vb_count();
for (int z = 0; z < vb_count; z++) {
pdu.get_vb( tempvb, z);
tempvb.get_oid( tempoid);
smioid = tempoid.oidval();
// what are we trying to convert here (vb oid part or value part)
status = convert_vb_to_smival( tempvb, &smival );
if ( status != SNMP_CLASS_SUCCESS)
return status;
// add the var to the raw pdu
cmu_snmp::add_var(raw_pdu, smioid->ptr, (int) smioid->len, &smival);
free_smival_descriptor( &smival);
}
return status;
}
示例5:
MibIter::MibIter(Snmp* snmp, Pdu& pdu, UdpTarget *target):
snmp_(snmp), target_(target), pdu_(pdu), first_(0),
valid_(0)
{
// verify we have a valid oid to begin iterating with
Oid oid;
Vb vb;
pdu.get_vb(vb, 0);
vb.get_oid(oid);
if (oid.valid())
valid_ = 1;
}
示例6: address
const string & SnmpDG::GetMibObject(const snmp_version version, const SnmpPara& spr, const string oid) const
{
if(!m_inited_success)
{
return m_empty_object;
}
Snmp::socket_startup();
UdpAddress address(spr.ip.c_str());
//string myoid = oid;
Pdu pdu;
Vb vb;
vb.set_oid(oid.c_str());//(myoid.c_str());
pdu += vb;
CTarget ctarget(address);
ctarget.set_version( version );
ctarget.set_retry(spr.retry);
ctarget.set_timeout(spr.timeout);
ctarget.set_readcommunity(spr.community.c_str());
SnmpTarget *target;
target = &ctarget;
int status;
Snmp snmp(status, 0, false);
if (status == SNMP_CLASS_SUCCESS)
{
if ((status = snmp.get( pdu, *target)) == SNMP_CLASS_SUCCESS)
{
pdu.get_vb( vb,0);
//string oid_tmp = vb.get_printable_oid();
m_mib_object = vb.get_printable_value();
}
else
{
m_mib_object = string("");
SetLastError(status);
}
}
else
{
m_mib_object = string("");
SetLastError(status);
}
Snmp::socket_cleanup(); // Shut down socket subsystem
return m_mib_object;
}
示例7: handleOperationGetNext
Status SnmpManager::handleOperationGetNext(Request *request)
{
Snmp::socket_startup();
int status;
Snmp snmp(status, 0, false);
if (status != SNMP_CLASS_SUCCESS) {
/*Setup SNMP FAILED*/
Helper::log(0, "RequestGetNext Failed");
Helper::log(1, snmp.error_msg(status));
Helper::pop("Error", snmp.error_msg(status));
Snmp::socket_cleanup();
return Status_FAILED;
}
Pdu pdu;
pdu += request->data;
CTarget ctarget(request->address);
ctarget.set_retry(request->retry);
ctarget.set_timeout(request->timeout);
ctarget.set_version(request->version);
ctarget.set_readcommunity(request->community.c_str());
SnmpTarget *target = &ctarget;
status = snmp.get_next(pdu, *target);
if (status == SNMP_CLASS_SUCCESS) {
/*GetNextRequest SUCCESS*/
Helper::log(1, "RequestGetNext SUCCESS");
pdu.get_vb(request->data, 0);
QString replayOid = request->data.get_printable_oid();
QString replayValue = request->data.get_printable_value();
}
else {
/*GetNextRequest FAILED*/
Helper::log(0, "RequestGetNext Failed");
Helper::log(1, snmp.error_msg(status));
Helper::pop("Error", snmp.error_msg(status));
Snmp::socket_cleanup();
return Status_FAILED;
}
Snmp::socket_cleanup();
qDebug() << "########################################################";
qDebug() << "Handle RequestGetNext Successfully";
qDebug() << "Oid: " << request->data.get_printable_oid();
qDebug() << "Value: " << request->data.get_printable_value();
qDebug() << "########################################################";
return Status_SUCCESS;
}
示例8: next
// return vb of next oid in agent tree, return 1 else return 0, reason set
int MibIter::next(Vb& vb, char *& reason)
{
int rc;
if (valid_ == 0) // not valid object
return -1;
// 1. poll for value
if (first_ == 0) {
rc = snmp_->get( pdu_, *target_);
first_++;
}
else {
rc = snmp_->get_next( pdu_, *target_);
}
if (rc != SNMP_CLASS_SUCCESS) {
reason = const_cast <char*> (snmp_->error_string());
return 0;
}
// 2. check for problems
if (pdu_.get_error_status()) {
reason = const_cast <char*> (pdu_.agent_error_reason());
return 0;
}
// 3. return vb to caller
pdu_.get_vb(vb, 0);
Oid nextoid;
vb.get_oid(nextoid); // and setup next oid to get
Vb nextvb(nextoid);
pdu_.delete_all_vbs();
pdu_ += nextvb; // can't do set_vb as there are no entries to replace
return 1; // ok
}
示例9: GetBulkRequest
int CSVBaseSNMP::GetBulkRequest(MonitorResult &ResultList)
{
WriteLog("\n\n*****************************");
WriteLog("GetBulkRequest!");
static const int BULK_BUFF = 10;
int nResult = 0;
char chPrvOID[MAX_BUFF_LEN] = {0};
bool bEnd = false;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
SnmpTarget *target;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget(); //Init UTarget
pdu.set_security_level( m_lSecurityLevel); //Set the Security Level portion of Pdu
pdu.set_context_name (m_szContextName); //Set the Context Name portion of Pdu
pdu.set_context_engine_id(m_szContextEngineID); //Set the Context Engine ID portion of Pdu
target = &m_Utarget; //Set SNMP Target
}
else
{
target = &m_Ctarget; //Set SNMP Target
}
try
{
if(m_pSnmp)
{
int nIndex = 0, i = 0;
while (( nResult = m_pSnmp->get_bulk(pdu, *target, 0, BULK_BUFF)) == SNMP_CLASS_SUCCESS)
{
if(bEnd)
break;
for (i = 0; i < pdu.get_vb_count(); i ++)
{
pdu.get_vb( vb, i);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
string szOID = vb.get_printable_oid();
WriteLog(szOID.c_str());
int nPosition = static_cast<int>(szOID.find(m_szStartID));
if(nPosition < 0)
{
bEnd = true;
break;
}
if(static_cast<int>(strlen(chPrvOID)) > 0)
{//如果上次OID不为空
if(strcmp(vb.get_printable_oid(), chPrvOID) == 0)
{//比较OID名称是否相同,相同则退出循环
bEnd = true;
break;
}
}
//结果赋值
if(static_cast<int>(strlen(vb.get_printable_oid())) < MAX_BUFF_LEN)
strcpy(chPrvOID, vb.get_printable_oid());
SNMP_Monitor_Result result;
result.m_szOID = vb.get_printable_oid();
if(strcmp(result.m_szOID.substr(0,19).c_str(),"1.3.6.1.2.1.2.2.1.2")==0)
{
char str[100];
vb.get_value(str);
result.m_szValue=str;
WriteLog(str);
}
else
result.m_szValue = vb.get_printable_value();
//nPosition = static_cast<int>(result.m_szOID.find(m_szStartID.c_str()) + m_szStartID.length());
//if(nPosition > 0)
//{
result.m_szIndex = result.m_szOID.substr(m_szStartID.length() + 1);
result.m_szOID = result.m_szOID.substr(0, m_szStartID.length());
//PrintDebugString("index is " + result.m_szIndex);
//}
WriteLog(result.m_szIndex.c_str());
WriteLog(result.m_szValue.c_str());
ResultList[nIndex] = result;
nIndex ++;
}
else
{
m_szErrorMsg = "End of MIB Reached";
return -4;
//.........这里部分代码省略.........
示例10: GetRequest
int CSVBaseSNMP::GetRequest(MonitorResult &ResultList)
{
WriteLog("\n\n*****************************");
WriteLog("GetRequest!");
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
SnmpTarget *target;
if(version == version3)
{//If SNMP Version Is 3
nResult = InitUTarget(); //Init UTarget
pdu.set_security_level( m_lSecurityLevel); //Set the Security Level portion of Pdu
pdu.set_context_name(m_szContextName); //Set the Context Name portion of Pdu
pdu.set_context_engine_id(m_szContextEngineID); //Set the Context Engine ID portion of Pdu
target = &m_Utarget; //Set SNMP Target
}
else
{
target = &m_Ctarget; //Set SNMP Target
}
try
{
//cout << address << endl;
//cout << oid.get_printable() << endl;
if(m_pSnmp)
{
nResult = m_pSnmp->get( pdu,*target); //Get Reques
if(nResult != 0)
{//当有错误发生时候
m_szErrorMsg = m_pSnmp->error_msg(nResult);
return nResult;
}
for ( int i = 0; i < pdu.get_vb_count(); i ++)
{
pdu.get_vb(vb, i);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
SNMP_Monitor_Result result;
result.m_szOID = vb.get_printable_oid();
result.m_szValue = vb.get_printable_value();
size_t nPosition = result.m_szOID.rfind(".");
if(nPosition > 0)
{
result.m_szIndex = result.m_szOID.substr(nPosition);
result.m_szOID = result.m_szOID.substr(0, nPosition - 1);
}
WriteLog(result.m_szIndex.c_str());
WriteLog(result.m_szValue.c_str());
ResultList[i] = result;
}
else
{
m_szErrorMsg = "End of MIB Reached";
return -4;
}
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetRequest*---", dwError);
DumpLog("snmpmonitor-request", szMsg, nlen);
}
return nResult;
}
示例11: main_bulk_jun
//.........这里部分代码省略.........
ctarget.set_version( version); // set the SNMP version SNMPV1 or V2
ctarget.set_retry( retries); // set the number of auto retries
ctarget.set_timeout( timeout); // set timeout
ctarget.set_readcommunity( community); // set the read community name
#ifdef _SNMPv3
}
#endif
//-------[ issue the request, blocked mode ]-----------------------------
cout << "SNMP++ GetBulk to " << argv[1] << " SNMPV"
#ifdef _SNMPv3
<< ((version==version3) ? (version) : (version+1))
#else
<< (version+1)
#endif
<< " Retries=" << retries
<< " Timeout=" << timeout << "ms"
<< " Non Reptrs=" << non_reps
<< " Max Reps=" << max_reps << endl;
#ifdef _SNMPv3
if (version == version3)
cout << endl
<< "securityName= " << securityName.get_printable()
<< ", securityLevel= " << securityLevel
<< ", securityModel= " << securityModel << endl
<< "contextName= " << contextName.get_printable()
<< ", contextEngineID= " << contextEngineID.get_printable()
<< endl;
else
#endif
cout << " Community=" << community.get_printable() << endl << flush;
SnmpTarget *target;
#ifdef _SNMPv3
if (version == version3)
target = &utarget;
else
#endif
target = &ctarget;
Pdu pdu2 = pdu;
if (( status = snmp.get_bulk( pdu,*target,non_reps,max_reps))== SNMP_CLASS_SUCCESS) {
for ( int z=0;z<pdu.get_vb_count();z++) {
pdu.get_vb( vb,z);
#ifdef _SNMPv3
if (pdu.get_type() == REPORT_MSG) {
Oid tmp;
vb.get_oid(tmp);
cout << "Received a reportPdu: "
<< snmp.error_msg( tmp)
<< endl
<< vb.get_printable_oid() << " = "
<< vb.get_printable_value() << endl;
}
#endif
cout << "Oid = " << vb.get_printable_oid() << "\n";
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW) {
cout << "Value = " << vb.get_printable_value() << "\n\n";
}
else {
cout << "End of MIB view.\n\n";
}
}
}
else
cout << "SNMP++ GetBulk Error, " << snmp.error_msg( status) << "\n";
pdu = pdu2;
//--------------------
if (( status = snmp.get_bulk( pdu,*target,non_reps,max_reps))== SNMP_CLASS_SUCCESS) {
for ( int z=0;z<pdu.get_vb_count();z++) {
pdu.get_vb( vb,z);
#ifdef _SNMPv3
if (pdu.get_type() == REPORT_MSG) {
Oid tmp;
vb.get_oid(tmp);
cout << "Received a reportPdu: "
<< snmp.error_msg( tmp)
<< endl
<< vb.get_printable_oid() << " = "
<< vb.get_printable_value() << endl;
}
#endif
cout << "Oid = " << vb.get_printable_oid() << "\n";
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW) {
cout << "Value = " << vb.get_printable_value() << "\n\n";
}
else {
cout << "End of MIB view.\n\n";
}
}
}
else
cout << "SNMP++ GetBulk Error, " << snmp.error_msg( status) << "\n";
//-------------
Snmp::socket_cleanup(); // Shut down socket subsystem
}
示例12: GetBulkRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetBulkRequest //
// 说明:得到表格变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetBulkRequest()
{
//puts("BasicSNMP::GetBulkRequest");
int nResult = 0;
char chPrvOID[MAX_BUFF_LEN] = {0};
bool bEnd = false;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();
OIDResult *pPrevResult = pTemp;
//pTemp->pNext = NULL;
pResult = pTemp;
try
{
//SnmpTarget *target = &ctarget;
while (( nResult = pSnmp->get_next(pdu, *target))== SNMP_CLASS_SUCCESS)
{
if(bEnd)
{
break;
}
for ( int z=0;z<pdu.get_vb_count(); z++)
{
pdu.get_vb( vb,z);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
char chOID[MAX_BUFF_LEN] = {0};
sprintf(chOID, "%s", vb.get_printable_oid());
char *pDest = strstr(chOID, chOIDStart);
if(pDest == NULL)
{//OID名称是否包含开始OID
bEnd = true;
break;
}
if(strlen(chPrvOID)>0)
{//如果上次OID不为空
if(strcmp(vb.get_printable_oid(), chPrvOID) == 0)
{//比较OID名称是否相同,相同则退出循环
bEnd = true;
break;
}
}
//结果赋值
strcpy(chPrvOID, vb.get_printable_oid());
strcpy(pTemp->chOID, vb.get_printable_oid());
strcpy(pTemp->chValue,vb.get_printable_value());
char *pIndex;
pIndex=pTemp->chOID+strlen(oid.get_printable())+1;
//pTemp->nLen = static_cast<int>(strlen(pTemp->chValue));
//char *pdest = strrchr(pTemp->chOID, '.');
//int nLast = (int)(pdest - pTemp->chOID + 1);
//memcpy(pTemp->chIndex, (pTemp->chOID)+nLast, strlen(pTemp->chOID) - nLast);
strcpy(pTemp->chIndex,pIndex);
//pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
}
else
{
memset(chErrMsg, 0 , MAX_BUFF_LEN);
strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
if(pTemp->pNext == NULL)
{
//.........这里部分代码省略.........
示例13: GetRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetRequest //
// 说明:得到简单变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetRequest()
{
static const char chFile[] = "smmpmonitor.log";
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();//construct OIDResult Struct
pTemp->pNext = NULL;
pResult = pTemp;
try
{
nResult = pSnmp->get( pdu,*target);//Get Reques
if(nResult != 0)
{//当有错误发生时候
strcpy(chErrMsg, pSnmp->error_msg(nResult));
return nResult;
}
for ( int z = 0; z < pdu.get_vb_count(); z++)
{
pdu.get_vb( vb,z);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
//Set OIDResult Value
if(static_cast<int>(strlen(vb.get_printable_oid())) < MAX_BUFF_LEN)
strcpy(pTemp->chOID, vb.get_printable_oid());
if(static_cast<int>(strlen(vb.get_printable_value())) < MAX_BUFF_LEN)
{
strcpy(pTemp->chValue, vb.get_printable_value());
//pTemp->nLen = static_cast<int>(strlen(pTemp->chValue));
}
char *pdest = strrchr(pTemp->chOID, '.');
if(pdest)
{
(*pdest) = '\0';
pdest ++;
strcpy(pTemp->chIndex, pdest);
}
//if(pdest)
//{
// int nLast = (int)(pdest - pTemp->chOID + 1);
// memcpy(pTemp->chIndex, (pTemp->chOID)+nLast, strlen(pTemp->chOID) - nLast);
// pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
//}
}
else
{
memset(chErrMsg, 0 , MAX_BUFF_LEN);
strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
}
}
catch(...)
{
DWORD dwError = GetLastError();
char szMsg[512] = {0};
int nlen = sprintf(szMsg, "Error Number is %08X --*GetRequest*---", dwError);
DumpLog(chFile, szMsg, nlen);
//cout << "Error Number is " << dwError << "---*GetRequest*---" << endl;
}
return nResult;
}
示例14: GetNextRequest
/////////////////////////////////////////////////////////////////////////////
// 函数:GetNextRequest //
// 说明:以当前OID变量为开始,得到下一个简单变量的结果 //
// 参数:无 //
// 返回值: //
// 成功返回0,否则返回一个非0 值 //
/////////////////////////////////////////////////////////////////////////////
int BasicSNMP::GetNextRequest()
{
int nResult = 0;
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
DestroyResultList();
SnmpTarget *target;// = &ctarget;
if(version ==version3)
{//If SNMP Version Is 3
nResult = InitUTarget();//Init UTarget
pdu.set_security_level( m_nSecurityLevel);//Set the Security Level portion of Pdu
pdu.set_context_name (contextName);//Set the Context Name portion of Pdu
pdu.set_context_engine_id(contextEngineID);//Set the Context Engine ID portion of Pdu
target = &utarget; //Set SNMP Target
}
else
{
target = &ctarget; //Set SNMP Target
}
OIDResult *pTemp = new OIDResult();
pTemp->pNext = NULL;
pResult = pTemp;
//SnmpTarget *target = &ctarget;
nResult = pSnmp->get_next( pdu,*target);
if(nResult != 0)
{//当有错误发生时候
strcpy(chErrMsg, pSnmp->error_msg(nResult));
}
for ( int z=0;z<pdu.get_vb_count(); z++)
{
pdu.get_vb( vb,z);
if (pdu.get_type() == REPORT_MSG)
{
Oid tmp;
vb.get_oid(tmp);
return -5;
}
// look for var bind exception, applies to v2 only
if ( vb.get_syntax() != sNMP_SYNTAX_ENDOFMIBVIEW)
{
strcpy(pTemp->chOID, vb.get_printable_oid());
strcpy(pTemp->chValue,vb.get_printable_value());
//pTemp->nLen = static_cast<int>(strlen(pTemp->chValue));
char *pdest = strrchr(pTemp->chOID, '.');
int nLast = (int)(pdest - pTemp->chOID + 1);
memcpy(pTemp->chIndex, (pTemp->chOID)+nLast, strlen(pTemp->chOID) - nLast);
pTemp->chIndex[strlen(pTemp->chOID) - nLast] = '\0';
oid = pTemp->chOID;
}
else
{
// memset(chErrMsg, 0 , MAX_BUFF_LEN);
// strcpy(chErrMsg, "End of MIB Reached");
return -4;
}
}
return nResult;
}
示例15: main
//.........这里部分代码省略.........
cout << "Error initializing v3MP: " << construct_status << endl;
return 1;
}
USM *usm = v3_MP->get_usm();
usm->add_usm_user(securityName,
authProtocol, privProtocol,
authPassword, privPassword);
}
else
{
// MUST create a dummy v3MP object if _SNMPv3 is enabled!
int construct_status;
v3_MP = new v3MP("dummy", 0, construct_status);
}
#endif
//--------[ build up SNMP++ object needed ]-------------------------------
Pdu pdu; // construct a Pdu object
Vb vb; // construct a Vb object
vb.set_oid( oid); // set the Oid portion of the Vb
pdu += vb; // add the vb to the Pdu
address.set_port(port);
CTarget ctarget( address); // make a target using the address
#ifdef _SNMPv3
UTarget utarget( address);
if (version == version3) {
utarget.set_version( version); // set the SNMP version SNMPV1 or V2 or V3
utarget.set_retry( retries); // set the number of auto retries
utarget.set_timeout( timeout); // set timeout
utarget.set_security_model( securityModel);
utarget.set_security_name( securityName);
pdu.set_security_level( securityLevel);
pdu.set_context_name (contextName);
pdu.set_context_engine_id(contextEngineID);
}
else {
#endif
ctarget.set_version( version); // set the SNMP version SNMPV1 or V2
ctarget.set_retry( retries); // set the number of auto retries
ctarget.set_timeout( timeout); // set timeout
ctarget.set_readcommunity( community); // set the read community name
#ifdef _SNMPv3
}
#endif
//-------[ issue the request, blocked mode ]-----------------------------
cout << "SNMP++ GetNext to " << argv[1] << " SNMPV"
#ifdef _SNMPv3
<< ((version==version3) ? (version) : (version+1))
#else
<< (version+1)
#endif
<< " Retries=" << retries
<< " Timeout=" << timeout * 10 <<"ms";
#ifdef _SNMPv3
if (version == version3)
cout << endl
<< "securityName= " << securityName.get_printable()
<< ", securityLevel= " << securityLevel
<< ", securityModel= " << securityModel << endl
<< "contextName= " << contextName.get_printable()
<< ", contextEngineID= " << contextEngineID.get_printable()
<< endl;
else
#endif
cout << " Community=" << community.get_printable() << endl << flush;
SnmpTarget *target;
#ifdef _SNMPv3
if (version == version3)
target = &utarget;
else
#endif
target = &ctarget;
status = snmp.get_next( pdu, *target);
if (status == SNMP_CLASS_SUCCESS)
{
pdu.get_vb( vb,0);
#ifdef _SNMPv3
if (pdu.get_type() == REPORT_MSG) {
cout << "Received a report pdu: "
<< snmp.error_msg(vb.get_printable_oid()) << endl;
}
#endif
cout << "Oid = " << vb.get_printable_oid() << endl
<< "Value = " << vb.get_printable_value() << endl;
}
else
{
cout << "SNMP++ GetNext Error, " << snmp.error_msg( status)
<< " (" << status <<")" << endl;
}
Snmp::socket_cleanup(); // Shut down socket subsystem
}