static struct cgwop *msg_to_cgwop(PrivData *privdata, Msg *msg, int trn) { struct cgwop *cgwop; Octstr *sender, *udh, *dta; cgwop = cgwop_create(CGW_OP_MSG, trn); if (cgwop == NULL) return NULL; if (!octstr_check_range(msg->sms.sender, 0, octstr_len(msg->sms.sender), gw_isdigit)) { /* If alphanumeric, simply prefix sender with '$' char */ sender = octstr_create("$"); octstr_append(sender, msg->sms.sender); } else sender = octstr_duplicate(msg->sms.sender); cgwop_add(cgwop, octstr_imm("app"), privdata->appname); cgwop_add(cgwop, octstr_imm("from"), sender); cgwop_add(cgwop, octstr_imm("to"), msg->sms.receiver); /* If delivery reports are asked, ask for them by adding a nrq:anything field */ if (DLR_IS_ENABLED_DEVICE(msg->sms.dlr_mask)) cgwop_add(cgwop, octstr_imm("nrq"), octstr_imm("true")); octstr_destroy(sender); if (octstr_len(msg->sms.udhdata)) { udh = octstr_duplicate(msg->sms.udhdata); octstr_binary_to_hex(udh, 1); cgwop_add(cgwop, octstr_imm("udh"), udh); octstr_destroy(udh); dta = octstr_duplicate(msg->sms.msgdata); octstr_binary_to_hex(dta, 1); cgwop_add(cgwop, octstr_imm("msg"), dta); cgwop_add(cgwop, octstr_imm("type"), octstr_imm("bin")); octstr_destroy(dta); } else { cgwop_add(cgwop, octstr_imm("msg"), cgw_encode_msg(msg->sms.msgdata)); } return cgwop; }
static unsigned long run_batch(void) { Octstr *no; unsigned long linerr = 0; unsigned long lineno = 0; while ((no = gwlist_consume(lines)) != NULL) { if (octstr_check_range(no, 0, 256, gw_isdigit)) { Msg *msg; lineno++; msg = msg_create(sms); msg->sms.smsc_id = smsc_id ? octstr_duplicate(smsc_id) : NULL; msg->sms.service = service ? octstr_duplicate(service) : NULL; msg->sms.sms_type = mt_push; msg->sms.sender = octstr_duplicate(from); msg->sms.receiver = octstr_duplicate(no); msg->sms.account = account ? octstr_duplicate(account) : NULL; msg->sms.msgdata = content ? octstr_duplicate(content) : octstr_create(""); msg->sms.dlr_mask = dlr_mask; msg->sms.dlr_url = octstr_duplicate(dlr_url); msg->sms.udhdata = octstr_create(""); msg->sms.coding = DC_7BIT; if (send_message(msg) < 0) { linerr++; info(0,"Failed to send message at line <%ld> for receiver `%s' to bearerbox.", lineno, octstr_get_cstr(no)); msg_destroy(msg); } } else { linerr++; error(0, "Receiver `%s' at line <%ld> contains non-digit characters, discarded!", octstr_get_cstr(no), lineno); } octstr_destroy(no); } info(0,"mtbatch has processed %ld messages with %ld errors.", lineno, linerr); return lineno; }
static int parm_valid_address(Octstr *value) { return octstr_check_range(value, 0, octstr_len(value), isphonedigit); }