Hi,

we had an issue with 'not ACKed operation 31' requests on EMI SMSC. The 
connection is configured to work in Windowing mode (flowcontrol = 0) and the 
window size is default 100.
The issue was that operation 31 requests were not being ACKed, the number of 
not ACKed operation31 requests grew to 100 and then the only thing done on that 
connection/thread was the logging of 100 loglines with 'WARNING: Alert 
(operation 31) was not ACKed within 60 seconds'.
The connection was not in a proper state, but the connection state was not 
changed and the traffic over that connection was blocked.

The change that we applied is the same handling as performed for operation 51 
when not ACKed.

Index: gw/smsc/smsc_emi.c
===================================================================
--- gw/smsc/smsc_emi.c  (revision 5175)
+++ gw/smsc/smsc_emi.c  (working copy)
@@ -1237,8 +1237,12 @@
                     }
                } else if (PRIVDATA(conn)->slots[i].sendtype == 31) {
                    warning(0, "EMI2[%s]: Alert (operation 31) was not "
-                           "ACKed within %d seconds", 
octstr_get_cstr(privdata->name),
-                           PRIVDATA(conn)->waitack);
+                           "ACKed within %d seconds, closing connection.",
+                            octstr_get_cstr(privdata->name), 
PRIVDATA(conn)->waitack);
+                    PRIVDATA(conn)->slots[i].sendtime = 0;
+                    PRIVDATA(conn)->unacked--;
+                    conn_destroy(*server);
+                    *server = NULL;
                    if (PRIVDATA(conn)->flowcontrol) 
PRIVDATA(conn)->can_write=1;
                } else {
                    panic(0, "EMI2[%s]: Bug, no timeout handler for sent 
packet",

Maybe useful for somebody.

Best regards,
Nestor

Reply via email to