commited to repository...

Thanks,
Alexander Malysh

Am 27.10.2010 um 16:52 schrieb XEN-Housing s.r.o.:

> 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>
> 
> <validity_period2.diff>


Reply via email to