Hi Slavoj,

Thanks for the patch and thanks to Alex for improvements.  I hope they
commit it.

+1

------------------------------

Date: Wed, 27 Oct 2010 16:52:15 +0200
From: "XEN-Housing s.r.o." <[email protected]>
To: Alexander Malysh <[email protected]>
Cc: [email protected]
Subject: Re: [patch] opensmppbox validiti periode passtrought fix
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"; Format="flowed"

Thank you Alex.

implemented and new patch with validity_periode and 
schedule_delivery_time attached.

Slavoj.

D?a 27. 10. 2010 15:04, Alexander Malysh wrote / nap?sal(a):
> Hi,
>
> your code doesn't handle relation and relative in the timestamp. Below is
function that I use for this, then just write:
>
>      if (pdu->u.submit_sm.validity_period)
>          msg->sms.validity =
timestamp_to_minutes(pdu->u.submit_sm.validity_period);
>
> ditto fo deferred...
>
> Alex
>
>
> /*
>   * Converting SMPP timestamp to minutes relative
>   * to our localtime.
>   * Return -1 if error detected
> */
> static int timestamp_to_minutes(Octstr *timestamp)
> {
>      struct tm tm, local;
>      time_t valutc, utc;
>      int rc, diff, dummy, localdiff;
>      char relation;
>
>      if (octstr_len(timestamp) == 0)
>          return 0;
>
>      if (octstr_len(timestamp) != 16)
>          return -1;
>
>      /*
>      * Timestamp format:
>      * YYMMDDhhmmsstnn[+-R]
>      * t - tenths of second (not used by us)
>      * nn - Time difference in quarter hours between local and UTC time
>      */
>      rc = sscanf(octstr_get_cstr(timestamp),
>              "%02d%02d%02d%02d%02d%02d%1d%02d%1c",
>              &tm.tm_year,&tm.tm_mon,&tm.tm_mday,
>              &tm.tm_hour,&tm.tm_min,&tm.tm_sec,
>              &dummy,&diff,&relation);
>      if (rc != 9)
>         return -1;
>
>      utc = time(NULL);
>      if (utc == ((time_t)-1))
>          return 0;
>
>      if (relation == '+' || relation == '-') {
>          tm.tm_year += 100; /* number of years since 1900 */
>          tm.tm_mon--; /* month 0-11 */
>          tm.tm_isdst = -1;
>          /* convert to sec. since 1970 */
>          valutc = gw_mktime(&tm);
>          if (valutc == ((time_t)-1))
>              return -1;
>
>          /* work out local time, because gw_mktime assume local time */
>          local = gw_localtime(utc);
>          tm = gw_gmtime(utc);
>          local.tm_isdst = tm.tm_isdst = -1;
>          localdiff = difftime(gw_mktime(&local), gw_mktime(&tm));
>          valutc += localdiff;
>
>          debug("sms.smpp",0, "diff between utc and localtime (%d)",
localdiff);
>          diff = diff*15*60;
>          switch(relation) {
>              case '+':
>                  valutc -= diff;
>                  break;
>              case '-':
>                  valutc += diff;
>                  break;
>          }
>      } else if (relation == 'R') { /* relative to SMSC localtime */
>          local = gw_localtime(utc);
>          local.tm_year += tm.tm_year;
>          local.tm_mon += tm.tm_mon;
>          local.tm_mday += tm.tm_mday;
>          local.tm_hour += tm.tm_hour;
>          local.tm_min += tm.tm_min;
>          local.tm_sec += tm.tm_sec;
>          valutc = gw_mktime(&local);
>          if (valutc == ((time_t)-1))
>             return -1;
>      } else {
>          return -1;
>      }
>      tm = gw_gmtime(valutc);
>      debug("sms.smpp",0,"Requested UTC timestamp: %02d-%02d-%02d
%02d:%02d:%02d",
>              tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour,
tm.tm_min, tm.tm_sec);
>
>      debug("sms.smpp", 0, "requested timestamp in min. (%ld)", (valutc -
utc)/60);
>
>      return ceil(difftime(valutc, utc) / 60);
> }
>
>
> Am 27.10.2010 um 14:04 schrieb XEN-Housing s.r.o.:
>
>> Hello folks,
>>
>> at opensmppbox i found that it not support validity periode handling when
from pdu makes msg for bb.
>>
>> attached patch solve that. i am not well C++ coder, so please make an
review, if there are no left some memory leaks. or may be there is an nicer
way to make it.
>>
>> But it's tested and working ;)
>>
>> PS: acording this, deffered parameter have same problem, is not passing
trought. and handling of DLR need some improvement too, coz from smsc i will
get EXPIRED msg, but opensmpp client is sending UNDELIV with err:000. I will
try to prepare next patches to handle it, but if someone is working on it,
it would be twice made ;)
>>
>> Slavoj.
>>
>> <validity_period.diff>



Reply via email to