Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

smsc_at.h File Reference

#include "gwlib/gwlib.h"

Include dependency graph for smsc_at.h:

Include dependency graph

This graph shows which files directly or indirectly include this file:

Included by dependency graph

Go to the source code of this file.

Data Structures

struct  ModemDef
struct  PrivAT2data

Defines

#define MAX_READ   1023
#define AT_DELIVER_SM   0
#define AT_SUBMIT_SM   1
#define AT_STATUS_REPORT_SM   2
#define PNT_UNKNOWN   0
#define PNT_INTER   1
#define PNT_NATIONAL   2
#define RETRY_WRITE   3
#define AT2_DEFAULT_SMS_POLL_INTERVAL   60
#define O_DESTROY(a)   { if(a) octstr_destroy(a); a = NULL; }

Typedefs

typedef ModemDef ModemDef
typedef PrivAT2data PrivAT2data

Functions

int at2_open_device (PrivAT2data *privdata)
void at2_close_device (PrivAT2data *privdata)
void at2_read_buffer (PrivAT2data *privdata)
Octstrat2_wait_line (PrivAT2data *privdata, time_t timeout, int gt_flag)
Octstrat2_read_line (PrivAT2data *privdata, int gt_flag)
int at2_write_line (PrivAT2data *privdata, char *line)
int at2_write_ctrlz (PrivAT2data *privdata)
int at2_write (PrivAT2data *privdata, char *line)
void at2_flush_buffer (PrivAT2data *privdata)
int at2_init_device (PrivAT2data *privdata)
int at2_send_modem_command (PrivAT2data *privdata, char *cmd, time_t timeout, int greaterflag)
int at2_wait_modem_command (PrivAT2data *privdata, time_t timeout, int greaterflag, int *output)
void at2_set_speed (PrivAT2data *privdata, int bps)
void at2_device_thread (void *arg)
int at2_shutdown_cb (SMSCConn *conn, int finish_sending)
long at2_queued_cb (SMSCConn *conn)
void at2_start_cb (SMSCConn *conn)
int at2_add_msg_cb (SMSCConn *conn, Msg *sms)
int smsc_at2_create (SMSCConn *conn, CfgGroup *cfg)
int at2_pdu_extract (PrivAT2data *privdata, Octstr **pdu, Octstr *line, Octstr *smsc_number)
int at2_hexchar (int hexc)
Msgat2_pdu_decode (Octstr *data, PrivAT2data *privdata)
Msgat2_pdu_decode_deliver_sm (Octstr *data, PrivAT2data *privdata)
Msgat2_pdu_decode_report_sm (Octstr *data, PrivAT2data *privdata)
Octstrat2_convertpdu (Octstr *pdutext)
void at2_decode7bituncompressed (Octstr *input, int len, Octstr *decoded, int offset)
void at2_send_messages (PrivAT2data *privdata)
void at2_send_one_message (PrivAT2data *privdata, Msg *msg)
Octstrat2_pdu_encode (Msg *msg, PrivAT2data *privdata)
Octstrat2_encode7bituncompressed (Octstr *input, int offset)
Octstrat2_encode8bituncompressed (Octstr *input)
int at2_numtext (int num)
int at2_detect_speed (PrivAT2data *privdata)
int at2_test_speed (PrivAT2data *privdata, long speed)
int at2_detect_modem_type (PrivAT2data *privdata)
ModemDefat2_read_modems (PrivAT2data *privdata, Octstr *file, Octstr *id, int idnumber)
void at2_destroy_modem (ModemDef *modem)
int at2_read_sms_memory (PrivAT2data *privdata)
int at2_check_sms_memory (PrivAT2data *privdata)
int swap_nibbles (unsigned char byte)
Octstrat2_format_address_field (Octstr *msisdn)
void at2_read_pending_incoming_messages (PrivAT2data *privdata)
int at2_set_message_storage (PrivAT2data *privdata, Octstr *memory_name)
int at2_read_delete_message (PrivAT2data *privdata, int message_number)
const char * at2_error_string (int code)


Define Documentation

#define AT2_DEFAULT_SMS_POLL_INTERVAL   60
 

Definition at line 93 of file smsc_at.h.

#define AT_DELIVER_SM   0
 

Definition at line 76 of file smsc_at.h.

Referenced by at2_pdu_decode().

#define AT_STATUS_REPORT_SM   2
 

Definition at line 78 of file smsc_at.h.

Referenced by at2_pdu_decode().

#define AT_SUBMIT_SM   1
 

Definition at line 77 of file smsc_at.h.

#define MAX_READ   1023
 

Definition at line 73 of file smsc_at.h.

Referenced by at2_read_buffer().

#define O_DESTROY  )     { if(a) octstr_destroy(a); a = NULL; }
 

Definition at line 158 of file smsc_at.h.

#define PNT_INTER   1
 

Definition at line 82 of file smsc_at.h.

Referenced by at2_format_address_field().

#define PNT_NATIONAL   2
 

Definition at line 83 of file smsc_at.h.

#define PNT_UNKNOWN   0
 

Definition at line 81 of file smsc_at.h.

#define RETRY_WRITE   3
 

Definition at line 86 of file smsc_at.h.


Typedef Documentation

typedef struct ModemDef ModemDef
 

typedef struct PrivAT2data PrivAT2data
 


Function Documentation

int at2_add_msg_cb SMSCConn conn,
Msg sms
[static]
 

int at2_check_sms_memory PrivAT2data privdata  )  [static]
 

Referenced by at2_read_sms_memory().

void at2_close_device PrivAT2data privdata  )  [static]
 

Referenced by at2_detect_modem_type(), at2_device_thread(), at2_open_device1(), at2_read_buffer(), and at2_test_speed().

Octstr* at2_convertpdu Octstr pdutext  )  [static]
 

Referenced by at2_pdu_decode_deliver_sm(), and at2_pdu_decode_report_sm().

void at2_decode7bituncompressed Octstr input,
int  len,
Octstr decoded,
int  offset
[static]
 

Referenced by at2_pdu_decode_deliver_sm(), and at2_pdu_decode_report_sm().

void at2_destroy_modem ModemDef modem  )  [static]
 

Referenced by at2_detect_modem_type(), and at2_device_thread().

int at2_detect_modem_type PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread().

int at2_detect_speed PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread().

void at2_device_thread void *  arg  )  [static]
 

Octstr* at2_encode7bituncompressed Octstr input,
int  offset
[static]
 

Referenced by at2_pdu_encode().

Octstr* at2_encode8bituncompressed Octstr input  )  [static]
 

Referenced by at2_pdu_encode().

const char* at2_error_string int  code  )  [static]
 

void at2_flush_buffer PrivAT2data privdata  )  [static]
 

Referenced by at2_detect_modem_type(), and at2_init_device().

Octstr* at2_format_address_field Octstr msisdn  )  [static]
 

Referenced by at2_pdu_encode().

int at2_hexchar int  hexc  )  [static]
 

Referenced by at2_convertpdu(), and at2_pdu_extract().

int at2_init_device PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread().

int at2_numtext int  num  )  [static]
 

Referenced by at2_encode8bituncompressed().

int at2_open_device PrivAT2data privdata  )  [static]
 

Referenced by at2_detect_modem_type(), at2_device_thread(), and at2_test_speed().

Msg* at2_pdu_decode Octstr data,
PrivAT2data privdata
[static]
 

Referenced by at2_wait_modem_command().

Msg* at2_pdu_decode_deliver_sm Octstr data,
PrivAT2data privdata
[static]
 

Referenced by at2_pdu_decode().

Msg* at2_pdu_decode_report_sm Octstr data,
PrivAT2data privdata
[static]
 

Referenced by at2_pdu_decode().

Octstr* at2_pdu_encode Msg msg,
PrivAT2data privdata
[static]
 

Referenced by at2_send_one_message().

int at2_pdu_extract PrivAT2data privdata,
Octstr **  pdu,
Octstr line,
Octstr smsc_number
[static]
 

Referenced by at2_wait_modem_command().

long at2_queued_cb SMSCConn conn  )  [static]
 

void at2_read_buffer PrivAT2data privdata  )  [static]
 

Referenced by at2_flush_buffer(), at2_login_device(), at2_read_line(), and at2_test_speed().

int at2_read_delete_message PrivAT2data privdata,
int  message_number
[static]
 

Referenced by at2_read_pending_incoming_messages(), and at2_read_sms_memory().

Octstr* at2_read_line PrivAT2data privdata,
int  gt_flag
[static]
 

Referenced by at2_wait_line(), and at2_wait_modem_command().

ModemDef* at2_read_modems PrivAT2data privdata,
Octstr file,
Octstr id,
int  idnumber
[static]
 

Referenced by at2_detect_modem_type(), and smsc_at2_create().

void at2_read_pending_incoming_messages PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread(), and at2_read_sms_memory().

int at2_read_sms_memory PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread().

void at2_send_messages PrivAT2data privdata  )  [static]
 

Referenced by at2_device_thread().

int at2_send_modem_command PrivAT2data privdata,
char *  cmd,
time_t  timeout,
int  greaterflag
[static]
 

Referenced by at2_check_sms_memory(), at2_detect_modem_type(), at2_device_thread(), at2_init_device(), at2_login_device(), at2_read_delete_message(), at2_send_messages(), at2_send_one_message(), at2_set_message_storage(), and at2_test_speed().

void at2_send_one_message PrivAT2data privdata,
Msg msg
[static]
 

Referenced by at2_send_messages().

int at2_set_message_storage PrivAT2data privdata,
Octstr memory_name
[static]
 

Referenced by at2_init_device(), and at2_read_pending_incoming_messages().

void at2_set_speed PrivAT2data privdata,
int  bps
[static]
 

Referenced by at2_detect_modem_type(), at2_init_device(), and at2_test_speed().

int at2_shutdown_cb SMSCConn conn,
int  finish_sending
[static]
 

void at2_start_cb SMSCConn conn  )  [static]
 

int at2_test_speed PrivAT2data privdata,
long  speed
[static]
 

Referenced by at2_detect_speed(), and at2_device_thread().

Octstr* at2_wait_line PrivAT2data privdata,
time_t  timeout,
int  gt_flag
[static]
 

Referenced by at2_wait_modem_command().

int at2_wait_modem_command PrivAT2data privdata,
time_t  timeout,
int  greaterflag,
int *  output
[static]
 

Referenced by at2_device_thread(), at2_init_device(), at2_login_device(), at2_read_delete_message(), at2_send_modem_command(), and at2_send_one_message().

int at2_write PrivAT2data privdata,
char *  line
[static]
 

Referenced by at2_send_one_message().

int at2_write_ctrlz PrivAT2data privdata  )  [static]
 

Referenced by at2_send_one_message().

int at2_write_line PrivAT2data privdata,
char *  line
[static]
 

Referenced by at2_read_delete_message(), at2_send_modem_command(), and at2_wait_modem_command().

int smsc_at2_create SMSCConn conn,
CfgGroup cfg
 

Definition at line 1464 of file smsc_at.c.

01465 {
01466     PrivAT2data *privdata;
01467     Octstr *modem_type_string;
01468     long portno;   /* has to be long because of cfg_get_integer */
01469 
01470     privdata = gw_malloc(sizeof(PrivAT2data));
01471     privdata->outgoing_queue = gw_prioqueue_create(sms_priority_compare);
01472     privdata->pending_incoming_messages = gwlist_create();
01473 
01474     privdata->configfile = cfg_get_configfile(cfg);
01475 
01476     privdata->device = cfg_get(cfg, octstr_imm("device"));
01477     if (privdata->device == NULL) {
01478         error(0, "AT2[-]: 'device' missing in at2 configuration.");
01479         goto error;
01480     }
01481     
01482     if (octstr_str_compare(privdata->device, "rawtcp") == 0) {
01483         privdata->rawtcp_host = cfg_get(cfg, octstr_imm("host"));
01484         if (privdata->rawtcp_host == NULL) {
01485             error(0, "AT2[-]: 'host' missing in at2 rawtcp configuration.");
01486             goto error;
01487         }
01488         if (cfg_get_integer(&portno, cfg, octstr_imm("port")) == -1) {
01489             error(0, "AT2[-]: 'port' missing in at2 rawtcp configuration.");
01490             goto error;
01491         }
01492         privdata->rawtcp_port = portno;
01493         privdata->is_serial = 0;
01494         privdata->use_telnet = 0;
01495     }
01496     else if (octstr_str_compare(privdata->device, "telnet") == 0) {
01497         privdata->rawtcp_host = cfg_get(cfg, octstr_imm("host"));
01498         if (privdata->rawtcp_host == NULL) {
01499             error(0, "AT2[-]: 'host' missing in at2 telnet configuration.");
01500             goto error;
01501         }
01502         if (cfg_get_integer(&portno, cfg, octstr_imm("port")) == -1) {
01503             error(0, "AT2[-]: 'port' missing in at2 telnet configuration.");
01504             goto error;
01505         }
01506         privdata->rawtcp_port = portno;
01507         privdata->is_serial = 0;
01508         privdata->use_telnet = 1;
01509     }else {
01510         privdata->is_serial = 1;
01511         privdata->use_telnet = 0;
01512     }
01513 
01514     privdata->name = cfg_get(cfg, octstr_imm("smsc-id"));
01515     if (privdata->name == NULL) {
01516         privdata->name = octstr_duplicate(privdata->device);
01517     }
01518 
01519     privdata->speed = 0;
01520     cfg_get_integer(&privdata->speed, cfg, octstr_imm("speed"));
01521 
01522     privdata->keepalive = 0;
01523     cfg_get_integer(&privdata->keepalive, cfg, octstr_imm("keepalive"));
01524 
01525     cfg_get_bool(&privdata->sms_memory_poll_interval, cfg, octstr_imm("sim-buffering"));
01526     if (privdata->sms_memory_poll_interval) {
01527         if (privdata->keepalive)
01528             privdata->sms_memory_poll_interval = privdata->keepalive;
01529         else
01530             privdata->sms_memory_poll_interval = AT2_DEFAULT_SMS_POLL_INTERVAL;
01531     }
01532 
01533     privdata->my_number       = cfg_get(cfg, octstr_imm("my-number"));
01534     privdata->sms_center      = cfg_get(cfg, octstr_imm("sms-center"));
01535     privdata->username        = cfg_get(cfg, octstr_imm("smsc-username"));
01536     privdata->password        = cfg_get(cfg, octstr_imm("smsc-password"));
01537     privdata->login_prompt    = cfg_get(cfg, octstr_imm("login-prompt"));
01538     privdata->password_prompt = cfg_get(cfg, octstr_imm("password-prompt"));
01539     modem_type_string = cfg_get(cfg, octstr_imm("modemtype"));
01540 
01541     privdata->modem = NULL;
01542 
01543     if (modem_type_string != NULL) {
01544         if (octstr_compare(modem_type_string, octstr_imm("auto")) == 0 ||
01545             octstr_compare(modem_type_string, octstr_imm("autodetect")) == 0)
01546             O_DESTROY(modem_type_string);
01547     }
01548 
01549     if (octstr_len(modem_type_string) == 0) {
01550         info(0, "AT2[%s]: configuration doesn't show modemtype. will autodetect",
01551              octstr_get_cstr(privdata->name));
01552     } else {
01553         info(0, "AT2[%s]: configuration shows modemtype <%s>",
01554              octstr_get_cstr(privdata->name),
01555              octstr_get_cstr(modem_type_string));
01556         privdata->modem = at2_read_modems(privdata, privdata->configfile,
01557                                           modem_type_string, 0);
01558         if (privdata->modem == NULL) {
01559             info(0, "AT2[%s]: modemtype not found, revert to autodetect",
01560                  octstr_get_cstr(privdata->name));
01561         } else {
01562             info(0, "AT2[%s]: read modem definition for <%s>",
01563                  octstr_get_cstr(privdata->name),
01564                  octstr_get_cstr(privdata->modem->name));
01565         }
01566         O_DESTROY(modem_type_string);
01567     }
01568 
01569     privdata->ilb = octstr_create("");
01570     privdata->fd = -1;
01571     privdata->lines = NULL;
01572     privdata->pin = cfg_get(cfg, octstr_imm("pin"));
01573     privdata->pin_ready = 0;
01574     privdata->conn = conn;
01575     privdata->phase2plus = 0;
01576     privdata->validityperiod = cfg_get(cfg, octstr_imm("validityperiod"));
01577     if (cfg_get_integer((long *) &privdata->max_error_count,  cfg, octstr_imm("max-error-count")) == -1)
01578         privdata->max_error_count = -1;
01579 
01580     conn->data = privdata;
01581     conn->name = octstr_format("AT2[%s]", octstr_get_cstr(privdata->name));
01582     conn->status = SMSCCONN_CONNECTING;
01583 
01584     privdata->shutdown = 0;
01585 
01586     conn->status = SMSCCONN_CONNECTING;
01587     conn->connect_time = time(NULL);
01588 
01589     if ((privdata->device_thread = gwthread_create(at2_device_thread, conn)) == -1) {
01590         privdata->shutdown = 1;
01591         goto error;
01592     }
01593 
01594     conn->shutdown = at2_shutdown_cb;
01595     conn->queued = at2_queued_cb;
01596     conn->start_conn = at2_start_cb;
01597     conn->send_msg = at2_add_msg_cb;
01598     return 0;
01599 
01600 error:
01601     error(0, "AT2[%s]: Failed to create at2 smsc connection",
01602           octstr_len(privdata->name) ? octstr_get_cstr(privdata->name) : "");
01603     if (privdata != NULL) {
01604         gw_prioqueue_destroy(privdata->outgoing_queue, NULL);
01605     }
01606     gw_free(privdata);
01607     conn->why_killed = SMSCCONN_KILLED_CANNOT_CONNECT;
01608     conn->status = SMSCCONN_DEAD;
01609     info(0, "AT2[%s]: exiting", octstr_get_cstr(privdata->name));
01610     return -1;
01611 }

int swap_nibbles unsigned char  byte  )  [static]
 

Referenced by at2_pdu_decode_deliver_sm().

See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.