static void snmp_error_response(struct snmp_msg_pstat *msg_ps, u8_t error) { /* move names back from outvb to invb */ int v; struct snmp_varbind *vbi = msg_ps->invb.head; struct snmp_varbind *vbo = msg_ps->outvb.head; for (v=0; v<msg_ps->vb_idx; v++) { vbi->ident_len = vbo->ident_len; vbo->ident_len = 0; vbi->ident = vbo->ident; vbo->ident = NULL; vbi = vbi->next; vbo = vbo->next; } /* free outvb */ snmp_varbind_list_free(&msg_ps->outvb); /* we send invb back */ msg_ps->outvb = msg_ps->invb; msg_ps->invb.head = NULL; msg_ps->invb.tail = NULL; msg_ps->invb.count = 0; msg_ps->error_status = error; /* error index must be 0 for error too big */ msg_ps->error_index = (error != SNMP_ES_TOOBIG) ? (1 + msg_ps->vb_idx) : 0; snmp_send_response(msg_ps); snmp_varbind_list_free(&msg_ps->outvb); msg_ps->state = SNMP_MSG_EMPTY; }
static void snmp_error_response(struct snmp_msg_pstat *msg_ps, u8_t error) { snmp_varbind_list_free(&msg_ps->outvb); msg_ps->outvb = msg_ps->invb; msg_ps->invb.head = NULL; msg_ps->invb.tail = NULL; msg_ps->invb.count = 0; msg_ps->error_status = error; msg_ps->error_index = 1 + msg_ps->vb_idx; snmp_send_response(msg_ps); snmp_varbind_list_free(&msg_ps->outvb); msg_ps->state = SNMP_MSG_EMPTY; }
static void snmp_ok_response(struct snmp_msg_pstat *msg_ps) { err_t err_ret; err_ret = snmp_send_response(msg_ps); if (err_ret == ERR_MEM) { /* serious memory problem, can't return tooBig */ } else { LWIP_DEBUGF(SNMP_MSG_DEBUG, ("snmp_msg_event = %"S32_F"\n",msg_ps->error_status)); } /* free varbinds (if available) */ snmp_varbind_list_free(&msg_ps->invb); snmp_varbind_list_free(&msg_ps->outvb); msg_ps->state = SNMP_MSG_EMPTY; }