1
0
Fork 0
mbuni/mbuni/mmlib/mms_util.h

128 lines
3.9 KiB
C

/*
* 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)
*/
#ifndef __MMS_UTIL__INCLUDED__
#define __MMS_UTIL__INCLUDED__
#include "gwlib/gwlib.h"
#include "gwlib/mime.h"
#include "config.h"
#include "mms_strings.h"
#include "mms_msg.h"
#include "mms_mmbox.h"
/* 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"
#define XIP_HEADER "X-WAP-Network-Client-IP"
#define MM_NAME "Mbuni"
#define EAIF_VERSION "3.0"
/* used by mmbox and queue code -- directory stuff. */
#define _TT "0123456789abcdefghijklmnopqrstuvwxyz"
#define _TTSIZE (-1 + sizeof _TT)
/* Global variables and shared code used by all modules. */
#define MMSC_VERSION VERSION
#define MMS_NAME PACKAGE
/* Message location flags: Used to distinguish fetch-urls */
enum mms_loc_t {MMS_LOC_MMBOX = 1, MMS_LOC_MQUEUE=2};
extern int mms_load_core_settings(CfgGroup *cgrp);
extern Octstr *mms_maketransid(char *qf, Octstr *mmscname);
extern Octstr *mms_getqf_fromtransid(Octstr *transid);
extern int mms_decodefetchurl(Octstr *fetch_url,
Octstr **qf, Octstr **token, int *loc);
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);
/* Takes a header value, returns the value proper and any parameters... */
int split_header_value(Octstr *value, Octstr **base_value, Octstr **params);
/* 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,
char *interface,
Octstr *ua, Octstr *mmboxloc);
void mms_log2(char *logmsg, Octstr *from, Octstr *to,
int msize, Octstr *msgid,
Octstr *acct,
Octstr *viaproxy,
char *interface,
Octstr *ua, Octstr *mmboxloc);
/*
* 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);
/* This should be elsewhere, but it isn't, so we do it here... */
extern MIMEEntity *mime_entity_duplicate(MIMEEntity *m);
/* Returns true if the character is printable or space */
int _mms_gw_isprint(int c);
/* Special form of cfg_get which returns zero-length string when there is nothing. */
Octstr *_mms_cfg_getx(CfgGroup *grp, Octstr *item);
#endif