84 #define MAX_READ_INTO_BUFFER (1024) 104 static int next_id = 1;
118 sprintf(smsc->
name,
"Unknown SMSC");
119 smsc->
id = next_id++;
213 switch (smsc->
type) {
257 switch (smsc->
type) {
291 if (ret == 1 &&
msg_type(*
msg) == sms && (*msg)->sms.time == 0)
292 time(&(*msg)->sms.time);
308 switch (smsc->
type) {
342 error(0,
"smscenter_pending_smsmessage is failing");
353 struct timeval tv, tvinit;
357 tvinit.tv_usec = 1000;
362 FD_SET(smsc->
socket, &read_fd);
364 ret = select(smsc->
socket + 1, &read_fd, NULL, NULL, &tv);
366 if (errno == EINTR)
goto got_data;
367 if (errno == EAGAIN)
goto got_data;
368 error(errno,
"Error doing select for socket");
383 error(errno,
"Reading from `%s' port `%d' failed.",
425 error(0,
"smscenter_lock called on DELETED SMSC.");
448 Octstr *preferred_prefix, *allowed_prefix, *denied_prefix;
450 Octstr *sema_smscnua, *sema_homenua, *sema_report;
463 error(0,
"Required field 'smsc' missing for smsc group.");
501 if (sema_report == NULL)
518 if (sender_prefix == NULL)
526 error(0,
"Required field missing for CIMD center.");
535 if (phone == NULL || device == NULL ||
username == NULL ||
537 error(0,
"Required field missing for EMI_X25 center.");
546 if (device == NULL || sema_smscnua == NULL || sema_homenua == NULL)
547 error(0,
"Required field missing for SEMA center.");
556 if (
host == NULL ||
port == 0 || receive_port == 0)
557 error(0,
"Required field missing for OIS center.");
575 if (preferred_prefix == NULL)
580 if (allowed_prefix == NULL)
584 if (denied_prefix == NULL)
619 switch (smsc->
type) {
657 switch (smsc->
type) {
int ois_pending_smsmessage(SMSCenter *smsc)
int sema_reopen(SMSCenter *smsc)
void error(int err, const char *fmt,...)
int cimd_submit_msg(SMSCenter *smsc, Msg *msg)
int sema_receive_msg(SMSCenter *smsc, Msg **msg)
int ois_receive_msg(SMSCenter *smsc, Msg **msg)
int cimd_receive_msg(SMSCenter *smsc, Msg **msg)
volatile sig_atomic_t killed
int ois_submit_msg(SMSCenter *smsc, const Msg *msg)
char * smsc_name(SMSCenter *smsc)
int smscenter_read_into_buffer(SMSCenter *smsc)
#define cfg_get(grp, varname)
int emi_submit_msg(SMSCenter *smsc, Msg *omsg)
SMSCenter * sema_open(char *smscnua, char *homenua, char *serialdevice, int waitreport)
int emi_pending_smsmessage(SMSCenter *smsc)
int smscenter_receive_msg(SMSCenter *smsc, Msg **msg)
#define octstr_get_cstr(ostr)
int ois_reopen(SMSCenter *smsc)
int cimd_reopen(SMSCenter *smsc)
int sema_submit_msg(SMSCenter *smsc, Msg *msg)
int sema_pending_smsmessage(SMSCenter *smsc)
SMSCenter * smsc_open(CfgGroup *grp)
SMSCenter * emi_open(char *phonenum, char *serialdevice, char *username, char *password)
Octstr * octstr_imm(const char *cstr)
int ois_close(SMSCenter *smsc)
SMSCenter * cimd_open(char *hostname, int port, char *username, char *password)
int smsc_reopen(SMSCenter *smsc)
int emi_receive_msg(SMSCenter *smsc, Msg **tmsg)
int smscenter_pending_smsmessage(SMSCenter *smsc)
SMSCenter * ois_open(int receiveport, const char *hostname, int port, int debug_level)
void smscenter_remove_from_buffer(SMSCenter *smsc, size_t n)
SMSCenter * smscenter_construct(void)
int sema_close(SMSCenter *smsc)
void smscenter_destruct(SMSCenter *smsc)
#define MAX_READ_INTO_BUFFER
void octstr_destroy(Octstr *ostr)
#define octstr_create(cstr)
void mutex_destroy(Mutex *mutex)
int smsc_close(SMSCenter *smsc)
static void smscenter_lock(SMSCenter *smsc)
int emi_reopen(SMSCenter *smsc)
int emi_close(SMSCenter *smsc)
int cimd_close(SMSCenter *smsc)
int cfg_get_integer(long *n, CfgGroup *grp, Octstr *varname)
void ois_delete_queue(SMSCenter *smsc)
long octstr_parse_long(long *nump, Octstr *ostr, long pos, int base)
int cimd_pending_smsmessage(SMSCenter *smsc)
static void smscenter_unlock(SMSCenter *smsc)
int smscenter_submit_msg(SMSCenter *smsc, Msg *msg)
static XMLRPCDocument * msg
int octstr_compare(const Octstr *ostr1, const Octstr *ostr2)