Truncated SMS Messages with SM5100b

Been working around with the SM5100b modem lately. It sends SMS without a problem, but I'm having trouble reading SMS's that it recieves. Here are some relevant code snippets.

During my setup() function, I do the following:

cell.println("AT+CMGF=1"); // set SMS mode to text
cell.println("AT+CPMS=\"SM\",\"SM\""); // set message storage to SIM
cell.println("AT+CMGD=1,4"); // delete all SMS's from SIM card

Then I have a function that sends a message to Google to get a response with the current time for Denver. After waiting a bit to make sure I recieved an SMS back, I call the following to read in the message stored at index 1, which should be the message from Google since I deleted all messages on startup, and indexing starts at 1. I'm using the SoftwareSerial library, with my object stored in the "cell" variable.

cell.println("AT+CMGR=1");
delay(10000);
String message = "";
while (cell.available() > 0) {
  incoming_char = cell.read();
  message += incoming_char;
}
Serial.println(message);

The first time I run this I get the following:

+CMGR: "REC UNREAD",0,"466453","12/08/21

If I run it again, I get a little more information, but the message text is still truncated:

+CMGR: "REC READ",0,"466453","12/08/21,16:44:08+00"
TIME:
4:44

The full message text should read something like "TIME: 4:44pm Tuesday (MDT) - Time in Denver, CO Tip: check airport status; send HELP AIRPORT to learn more."

Any ideas why my message is being truncated? I get the same results if I print the char read in from cell directly to my Serial connection, or if I read them all into a String first, as seen above. Is this a timing thing, a storage thing, am I overflowing a data structure in there? Any tips on how to get the full message text? I would really appreciate any idea this great community has to offer, thanks! Please let me know if you need any more information, code, etc.

Thanks! -Trevor

Any ideas why my message is being truncated?

It most likely isn't. It just hasn't all arrived by the time you quit reading.

You are assuming that the entire message has arrived while you are waiting, and that there was no buffer overflow.

You need to do a blocking read with timeout, reading until the end-of-packet marker (whatever that is, but generally is two CR/LFs in a row) or until some reasonable period of time has elapsed. Get rid of that delay().

Is this a timing thing, a storage thing, am I overflowing a data structure in there?

Yes, maybe, and possibly.

Any tips on how to get the full message text?

See above. And, get rid of the String class.