2005-03-23 05:55:16 +00:00
|
|
|
/*
|
|
|
|
* Mbuni - Open Source MMS Gateway
|
|
|
|
*
|
|
|
|
* Misc. functions
|
|
|
|
*
|
|
|
|
* Copyright (C) 2003 - 2005, Digital Solutions Ltd. - http://www.dsmagic.com
|
|
|
|
*
|
|
|
|
* Paul Bagyenda <bagyenda@dsmagic.com>
|
|
|
|
*
|
|
|
|
* This program is free software, distributed under the terms of
|
|
|
|
* the GNU General Public License, with a few exceptions granted (see LICENSE)
|
|
|
|
*/
|
2005-03-19 06:46:24 +00:00
|
|
|
#ifndef __MMS_UTIL__INCLUDED__
|
|
|
|
#define __MMS_UTIL__INCLUDED__
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
#include "gwlib/gwlib.h"
|
|
|
|
#include "gwlib/mime.h"
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
#include "mms_strings.h"
|
|
|
|
#include "mms_msg.h"
|
|
|
|
#include "mms_billing.h"
|
|
|
|
#include "mms_resolve.h"
|
2005-03-11 20:29:10 +00:00
|
|
|
#include "mms_detokenize.h"
|
2005-03-19 06:46:24 +00:00
|
|
|
#include "mms_mmbox.h"
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
/* Send errors */
|
|
|
|
#define MMS_SEND_OK 0
|
|
|
|
#define MMS_SEND_ERROR_TRANSIENT -1
|
|
|
|
#define MMS_SEND_ERROR_FATAL -2
|
|
|
|
|
|
|
|
#define SEND_ERROR_STR(e) ((e) == MMS_SEND_OK ? "Sent" : (e) == MMS_SEND_ERROR_TRANSIENT ? "Retry later" : "Failed")
|
|
|
|
/* Useful headers. */
|
|
|
|
#define XMSISDN_HEADER "X-WAP-Network-Client-MSISDN"
|
2005-04-07 12:21:35 +00:00
|
|
|
#define XIP_HEADER "X-WAP-Network-Client-IP"
|
2005-04-14 11:27:23 +00:00
|
|
|
#define MM_NAME "Mbuni"
|
2005-03-10 08:01:02 +00:00
|
|
|
|
2005-04-18 04:16:15 +00:00
|
|
|
#define EAIF_VERSION "3.0"
|
|
|
|
|
2005-04-19 09:11:43 +00:00
|
|
|
/* used by mmbox and queue code -- directory stuff. */
|
|
|
|
#define _TT "0123456789abcdefghijklmnopqrstuvwxyz"
|
|
|
|
#define _TTSIZE (-1 + sizeof _TT)
|
|
|
|
|
2005-03-10 08:01:02 +00:00
|
|
|
typedef struct MmsProxyRelay {
|
|
|
|
Octstr *host;
|
|
|
|
Octstr *name;
|
|
|
|
Octstr *allowed_prefix;
|
|
|
|
Octstr *denied_prefix;
|
|
|
|
} MmsProxyRelay;
|
|
|
|
|
2005-04-14 11:27:23 +00:00
|
|
|
typedef struct MmsVasp {
|
|
|
|
Octstr *id;
|
|
|
|
long short_code;
|
|
|
|
enum {SOAP_VASP, EAIF_VASP, NONE_VASP} type;
|
|
|
|
Octstr *vasp_username, *vasp_password;
|
|
|
|
Octstr *vasp_url;
|
|
|
|
Octstr *mmsc_username, *mmsc_password;
|
|
|
|
} MmsVasp;
|
|
|
|
|
2005-03-10 08:01:02 +00:00
|
|
|
typedef struct MmsBoxSettings {
|
|
|
|
Octstr *system_user;
|
|
|
|
Octstr *name, *hostname, *host_alias;
|
|
|
|
List *local_domains;
|
|
|
|
Octstr *unified_prefix, *local_prefix;
|
|
|
|
Octstr *sendmail;
|
|
|
|
Octstr *global_queuedir, *mm1_queuedir, *mm4_queuedir;
|
2005-03-19 06:46:24 +00:00
|
|
|
Octstr *mmbox_rootdir;
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
Octstr *ua_profile_cache_dir;
|
|
|
|
|
|
|
|
long maxthreads;
|
|
|
|
long maxsendattempts;
|
|
|
|
long default_msgexpiry;
|
|
|
|
double queue_interval;
|
|
|
|
long send_back_off;
|
|
|
|
|
2005-04-14 11:27:23 +00:00
|
|
|
long port, mm7port;
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
Octstr *allow_ip;
|
|
|
|
Octstr *deny_ip;
|
|
|
|
|
|
|
|
Octstr *email2mmsrelay_prefixes;
|
|
|
|
Octstr *sendsms_url;
|
|
|
|
#if 0
|
|
|
|
Octstr *sendsms_user, *sendsms_pass, *sendsms_globalsender;
|
|
|
|
#endif
|
|
|
|
Octstr *billing_params;
|
|
|
|
|
|
|
|
MmsBillingFuncStruct *mms_billfuncs; /* Link to billing funcs. */
|
|
|
|
void *mms_bill_module_data;
|
|
|
|
|
|
|
|
Octstr *resolver_params;
|
|
|
|
MmsResolverFuncStruct *mms_resolvefuncs; /* Link to resolver funcs. */
|
|
|
|
void *mms_resolver_module_data;
|
|
|
|
|
2005-03-11 20:29:10 +00:00
|
|
|
Octstr *detokenizer_params;
|
|
|
|
MmsDetokenizerFuncStruct *mms_detokenizefuncs; /* Link to detokenizer funcs. */
|
|
|
|
void *mms_detokenizer_module_data;
|
|
|
|
|
2005-03-16 05:16:09 +00:00
|
|
|
int allow_ip_type;
|
2005-03-11 20:29:10 +00:00
|
|
|
|
2005-03-16 05:16:09 +00:00
|
|
|
int optimize_notification_size;
|
|
|
|
|
2005-03-10 08:01:02 +00:00
|
|
|
Octstr *prov_notify;
|
|
|
|
Octstr *prov_notify_arg;
|
|
|
|
Octstr *prov_getstatus;
|
|
|
|
int notify_unprovisioned;
|
|
|
|
Octstr *mms_notify_txt;
|
|
|
|
Octstr *mms_notify_unprov_txt;
|
|
|
|
Octstr *mms_toolarge;
|
|
|
|
|
|
|
|
Octstr *mms_email_txt;
|
|
|
|
Octstr *mms_email_html;
|
|
|
|
Octstr *wap_gw_msisdn_header;
|
|
|
|
Octstr *wap_gw_ip_header;
|
2005-04-14 11:27:23 +00:00
|
|
|
|
|
|
|
List *vasp_list; /* of MmsVasp * */
|
2005-03-10 08:01:02 +00:00
|
|
|
} MmsBoxSettings;
|
|
|
|
|
|
|
|
/* Global variables and shared code used by all modules. */
|
|
|
|
|
|
|
|
|
|
|
|
extern char *mms_hostname; /* Our hostname. */
|
|
|
|
#define MMSC_VERSION VERSION
|
|
|
|
#define MMS_NAME PACKAGE
|
|
|
|
|
2005-03-21 16:11:51 +00:00
|
|
|
/* Message location flags: Used to distinguish fetch-urls */
|
|
|
|
enum mms_loc_t {MMS_LOC_MMBOX = 1, MMS_LOC_MQUEUE=2};
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
/* Returns mmsbox settings. */
|
|
|
|
MmsBoxSettings *mms_load_mmsbox_settings(Cfg *cfg);
|
|
|
|
|
|
|
|
|
|
|
|
/* Returns list of MmsProxyRelay */
|
|
|
|
extern List *mms_proxy_relays(Cfg *cfg);
|
|
|
|
|
2005-03-21 16:11:51 +00:00
|
|
|
extern Octstr *mms_makefetchurl(char *qf, Octstr *token, int loc,
|
2005-04-04 13:47:03 +00:00
|
|
|
Octstr *to,
|
2005-03-10 08:01:02 +00:00
|
|
|
MmsBoxSettings *settings);
|
|
|
|
|
|
|
|
extern Octstr *mms_maketransid(char *qf, Octstr *mmscname);
|
|
|
|
|
|
|
|
extern Octstr *mms_getqf_fromtransid(Octstr *transid);
|
|
|
|
|
|
|
|
extern int mms_decodefetchurl(Octstr *fetch_url,
|
2005-03-21 16:11:51 +00:00
|
|
|
Octstr **qf, Octstr **token, int *loc);
|
2005-03-10 08:01:02 +00:00
|
|
|
|
2005-04-04 13:47:03 +00:00
|
|
|
Octstr *mms_find_sender_msisdn(Octstr *send_url, List *request_hdrs, Octstr *msisdn_header, MmsDetokenizerFuncStruct *detokenizerfuncs);
|
2005-03-10 08:01:02 +00:00
|
|
|
Octstr *mms_find_sender_ip(List *request_hdrs, Octstr *ip_header, Octstr *ip, int *isv6);
|
|
|
|
|
|
|
|
extern Octstr *mms_isodate(time_t t);
|
|
|
|
void mms_lib_init(void);
|
|
|
|
|
|
|
|
/* get content type while stripping params. If any param is null, fails. */
|
|
|
|
int get_content_type(List *hdrs, Octstr **type, Octstr **params);
|
|
|
|
|
2005-03-16 05:04:03 +00:00
|
|
|
/* Takes a header value, returns the value proper and any parameters... */
|
|
|
|
int split_header_value(Octstr *value, Octstr **base_value, Octstr **params);
|
2005-03-10 08:01:02 +00:00
|
|
|
/* Returns a list of parameters as http_headers given the semi-comma delimited string.*/
|
|
|
|
List *get_value_parameters(Octstr *params);
|
|
|
|
|
|
|
|
Octstr *make_value_parameters(List *params);
|
|
|
|
|
|
|
|
/* Where value is comma-separated, make separate header items. */
|
|
|
|
void unpack_mimeheaders(MIMEEntity *m);
|
|
|
|
|
|
|
|
/* Where element has base64 encoding, decode. */
|
|
|
|
void unbase64_mimeparts(MIMEEntity *m);
|
|
|
|
|
|
|
|
/* Where element contains binary data, encode it base64. */
|
|
|
|
void base64_mimeparts(MIMEEntity *m);
|
|
|
|
|
|
|
|
void notify_prov_server(char *cmd, char *from, char *event, char *arg);
|
|
|
|
int mms_ind_send(Octstr *prov_cmd, Octstr *to);
|
|
|
|
|
|
|
|
/* Send this message to email recipient: Returns 0 on success 1 or 2 on profile error
|
|
|
|
* (negate to get right one), -ve on some other error
|
|
|
|
*/
|
|
|
|
int mms_sendtoemail(Octstr *from, Octstr *to,
|
|
|
|
Octstr *subject, Octstr *msgid,
|
|
|
|
MmsMsg *msg, int dlr, Octstr **error,
|
|
|
|
char *sendmail_cmd, Octstr *myhostname,
|
|
|
|
int trans_msg,
|
|
|
|
int trans_smil, char *txt, char *html, int append_hostname);
|
|
|
|
|
|
|
|
/* log to access log. */
|
|
|
|
void mms_log(char *logmsg, Octstr *from, List *to,
|
|
|
|
int msize, Octstr *msgid,
|
|
|
|
Octstr *acct,
|
|
|
|
Octstr *viaproxy,
|
2005-03-19 06:46:24 +00:00
|
|
|
char *interface,
|
2005-03-21 16:11:51 +00:00
|
|
|
Octstr *ua, Octstr *mmboxloc);
|
2005-03-10 08:01:02 +00:00
|
|
|
|
|
|
|
void mms_log2(char *logmsg, Octstr *from, Octstr *to,
|
|
|
|
int msize, Octstr *msgid,
|
|
|
|
Octstr *acct,
|
|
|
|
Octstr *viaproxy,
|
2005-03-19 06:46:24 +00:00
|
|
|
char *interface,
|
2005-03-21 16:11:51 +00:00
|
|
|
Octstr *ua, Octstr *mmboxloc);
|
2005-03-19 06:46:24 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* lockfile: tries to lock a file, returns 0 if success, errno (which could be +ve) otherwise.
|
|
|
|
* we use flock()
|
|
|
|
*/
|
|
|
|
int mm_lockfile(int fd, char *fname, int shouldblock);
|
|
|
|
|
2005-04-14 11:27:23 +00:00
|
|
|
/* This should be elsewhere, but it isn't, so we do it here... */
|
|
|
|
extern MIMEEntity *mime_entity_duplicate(MIMEEntity *m);
|
2005-07-01 06:13:59 +00:00
|
|
|
|
|
|
|
/* Returns true if the character is printable or space */
|
|
|
|
int _mms_gw_isprint(int c);
|
2005-03-10 08:01:02 +00:00
|
|
|
#endif
|