Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Revision:
34:137ae523ca43
Parent:
31:517fc900afba
Child:
35:ac940cf8ebe6
--- a/src/modem_ref.cpp	Mon Aug 27 11:05:33 2018 +0000
+++ b/src/modem_ref.cpp	Wed Aug 29 15:30:30 2018 +0000
@@ -74,12 +74,20 @@
     int id = -1;
     s8 err = ALP_ERR_NONE;
     u8 eop;
+    uint32_t parsed;
     //REF_PRINT("input 0x%x/%d Bytes\n",flowid,size);
     switch (flowid)
     {
         case WC_FLOW_ALP_UNS:
         case WC_FLOW_ALP_CMD:
-            rem -= alp_parse_chunk(&p, &r);
+            parsed = alp_parse_chunk(&p, &r);
+            if (!parsed)
+            {
+                // Discard the payload in case of parsing error.
+                REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__);
+                break;
+            }
+            rem -= parsed;
             //REF_PRINT("Rem %d Bytes\n", rem);
             // This should always be a TAG'ed request in case of FS access...
             if (r.type == ALP_OPCODE_TAG)
@@ -88,7 +96,14 @@
                 while(rem>0)
                 {
                     // Parse File Operation
-                    rem -= alp_parse_chunk(&p, &r);
+                    parsed = alp_parse_chunk(&p, &r);
+                    if (!parsed)
+                    {
+                        // Discard the payload in case of parsing error.
+                        REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__);
+                        break;
+                    }
+                    rem -= parsed;
                     //REF_PRINT("ALP OP[%d]\n",r.type);
                     switch (r.type)
                     {
@@ -168,7 +183,15 @@
             break;
         case WC_FLOW_ALP_RESP:
             // This should always be a TAG'ed response as we tag our requests
-            rem -= alp_parse_chunk(&p, &r);
+            parsed = alp_parse_chunk(&p, &r);
+            if (!parsed)
+            {
+                // Discard the payload in case of parsing error.
+                REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__);
+                break;
+            }
+            rem -= parsed;
+            
             ASSERT((r.type == ALP_OPCODE_RSP_TAG),"ASSERT: expecting RESP_TAG got %d\n",r.type);
             id  = r.meta.tag.id;
             eop = r.meta.tag.eop;
@@ -186,7 +209,15 @@
             // Actual response(s)
             while(rem>0)
             {
-                rem -= alp_parse_chunk(&p, &r);
+                parsed = alp_parse_chunk(&p, &r);
+                if (!parsed)
+                {
+                    // Discard the payload in case of parsing error.
+                    REF_PRINT("Parsing error in %s:%d!\r\n", __FILE__, __LINE__);
+                    break;
+                }
+                rem -= parsed;
+                
                 switch (r.type)
                 {
                     case ALP_OPCODE_RSP_TAG: