🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sys.palmtops.pilot
1 messages
1 total messages Started by Trevor Menagh Wed, 10 Jul 2002 01:02
Receiving SMS messages using the Telephony API calls
#146
Author: Trevor Menagh
Date: Wed, 10 Jul 2002 01:02
132 lines
6331 bytes
I have written the following code to receive SMS messages from a phone
using the Telephony APIs, and it all appears to work except for one
step: TelSmsSelectStorage never changes the storage from store 0 (the
SIM card). No matter what I do it never changes. I have written the
code synchronously (as seen here), asynchronously, trying different
values for the storage, still nothing.
The Palm France team, who wrote the Telephony APIs, haven't been able
to help me out with this so I am really hoping that someone here will
know something about what I need to do to retrieve messages from all
available stores.
Any help would be greatly appreciated.

Thanks (sorry for the cross post ^^;;;),
trv

PS: I stripped out all the code pertaining to my app specifically,
like the storing of the messages in my database, etc.

#define errIambicMailMemAllocFail (appErrorClass | 0x01)
Err SMS_RetrieveMessages (void)
{
Err err;
TelSmsGetMessageCountType messageCount;
TelSmsReadMessagesType readMessages;
TelSmsGetAvailableStorageType getAvailStore;
UInt16 dataMaxSize, j, i, count = 8, msgCount;

getAvailStore.count = count; // get the first 8 stores
getAvailStore.storagesP = MemPtrNew (8 * sizeof (UInt8));
if (getAvailStore.storagesP)
  {
  err = TelSmsGetAvailableStorage (smsLibRef, smsPalmTelAppID,
&getAvailStore, NULL);
  if (err == errNone || err == telErrBufferSize) // not fitting is OK
    {
    count = (getAvailStore.count > 8 ? 8 : getAvailStore.count);
    for (j = 0; j < count ; j++)
      {
      err = TelSmsSelectStorage (smsLibRef, smsPalmTelAppID,
getAvailStore.storagesP[j], NULL); // this function call doesn't seem
to properly sellect the storage!
      if (err == errNone)
        {
        messageCount.messageType = kTelSmsMessageTypeDelivered;
        err = TelSmsGetMessageCount (smsLibRef, smsPalmTelAppID,
&messageCount, NULL);
        if (err == errNone)
          {
          err = TelSmsGetDataMaxSize (smsLibRef, smsPalmTelAppID,
&dataMaxSize, NULL);
          if (err == errNone)
            {
            readMessages.first = 0;
            readMessages.count = messageCount.count;
            readMessages.messagesP = MemPtrNew ((readMessages.count +
1) * sizeof (TelSmsDeliveryMessageType));
            if (readMessages.messagesP)
              {
              for (i = 0; i < readMessages.count; i++)
                {
                readMessages.messagesP[i].version = kTelSmsAPIVersion;
                readMessages.messagesP[i].index = 0;
                readMessages.messagesP[i].dataSize = dataMaxSize;
                readMessages.messagesP[i].data = MemPtrNew
((dataMaxSize + 1) * sizeof (UInt8));
                if (! readMessages.messagesP[i].data)
                  {
                  err = errIambicMailMemAllocFail;
                  break;
                  }
                readMessages.messagesP[i].originatingAddressSize =
kTelMaxPhoneNumberLen + 1;
                readMessages.messagesP[i].originatingAddress =
MemPtrNew ((kTelMaxPhoneNumberLen + 1) * sizeof (Char));
                if (! readMessages.messagesP[i].originatingAddress)
                  {
                  err = errIambicMailMemAllocFail;
                  break;
                  }
                readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumber
= MemPtrNew ((kTelMaxPhoneNumberLen + 1) * sizeof (Char));
                if (!
readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumber)
                  {
                  err = errIambicMailMemAllocFail;
                  break;
                  }
                readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumberSize
= kTelMaxPhoneNumberLen + 1;
                readMessages.messagesP[i].extensionsCount = 5; // Palm
OS Ref pg. 1797 says to allocate between 3 and 5 extensions for a
message
                readMessages.messagesP[i].extensionsP = MemPtrNew (5 *
sizeof (TelSmsExtensionType));
                if (! readMessages.messagesP[i].extensionsP)
                  {
                  err = errIambicMailMemAllocFail;
                  break;
                  }
                }
              err = TelSmsReadMessages (smsLibRef, smsPalmTelAppID,
&readMessages, NULL);
              if (! err || err == telErrBufferSize) // not fitting
into buffers is OK
                {
                for (i = 0; i < readMessages.count; i++)
                  {
                  // Store the received message i
                  // Free the memory allocated by received message i
                  }
                }
              MemPtrFree (readMessages.messagesP);
              }
            else
              err = errIambicMailMemAllocFail;
            }
          }
        }
      }
    }
  MemPtrFree (getAvailStore.storagesP);
  }
else
  err = errIambicMailMemAllocFail;

return (err);
}
-- 
Trevor Lalish-Menagh, Software Engineer
iambic, Inc. (www.iambic.com)
trevor@iambic.com
(408) 367-1600 x20
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads