anytake on this yet?
Nisan
Here is a different take the Andreas's SMPP generic_nack patch. This is a bit more complete, and fixes a potential NULL pointer exception in the code. On line 922 a check is made for msg==NULL, and an error message outputed, but then bb_smscconn_send_failed is called with the NULL msg.
This patch is quite different so I have attached the changed case, rather than a diff.
Nisan
case generic_nack: cmd_stat = pdu->u.generic_nack.command_status;
os = octstr_format("%ld", pdu->u.generic_nack.sequence_number); msg = dict_remove(smpp->sent_msgs, os); octstr_destroy(os); if (msg == NULL) { warning(0, "SMPP[%s]: SMSC sent generic_nack " "with wrong sequence number 0x%08lx", octstr_get_cstr(smpp->conn->id), pdu->u.generic_nack.sequence_number); } else { if ((cmd_stat == SMPP_ESME_RTHROTTLED) || (cmd_stat == SMPP_ESME_RMSGQFUL)) { info(0,"SMPP[%s]: SMSC sent generic_nack %s: status 0x%08lx ", (cmd_stat==SMPP_ESME_RTHROTTLED?"ESME_RTHROTTLED":"ESME_RMSGQFUL"), octstr_get_cstr(smpp->conn->id),pdu->u.generic_nack.command_status); time(&(smpp->throttling_err_time)); reason = smpp_status_to_smscconn_failure_reason( pdu->u.generic_nack.command_status); bb_smscconn_send_failed(smpp->conn, msg, reason); --(*pending_submits); } if (cmd_stat == SMPP_ESME_RUNKNOWNERR) { info(0,"SMPP[%s]: SMSC sent generic_nack SMPP_ESME_RUNKNOWNERR: status 0x%08lx ", octstr_get_cstr(smpp->conn->id),pdu->u.generic_nack.command_status); reason = smpp_status_to_smscconn_failure_reason(-1); bb_smscconn_send_failed(smpp->conn, msg, reason); --(*pending_submits); } else { error(0, "SMPP[%s]: SMSC sent generic_nack type 0x%08lx, code 0x%08lx.", octstr_get_cstr(smpp->conn->id), pdu->type, pdu->u.generic_nack.command_status); reason = smpp_status_to_smscconn_failure_reason(-1); bb_smscconn_send_failed(smpp->conn, msg, reason); --(*pending_submits); } } break;