114 #include <sys/types.h> 115 #include <sys/socket.h> 133 #define DEFAULT_CHARSET "UTF-8" 134 #define DEFAULT_UCS2_CHARSET "UTF-16BE" 167 List *headers, *cgivars;
174 ip =
url = body = NULL;
175 headers = cgivars = NULL;
180 &headers, &body, &cgivars);
184 if (cgivars != NULL) {
189 debug(
"smsc.http", 0,
"HTTP[%s]: Got request `%s'",
193 info(0,
"HTTP[%s]: Connection `%s' tried from denied " 200 debug(
"smsc.http", 0,
"HTTP[%s]: Destroying client information",
208 debug(
"smsc.http", 0,
"HTTP[%s]: httpsmsc_receiver dying",
327 &final_url, &headers, &body);
340 error(0,
"HTTP[%s]: Couldn't connect to SMS center." 341 "(retrying in %ld seconds) %ld.",
387 debug(
"smsc.http", 0,
"HTTP[%s]: httpsmsc_send_cb dying",
392 warning(0,
"HTTP[%s]: Shutdown while <%ld> requests are pending.",
424 if (sms->sms.coding ==
DC_7BIT) {
429 error(0,
"Failed to convert msgdata from charset <%s> to <%s>, will send as is.",
433 else if (sms->sms.coding ==
DC_UCS2) {
438 error(0,
"Failed to convert msgdata from charset <%s> to <%s>, will send as is.",
468 debug(
"httpsmsc_shutdown", 0,
"HTTP[%s]: Shutting down",
497 error(0,
"HTTP[%s]: 'system-type' missing in smsc 'http' record.",
512 warning(0,
"HTTP[%s]: 'port' not set in smsc 'http' group.",
536 error(0,
"HTTP[%s]: Sender and receiver disabled. Dummy SMSC not allowed.",
541 error(0,
"HTTP[%s]: Sending not allowed. No 'send-url' specified.",
550 error(0,
"HTTP[%s]: system-type '%s' unknown smsc 'http' record.",
610 error(0,
"HTTP[%s]: Failed to create HTTP SMSC connection",
void error(int err, const char *fmt,...)
void info(int err, const char *fmt,...)
Msg * msg_duplicate(Msg *msg)
void bb_smscconn_connected(SMSCConn *conn)
static void httpsmsc_receiver(void *arg)
static void conndata_destroy(ConnData *conndata)
int gw_dlopen_get_symbol(const char *lib_path, const char *name, void **result)
int(* send_sms)(SMSCConn *conn, Msg *msg)
void http_caller_signal_shutdown(HTTPCaller *caller)
void counter_destroy(Counter *counter)
void http_close_client(HTTPClient *client)
void bb_smscconn_killed(void)
void semaphore_destroy(Semaphore *semaphore)
void gwlist_produce(List *list, void *item)
void gwthread_join(long thread)
long gwlist_len(List *list)
static void client(int port)
void octstr_append_char(Octstr *ostr, int ch)
#define cfg_get(grp, varname)
void(* parse_reply)(SMSCConn *conn, Msg *msg, int status, List *headers, Octstr *body)
unsigned long counter_decrease(Counter *counter)
#define octstr_get_cstr(ostr)
int smsc_http_create(SMSCConn *conn, CfgGroup *cfg)
void(* destroy)(SMSCConn *conn)
unsigned long counter_increase(Counter *counter)
int connect_denied(Octstr *allow_ip, Octstr *ip)
void log_thread_to(int idx)
void semaphore_down(Semaphore *semaphore)
smscconn_killed_t why_killed
void http_destroy_headers(List *headers)
void http_destroy_cgiargs(List *args)
Octstr * octstr_imm(const char *cstr)
Counter * counter_create(void)
void * gwlist_extract_first(List *list)
HTTPClient * http_accept_request(int port, Octstr **client_ip, Octstr **url, List **headers, Octstr **body, List **cgivars)
void http_close_port(int port)
void gwlist_remove_producer(List *list)
static void httpsmsc_send_cb(void *arg)
void warning(int err, const char *fmt,...)
void http_cgivar_dump_into(List *cgiargs, Octstr *os)
Octstr * octstr_format(const char *fmt,...)
void octstr_destroy(Octstr *ostr)
#define gwthread_create(func, arg)
unsigned long counter_value(Counter *counter)
void gwthread_sleep(double seconds)
#define DEFAULT_UCS2_CHARSET
static int httpsmsc_shutdown(SMSCConn *conn, int finish_sending)
int http_open_port(int port, int ssl)
Semaphore * max_pending_sends
#define http_receive_result(caller, status, final_url, headers, body)
void semaphore_up(Semaphore *semaphore)
int cfg_get_bool(int *n, CfgGroup *grp, Octstr *varname)
int(* init)(SMSCConn *conn, CfgGroup *cfg)
void * gwlist_consume(List *list)
static long httpsmsc_queued(SMSCConn *conn)
int(* shutdown)(SMSCConn *conn, int finish_sending)
void debug(const char *place, int err, const char *fmt,...)
int cfg_get_integer(long *n, CfgGroup *grp, Octstr *varname)
void gwthread_wakeup(long thread)
HTTPCaller * http_caller_create(void)
long(* queued)(SMSCConn *conn)
int(* send_msg)(SMSCConn *conn, Msg *msg)
static int httpsmsc_send(SMSCConn *conn, Msg *msg)
void bb_smscconn_send_failed(SMSCConn *conn, Msg *sms, int reason, Octstr *reply)
void http_caller_destroy(HTTPCaller *caller)
void gwlist_add_producer(List *list)
void(* receive_sms)(SMSCConn *conn, HTTPClient *client, List *headers, Octstr *body, List *cgivars)
static void httpsmsc_sender(void *arg)
struct smsc_http_fn_callbacks * callbacks
Semaphore * semaphore_create(long n)
static XMLRPCDocument * msg
int charset_convert(Octstr *string, char *charset_from, char *charset_to)
void gwlist_destroy(List *list, gwlist_item_destructor_t *destructor)