According to RFC2741 section 6.1.1 an agentx-response-pdu shouldn't have
the NON_DEFAULT_CONTEXT set. Remove the argument from ax_response().

OK?

martijn@

diff --git a/application_agentx.c b/application_agentx.c
index c7a2a26..0d73e08 100644
--- a/application_agentx.c
+++ b/application_agentx.c
@@ -311,8 +311,7 @@ appl_agentx_recv(int fd, short event, void *cookie)
                            pdu->ap_header.aph_sessionid);
                        ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid,
                            pdu->ap_header.aph_transactionid,
-                           pdu->ap_header.aph_packetid,
-                           &(pdu->ap_context), smi_getticks(),
+                           pdu->ap_header.aph_packetid, smi_getticks(),
                            APPL_ERROR_NOTOPEN, 0, NULL, 0);
                        appl_agentx_send(-1, EV_WRITE, conn);
                        goto fail;
@@ -370,8 +369,8 @@ appl_agentx_recv(int fd, short event, void *cookie)
        case AX_PDU_TYPE_PING:
                ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid,
                    pdu->ap_header.aph_transactionid,
-                   pdu->ap_header.aph_packetid, &(pdu->ap_context),
-                   smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0);
+                   pdu->ap_header.aph_packetid, smi_getticks(),
+                   APPL_ERROR_NOERROR, 0, NULL, 0);
                appl_agentx_send(-1, EV_WRITE, conn);
                break;
        case AX_PDU_TYPE_INDEXALLOCATE:
@@ -380,8 +379,8 @@ appl_agentx_recv(int fd, short event, void *cookie)
                    ax_pdutype2string(pdu->ap_header.aph_type));
                ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid,
                    pdu->ap_header.aph_transactionid,
-                   pdu->ap_header.aph_packetid, &(pdu->ap_context),
-                   smi_getticks(), APPL_ERROR_PROCESSINGERROR, 1,
+                   pdu->ap_header.aph_packetid, smi_getticks(),
+                   APPL_ERROR_PROCESSINGERROR, 1,
                    pdu->ap_payload.ap_vbl.ap_varbind,
                    pdu->ap_payload.ap_vbl.ap_nvarbind);
                appl_agentx_send(-1, EV_WRITE, conn);
@@ -392,8 +391,8 @@ appl_agentx_recv(int fd, short event, void *cookie)
                    ax_pdutype2string(pdu->ap_header.aph_type));
                ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid,
                    pdu->ap_header.aph_transactionid,
-                   pdu->ap_header.aph_packetid, &(pdu->ap_context),
-                   smi_getticks(), APPL_ERROR_PROCESSINGERROR, 1,
+                   pdu->ap_header.aph_packetid, smi_getticks(),
+                   APPL_ERROR_PROCESSINGERROR, 1,
                    NULL, 0);
                appl_agentx_send(-1, EV_WRITE, conn);
                break;
@@ -492,16 +491,15 @@ appl_agentx_open(struct appl_agentx_connection *conn, 
struct ax_pdu *pdu)
        log_info("%s: %s %s: Open", session->sess_backend.ab_name, oidbuf,
            session->sess_descr.aos_string);
 
-       ax_response(conn->conn_ax, session->sess_id, 
pdu->ap_header.aph_transactionid,
-           pdu->ap_header.aph_packetid, NULL, smi_getticks(), 
APPL_ERROR_NOERROR, 0,
-           NULL, 0);
+       ax_response(conn->conn_ax, session->sess_id,
+           pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid,
+           smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0);
        appl_agentx_send(-1, EV_WRITE, conn);
 
        return;
  fail:
        ax_response(conn->conn_ax, 0, pdu->ap_header.aph_transactionid,
-           pdu->ap_header.aph_packetid, NULL, 0, APPL_ERROR_OPENFAILED, 0,
-           NULL, 0);
+           pdu->ap_header.aph_packetid, 0, APPL_ERROR_OPENFAILED, 0, NULL, 0);
        appl_agentx_send(-1, EV_WRITE, conn);
        if (session != NULL)
                free(session->sess_descr.aos_string);
@@ -521,7 +519,7 @@ appl_agentx_close(struct appl_agentx_session *session, 
struct ax_pdu *pdu)
 
        ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid,
            pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid,
-           &(pdu->ap_context), smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0);
+           smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0);
        appl_agentx_send(-1, EV_WRITE, conn);
 }
 
@@ -593,7 +591,7 @@ appl_agentx_register(struct appl_agentx_session *session, 
struct ax_pdu *pdu)
  fail:
        ax_response(session->sess_conn->conn_ax, session->sess_id,
            pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid,
-           &(pdu->ap_context), smi_getticks(), error, 0, NULL, 0);
+           smi_getticks(), error, 0, NULL, 0);
        appl_agentx_send(-1, EV_WRITE, session->sess_conn);
 }
 
@@ -620,7 +618,7 @@ appl_agentx_unregister(struct appl_agentx_session *session, 
struct ax_pdu *pdu)
  fail:
        ax_response(session->sess_conn->conn_ax, session->sess_id,
            pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid,
-           &(pdu->ap_context), smi_getticks(), error, 0, NULL, 0);
+           smi_getticks(), error, 0, NULL, 0);
        appl_agentx_send(-1, EV_WRITE, session->sess_conn);
 }
 
diff --git a/ax.c b/ax.c
index 27580a6..dde9823 100644
--- a/ax.c
+++ b/ax.c
@@ -715,11 +715,11 @@ ax_unregister(struct ax *ax, uint32_t sessionid,
 
 int
 ax_response(struct ax *ax, uint32_t sessionid, uint32_t transactionid,
-    uint32_t packetid, struct ax_ostring *context, uint32_t sysuptime,
-    uint16_t error, uint16_t index, struct ax_varbind *vblist, size_t nvb)
+    uint32_t packetid, uint32_t sysuptime, uint16_t error, uint16_t index,
+    struct ax_varbind *vblist, size_t nvb)
 {
        if (ax_pdu_header(ax, AX_PDU_TYPE_RESPONSE, 0, sessionid,
-           transactionid, packetid, context) == -1)
+           transactionid, packetid, NULL) == -1)
                return -1;
 
        if (ax_pdu_add_uint32(ax, sysuptime) == -1 ||
diff --git a/ax.h b/ax.h
index 3b2ea93..8649c34 100644
--- a/ax.h
+++ b/ax.h
@@ -251,8 +251,7 @@ uint32_t ax_register(struct ax *, uint8_t, uint32_t,
 uint32_t ax_unregister(struct ax *, uint32_t, struct ax_ostring *,
     uint8_t, uint8_t, struct ax_oid *, uint32_t);
 int ax_response(struct ax *, uint32_t, uint32_t, uint32_t,
-    struct ax_ostring *, uint32_t, uint16_t, uint16_t,
-    struct ax_varbind *, size_t);
+    uint32_t, uint16_t, uint16_t, struct ax_varbind *, size_t);
 void ax_pdu_free(struct ax_pdu *);
 void ax_varbind_free(struct ax_varbind *);
 const char *ax_error2string(enum ax_pdu_error);

Reply via email to