#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>

#include "abc.h"

static int keep_running;

RETSIGTYPE stop_server(int a) {

    keep_running = 0;
}

int main (int argc, char **argv) {

    int background = 0;
    int syslog = 0; 

    if (syslog)
        snmp_enable_calllog();
    else
       snmp_enable_stderrlog();

    netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);

    if (background && netsnmp_daemonize(1, !syslog))
        exit(1);

    /* initialize tcpip, if necessary */
    SOCK_STARTUP;

    /* initialize the agent library */
    init_agent("abc-demo");

    /* mib code: init_cap001b() cap001b.c */
    init_abc();

    /* snmp-demo will be used to read snmp-demo.conf files. */
    init_snmp("abc-demo");

    /* In case we recevie a request to stop (kill -TERM or kill -INT) */
    keep_running = 1;

    signal(SIGTERM, stop_server);
    signal(SIGINT, stop_server);

    snmp_log(LOG_INFO,"SNMP-Subagent is up and running.\n");

    while(keep_running) {

        agent_check_and_process(1); /* 0 == don't block */
    }

    /* at shutdown time */
    snmp_shutdown("abc-demo");

    SOCK_CLEANUP;

    return 0;

}
