static void smsbox_thread(void *arg) { Connection *conn; Msg *msg; Octstr *os; Octstr *reply_msg; unsigned long count; msg = msg_create(sms); msg->sms.sender = octstr_create("123"); msg->sms.receiver = octstr_create("456"); msg->sms.msgdata = octstr_create("hello world"); reply_msg = msg_pack(msg); msg_destroy(msg); gwthread_sleep(1.0); conn = conn_open_tcp(bearerbox_host, port_for_smsbox, NULL); if (conn == NULL) { gwthread_sleep(2.0); conn = conn_open_tcp(bearerbox_host, port_for_smsbox, NULL); if (conn == NULL) panic(0, "Couldn't connect to bearerbox as smsbox"); } while (!quitting && conn_wait(conn, -1.0) != -1) { for (;;) { os = conn_read_withlen(conn); if (os == NULL) { if (conn_eof(conn) || conn_error(conn)) goto error; break; } msg = msg_unpack(os); if (msg == NULL || msg->type == wdp_datagram) error(0, "Bearerbox sent garbage to smsbox"); if (msg->type == sms) { if (first_from_bb == (time_t) -1) time(&first_from_bb); count = counter_increase(num_from_bearerbox) + 1; debug("test.smpp", 0, "Bearerbox sent sms #%ld <%s> to smsbox, sending reply.", count, octstr_get_cstr(msg->sms.msgdata)); if (count == max_to_esme) info(0, "Bearerbox has sent all messages to smsbox."); conn_write_withlen(conn, reply_msg); counter_increase(num_to_bearerbox); } msg_destroy(msg); octstr_destroy(os); time(&last_to_bb); } } error: conn_destroy(conn); octstr_destroy(reply_msg); debug("test.smpp", 0, "%s terminates.", __func__); }
static int send_msg(Boxc *boxconn, Msg *pmsg) { Octstr *pack; pack = msg_pack(pmsg); if (pack == NULL) return -1; if (boxconn->boxc_id != NULL) debug("bb.boxc", 0, "send_msg: sending msg to boxc: <%s>", octstr_get_cstr(boxconn->boxc_id)); else debug("bb.boxc", 0, "send_msg: sending msg to box: <%s>", octstr_get_cstr(boxconn->client_ip)); if (conn_write_withlen(boxconn->conn, pack) == -1) { error(0, "Couldn't write Msg to box <%s>, disconnecting", octstr_get_cstr(boxconn->client_ip)); octstr_destroy(pack); return -1; } octstr_destroy(pack); return 0; }
void write_to_bearerbox_real(Connection *conn, Msg *pmsg) { Octstr *pack; pack = msg_pack(pmsg); if (conn_write_withlen(conn, pack) == -1) error(0, "Couldn't write Msg to bearerbox."); msg_destroy(pmsg); octstr_destroy(pack); }
int deliver_to_bearerbox_real(Connection *conn, Msg *msg) { Octstr *pack; pack = msg_pack(msg); if (conn_write_withlen(conn, pack) == -1) { error(0, "Couldn't deliver Msg to bearerbox."); octstr_destroy(pack); return -1; } octstr_destroy(pack); msg_destroy(msg); return 0; }
static int send_msg(Connection *conn, Boxc *boxconn, Msg *pmsg) { Octstr *pack; pack = msg_pack(pmsg); if (pack == NULL) return -1; if (conn_write_withlen(conn, pack) == -1) { error(0, "Couldn't write Msg to box <%s>, disconnecting", octstr_get_cstr(boxconn->client_ip)); octstr_destroy(pack); return -1; } octstr_destroy(pack); return 0; }