Re: how to get table data inside request handler

Alexander Bubnov <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
requests varibale of Watcher keeps row instead table pointer

netsnmp_extract_table_data_set(requests); returns NULL

netsnmp_extract_table_row(requests); returns valid data of row.

What should I do to put table data inside request or how to get table data
by row?

2009/2/18 Alexander Bubnov <[email protected]>

> Hello, all!
>
> Can you please let me know a way getting table data to manipulate it?
>
> below code:
>
> 1. init_tables - init tables within main function.
>
> 2. Watcher - a callback, it is called when some request is received. Inside
> of this callback I would like to change the table content before I need to
> get a pointer to the table.
>
> inside Watcher() netsnmp_extract_table_data_set() function get NULL instead
> returing data.
>
> #include<string.h>
> #include <net-snmp/net-snmp-config.h>
> #include <net-snmp/net-snmp-includes.h>
> #include <net-snmp/agent/net-snmp-agent-includes.h>
>
> const int ROWID = 2;
>
>
> static int Watcher(
>   netsnmp_mib_handler * handler
>   ,netsnmp_handler_registration * reginfo
>   ,netsnmp_agent_request_info * reqinfo
>   ,netsnmp_request_info * requests
>   )
> {
>
>   if(MODE_IS_GET(reqinfo->mode))
>   {
>   netsnmp_request_info *request;
>   int i = 0;
>
>   for(request=requests;request;request = request->next)
>   {
>   netsnmp_table_data_set*table_set =
> netsnmp_extract_table_data_set(requests);
>
>   if(table_set)
>   {
>   fprintf(stderr,"NOT NULL\n");
>
>   }
>   else
>   {
>   fprintf(stderr,"NULL\n");
>   }
>   }
>
>   return SNMP_ERR_NOERROR;
>   }
>   else if(MODE_IS_SET(reqinfo->mode))
>   {
>   puts("SET request is is not allowed");
>   return SNMP_ERR_NOTWRITABLE;
>   }
>   return SNMP_ERR_GENERR;
> }
>
>
> void init_tables()
> {
>   netsnmp_table_data_set *table_set;
>   oid some_oid[] = {1,3,6,1,4,1,23668,1025,2,8,1};
>   const char * table_name = "mytable";
>
>   const size_t size_some_oid = OID_LENGTH(some_oid);
>   int count = 999;
>   const char* pcount = (const char*)(&count);
>
>   table_set = netsnmp_create_table_data_set(table_name);
>
>   table_set->allow_creation = 0;
>
>   netsnmp_table_dataset_add_index(table_set, ASN_OCTET_STR);
>
>   netsnmp_table_set_multi_add_default_row(table_set,
>   /*
>   * column 2 = asn type,
>   * writable = 0,
>   * default value = NULL,
>   * default value len = 0
>   */
>   ROWID,ASN_COUNTER,0,NULL,0,
>   NULL /* done */ );
>
>   netsnmp_register_table_data_set(netsnmp_create_handler_registration
>   (table_name, Watcher,
>   some_oid,
>   size_some_oid,
>   HANDLER_CAN_RONLY|HANDLER_CAN_NOT_CREATE), table_set, NULL);
>
>   netsnmp_table_row *row = netsnmp_create_table_data_row();
>   netsnmp_table_row_add_index(row, ASN_OCTET_STR, "some data string",
>   strlen("some data string"));
>   netsnmp_set_row_column(row, ROWID, ASN_COUNTER,
>   pcount, sizeof(int));
>   netsnmp_mark_row_column_writable(row, ROWID, 0);
>   netsnmp_table_dataset_add_row(table_set, row);
> }
>
>
>
> --
> /BR, Alexander
>



-- 
/BR, Alexander

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H

_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.