Blame tools/dump-jax.c

Packit 022b05
/*
Packit 022b05
 * dump-jax.c --
Packit 022b05
 *
Packit 022b05
 *      Operations to generate JAX AgentX class files.
Packit 022b05
 *
Packit 022b05
 * Copyright (c) 2000 Frank Strauss, Technical University of Braunschweig.
Packit 022b05
 *
Packit 022b05
 * See the file "COPYING" for information on usage and redistribution
Packit 022b05
 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Packit 022b05
 *
Packit 022b05
 * @(#) $Id: dump-jax.c 1455 2002-10-30 09:17:37Z schoenw $
Packit 022b05
 */
Packit 022b05
Packit 022b05
#include <config.h>
Packit 022b05
Packit 022b05
#include <stdlib.h>
Packit 022b05
#include <stdio.h>
Packit 022b05
#include <string.h>
Packit 022b05
#include <ctype.h>
Packit 022b05
#ifdef HAVE_UNISTD_H
Packit 022b05
#include <unistd.h>
Packit 022b05
#endif
Packit 022b05
#ifdef HAVE_WIN_H
Packit 022b05
#include "win.h"
Packit 022b05
#endif
Packit 022b05
Packit 022b05
#include "smi.h"
Packit 022b05
#include "smidump.h"
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static char *package = NULL;
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static struct {
Packit 022b05
    SmiBasetype basetype;
Packit 022b05
    char        *smitype;
Packit 022b05
    char        *javatype;
Packit 022b05
    char        *agentxtype;
Packit 022b05
} convertType[] = {
Packit 022b05
    { SMI_BASETYPE_OCTETSTRING,      "Opaque",    "byte[]",    "OPAQUE" },
Packit 022b05
    { SMI_BASETYPE_UNSIGNED32,       "TimeTicks", "long",      "TIMETICKS" },
Packit 022b05
    { SMI_BASETYPE_UNSIGNED32,       "Counter",   "long",      "COUNTER32" },
Packit 022b05
    { SMI_BASETYPE_UNSIGNED32,       "Counter32", "long",      "COUNTER32" },
Packit 022b05
    { SMI_BASETYPE_OCTETSTRING,      "IpAddress", "byte[]",    "IPADDRESS" },
Packit 022b05
    { SMI_BASETYPE_INTEGER32,        NULL,        "int",       "INTEGER" },
Packit 022b05
    { SMI_BASETYPE_OCTETSTRING,      NULL,        "byte[]",    "OCTETSTRING" },
Packit 022b05
    { SMI_BASETYPE_OBJECTIDENTIFIER, NULL,        "AgentXOID", "OBJECTIDENTIFIER" },
Packit 022b05
    { SMI_BASETYPE_UNSIGNED32,       NULL,        "long",      "GAUGE32" },
Packit 022b05
    { SMI_BASETYPE_INTEGER64,        NULL,        "long",      "INTEGER" },
Packit 022b05
    { SMI_BASETYPE_UNSIGNED64,       NULL,        "long",      "COUNTER64" },
Packit 022b05
    { SMI_BASETYPE_ENUM,             NULL,        "int",       "INTEGER" },
Packit 022b05
    { SMI_BASETYPE_BITS,             NULL,        "byte[]",    "OCTETSTRING" },
Packit 022b05
    { SMI_BASETYPE_UNKNOWN,          NULL,        NULL,        NULL }
Packit 022b05
};
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static char* translate1Upper(char *m)
Packit 022b05
{
Packit 022b05
    static char *sarray[5];
Packit 022b05
    static int spos = 0;
Packit 022b05
    char *s;
Packit 022b05
    int i;
Packit 022b05
Packit 022b05
    s = sarray[spos];
Packit 022b05
    spos++;
Packit 022b05
    if (spos == 5) spos = 0;
Packit 022b05
    if (s) xfree(s);
Packit 022b05
    s = xstrdup(m);
Packit 022b05
    for (i = 0; s[i]; i++) {
Packit 022b05
        if (s[i] == '-') s[i] = '_';
Packit 022b05
    }
Packit 022b05
    if (islower((int) s[0])) {
Packit 022b05
        s[0] = toupper(s[0]);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    return s;
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static FILE * createFile(char *name, char *suffix)
Packit 022b05
{
Packit 022b05
    char *fullname;
Packit 022b05
    FILE *f;
Packit 022b05
Packit 022b05
    fullname = xmalloc(strlen(name) + (suffix ? strlen(suffix) : 0) + 2);
Packit 022b05
    strcpy(fullname, name);
Packit 022b05
    if (suffix) {
Packit 022b05
        strcat(fullname, suffix);
Packit 022b05
    }
Packit 022b05
    if (!access(fullname, R_OK)) {
Packit 022b05
        fprintf(stderr, "smidump: %s already exists\n", fullname);
Packit 022b05
        xfree(fullname);
Packit 022b05
        return NULL;
Packit 022b05
    }
Packit 022b05
    f = fopen(fullname, "w");
Packit 022b05
    if (!f) {
Packit 022b05
        fprintf(stderr, "smidump: cannot open %s for writing: ", fullname);
Packit 022b05
        perror(NULL);
Packit 022b05
        xfree(fullname);
Packit 022b05
        exit(1);
Packit 022b05
    }
Packit 022b05
    xfree(fullname);
Packit 022b05
    return f;
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static char *getJavaType(SmiType *smiType)
Packit 022b05
{
Packit 022b05
    int i;
Packit 022b05
Packit 022b05
    if (smiType) {
Packit 022b05
    	for(i=0; convertType[i].basetype != SMI_BASETYPE_UNKNOWN; i++) {
Packit 022b05
	    if (smiType->basetype == convertType[i].basetype)
Packit 022b05
		return convertType[i].javatype;
Packit 022b05
	}
Packit 022b05
    }
Packit 022b05
Packit 022b05
    return "<UNKNOWN>";
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static char *getAgentXType(SmiType *smiType)
Packit 022b05
{
Packit 022b05
    int i;
Packit 022b05
    SmiType *parentType;
Packit 022b05
    SmiModule *smiModule;
Packit 022b05
Packit 022b05
    if (smiType) {
Packit 022b05
	
Packit 022b05
	parentType = smiGetParentType(smiType);
Packit 022b05
	if (parentType) {
Packit 022b05
	    smiModule = smiGetTypeModule(parentType);
Packit 022b05
	    if (smiModule && strlen(smiModule->name)) {
Packit 022b05
		smiType = parentType;
Packit 022b05
	    }
Packit 022b05
	}
Packit 022b05
	
Packit 022b05
	for(i=0; convertType[i].basetype != SMI_BASETYPE_UNKNOWN; i++) {
Packit 022b05
	    if (smiType->basetype == convertType[i].basetype) {
Packit 022b05
		if (!convertType[i].smitype) {
Packit 022b05
		    return convertType[i].agentxtype;
Packit 022b05
		}
Packit 022b05
		if ((smiType->name) &&
Packit 022b05
		    (!strcmp(convertType[i].smitype, smiType->name))) {
Packit 022b05
		    return convertType[i].agentxtype;
Packit 022b05
		}
Packit 022b05
	    }
Packit 022b05
	}
Packit 022b05
    }
Packit 022b05
Packit 022b05
    return "<UNKNOWN>";
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static int isGroup(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    SmiNode *childNode;
Packit 022b05
Packit 022b05
    if (smiNode->nodekind == SMI_NODEKIND_ROW) {
Packit 022b05
        return 1;
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    for(childNode = smiGetFirstChildNode(smiNode);
Packit 022b05
        childNode;
Packit 022b05
        childNode = smiGetNextChildNode(childNode)) {
Packit 022b05
        if (childNode->nodekind == SMI_NODEKIND_SCALAR) {
Packit 022b05
            return 1;
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
Packit 022b05
    return 0;
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static int isAccessible(SmiNode *groupNode)
Packit 022b05
{
Packit 022b05
    SmiNode *smiNode;
Packit 022b05
    int num = 0;
Packit 022b05
    
Packit 022b05
    for (smiNode = smiGetFirstChildNode(groupNode);
Packit 022b05
         smiNode;
Packit 022b05
         smiNode = smiGetNextChildNode(smiNode)) {
Packit 022b05
        if ((smiNode->nodekind == SMI_NODEKIND_SCALAR
Packit 022b05
             || smiNode->nodekind == SMI_NODEKIND_COLUMN)
Packit 022b05
            && (smiNode->access == SMI_ACCESS_READ_ONLY
Packit 022b05
                || smiNode->access == SMI_ACCESS_READ_WRITE)) {
Packit 022b05
            num++;
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
Packit 022b05
    return num;
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static unsigned int getMaxSize(SmiType *smiType)
Packit 022b05
{
Packit 022b05
    SmiRange *smiRange;
Packit 022b05
    SmiType  *parentType;
Packit 022b05
    unsigned int max = 0, size;
Packit 022b05
    
Packit 022b05
    switch (smiType->basetype) {
Packit 022b05
    case SMI_BASETYPE_OCTETSTRING:
Packit 022b05
        size = 65535;
Packit 022b05
        break;
Packit 022b05
    case SMI_BASETYPE_OBJECTIDENTIFIER:
Packit 022b05
        size = 128;
Packit 022b05
        break;
Packit 022b05
    default:
Packit 022b05
        return 0xffffffff;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    for(smiRange = smiGetFirstRange(smiType);
Packit 022b05
        smiRange ; smiRange = smiGetNextRange(smiRange)) {
Packit 022b05
        if (smiRange->maxValue.value.unsigned32 > max) {
Packit 022b05
            max = smiRange->maxValue.value.unsigned32;
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    if (max > 0 && max < size) {
Packit 022b05
        size = max;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    parentType = smiGetParentType(smiType);
Packit 022b05
    if (parentType) {
Packit 022b05
        unsigned int psize = getMaxSize(parentType);
Packit 022b05
        if (psize < size) {
Packit 022b05
            size = psize;
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
Packit 022b05
    return size;
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static void dumpTable(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    SmiNode *parentNode, *columnNode;
Packit 022b05
    unsigned int i;
Packit 022b05
    char *vb_type;
Packit 022b05
Packit 022b05
    parentNode = smiGetParentNode(smiNode);
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(parentNode->name), ".java");
Packit 022b05
    if (! f) {
Packit 022b05
        return;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING "." " Do not edit!\n"
Packit 022b05
            " * It is intended to be used within a Java AgentX sub-agent"
Packit 022b05
                " environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/**\n"
Packit 022b05
            "    This class represents a Java AgentX (JAX) implementation of\n"
Packit 022b05
            "    the table %s defined in %s.\n"
Packit 022b05
            "\n"
Packit 022b05
            "    @version 1\n"
Packit 022b05
            "    @author  smidump " SMI_VERSION_STRING "\n"
Packit 022b05
            "    @see     AgentXTable\n"
Packit 022b05
            " */\n\n", parentNode->name, smiGetNodeModule(smiNode)->name);
Packit 022b05
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import java.util.Vector;\n"
Packit 022b05
            "\n"
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXVarBind;\n"
Packit 022b05
            "import jax.AgentXResponsePDU;\n"
Packit 022b05
            "import jax.AgentXSetPhase;\n"
Packit 022b05
            "import jax.AgentXTable;\n"
Packit 022b05
            "import jax.AgentXEntry;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %s extends AgentXTable\n{\n\n",
Packit 022b05
            translate1Upper(parentNode->name));
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    // entry OID\n"
Packit 022b05
            "    private final static long[] OID = {");
Packit 022b05
    for (i = 0; i < smiNode->oidlen; i++) {
Packit 022b05
        fprintf(f, "%s%d", i ? ", " : "", smiNode->oid[i]);
Packit 022b05
    }
Packit 022b05
    fprintf(f, "};\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    // constructors\n"
Packit 022b05
            "    public %s()\n", translate1Upper(parentNode->name));
Packit 022b05
    fprintf(f,
Packit 022b05
            "    {\n"
Packit 022b05
            "        oid = new AgentXOID(OID);\n"
Packit 022b05
            "\n"
Packit 022b05
            "        // register implemented columns\n");
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_READ_ONLY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        columns.addElement(new Long(%d));\n",
Packit 022b05
                    columnNode->oid[columnNode->oidlen-1]);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "    }\n\n");
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public %s(boolean shared)\n",
Packit 022b05
	    translate1Upper(parentNode->name));
Packit 022b05
    fprintf(f,
Packit 022b05
            "    {\n"
Packit 022b05
            "        super(shared);\n"
Packit 022b05
	    "\n"
Packit 022b05
            "        oid = new AgentXOID(OID);\n"
Packit 022b05
            "\n"
Packit 022b05
            "        // register implemented columns\n");
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_READ_ONLY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        columns.addElement(new Long(%d));\n",
Packit 022b05
                    columnNode->oid[columnNode->oidlen-1]);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "    }\n\n");
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public AgentXVarBind getVarBind(AgentXEntry entry,"
Packit 022b05
                 " long column)\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "    {\n"
Packit 022b05
            "        AgentXOID oid = new AgentXOID(getOID(), column, entry.getInstance());\n"
Packit 022b05
            "\n"
Packit 022b05
            "        switch ((int)column) {\n");
Packit 022b05
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_NOTIFY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case %d: // %s\n",
Packit 022b05
                    columnNode->oid[columnNode->oidlen-1],
Packit 022b05
                    columnNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        {\n");
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            %s value = ((%s)entry).get_%s();\n",
Packit 022b05
                    getJavaType(smiGetNodeType(columnNode)),
Packit 022b05
                    translate1Upper(smiNode->name),
Packit 022b05
                    columnNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            return new AgentXVarBind(oid, "
Packit 022b05
                    "AgentXVarBind.%s, value);\n",
Packit 022b05
                    getAgentXType(smiGetNodeType(columnNode)));
Packit 022b05
            
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        }\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "        }\n"
Packit 022b05
            "\n"
Packit 022b05
            "        return null;\n"
Packit 022b05
            "    }\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public int setEntry(AgentXSetPhase phase,\n"
Packit 022b05
            "                        AgentXEntry entry,\n"
Packit 022b05
            "                        long column,\n"
Packit 022b05
            "                        AgentXVarBind vb)\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "    {\n"
Packit 022b05
            "\n"
Packit 022b05
            "        switch ((int)column) {\n");
Packit 022b05
    
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case %d: // %s\n",
Packit 022b05
                    columnNode->oid[columnNode->oidlen-1],
Packit 022b05
                    columnNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        {\n");
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            if (vb.getType() != AgentXVarBind.%s)\n"
Packit 022b05
                    "                return AgentXResponsePDU.WRONG_TYPE;\n",
Packit 022b05
                    getAgentXType(smiGetNodeType(columnNode)));      
Packit 022b05
            vb_type = getJavaType(smiGetNodeType(columnNode));
Packit 022b05
            vb_type = strcmp("byte[]", vb_type) ? vb_type : "bytes";
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            else\n"
Packit 022b05
                    "                return ((%s)entry).set_%s(phase, vb.%sValue());\n",
Packit 022b05
                    translate1Upper(smiNode->name),
Packit 022b05
                    columnNode->name,
Packit 022b05
                    vb_type);
Packit 022b05
            
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        }\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "        }\n"
Packit 022b05
            "\n"
Packit 022b05
            "        return AgentXResponsePDU.NOT_WRITABLE;\n"
Packit 022b05
            "    }\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static void dumpEntry(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    SmiNode *columnNode, *indexNode;
Packit 022b05
    SmiType *smiType;
Packit 022b05
    SmiRange *smiRange;
Packit 022b05
    SmiElement *element;
Packit 022b05
    int cnt;
Packit 022b05
    char *p;
Packit 022b05
    char init[20];
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(smiNode->name), ".java");
Packit 022b05
    if (! f) {
Packit 022b05
        return;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING "." " Do not edit!\n"
Packit 022b05
            " * It is intended to be used within a Java AgentX sub-agent"
Packit 022b05
                " environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/**\n"
Packit 022b05
            "    This class represents a Java AgentX (JAX) implementation of\n"
Packit 022b05
            "    the table row %s defined in %s.\n"
Packit 022b05
            "\n"
Packit 022b05
            "    @version 1\n"
Packit 022b05
            "    @author  smidump " SMI_VERSION_STRING "\n"
Packit 022b05
            "    @see     AgentXTable, AgentXEntry\n"
Packit 022b05
            " */\n\n", smiNode->name, smiGetNodeModule(smiNode)->name);
Packit 022b05
    
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXSetPhase;\n"
Packit 022b05
            "import jax.AgentXResponsePDU;\n"
Packit 022b05
            "import jax.AgentXEntry;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %s extends AgentXEntry\n{\n\n",
Packit 022b05
            translate1Upper(smiNode->name));
Packit 022b05
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        
Packit 022b05
        smiType = smiGetNodeType(columnNode);
Packit 022b05
	if (!smiType) continue;
Packit 022b05
        p = getJavaType(smiType);
Packit 022b05
        if (!strcmp(p, "long")) {
Packit 022b05
            strcpy(init, "0");
Packit 022b05
        } else if (!strcmp(p, "int")) {
Packit 022b05
            strcpy(init, "0");
Packit 022b05
        } else if (!strcmp(p, "byte[]")) {
Packit 022b05
            smiRange = smiGetFirstRange(smiType);
Packit 022b05
            if ((smiRange && (!smiGetNextRange(smiRange)) &&
Packit 022b05
                 (!memcmp(&smiRange->minValue, &smiRange->maxValue,
Packit 022b05
                          sizeof(SmiValue))))) {
Packit 022b05
                sprintf(init, "new byte[%ld]",
Packit 022b05
                        smiRange->maxValue.value.integer32);
Packit 022b05
            } else {
Packit 022b05
                sprintf(init, "new byte[0]");
Packit 022b05
            }
Packit 022b05
        } else if (!strcmp(p, "AgentXOID")) {
Packit 022b05
            strcpy(init, "new AgentXOID()");
Packit 022b05
        } else {
Packit 022b05
            strcpy(init, "null");
Packit 022b05
        }
Packit 022b05
        fprintf(f,
Packit 022b05
                "    protected %s %s = %s;\n",
Packit 022b05
                getJavaType(smiGetNodeType(columnNode)),
Packit 022b05
                columnNode->name,
Packit 022b05
                init);
Packit 022b05
Packit 022b05
        if (columnNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    protected %s undo_%s = %s;\n",
Packit 022b05
                    getJavaType(smiGetNodeType(columnNode)),
Packit 022b05
                    columnNode->name,
Packit 022b05
                    init);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 0;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
             columnNode;
Packit 022b05
             columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
            if (!strcmp(columnNode->name, indexNode->name))
Packit 022b05
                break;
Packit 022b05
        }
Packit 022b05
        if (!columnNode) {
Packit 022b05
            if (!cnt) {
Packit 022b05
                fprintf(f, "    // foreign indices\n");
Packit 022b05
            }
Packit 022b05
            cnt++;
Packit 022b05
            fprintf(f, "    protected %s %s;\n",
Packit 022b05
                    getJavaType(smiGetNodeType(indexNode)),
Packit 022b05
                    indexNode->name);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    fprintf(f, "\n");
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public %s(", translate1Upper(smiNode->name));
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 0;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        if (cnt) {
Packit 022b05
            fprintf(f, ",\n%*s", 4 + 7 + 1 + strlen(smiNode->name), " ");
Packit 022b05
        }
Packit 022b05
        cnt++;
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        fprintf(f, "%s %s",
Packit 022b05
                getJavaType(smiGetNodeType(indexNode)),
Packit 022b05
                indexNode->name);
Packit 022b05
    }
Packit 022b05
    fprintf(f, ")\n"
Packit 022b05
            "    {\n");
Packit 022b05
    for (element = smiGetFirstElement(smiNode);
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        fprintf(f, "        this.%s = %s;\n",
Packit 022b05
                indexNode->name, indexNode->name);
Packit 022b05
    }
Packit 022b05
    fprintf(f, "\n");
Packit 022b05
    for (element = smiGetFirstElement(smiNode);
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
Packit 022b05
        p = getJavaType(smiGetNodeType(indexNode));
Packit 022b05
        if (!strcmp(p, "long")) {
Packit 022b05
            fprintf(f, "        instance.append(%s);\n",
Packit 022b05
                    indexNode->name);
Packit 022b05
        } else if (!strcmp(p, "int")) {
Packit 022b05
            fprintf(f, "        instance.append(%s);\n",
Packit 022b05
                    indexNode->name);
Packit 022b05
        } else if (!strcmp(p, "byte[]")) {
Packit 022b05
            smiType = smiGetNodeType(indexNode);
Packit 022b05
            smiRange = smiGetFirstRange(smiType);
Packit 022b05
            if ((smiRange && (!smiGetNextRange(smiRange)) &&
Packit 022b05
                 (!memcmp(&smiRange->minValue, &smiRange->maxValue,
Packit 022b05
                          sizeof(SmiValue)))) ||
Packit 022b05
                (smiNode->implied && (!smiGetNextElement(element)))) {
Packit 022b05
                fprintf(f, "        instance.appendImplied(%s);\n",
Packit 022b05
                        indexNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f, "        instance.append(%s);\n",
Packit 022b05
                        indexNode->name);
Packit 022b05
            }
Packit 022b05
        } else if (!strcmp(p, "AgentXOID")) {
Packit 022b05
            if (smiNode->implied && (!smiGetNextElement(element))) {
Packit 022b05
                fprintf(f, "        instance.appendImplied(%s);\n",
Packit 022b05
                        indexNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f, "        instance.append(%s);\n",
Packit 022b05
                        indexNode->name);
Packit 022b05
            }
Packit 022b05
        } else {
Packit 022b05
            fprintf(f, "        // [smidump: type of %s not supported]\n",
Packit 022b05
                    indexNode->name);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "    }\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    for (element = smiGetFirstElement(smiNode);
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        
Packit 022b05
        fprintf(f,
Packit 022b05
                "    public %s get_%s()\n"
Packit 022b05
                "    {\n"
Packit 022b05
                "        return %s;\n"
Packit 022b05
                "    }\n"
Packit 022b05
                "\n",
Packit 022b05
                getJavaType(smiGetNodeType(indexNode)),
Packit 022b05
                indexNode->name, indexNode->name);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        smiType = smiGetNodeType(columnNode);
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_NOTIFY) {
Packit 022b05
	    for (element = smiGetFirstElement(smiNode);
Packit 022b05
		 element;
Packit 022b05
		 element = smiGetNextElement(element)) {
Packit 022b05
		indexNode = smiGetElementNode(element);
Packit 022b05
		if (indexNode == columnNode) break;
Packit 022b05
	    }
Packit 022b05
	    if (!element) {
Packit 022b05
		fprintf(f,
Packit 022b05
			"    public %s get_%s()\n"
Packit 022b05
			"    {\n"
Packit 022b05
			"        return %s;\n"
Packit 022b05
			"    }\n"
Packit 022b05
			"\n",
Packit 022b05
			getJavaType(smiType),
Packit 022b05
			columnNode->name, columnNode->name);
Packit 022b05
	    }
Packit 022b05
        }
Packit 022b05
        if (columnNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public int set_%s(AgentXSetPhase phase, %s value)\n"
Packit 022b05
                    "    {\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    getJavaType(smiGetNodeType(columnNode)));
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        switch (phase.getPhase()) {\n"
Packit 022b05
                    "        case AgentXSetPhase.TEST_SET:\n"
Packit 022b05
                    "            break;\n"                     
Packit 022b05
                    "        case AgentXSetPhase.COMMIT:\n"
Packit 022b05
                    "            undo_%s = %s;\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    columnNode->name);
Packit 022b05
            if (!strcmp("byte[]", getJavaType(smiGetNodeType(columnNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = new byte[value.length];\n"
Packit 022b05
                        "            for(int i = 0; i < value.length; i++)\n"
Packit 022b05
                        "                %s[i] = value[i];\n",
Packit 022b05
                        columnNode->name,
Packit 022b05
                        columnNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = value;\n",
Packit 022b05
                        columnNode->name);
Packit 022b05
            }
Packit 022b05
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"                     
Packit 022b05
                    "        case AgentXSetPhase.UNDO:\n"
Packit 022b05
                    "            %s = undo_%s;\n"
Packit 022b05
                    "            break;\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    columnNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case AgentXSetPhase.CLEANUP:\n");
Packit 022b05
            if (!strcmp("byte[]",getJavaType(smiGetNodeType(columnNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            undo_%s = null;\n",
Packit 022b05
                        columnNode->name);
Packit 022b05
            }
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        default:\n"
Packit 022b05
                    "            return AgentXResponsePDU.PROCESSING_ERROR;\n"
Packit 022b05
                    "        }\n"
Packit 022b05
                    "        return AgentXResponsePDU.NO_ERROR;\n"
Packit 022b05
                    "    }\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
}
Packit 022b05
Packit 022b05
static void dumpEntryImpl(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    SmiNode *columnNode, *indexNode;
Packit 022b05
    SmiType *smiType;
Packit 022b05
    SmiElement *element;
Packit 022b05
    int cnt;
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(smiNode->name), "Impl.java");
Packit 022b05
    if (! f) {
Packit 022b05
        return;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING ". It\n"
Packit 022b05
            " * is intended to be edited by the application programmer and\n"
Packit 022b05
            " * to be used within a Java AgentX sub-agent environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "/**\n"
Packit 022b05
            "    This class extends the Java AgentX (JAX) implementation of\n"
Packit 022b05
            "    the table row %s defined in %s.\n"
Packit 022b05
            " */\n\n", smiNode->name, smiGetNodeModule(smiNode)->name);
Packit 022b05
    
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXSetPhase;\n"
Packit 022b05
            "import jax.AgentXResponsePDU;\n"
Packit 022b05
            "import jax.AgentXEntry;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %sImpl extends %s\n{\n\n",
Packit 022b05
            translate1Upper(smiNode->name),
Packit 022b05
            translate1Upper(smiNode->name));
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    // constructor\n"
Packit 022b05
            "    public %sImpl(", translate1Upper(smiNode->name));
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 0;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        if (cnt) {
Packit 022b05
            fprintf(f, ",\n%*s", 4 + 7 + 1 + strlen(smiNode->name), " ");
Packit 022b05
        }
Packit 022b05
        cnt++;
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        fprintf(f, "%s %s",
Packit 022b05
                getJavaType(smiGetNodeType(indexNode)),
Packit 022b05
                indexNode->name);
Packit 022b05
    }
Packit 022b05
    fprintf(f, ")\n"
Packit 022b05
            "    {\n"
Packit 022b05
            "        super(");
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 0;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        if (cnt) {
Packit 022b05
            fprintf(f, ",\n%*s", 2 + strlen(smiNode->name), " ");
Packit 022b05
        }
Packit 022b05
        cnt++;
Packit 022b05
        indexNode = smiGetElementNode(element);
Packit 022b05
        fprintf(f, "%s", indexNode->name);
Packit 022b05
    }
Packit 022b05
    fprintf(f,");\n");
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "    }\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    for (columnNode = smiGetFirstChildNode(smiNode);
Packit 022b05
         columnNode;
Packit 022b05
         columnNode = smiGetNextChildNode(columnNode)) {
Packit 022b05
        smiType = smiGetNodeType(columnNode);
Packit 022b05
	if (!smiType) continue;
Packit 022b05
        if (columnNode->access >= SMI_ACCESS_NOTIFY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public %s get_%s()\n"
Packit 022b05
                    "    {\n"
Packit 022b05
                    "        return %s;\n"
Packit 022b05
                    "    }\n"
Packit 022b05
                    "\n",
Packit 022b05
                    getJavaType(smiType),
Packit 022b05
                    columnNode->name, columnNode->name);
Packit 022b05
        }
Packit 022b05
        if (columnNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public int set_%s(AgentXSetPhase phase, %s value)\n"
Packit 022b05
                    "    {\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    getJavaType(smiGetNodeType(columnNode)));
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        switch (phase.getPhase()) {\n"
Packit 022b05
                    "        case AgentXSetPhase.TEST_SET:\n"
Packit 022b05
                    "            break;\n"                     
Packit 022b05
                    "        case AgentXSetPhase.COMMIT:\n"
Packit 022b05
                    "            undo_%s = %s;\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    columnNode->name);
Packit 022b05
            if (!strcmp("byte[]", getJavaType(smiGetNodeType(columnNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = new byte[value.length];\n"
Packit 022b05
                        "            for(int i = 0; i < value.length; i++)\n"
Packit 022b05
                        "                %s[i] = value[i];\n",
Packit 022b05
                        columnNode->name,
Packit 022b05
                        columnNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = value;\n",
Packit 022b05
                        columnNode->name);
Packit 022b05
            }
Packit 022b05
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"                     
Packit 022b05
                    "        case AgentXSetPhase.UNDO:\n"
Packit 022b05
                    "            %s = undo_%s;\n"
Packit 022b05
                    "            break;\n",
Packit 022b05
                    columnNode->name,
Packit 022b05
                    columnNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case AgentXSetPhase.CLEANUP:\n");
Packit 022b05
            if (!strcmp("byte[]",getJavaType(smiGetNodeType(columnNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            undo_%s = null;\n",
Packit 022b05
                        columnNode->name);
Packit 022b05
            }
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        default:\n"
Packit 022b05
                    "            return AgentXResponsePDU.PROCESSING_ERROR;\n"
Packit 022b05
                    "        }\n"
Packit 022b05
                    "        return AgentXResponsePDU.NO_ERROR;\n"
Packit 022b05
                    "    }\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
static SmiNode *dumpScalars(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    char *vb_type;
Packit 022b05
    SmiNode *parentNode, *currNode;
Packit 022b05
    SmiType *smiType;
Packit 022b05
    SmiRange *smiRange;
Packit 022b05
    unsigned int i;
Packit 022b05
    char *p;
Packit 022b05
    char init[20];
Packit 022b05
Packit 022b05
    parentNode = smiGetParentNode(smiNode);
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(parentNode->name), ".java");
Packit 022b05
    if (! f) {
Packit 022b05
        return NULL;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING "." " Do not edit!\n"
Packit 022b05
            " * It is intended to be used within a Java AgentX sub-agent"
Packit 022b05
            " environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "/**\n"
Packit 022b05
            "    This class represents a Java AgentX (JAX) implementation of\n"
Packit 022b05
            "    the scalar group %s defined in %s.\n"
Packit 022b05
            "\n"
Packit 022b05
            "    @version 1\n"
Packit 022b05
            "    @author  smidump " SMI_VERSION_STRING "\n"
Packit 022b05
            "    @see     AgentXGroup, AgentXScalars\n"
Packit 022b05
            " */\n\n", parentNode->name, smiGetNodeModule(smiNode)->name);
Packit 022b05
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import java.util.Vector;\n"
Packit 022b05
            "import java.util.Enumeration;\n"
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXVarBind;\n"
Packit 022b05
            "import jax.AgentXSetPhase;\n"
Packit 022b05
            "import jax.AgentXResponsePDU;\n"
Packit 022b05
            "import jax.AgentXScalars;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %s extends AgentXScalars\n{\n\n",
Packit 022b05
            translate1Upper(parentNode->name));
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    private final static long[] %sOID = {",
Packit 022b05
            translate1Upper(parentNode->name));
Packit 022b05
    for (i = 0; i < parentNode->oidlen; i++) {
Packit 022b05
        fprintf(f, "%s%d", i ? ", " : "", parentNode->oid[i]);
Packit 022b05
    }
Packit 022b05
    fprintf(f, "};\n\n");
Packit 022b05
Packit 022b05
    /* -------       variable definitions */
Packit 022b05
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {
Packit 022b05
        fprintf(f,
Packit 022b05
                "    protected AgentXOID %sOID;\n"
Packit 022b05
                "    protected final static long[] %sName = {",
Packit 022b05
                translate1Upper(currNode->name),
Packit 022b05
                translate1Upper(currNode->name)
Packit 022b05
                );
Packit 022b05
        for (i = 0; i < currNode->oidlen; i++) {
Packit 022b05
            fprintf(f, "%s%d", i ? ", " : "", currNode->oid[i]);
Packit 022b05
        }
Packit 022b05
        fprintf(f, ", 0};\n");
Packit 022b05
Packit 022b05
        smiType = smiGetNodeType(currNode);
Packit 022b05
        p = getJavaType(smiType);
Packit 022b05
        if (!strcmp(p, "long")) {
Packit 022b05
            strcpy(init, "0");
Packit 022b05
        } else if (!strcmp(p, "int")) {
Packit 022b05
            strcpy(init, "0");
Packit 022b05
        } else if (!strcmp(p, "byte[]")) {
Packit 022b05
            smiRange = smiGetFirstRange(smiType);
Packit 022b05
            if ((smiRange && (!smiGetNextRange(smiRange)) &&
Packit 022b05
                 (!memcmp(&smiRange->minValue, &smiRange->maxValue,
Packit 022b05
                          sizeof(SmiValue))))) {
Packit 022b05
                sprintf(init, "new byte[%ld]",
Packit 022b05
                        smiRange->maxValue.value.integer32);
Packit 022b05
            } else {
Packit 022b05
                sprintf(init, "new byte[0]");
Packit 022b05
            }
Packit 022b05
        } else if (!strcmp(p, "AgentXOID")) {
Packit 022b05
            strcpy(init, "new AgentXOID()");
Packit 022b05
        } else {
Packit 022b05
            strcpy(init, "null");
Packit 022b05
        }
Packit 022b05
        fprintf(f,
Packit 022b05
                "    protected %s %s = %s;\n",
Packit 022b05
                getJavaType(smiGetNodeType(currNode)),
Packit 022b05
                currNode->name,
Packit 022b05
                init);
Packit 022b05
        
Packit 022b05
        if (currNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    protected %s undo_%s = %s;\n",
Packit 022b05
                    getJavaType(smiGetNodeType(currNode)),
Packit 022b05
                    currNode->name,
Packit 022b05
                    init);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    /* -------       constructor */
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public %s()\n    {\n"
Packit 022b05
            "        oid = new AgentXOID(%sOID);\n"
Packit 022b05
            "        data = new Vector();\n",
Packit 022b05
            translate1Upper(parentNode->name),
Packit 022b05
            translate1Upper(parentNode->name));
Packit 022b05
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {
Packit 022b05
        fprintf(f,
Packit 022b05
                "        %sOID = new AgentXOID(%sName);\n"
Packit 022b05
                "        data.addElement(%sOID);\n",
Packit 022b05
                translate1Upper(currNode->name),
Packit 022b05
                translate1Upper(currNode->name),
Packit 022b05
                translate1Upper(currNode->name));
Packit 022b05
    }
Packit 022b05
    fprintf(f,"    }\n\n");
Packit 022b05
    /* -------         get & set methods */ 
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {
Packit 022b05
        smiType = smiGetNodeType(currNode);
Packit 022b05
        if (currNode->access >= SMI_ACCESS_NOTIFY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public %s get_%s()\n"
Packit 022b05
                    "    {\n"
Packit 022b05
                    "        return %s;\n"
Packit 022b05
                    "    }\n"
Packit 022b05
                    "\n",
Packit 022b05
                    getJavaType(smiType),
Packit 022b05
                    currNode->name, currNode->name);
Packit 022b05
        }
Packit 022b05
        if (currNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public int set_%s(AgentXSetPhase phase, %s value)\n"
Packit 022b05
                    "    {\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    getJavaType(smiGetNodeType(currNode)));
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        switch (phase.getPhase()) {\n"
Packit 022b05
                    "        case AgentXSetPhase.TEST_SET:\n"
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        case AgentXSetPhase.COMMIT:\n"
Packit 022b05
                    "            undo_%s = %s;\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    currNode->name);
Packit 022b05
            if (!strcmp("byte[]", getJavaType(smiGetNodeType(currNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = new byte[value.length];\n"
Packit 022b05
                        "            for(int i = 0; i < value.length; i++)\n"
Packit 022b05
                        "                %s[i] = value[i];\n",
Packit 022b05
                        currNode->name,
Packit 022b05
                        currNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = value;\n",
Packit 022b05
                        currNode->name);
Packit 022b05
            }
Packit 022b05
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"                      
Packit 022b05
                    "        case AgentXSetPhase.UNDO:\n"
Packit 022b05
                    "            %s = undo_%s;\n"
Packit 022b05
                    "            break;\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    currNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case AgentXSetPhase.CLEANUP:\n");
Packit 022b05
            if (!strcmp("byte[]",getJavaType(smiGetNodeType(currNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            undo_%s = null;\n",
Packit 022b05
                        currNode->name);
Packit 022b05
            }
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        default:\n"
Packit 022b05
                    "            return AgentXResponsePDU.PROCESSING_ERROR;\n"
Packit 022b05
                    "        }\n"
Packit 022b05
                    "        return AgentXResponsePDU.NO_ERROR;\n"
Packit 022b05
                    "    }\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    /* ------    handle get get-next and set requests */
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public AgentXVarBind getScalar(AgentXOID pos,"
Packit 022b05
            " AgentXOID oid)\n"
Packit 022b05
            "    {\n"
Packit 022b05
            "        if ((pos == null) || (pos.compareTo(oid) != 0))\n"
Packit 022b05
            "            return new AgentXVarBind(oid,"
Packit 022b05
            " AgentXVarBind.NOSUCHOBJECT);\n"
Packit 022b05
            "        else {\n"
Packit 022b05
            );
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {    
Packit 022b05
        fprintf(f,
Packit 022b05
                "            if (pos == %sOID)\n"
Packit 022b05
                "                return new AgentXVarBind(oid,"
Packit 022b05
                " AgentXVarBind.%s, \n"
Packit 022b05
                "                                         get_%s());\n",
Packit 022b05
                translate1Upper(currNode->name),
Packit 022b05
                getAgentXType(smiGetNodeType(currNode)),
Packit 022b05
                currNode->name
Packit 022b05
                );
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "        }\n"
Packit 022b05
            "        return new AgentXVarBind(oid,"
Packit 022b05
            " AgentXVarBind.NOSUCHOBJECT);\n    }\n\n");
Packit 022b05
        
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public int setScalar(AgentXSetPhase phase,"
Packit 022b05
            " AgentXOID pos,\n"
Packit 022b05
            "                         AgentXVarBind inVb)\n    {\n"
Packit 022b05
            "        if ((pos == null) || (pos.compareTo(inVb.getOID()) != 0))\n"
Packit 022b05
            "            return AgentXResponsePDU.INCONSISTENT_NAME;\n"
Packit 022b05
            "        else {\n"
Packit 022b05
            );
Packit 022b05
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {
Packit 022b05
        vb_type = getJavaType(smiGetNodeType(currNode));
Packit 022b05
        vb_type = strcmp("byte[]", vb_type) ? vb_type : "bytes";
Packit 022b05
        if (currNode->access == SMI_ACCESS_READ_WRITE)
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            if (pos == %sOID)\n"
Packit 022b05
                    "                return "
Packit 022b05
                    "set_%s(phase, inVb.%sValue());\n",
Packit 022b05
                    translate1Upper(currNode->name),
Packit 022b05
                    currNode->name,
Packit 022b05
                    vb_type
Packit 022b05
                    );
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "        }\n"
Packit 022b05
            "        return AgentXResponsePDU.NOT_WRITABLE;\n"
Packit 022b05
            "    }\n\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public AgentXVarBind getNextScalar(AgentXOID pos,"
Packit 022b05
            " AgentXOID oid)\n    {\n"
Packit 022b05
            "        if ((pos == null) || (pos.compareTo(oid) <= 0))\n"
Packit 022b05
            "            return new AgentXVarBind(oid,"
Packit 022b05
            " AgentXVarBind.ENDOFMIBVIEW);\n"
Packit 022b05
            "        else {\n"
Packit 022b05
            );
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {    
Packit 022b05
        fprintf(f,
Packit 022b05
                "            if (pos == %sOID)\n"
Packit 022b05
                "                return new AgentXVarBind(pos,"
Packit 022b05
                " AgentXVarBind.%s, \n"
Packit 022b05
                "                                         get_%s());\n",
Packit 022b05
                translate1Upper(currNode->name),
Packit 022b05
                getAgentXType(smiGetNodeType(currNode)),
Packit 022b05
                currNode->name
Packit 022b05
                );
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "        }\n"
Packit 022b05
            "        return new AgentXVarBind(pos,"
Packit 022b05
            " AgentXVarBind.ENDOFMIBVIEW);\n    }\n\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
    /* skip all already processed nodes */
Packit 022b05
    for(;
Packit 022b05
        smiNode && (smiNode->nodekind == SMI_NODEKIND_SCALAR);
Packit 022b05
        smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
Packit 022b05
    }
Packit 022b05
    return smiNode;
Packit 022b05
}
Packit 022b05
Packit 022b05
static void dumpNotifications(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    int cnt;
Packit 022b05
    unsigned int i;
Packit 022b05
    SmiElement *element;
Packit 022b05
    SmiNode *elementNode;
Packit 022b05
Packit 022b05
    SmiType *snt;
Packit 022b05
    snt = smiGetNodeType(smiNode);
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(smiNode->name), ".java");
Packit 022b05
    if (! f) {
Packit 022b05
        return;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING "." " Do not edit!\n"
Packit 022b05
            " * It is intended to be used within a Java AgentX sub-agent"
Packit 022b05
            " environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXVarBind;\n"
Packit 022b05
            "import jax.AgentXNotification;\n"
Packit 022b05
            "import java.util.Vector;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %s extends AgentXNotification\n{\n\n",
Packit 022b05
            translate1Upper(smiNode->name));
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    private final static long[] %s_OID = {",
Packit 022b05
            smiNode->name);
Packit 022b05
    for (i = 0; i < smiNode->oidlen; i++) {
Packit 022b05
        fprintf(f, "%s%d", i ? ", " : "", smiNode->oid[i]);
Packit 022b05
    }
Packit 022b05
    fprintf(f, "};\n"); 
Packit 022b05
    fprintf(f,
Packit 022b05
            "    private static AgentXVarBind snmpTrapOID_VarBind =\n"
Packit 022b05
            "        new AgentXVarBind(snmpTrapOID_OID,\n"
Packit 022b05
            "                          AgentXVarBind.OBJECTIDENTIFIER,\n"
Packit 022b05
            "                          new AgentXOID(%s_OID));\n\n",
Packit 022b05
            smiNode->name);
Packit 022b05
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 1;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element), cnt++) {
Packit 022b05
        elementNode = smiGetElementNode(element);
Packit 022b05
        fprintf(f, "    private final static long[] OID%d = {", cnt);
Packit 022b05
        for (i = 0; i < elementNode->oidlen; i++) {
Packit 022b05
            fprintf(f, "%s%d", i ? ", " : "", elementNode->oid[i]);
Packit 022b05
        }
Packit 022b05
        fprintf(f, 
Packit 022b05
                "};\n"
Packit 022b05
                "    private final AgentXOID %s_OID = "
Packit 022b05
                "new AgentXOID(OID%d",
Packit 022b05
                elementNode->name, cnt);
Packit 022b05
        fprintf(f,");\n");
Packit 022b05
#if 0
Packit 022b05
        if (elementNode->nodekind != SMI_NODEKIND_COLUMN || 
Packit 022b05
            (smiGetNodeModule(elementNode) != smiGetNodeModule(smiNode))) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    private static AgentXVarBind varBind_%s = new AgentXVarBind(\n"
Packit 022b05
                    "            %sOID, AgentXVarBind.%s\n);\n",
Packit 022b05
                    elementNode->name,
Packit 022b05
                    elementNode->name,
Packit 022b05
                    getAgentXType(smiGetNodeType(elementNode)));        
Packit 022b05
        }
Packit 022b05
#endif
Packit 022b05
    }    
Packit 022b05
    fprintf(f, 
Packit 022b05
            "\n\n    public %s(",
Packit 022b05
            translate1Upper(smiNode->name));
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 0;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element)) {
Packit 022b05
        elementNode = smiGetElementNode(element); 
Packit 022b05
        if (smiGetNodeModule(elementNode) == smiGetNodeModule(smiNode)) {
Packit 022b05
            if (cnt) fprintf(f,", ");
Packit 022b05
            cnt++;
Packit 022b05
            fprintf(f, "%s %s_%d",
Packit 022b05
                    translate1Upper(smiGetParentNode(elementNode)->name),
Packit 022b05
                    smiGetParentNode(elementNode)->name, cnt);
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    fprintf(f, ") {\n"
Packit 022b05
            "        AgentXOID oid;\n"
Packit 022b05
            "        AgentXVarBind varBind;\n"
Packit 022b05
            "\n"
Packit 022b05
	    "        // add the snmpTrapOID object\n"
Packit 022b05
            "        varBindList.addElement(snmpTrapOID_VarBind);\n");
Packit 022b05
    for (element = smiGetFirstElement(smiNode), cnt = 1;
Packit 022b05
         element;
Packit 022b05
         element = smiGetNextElement(element), cnt++) {
Packit 022b05
        elementNode = smiGetElementNode(element);
Packit 022b05
Packit 022b05
	if (smiGetNodeModule(elementNode) == smiGetNodeModule(smiNode)) {
Packit 022b05
Packit 022b05
	    fprintf(f,
Packit 022b05
		    "\n        // add the %s %s object of %s_%d\n",
Packit 022b05
		    elementNode->name,
Packit 022b05
		    elementNode->nodekind == SMI_NODEKIND_COLUMN ?
Packit 022b05
		    "columnar" : "scalar",
Packit 022b05
		    smiGetParentNode(elementNode)->name, cnt);
Packit 022b05
Packit 022b05
	    if (elementNode->nodekind == SMI_NODEKIND_COLUMN) {
Packit 022b05
		fprintf(f,
Packit 022b05
			"        oid = %s_OID;\n"
Packit 022b05
			"        oid.appendImplied(%s_%d.getInstance());\n",
Packit 022b05
			elementNode->name,
Packit 022b05
			smiGetParentNode(elementNode)->name, cnt);
Packit 022b05
		fprintf(f,
Packit 022b05
			"        varBind = new AgentXVarBind(oid,\n"
Packit 022b05
			"                                    AgentXVarBind.%s,\n"
Packit 022b05
			"                                    %s_%d.get_%s());\n",
Packit 022b05
			getAgentXType(smiGetNodeType(elementNode)),
Packit 022b05
			smiGetParentNode(elementNode)->name, cnt,
Packit 022b05
			elementNode->name);
Packit 022b05
		fprintf(f,
Packit 022b05
			"        varBindList.addElement(varBind);\n");
Packit 022b05
	    } else {
Packit 022b05
		fprintf(f,
Packit 022b05
			"        oid = %s_OID;\n",
Packit 022b05
			elementNode->name);
Packit 022b05
		fprintf(f,
Packit 022b05
			"        oid.append(0);\n");
Packit 022b05
		fprintf(f,
Packit 022b05
			"        varBind = new AgentXVarBind(oid,\n"
Packit 022b05
			"                                    AgentXVarBind.%s,\n"
Packit 022b05
			"                                    %s_%d.get_%s());\n",
Packit 022b05
			getAgentXType(smiGetNodeType(elementNode)),
Packit 022b05
			smiGetParentNode(elementNode)->name, cnt,
Packit 022b05
			elementNode->name);
Packit 022b05
		fprintf(f,
Packit 022b05
			"        varBindList.addElement(varBind);\n");
Packit 022b05
	    }
Packit 022b05
Packit 022b05
        } else {
Packit 022b05
	    fprintf(f,
Packit 022b05
		    "        // the notification's object %s "
Packit 022b05
		    "is not contained in this module.\n",
Packit 022b05
		    elementNode->name);
Packit 022b05
	}
Packit 022b05
    }    
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    }\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "    public Vector getVarBindList() {\n"
Packit 022b05
            "        return varBindList;\n    }\n\n");
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
}
Packit 022b05
Packit 022b05
static void dumpScalarImpl(SmiNode *smiNode)
Packit 022b05
{
Packit 022b05
    FILE *f;
Packit 022b05
    SmiNode *parentNode, *currNode;
Packit 022b05
    SmiType *smiType;
Packit 022b05
Packit 022b05
    parentNode = smiGetParentNode(smiNode);
Packit 022b05
Packit 022b05
    f = createFile(translate1Upper(parentNode->name), "Impl.java");
Packit 022b05
    if (! f) {
Packit 022b05
        return;
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fprintf(f,
Packit 022b05
            "/*\n"
Packit 022b05
            " * This Java file has been generated by smidump "
Packit 022b05
                SMI_VERSION_STRING ". It\n"
Packit 022b05
            " * is intended to be edited by the application programmer and\n"
Packit 022b05
            " * to be used within a Java AgentX sub-agent environment.\n"
Packit 022b05
            " *\n"
Packit 022b05
            " * $I" "d$\n"
Packit 022b05
            " */\n\n");
Packit 022b05
    fprintf(f,
Packit 022b05
            "/**\n"
Packit 022b05
            "    This class extends the Java AgentX (JAX) implementation of\n"
Packit 022b05
            "    the scalar group %s defined in %s.\n"
Packit 022b05
            " */\n\n", parentNode->name, smiGetNodeModule(smiNode)->name);
Packit 022b05
Packit 022b05
    if (package) {
Packit 022b05
	fprintf(f,
Packit 022b05
		"package %s;\n\n", package);
Packit 022b05
    }
Packit 022b05
    
Packit 022b05
    fprintf(f,
Packit 022b05
            "import java.util.Vector;\n"
Packit 022b05
            "import java.util.Enumeration;\n"
Packit 022b05
            "import jax.AgentXOID;\n"
Packit 022b05
            "import jax.AgentXSetPhase;\n"
Packit 022b05
            "import jax.AgentXResponsePDU;\n"
Packit 022b05
            "\n");
Packit 022b05
Packit 022b05
    fprintf(f, "public class %sImpl extends %s\n{\n\n",
Packit 022b05
            translate1Upper(parentNode->name),
Packit 022b05
            translate1Upper(parentNode->name));
Packit 022b05
Packit 022b05
    for (currNode = smiNode;
Packit 022b05
         currNode && (currNode->nodekind == SMI_NODEKIND_SCALAR) ;
Packit 022b05
         currNode = smiGetNextNode(currNode,SMI_NODEKIND_ANY)) {
Packit 022b05
        smiType = smiGetNodeType(currNode);
Packit 022b05
        if (currNode->access >= SMI_ACCESS_NOTIFY) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public %s get_%s()\n"
Packit 022b05
                    "    {\n"
Packit 022b05
                    "        return %s;\n"
Packit 022b05
                    "    }\n"
Packit 022b05
                    "\n",
Packit 022b05
                    getJavaType(smiType),
Packit 022b05
                    currNode->name, currNode->name);
Packit 022b05
        }
Packit 022b05
        if (currNode->access == SMI_ACCESS_READ_WRITE) {
Packit 022b05
            fprintf(f,
Packit 022b05
                    "    public int set_%s(AgentXSetPhase phase, %s value)\n"
Packit 022b05
                    "    {\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    getJavaType(smiGetNodeType(currNode)));
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        switch (phase.getPhase()) {\n"
Packit 022b05
                    "        case AgentXSetPhase.TEST_SET:\n"
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        case AgentXSetPhase.COMMIT:\n"
Packit 022b05
                    "            undo_%s = %s;\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    currNode->name);
Packit 022b05
            if (!strcmp("byte[]", getJavaType(smiGetNodeType(currNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = new byte[value.length];\n"
Packit 022b05
                        "            for(int i = 0; i < value.length; i++)\n"
Packit 022b05
                        "                %s[i] = value[i];\n",
Packit 022b05
                        currNode->name,
Packit 022b05
                        currNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            %s = value;\n",
Packit 022b05
                        currNode->name);
Packit 022b05
            }
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"                      
Packit 022b05
                    "        case AgentXSetPhase.UNDO:\n"
Packit 022b05
                    "            %s = undo_%s;\n"
Packit 022b05
                    "            break;\n",
Packit 022b05
                    currNode->name,
Packit 022b05
                    currNode->name);
Packit 022b05
            fprintf(f,
Packit 022b05
                    "        case AgentXSetPhase.CLEANUP:\n");
Packit 022b05
            if (!strcmp("byte[]",getJavaType(smiGetNodeType(currNode)))) {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            undo_%s = null;\n",
Packit 022b05
                        currNode->name);
Packit 022b05
            } else {
Packit 022b05
                fprintf(f,
Packit 022b05
                        "            undo_%s = -1; // TODO: better check!\n",
Packit 022b05
                        currNode->name);
Packit 022b05
            }
Packit 022b05
            fprintf(f,
Packit 022b05
                    "            break;\n"
Packit 022b05
                    "        default:\n"
Packit 022b05
                    "            return AgentXResponsePDU.PROCESSING_ERROR;\n"
Packit 022b05
                    "        }\n"
Packit 022b05
                    "        return AgentXResponsePDU.NO_ERROR;\n"
Packit 022b05
                    "    }\n"
Packit 022b05
                    "\n");
Packit 022b05
        }
Packit 022b05
    }
Packit 022b05
    fprintf(f,
Packit 022b05
            "}\n\n");
Packit 022b05
Packit 022b05
    if (fflush(f) || ferror(f)) {
Packit 022b05
	perror("smidump: write error");
Packit 022b05
	exit(1);
Packit 022b05
    }
Packit 022b05
Packit 022b05
    fclose(f);
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
static void dumpJax(int modc, SmiModule **modv, int flags, char *output)
Packit 022b05
{
Packit 022b05
    SmiNode     *smiNode;
Packit 022b05
    int		i;
Packit 022b05
Packit 022b05
    for (i = 0; i < modc; i++) {
Packit 022b05
Packit 022b05
	for(smiNode = smiGetFirstNode(modv[i], SMI_NODEKIND_ROW);
Packit 022b05
	    smiNode;
Packit 022b05
	    smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ROW)) {
Packit 022b05
	    if (isGroup(smiNode) && isAccessible(smiNode)) {
Packit 022b05
		dumpTable(smiNode);
Packit 022b05
		dumpEntry(smiNode);
Packit 022b05
		dumpEntryImpl(smiNode);
Packit 022b05
	    }
Packit 022b05
	}
Packit 022b05
    
Packit 022b05
	for(smiNode = smiGetFirstNode(modv[i], SMI_NODEKIND_SCALAR);
Packit 022b05
	    smiNode;
Packit 022b05
	    smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_SCALAR)) {
Packit 022b05
	    dumpScalarImpl(smiNode);
Packit 022b05
	    smiNode = dumpScalars(smiNode); 
Packit 022b05
	}
Packit 022b05
	
Packit 022b05
	for(smiNode = smiGetFirstNode(modv[i], SMI_NODEKIND_NOTIFICATION);
Packit 022b05
	    smiNode;
Packit 022b05
	    smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
Packit 022b05
	    dumpNotifications(smiNode);
Packit 022b05
	}
Packit 022b05
    }
Packit 022b05
}
Packit 022b05
Packit 022b05
Packit 022b05
Packit 022b05
void initJax()
Packit 022b05
{
Packit 022b05
    static SmidumpDriverOption opt[] = {
Packit 022b05
	{ "package", OPT_STRING, &package, 0,
Packit 022b05
	  "make classes part of a given package"},
Packit 022b05
        { 0, OPT_END, 0, 0 }
Packit 022b05
    };
Packit 022b05
Packit 022b05
    static SmidumpDriver driver = {
Packit 022b05
	"jax",
Packit 022b05
	dumpJax,
Packit 022b05
	SMI_FLAG_NODESCR,
Packit 022b05
	SMIDUMP_DRIVER_CANT_UNITE | SMIDUMP_DRIVER_CANT_OUTPUT,
Packit 022b05
	"Java AgentX sub-agent classes in separate files",
Packit 022b05
	opt,
Packit 022b05
	NULL
Packit 022b05
    };
Packit 022b05
Packit 022b05
    smidumpRegisterDriver(&driver);
Packit 022b05
}