--- apps/app_sms.c.jnx 2005-08-28 19:47:23.000000000 +0200 +++ apps/app_sms.c 2005-08-28 19:48:03.000000000 +0200 @@ -944,65 +944,58 @@ static unsigned char sms_handleincoming (sms_t * h) { unsigned char p = 3; - if (h->smsc) { /* SMSC */ - if ((h->imsg[2] & 3) == 1) { /* SMS-SUBMIT */ - h->udhl = h->udl = 0; - h->vp = 0; - h->srr = ((h->imsg[2] & 0x20) ? 1 : 0); - h->udhi = ((h->imsg[2] & 0x40) ? 1 : 0); - h->rp = ((h->imsg[2] & 0x80) ? 1 : 0); - ast_copy_string (h->oa, h->cli, sizeof (h->oa)); - h->scts = time (0); - h->mr = h->imsg[p++]; - p += unpackaddress (h->da, h->imsg + p); - h->pid = h->imsg[p++]; - h->dcs = h->imsg[p++]; - if ((h->imsg[2] & 0x18) == 0x10) { /* relative VP */ - if (h->imsg[p] < 144) - h->vp = (h->imsg[p] + 1) * 5; - else if (h->imsg[p] < 168) - h->vp = 720 + (h->imsg[p] - 143) * 30; - else if (h->imsg[p] < 197) - h->vp = (h->imsg[p] - 166) * 1440; - else - h->vp = (h->imsg[p] - 192) * 10080; - p++; - } else if (h->imsg[2] & 0x18) - p += 7; /* ignore enhanced / absolute VP */ - p += unpacksms (h->dcs, h->imsg + p, h->udh, &h->udhl, h->ud, &h->udl, h->udhi); - h->rx = 1; /* received message */ - sms_writefile (h); /* write the file */ - if (p != h->imsg[1] + 2) { - ast_log (LOG_WARNING, "Mismatch receive unpacking %d/%d\n", p, h->imsg[1] + 2); - return 0xFF; /* duh! */ - } - } else { - ast_log (LOG_WARNING, "Unknown message type %02X\n", h->imsg[2]); - return 0xFF; - } - } else { /* client */ - if (!(h->imsg[2] & 3)) { /* SMS-DELIVER */ - *h->da = h->srr = h->rp = h->vp = h->udhi = h->udhl = h->udl = 0; - h->srr = ((h->imsg[2] & 0x20) ? 1 : 0); - h->udhi = ((h->imsg[2] & 0x40) ? 1 : 0); - h->rp = ((h->imsg[2] & 0x80) ? 1 : 0); - h->mr = -1; - p += unpackaddress (h->oa, h->imsg + p); - h->pid = h->imsg[p++]; - h->dcs = h->imsg[p++]; - h->scts = unpackdate (h->imsg + p); - p += 7; - p += unpacksms (h->dcs, h->imsg + p, h->udh, &h->udhl, h->ud, &h->udl, h->udhi); - h->rx = 1; /* received message */ - sms_writefile (h); /* write the file */ - if (p != h->imsg[1] + 2) { - ast_log (LOG_WARNING, "Mismatch receive unpacking %d/%d\n", p, h->imsg[1] + 2); - return 0xFF; /* duh! */ - } - } else { - ast_log (LOG_WARNING, "Unknown message type %02X\n", h->imsg[2]); - return 0xFF; - } + if ((h->imsg[2] & 3) == 1) { /* SMS-SUBMIT */ + h->udhl = h->udl = 0; + h->vp = 0; + h->srr = ((h->imsg[2] & 0x20) ? 1 : 0); + h->udhi = ((h->imsg[2] & 0x40) ? 1 : 0); + h->rp = ((h->imsg[2] & 0x80) ? 1 : 0); + ast_copy_string (h->oa, h->cli, sizeof (h->oa)); + h->scts = time (0); + h->mr = h->imsg[p++]; + p += unpackaddress (h->da, h->imsg + p); + h->pid = h->imsg[p++]; + h->dcs = h->imsg[p++]; + if ((h->imsg[2] & 0x18) == 0x10) { /* relative VP */ + if (h->imsg[p] < 144) + h->vp = (h->imsg[p] + 1) * 5; + else if (h->imsg[p] < 168) + h->vp = 720 + (h->imsg[p] - 143) * 30; + else if (h->imsg[p] < 197) + h->vp = (h->imsg[p] - 166) * 1440; + else + h->vp = (h->imsg[p] - 192) * 10080; + p++; + } else if (h->imsg[2] & 0x18) + p += 7; /* ignore enhanced / absolute VP */ + p += unpacksms (h->dcs, h->imsg + p, h->udh, &h->udhl, h->ud, &h->udl, h->udhi); + h->rx = 1; /* received message */ + sms_writefile (h); /* write the file */ + if (p != h->imsg[1] + 2) { + ast_log (LOG_WARNING, "Mismatch receive unpacking %d/%d\n", p, h->imsg[1] + 2); + return 0xFF; /* duh! */ + } + } else if (!(h->imsg[2] & 3)) { /* SMS-DELIVER */ + *h->da = h->srr = h->rp = h->vp = h->udhi = h->udhl = h->udl = 0; + h->srr = ((h->imsg[2] & 0x20) ? 1 : 0); + h->udhi = ((h->imsg[2] & 0x40) ? 1 : 0); + h->rp = ((h->imsg[2] & 0x80) ? 1 : 0); + h->mr = -1; + p += unpackaddress (h->oa, h->imsg + p); + h->pid = h->imsg[p++]; + h->dcs = h->imsg[p++]; + h->scts = unpackdate (h->imsg + p); + p += 7; + p += unpacksms (h->dcs, h->imsg + p, h->udh, &h->udhl, h->ud, &h->udl, h->udhi); + h->rx = 1; /* received message */ + sms_writefile (h); /* write the file */ + if (p != h->imsg[1] + 2) { + ast_log (LOG_WARNING, "Mismatch receive unpacking %d/%d\n", p, h->imsg[1] + 2); + return 0xFF; /* duh! */ + } + } else { + ast_log (LOG_WARNING, "Unknown message type %02X\n", h->imsg[2]); + return 0xFF; } return 0; /* no error */ }