Hi,

I would like to implement a retry mode in kannel_parse_reply (smsc_http.c)
I mean actually we have only 2 way of process.
-the msg has been rejected.
-the msg has been accepted.
Then it could be an interresting idea to retry sending the failed msg due to a 
failed connection.
(We could even use http_status_code >= 500 ?! in this patch)

Is it making sense to you ?

regards

Vincent


diff -rau /gateway-cvs/gw/smsc/smsc_http.c /gateway/gw/smsc/smsc_http.c
--- /gateway-cvs/gw/smsc/smsc_http.c    2006-04-19 13:03:21.000000000 +0200
+++ /gateway/gw/smsc/smsc_http.c        2006-04-19 21:38:04.000000000 +0200
@@ -396,9 +396,21 @@
             octstr_case_compare(body, octstr_imm("Ok.")) == 0 ||
             octstr_ncompare(body, octstr_imm("Result: OK"),10) == 0)) {
         bb_smscconn_sent(conn, msg, NULL);
+    } else if ((status == HTTP_INTERNAL_SERVER_ERROR || status == 
HTTP_NOT_IMPLEMENTED
+        || status == HTTP_BAD_GATEWAY || status == HTTP_SERVICE_UNAVAILABLE)
+        && (octstr_case_compare(body, octstr_imm("Try again later.")) == 0)) {
+          ConnData *conndata = conn->data;
+          conn->status = SMSCCONN_RECONNECTING;
+          gwthread_sleep(conn->reconnect_delay);
+          debug("smsc.http.kannel", 0, "HTTP[%s]: Re-sending request",
+                octstr_get_cstr(conn->id));
+          conndata->open_sends++;
+          conndata->send_sms(conn, msg);
     } else {
+        error(0, "HTTP[%s]: Message was rejected. SMSC reponse was: <%s>",
+              octstr_get_cstr(conn->id), octstr_get_cstr(body));
         bb_smscconn_send_failed(conn, msg,
-                   SMSCCONN_FAILED_MALFORMED, octstr_duplicate(body));
+                    SMSCCONN_FAILED_REJECTED, octstr_duplicate(body));
     }
 }


--
Telemaque - NICE - (FR)
Service Technique - Developpement
http://www.telemaque.fr/
[EMAIL PROTECTED]
Tel : +33 4 93 97 71 64 (fax 68)
diff -rau /gateway-cvs/gw/smsc/smsc_http.c /gateway/gw/smsc/smsc_http.c
--- /gateway-cvs/gw/smsc/smsc_http.c    2006-04-19 13:03:21.000000000 +0200
+++ /gateway/gw/smsc/smsc_http.c        2006-04-19 21:38:04.000000000 +0200
@@ -396,9 +396,21 @@
             octstr_case_compare(body, octstr_imm("Ok.")) == 0 ||
             octstr_ncompare(body, octstr_imm("Result: OK"),10) == 0)) {
         bb_smscconn_sent(conn, msg, NULL);
+    } else if ((status == HTTP_INTERNAL_SERVER_ERROR || status == 
HTTP_NOT_IMPLEMENTED
+        || status == HTTP_BAD_GATEWAY || status == HTTP_SERVICE_UNAVAILABLE)
+        && (octstr_case_compare(body, octstr_imm("Try again later.")) == 0)) {
+          ConnData *conndata = conn->data;
+          conn->status = SMSCCONN_RECONNECTING;
+          gwthread_sleep(conn->reconnect_delay);
+          debug("smsc.http.kannel", 0, "HTTP[%s]: Re-sending request",
+                octstr_get_cstr(conn->id));
+          conndata->open_sends++;
+          conndata->send_sms(conn, msg);
     } else {
+        error(0, "HTTP[%s]: Message was rejected. SMSC reponse was: <%s>",
+              octstr_get_cstr(conn->id), octstr_get_cstr(body));
         bb_smscconn_send_failed(conn, msg,
-                   SMSCCONN_FAILED_MALFORMED, octstr_duplicate(body));
+                    SMSCCONN_FAILED_REJECTED, octstr_duplicate(body));
     }
 }

Reply via email to