89 #include <sys/types.h>    90 #include <sys/socket.h>    91 #include <sys/param.h>    94 #include <netinet/in.h>   114               char* serialdevice, 
int waitreport)
   123     sprintf(smsc->
name, 
"SEMA:X28:"); 
   139     debug(
"smsc.sema", 0, 
"sema_open: open datalink");
   144         debug(
"smsc.sema", 0, 
"sema_open: test send link");
   156     error(0, 
"sema_open: could not open");
   166     debug(
"smsc.sema", 0, 
"reopening the connection");
   182     error(0,
"sema_reopen_data_link: device file error");
   188     error(0,
"test send data link failed");
   194     error(0, 
"sema_reopen_data_link: failed");
   215     char x28sender[2] = 
"A3";
   219         error(0,
"sema_submit_msg: SMSC is empty");
   223         error(0, 
"sema_submit_msg: Msg is empty");
   228         error(0, 
"sema_submit_sms: Msg is WRONG TYPE");
   300         debug(
"smsc.sema", 0, 
"sema_submit_msg: message is successfully delivered");
   304         info(0, 
"sema_submit msg: session timed out without return");
   308         info(0, 
"sema_submit msg: smsc says submit failed!");
   335     if(recieve_sm==NULL) 
goto error;
   360     error(0, 
"sema_receive_msg: can not create Smart Msg");
   370     char clrbuff[]=
"CLR\0";
   371     char errbuff[]=
"ERR\0";
   378     if(ret == -1) 
goto error;
   383     memset(data,0,
sizeof(data));
   385     if(strlen(data) > 0){
   386         if(strstr(data,clrbuff) != NULL ||
   387            strstr(data,errbuff) != NULL){
   388         debug(
"smsc.sema", 0, 
"sema_pending_msg: Radio Pad Command line-%s",data);
   393         if(ret == -1) 
goto error;
   395         memset(data,0,
sizeof(data));
   408     error(0,
"sema_pending message: device file error");
   423     if(
msg == NULL) 
return 0;
   443     if(mlist == NULL) 
return; 
   445     if(pmsg==NULL) 
break;
   457     info(0, 
"msglist_push: NULL msg list");
   461     info(0, 
"msglist_push: NULL input");
   465     if( plist->
first == NULL ) {
   482     error(0, 
"msglist_push: error");
   490     info(0, 
"msglist_pop: NULL list");
   493     if(plist->
first == NULL) {
   521     info(0,
"open serial device %s",device);
   522     fd = open(device, O_RDWR|O_NONBLOCK|O_NOCTTY);
   524     error(errno, 
"sema_open_data_link: error open(2)ing the character device <%s>",
   527         error(0, 
"sema_open_data_link: user has no right to access the serial device");
   531     tcgetattr(fd, &tios);
   532     cfsetospeed(&tios, B4800);  
   533     cfsetispeed(&tios, B4800);
   535     tios.c_iflag |= IGNBRK|IGNPAR|INPCK|ISTRIP;
   536     tios.c_cflag |= (CSIZE|HUPCL | CREAD | 
CRTSCTS);
   537     tios.c_cflag ^= PARODD;
   539     iret = tcsetattr(fd, TCSANOW, &tios);
   541     error(errno,
"sema_open_data_link: fail to set termios attribute");
   544     tcflush(fd, TCIOFLUSH);
   554     nret= close(oldpadfd);
   556         error(errno,
"sema_reopen_data_link: close device file failed!!");
   568     char finishconfirm[]=
"CLR CONF\0";
   569     int nret = 0, readall = 0;
   573     sprintf(discnntbuff,
"%cCLR\r",0x10);
   574     memset(readbuff,0,
sizeof(readbuff));
   582     nret =write(padfd, discnntbuff, 6);
   584         if(errno == EAGAIN || errno ==EINTR) 
continue;
   590     nret=read(padfd, readbuff+readall,128);
   592         if(errno == EAGAIN || errno ==EINTR) 
continue;
   599         if(strstr(readbuff,finishconfirm))
   605     error(errno,
"sema_close_send_link, device file error");
   616     int readall = 0, readonce = 0, writeonce = 0, writeall = 0, i = 0;
   617     char X28prompt[]=
"*\r\n\0";
   620     debug(
"smsc.sema", 0, 
"sema_open send link: call smsc  <%s> for <%i> seconds",
   625     memset(readbuff,0,
sizeof(readbuff));     
   626     for(i = 0; i <= 3; i++)
   628     readonce = writeonce = -1;
   629     writeonce = write(padfd, writebuff, 1);
   631         if(errno == EINTR || errno == EAGAIN) 
continue;
   637     readonce = read(padfd, &readbuff[readall],1024);
   639         if(errno == EINTR || errno == EAGAIN) 
continue;
   647     if(strstr(readbuff, X28prompt) == NULL){
   648     warning(0,
"X28_open_send_link: can not read command prompt, abort");
   654     memset(writebuff,0,
sizeof(writebuff));
   655     memset(readbuff,0,
sizeof(readbuff));  
   656     writeall = readall = 0;
   657     sprintf(writebuff, 
"%s\r", nua);
   658     sprintf(smscbuff, 
"%s COM",nua);
   660     while((
size_t) writeall < strlen(writebuff)){
   662     writeonce = write(padfd, writebuff+writeall, strlen(writebuff)-writeall);
   664         if(errno == EINTR || errno == EAGAIN)
   670         writeall +=writeonce;
   677     if((
size_t) readall >= 
sizeof(readbuff))
   680     readonce = read(padfd, &readbuff[readall], 1);
   682         if(errno == EINTR || errno == EAGAIN) 
continue;
   690        readbuff[readall-1] == 
'\n' && 
   691        readbuff[readall-2] == 
'\r') {
   692         if(strstr(readbuff, smscbuff)) {
   693         debug(
"smsc.sema", 0,
   694               "sema_open send link: smsc responded, virtual link established");
   701     info(0,
"sema_open_send_link: connect timeout");
   704     warning(0, 
"sema_open_send_link: command buffer overflow");
   707     error(errno,
"sema_open_send_link: device file error");
   717     struct timeval tv, tvinit;
   721     tvinit.tv_usec = 1000;
   726     FD_SET(padfd, &read_fd);
   728     ret = select(padfd + 1, &read_fd, NULL, NULL, &tv);
   730         if(errno==EINTR) 
goto got_data;
   731         if(errno==EAGAIN) 
goto got_data;
   732         error(errno, 
"Error doing select for fad");
   736     len = strlen(cbuffer);
   741             error(errno,
" read device file");
   748     if ((
size_t) len >  
sizeof(cbuffer)- 256) {
   749         p = gw_realloc(cbuffer, 
sizeof(cbuffer) * 2);
   750         memset(p+len,0,
sizeof(cbuffer)*2 - len);
   772     int len = 0, pos = 0,writeonce = 0,writeall = 0;
   775     len = strlen(cbuffer);
   778         writeonce = write(padfd, cbuffer+pos, len);
   781         writeonce = write(padfd, cbuffer+pos, sentonce);
   783     if (writeonce == -1) {
   784         if(errno == EINTR || errno == EINTR)
   800     error(errno,
"sema_send data error: device file error");
   808     char mobuff[] =
"COM\r\n\0";
   809     char mobuffend[] = 
"\r\0";
   810     char prompbuff[] = 
"*\r\0";
   811     int len = 0, Llen= 0, Rlen = 0,RRlen = 0;
   814     if(len <=0) 
goto no_msg;
   817     while(*
from == 
'\r' || *
from == 
'\n'){
   821         memset(
from+(len-1), 0, 1);
   831     if((Rbuff=memchr(
from,
'\r',len)) == NULL)
   836     if((Rbuff -
from) > 0 && *(Rbuff -1) == 
'*'){
   837     if(strlen(Rbuff) < 2) 
goto no_msg; 
   840         Rlen = Rbuff -1 -
from;
   841         memcpy(to,
from,Rlen);
   844     if(strlen(Rbuff+1) > 1){
   845         Rlen = strlen(Rbuff +2);
   846         memmove(
from, Rbuff +2, Rlen);
   847         memset(
from+Rlen, 0, len-Rlen);
   852     else if((Rbuff-
from) > 3 &&  strstr(Rbuff-4,mobuff)!= NULL){
   853     if(strlen(Rbuff) < 3 ||
   854        (RRbuff = strstr(Rbuff + 2, mobuffend)) == NULL)
   857     RRlen = RRbuff - (Rbuff+2);
   859         memcpy(to, Rbuff +2 , RRlen);
   863     if(strlen(RRbuff) > 1){
   864         Rlen = strlen(RRbuff +1);
   865         memmove(
from, RRbuff+1 ,Rlen);
   866         memset(
from+Rlen,0,len -Rlen);
   872     if(Rbuff  - 
from > 0){ 
   874         memcpy(to, 
from, Llen);
   876     if(strlen(Rbuff) > 1){
   877         Rlen = strlen(Rbuff+1);
   878         memmove(
from,Rbuff+1,Rlen);
   879         memset(
from+Rlen,0,len-Rlen);
   886     if(strstr(
from,prompbuff) != NULL)
   899     unsigned char oct1byte[1];
   900     unsigned char ia5byte[2];
   901     unsigned char cTr=
't';
   902     unsigned char cMr=
'm';
   903     unsigned char ccontinuebyte = 
'P', ccr = 
'\r';
   906     memset(IA5buff,0,
sizeof(IA5buff));
   910     memcpy(IA5buff,&cMr,1);
   911     memcpy(IA5buff+1,&ccontinuebyte,1); 
   912     memcpy(IA5buff+2,srcmsg->
optref,4); 
   915     memcpy(IA5buff+6,ia5byte,j);
   916     memcpy(IA5buff+6+j,&ccr,1);
   918     if(iret == -1) 
goto error;
   921     memcpy(IA5buff,&cTr,1);
   922     memcpy(IA5buff+1,&ccontinuebyte,1);
   923     memcpy(IA5buff+2,srcmsg->
optref,4); 
   926     memcpy(IA5buff+6,ia5byte,j);
   927     memcpy(IA5buff+6+j,&ccr,1);
   929     if(iret == -1) 
goto error;    
   936     error(0,
"sk_submit_result: write to device file failed");
   948     char data[1024], IA5buff[256], IA5chars[1024], mochars[10*1024];
   949     unsigned char ccontinuebyte, ccr = 
'\r';
   950     unsigned char cerr[] = 
"ERR\0",cclr[] = 
"CLR\0", tmp1[5] , tmp2[5];
   952     int  i, iseg = 0, ilen = 0,iret = 0, moret;
   953     int isrcved = 0, iTrcved = 0, decoderesult = 0;
   957     if(submit_invoke == NULL) 
goto error;
   960     memset(IA5chars,0,
sizeof(IA5chars));
   965     iseg = strlen(IA5chars)/121 + 1;
   966     segments = gw_malloc(iseg * 
sizeof(
struct msg_hash));
   967     if(segments == NULL) 
goto error;
   971     if(strlen(IA5chars) < 121)
   972     ilen = strlen(IA5chars);
   978                (
char *)&ccontinuebyte, 1);  
   980                2, (
char *)pmsg->
optref, 4); 
   987     for( i = 1; i < iseg; i++){
   988     if(strlen(IA5chars) - i*121 < 121)
   989         ilen = strlen(IA5chars) - i*121;
   997                IA5chars + i*121, ilen);
  1017         goto sendlink_error;
  1021     for(i = 0; i < iseg; i++){
  1022     memset(IA5buff,0,
sizeof(IA5buff));
  1035     memset(mochars,0,
sizeof(mochars));
  1044     memset(data,0,
sizeof(data));
  1046         if(strlen(data) > 0){
  1047         if(strstr(data,(
char *)cerr) != NULL ||
  1048            strstr(data,(
char *)cclr) != NULL){
  1049           debug(
"smsc.sema", 0, 
"sema_mt_session: Radio Pad Command line-%s",data);
  1050             goto sendlink_error;
  1054         if(decoderesult >= 0){
  1055             if(mtrmsg->
type == 
's'){ 
  1058             if(submit_result == NULL) 
goto error;
  1060             memset(tmp1,0,5); memset(tmp2,0,5);
  1061             memcpy(tmp1,mtrmsg->
optref,4);
  1062             memcpy(tmp2, pmsg->
optref,4);
  1063             if(strstr((
char *)tmp1,(
char *)tmp2) != NULL){
  1069                 gw_free(submit_result);
  1072             gw_free(submit_result);
  1075             else if(mtrmsg->
type == 
'T'){ 
  1078             if(report_invoke == NULL) 
goto error;
  1080             memset(tmp1,0,
sizeof(tmp1)); memset(tmp2,0,
sizeof(tmp2));
  1083             if(strstr((
char *)tmp1,(
char *)tmp2) != NULL){
  1088             if(iret == -1) 
goto error;
  1090                report_invoke->
status != 3){ 
  1091                 info(0,
"sema_mt_session: submit invoke failed with report value-%i",report_invoke->
status);
  1092                 gw_free(report_invoke);
  1095             gw_free(report_invoke);
  1098             else if(mtrmsg->
type == 
'M'){
  1103             if(iret == -1) 
goto error;
  1105             if(deliver_invoke != NULL){
  1106                 gw_free(deliver_invoke);
  1108                 ilen=strlen(mochars);
  1109                 memcpy(mochars+ilen,data,strlen(data));
  1110                 ilen=strlen(mochars);
  1111                 memcpy(mochars+ilen,&ccr,1);
  1116             memset(mtrmsg,0,
sizeof(
struct sema_msg));
  1119         memset(data,0,
sizeof(data));
  1122             info(0,
"sema_mt_session: submit invoke delivered successfully to smsc");
  1126            isrcved == 1 && iTrcved == 1)
  1128             info(0,
"sema_mt_session: submit invoke delivered successfully to msisdn");
  1136       info(0,
"sema_mt_session: timeout without receiving all expected returns");
  1143     info(0,
"sema_mt_session: smsc says message deliver failed!");
  1151     ilen = strlen(mochars);
  1152     i =  strlen(smsc->
buffer);
  1155     memcpy(smsc->
buffer, mochars,ilen);
  1159     info(0,
"sema_mt_session: X28 data link has broken");
  1164     info(0,
"sema_mt_session: Msg encode error");
  1167     error(0,
"sema_mt session: memory allocation error or device file error");
  1176     int iret = 0, retresult = 0;
  1184     if(iret == - 1) 
goto msg_error;
  1194         info(0,
"sema_mo_session: can not establish send link");
  1199     if(rmsg->
type == 
'M'){  
  1202     if(iret == -1) 
goto error;
  1204     if(deliver_invoke == NULL) 
goto msg_error;
  1208     else if(rmsg->
type == 
'T'){ 
  1211     if(iret == -1) 
goto error;
  1213     if(report_invoke != NULL)  
  1214         gw_free(report_invoke);
  1223     error(0,
"sema_mo session: Msg decode failed");
  1226     error(0,
"sema_mo session: device file error or memory allocation problem!");
  1237     unsigned char tmp[1024],tmpgsm[1024];
  1238     int octetlen, iret, iusedbyte;
  1239     int imsgtopseg = 0, imsgfollownum = 0, imsgencodetype = 0;
  1240     unsigned char cmsgtype, cmsgcontinuebyte;
  1243     if(strlen(octsrc) <= 4) 
goto no_msg;
  1249        && cmsgtype != 
'T'){     
  1250     info(0,
"sema_decode: msg type not supported");
  1255     cmsgcontinuebyte = *(octsrc+1);
  1257                  &imsgencodetype,&imsgtopseg, &imsgfollownum);
  1260     info(0,
"sema_decode: msg continue bit can not be interpreted");
  1268     if(imsgtopseg == 0){
  1269     info(0, 
"sema_decode: can not interpret more than one segments msg");
  1273     (*desmsg)->type = cmsgtype;
  1274     (*desmsg)->continuebyte = cmsgcontinuebyte;
  1275     (*desmsg)->encodetype = imsgencodetype;
  1279     memcpy((*desmsg)->optref, octsrc +2, 4);
  1290     if(iusedbyte < 1) 
goto error_submit;
  1296         octsrc += iusedbyte;    
  1298         if(iusedbyte <1) 
goto error_submit; 
  1301         octsrc += iusedbyte;     
  1303         if(iusedbyte < 1) 
goto error_submit;    
  1306     (*desmsg)->msgbody = submit_result;
  1314     if(iusedbyte < 1) 
goto error_deliver;
  1320     if(iusedbyte < 1) 
goto error_deliver;
  1325     if(iusedbyte < 1) 
goto error_deliver;
  1330     if(iusedbyte < 1) 
goto error_deliver;
  1336     if(iusedbyte < 1) 
goto error_deliver;
  1340     if(iusedbyte < 1) 
goto error_deliver;
  1345         info(0, 
"sema_decode, Data encoding scheme not supported");
  1351     if(iusedbyte < 1) 
goto error_deliver;
  1357     if(iusedbyte < 1) 
goto error_deliver;
  1363     if(iusedbyte < 1) 
goto error_deliver;
  1368     if(iusedbyte < 1) 
goto error_deliver;
  1375     memset(tmp,0,
sizeof(tmp));                      
  1379         if(iusedbyte < 1) 
goto error_deliver;   
  1384         memset(tmpgsm,0,
sizeof(tmpgsm));
  1387         if(iusedbyte < 1) 
goto error_deliver;
  1400     if(iusedbyte < 1) 
goto error_deliver;
  1405     if(iusedbyte < 1) 
goto error_deliver;
  1407     (*desmsg)->msgbody = receive_sm;
  1415     if(iusedbyte < 1) 
goto error_receive;
  1419     octsrc += iusedbyte;    
  1421     if(iusedbyte < 1) 
goto error_receive;
  1424     octsrc += iusedbyte;
  1426     if(iusedbyte < 1) 
goto error_receive;
  1430     octsrc += iusedbyte;    
  1432     if(iusedbyte < 1) 
goto error_receive;
  1433     memcpy(receive_report->
smerefnum ,tmp, 4);
  1435     octsrc += iusedbyte;
  1437     if(iusedbyte < 1) 
goto error_receive;
  1440     octsrc += iusedbyte;    
  1442     if(iusedbyte < 1) 
goto error_receive;
  1445     octsrc += iusedbyte;    
  1447     if(iusedbyte < 1) 
goto error_receive;
  1450     octsrc += iusedbyte;
  1451     if(receive_report->
status != 6) 
  1454         if(iusedbyte < 1) 
goto error_receive;
  1460         if(iusedbyte < 1) 
goto error_receive;
  1463     if(receive_report->
status == 6 || receive_report->
status == 1) 
  1465         octsrc += iusedbyte;
  1467         if(iusedbyte < 1) 
goto error_receive;
  1472     octsrc += iusedbyte;
  1474     if(iusedbyte < 1) 
goto error_receive;
  1478     octsrc += iusedbyte;
  1480     if(iusedbyte < 1) 
goto error_receive;
  1483     octsrc += iusedbyte;     
  1489     (*desmsg)->msgbody = receive_report;
  1495     info(0,
"sema_decode: msg is empty");
  1498     gw_free(receive_report);
  1501     gw_free(submit_result);
  1504     gw_free(receive_sm);
  1507     info(0,
"sema_decode:msg parameter is not recognized or unsupported");
  1516     unsigned char oc1byte[10];
  1570                   int octects ,
int spetets, 
unsigned char* to)
  1577     int lenin2=octects*8;
  1578     cin2 = gw_malloc(lenin2);
  1580     memset(cin2,48,lenin2); 
  1582     for(i = 0; i < octects; i ++)
  1587         cin2[(octects-1-i)*8 +7] = 49;
  1589         cin2[(octects-1-i)*8 +6] = 49;
  1591         cin2[(octects-1-i)*8 +5] = 49;
  1593         cin2[(octects-1-i)*8 +4] = 49;
  1595         cin2[(octects-1-i)*8 +3] = 49;
  1597         cin2[(octects-1-i)*8 +2] = 49;
  1599         cin2[(octects-1-i)*8 +1] = 49;
  1601         cin2[(octects-1-i)*8] = 49;
  1605     while( i <= spetets ){
  1606     pos=lenin2 -1 -(i*7 -1);
  1607     memset(cin7,0,
sizeof(cin7));
  1608     memcpy(cin7, cin2 + pos, 7);
  1637     unsigned char IA5char[3];
  1638     unsigned char tmp[1024];
  1641     for(i=0; i<len; i++)
  1643     memset(IA5char, 0, 
sizeof(IA5char));
  1646         memcpy(tmp+iall,IA5char,j);
  1657                  int hexnum, 
unsigned char* to)
  1659     unsigned char cha[1];
  1660     int cn =0, cnall = 0, i = 0;
  1661     char *tmpfrom = NULL;
  1663     for(i = 0; i< hexnum; i++)
  1682     case 0x00: 
return '@';  
  1683     case 0x01: 
return '£';
  1684     case 0x02: 
return '$';
  1685     case 0x03: 
return '¥';
  1686     case 0x04: 
return 'è';
  1687     case 0x05: 
return 'é';
  1688     case 0x06: 
return 'ù';
  1689     case 0x07: 
return 'ì';
  1690     case 0x08: 
return 'ò';
  1691     case 0x09: 
return 'Ç';
  1692     case 0x0A: 
return '\n';
  1693     case 0x0B: 
return 'Ø';
  1694     case 0x0C: 
return 'ø';
  1695     case 0x0D: 
return '\r';
  1696     case 0x0E: 
return 'Å';
  1697     case 0x0F: 
return 'å';
  1698     case 0x10: 
return 'D';
  1699     case 0x11: 
return ' ';
  1700     case 0x12: 
return 'F';
  1701     case 0x13: 
return 'G';
  1702     case 0x14: 
return 'L';
  1703     case 0x15: 
return 'W';
  1704     case 0x16: 
return 'P';
  1705     case 0x17: 
return 'Y';
  1706     case 0x18: 
return 'S';
  1707     case 0x19: 
return 'Q';
  1708     case 0x1A: 
return 'X';
  1709     case 0x1B: 
return ' ';
  1710     case 0x1C: 
return 'Æ';
  1711     case 0x1D: 
return 'æ';
  1712     case 0x1E: 
return 'b';
  1713     case 0x1F: 
return 'É';
  1714     case 0x5B: 
return 'Ä';
  1715     case 0x5C: 
return 'Ö';
  1716     case 0x5D: 
return 'Ñ';
  1717     case 0x5E: 
return 'Ü';
  1718     case 0x5F: 
return '§';
  1719     case 0x60: 
return '¿';
  1720     case 0x7B: 
return 'a';
  1721     case 0x7C: 
return 'ö';
  1722     case 0x7D: 
return 'ñ';
  1723     case 0x7E: 
return 'ü';
  1724     case 0x7F: 
return 'à';
  1725     default: 
return from;
  1735     to[1] = 0x40 + 
from;
  1738     else if(
from ==0x5C) 
  1744     else if(
from == 0x5E)
  1750     else if(
from == 0x60)
  1756     else if(
from == 0x7E)
  1762     else if(
from >= 0x20 && 
from <= 0x7E)
  1767     else if(
from == 0x7F)
  1773     else if(
from >= 0x80 && 
from <=0x9F)
  1779     else if(
from >= 0xA0 && 
from <=0xFE)
  1785     else if(
from == 0xFF)
  1787     to[0] =to[1] = 0x7E;
  1797     int len = strlen(
from);
  1799     if(*
from == 
'^' && len >= 2 &&
  1805     else if(*
from ==0x5C && len >= 2 &&
  1811     else if(*
from == 0x5C && len >= 2 &&
  1817     else if(*
from == 0x5C && len >= 2 &&
  1823     else if(*
from == 0x5C && len >=2 &&
  1829     else if(*
from == 
'^' && len >= 2 && 
  1830         (*(
from +1) >= 0x40 &&  *(
from +1) <= 0x5F))
  1832     *to = *(
from +1) -0x40;     
  1835     else if(*
from == 
'~' && len >= 2 && 
  1836         (*(
from +1) >= 0x40 && *(
from +1) <= 0x5F))
  1838     *to = *(
from +1) +0x40; 
  1841     else if(*
from == 
'`' && len >= 2 &&
  1842         (*(
from+1) >= 0x20 && *(
from +1) <= 0x7E))
  1844     *to = *(
from +1) +0x80;
  1847     else if(*
from >=0x20 && 
  1890                      int isfirst, 
int follownum)
  1899     strncpy(bin,
"0101",4);
  1901     strncpy(bin,
"0110",4);
  1911     return (value+follownum);
  1923     if(continueCount & 1)
  1925     if(continueCount & 2)
  1927     if(continueCount & 4)
  1929     if(continueCount & 8)
  1934     if(continueCount & 16)
  1937     if(continueCount & 32)
  1940     if(continueCount & 64)
  1943     if(continueCount & 128) 
  1947     *encode = *isfirst = -1;
  1979     if(*encode != -1 && *isfirst != -1)
 #define SM_RESULT_SUCCESS
 
#define SESSION_MT_RECEIVE_ERR
 
int sema_reopen(SMSCenter *smsc)
 
void error(int err, const char *fmt,...)
 
void info(int err, const char *fmt,...)
 
unsigned int statusreportrequest
 
static int line_scan_hex_GSM7(unsigned char *from, int octects, int spetets, unsigned char *to)
 
unsigned int textsizeoctect
 
unsigned int textsizeoctect
 
#define INTERNAL_CONNECT_TIMEVAL
 
static int X28_close_send_link(int padfd)
 
#define INTERNAL_DISCONNECT_TIMEVAL
 
struct sema_msglist * sema_mo
 
static int sema_msg_session_mt(SMSCenter *smsc, sema_msg *pmsg)
 
static int line_scan_IA5_hex(char *from, int hexnum, unsigned char *to)
 
unsigned int validperiodtype
 
static void sema_msglist_free(sema_msglist *mlist)
 
unsigned char smerefnum[4]
 
unsigned char smscrefnum[4]
 
void octstr_insert_data(Octstr *ostr, long pos, const char *data, long len)
 
unsigned int validperiodrela
 
#define octstr_get_cstr(ostr)
 
#define octstr_copy(ostr, from, len)
 
#define INTERNAL_SESSION_MT_TIMEVAL
 
static int sema_msg_session_mo(SMSCenter *smsc, char *cbuff)
 
static int sema_msglist_pop(sema_msglist *plist, sema_msg **msg)
 
static int X28_data_read(int padfd, char *cbuffer)
 
static unsigned char internal_char_hex_to_gsm(unsigned char from)
 
unsigned char smscrefnum[4]
 
static int X28_msg_pop(char *from, char *to)
 
static int sema_msglist_push(sema_msglist *plist, sema_msg *pmsg)
 
static void increment_counter(void)
 
static int sema_encode_msg(sema_msg *pmsg, char *str)
 
#define octstr_duplicate(ostr)
 
#define SESSION_MT_RECEIVE_SUCCESS
 
static unsigned char sema_counter[4]
 
SMSCenter * smscenter_construct(void)
 
int sema_close(SMSCenter *smsc)
 
void warning(int err, const char *fmt,...)
 
void smscenter_destruct(SMSCenter *smsc)
 
unsigned int textsizeseptet
 
static int sema_submit_result(SMSCenter *smsc, sema_msg *srcmsg, int result)
 
int sema_submit_msg(SMSCenter *smsc, Msg *msg)
 
void octstr_destroy(Octstr *ostr)
 
unsigned int textsizeseptet
 
#define octstr_create(cstr)
 
int sema_receive_msg(SMSCenter *smsc, Msg **msg)
 
static sema_msglist * sema_msglist_new(void)
 
static int sema_wait_report
 
static unsigned char pack_continous_byte(int encode, int isfirst, int follownum)
 
long octstr_len(const Octstr *ostr)
 
struct sema_msglist * sema_mt
 
static int unpack_continous_byte(unsigned char continueCount, int *encode, int *isfirst, int *follownum)
 
void debug(const char *place, int err, const char *fmt,...)
 
static int X28_open_data_link(char *device)
 
SMSCenter * sema_open(char *smscnua, char *homenua, char *serialdevice, int waitreport)
 
static int internal_char_hex_to_IA5(unsigned char from, unsigned char *to)
 
MultibyteInt get_variable_value(Octet *source, int *len)
 
static int internal_char_IA5_to_hex(char *from, unsigned char *to)
 
unsigned char smscrefnum[4]
 
void kannel_cfmakeraw(struct termios *tio)
 
unsigned char smerefnum[4]
 
int write_variable_value(MultibyteInt value, Octet *dest)
 
static int sema_msg_free(sema_msg *msg)
 
static int X28_open_send_link(int padfd, char *nua)
 
unsigned char smscrefnum[4]
 
static int X28_data_send(int padfd, char *cbuffer, int sentonce)
 
static int sema_decode_msg(sema_msg **desmsg, char *octsrc)
 
static sema_msg * sema_msg_new(void)
 
#define octstr_create_from_data(data, len)
 
static int line_append_hex_IA5(Octstr *des, unsigned char *src, int len)
 
#define SESSION_MT_RECEIVE_TIMEOUT
 
static XMLRPCDocument * msg
 
static int X28_reopen_data_link(int oldpadfd, char *device)
 
int sema_pending_smsmessage(SMSCenter *smsc)