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

132 lines
4.3 KiB
C

/*
* Mbuni - Open Source MMS Gateway
*
* MMS message encoder/decoder and helper 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_MSG_INCLUDED__
#define __MMS_MSG_INCLUDED__
#include "gwlib/gwlib.h"
#include "wap/wsp_headers.h"
#include "gwlib/mime.h"
#include "mms_strings.h"
typedef struct MmsMsg MmsMsg; /* Opaque type. */
typedef MmsMsg *MmsMsgGetFunc_t(void *p1, void *p2, Octstr *msgref, unsigned long *msize);
extern int mms_validate_address(Octstr *s);
/*
* mms_frombinary: Parse MMS binary representation, return a Message or NULL.
* errors are reported in errors string.
* Takes from param which is put in if insert-address is requested.
* NOTE: function may modify 'msg' argument as it parses.
*/
extern MmsMsg *mms_frombinary_ex(Octstr *msg, Octstr *from, char *unified_prefix, List *strip_prefixes);
#define mms_frombinary(msg, from) mms_frombinary_ex((msg), (from), NULL, NULL)
/*
* mms_tobinary: Return binary encoded Mms message
*/
extern Octstr *mms_tobinary(MmsMsg *msg);
extern mms_encoding mms_message_enc(MmsMsg *msg);
extern int mms_messagetype(MmsMsg *msg);
/*
* Convert Mms Message to standard Mime entity.
* Does base64 encoding of binary parts if base64 is true
*/
extern MIMEEntity *mms_tomime(MmsMsg *msg, int base64);
/*
* De-convert from mime.
*/
extern MmsMsg *mms_frommime(MIMEEntity *mime);
extern void mms_msgdump(MmsMsg *m, int headers_only);
extern void mms_destroy(MmsMsg *msg);
/* Make a delivery report message. */
extern MmsMsg *mms_deliveryreport(Octstr *msgid, Octstr *to, time_t date, Octstr *status);
MmsMsg *mms_readreport(Octstr *msgid, Octstr *from, Octstr *to, time_t date, Octstr *status);
/* Return message headers. */
extern List *mms_message_headers(MmsMsg *msg);
/* Make a notification message out of this one and the url given. */
extern MmsMsg *mms_notification(MmsMsg *msg, unsigned int msize,
Octstr *url,
Octstr *transactionid, time_t expiryt, int optimizesize);
MmsMsg *mms_notifyresp_ind(char *transid, int menc, char *status, int report_allowed);
MmsMsg *mms_retrieveconf(MmsMsg *msg, Octstr *transactionid, char *err, char *errtxt, Octstr *opt_from, int menc);
int mms_remove_headers(MmsMsg *m, char *name);
MmsMsg *mms_sendconf(char *errstr, char *msgid, char *transid, int isforward, int menc);
Octstr *mms_get_header_value(MmsMsg *msg, Octstr *header);
/* Returns a list of values for the header given. */
List *mms_get_header_values(MmsMsg *msg, Octstr *header);
int mms_replace_header_value(MmsMsg *msg, char *hname, char *value);
int mms_replace_header_values(MmsMsg *msg, char *hname, List *values);
/* Get headers from 'headers' that are not already in message headers and add them. */
int mms_add_missing_headers(MmsMsg *msg, List *headers);
int mms_convert_readrec2readorig(MmsMsg *msg);
MmsMsg *mms_storeconf(char *errstr, char *transid, Octstr *msgloc, int isupload, int menc);
MmsMsg *mms_deleteconf(int menc, char *transid);
/* Makes a view-conf message. Insane number of arguments I know,
* but it seems a fair price to keep the interfaces clean
*
*/
MmsMsg *mms_viewconf(char *transid,
List *msgrefs,
List *msglocs,
char *err,
List *required_headers,
MmsMsgGetFunc_t *getmsg,
void *p1, void *p2,
int maxsize, int menc,
List *otherhdrs);
/* Returns a copy of the message body. Either as list of MIME Entities or as string --
* caller must consult content_type to determine which is returned.
*/
void *mms_msgbody(MmsMsg *msg);
/* Remove message body. */
int mms_clearbody(MmsMsg *msg);
/* Put a new message body. Old one removed if it is there.
* second param is a list of MIME entities or a string depending on content type
* ismultipart tells us which. No copy is made of body.
* Use function with extreme caution! It should be for testing only really!!!!
*/
int mms_putbody(MmsMsg *msg, void *body, int ismultipart);
/* Convert a retrieve_conf message to a send_req messagre
* checked runtime error to pass anything but a send_req/retrieve_conf.
* returns 0 on success.
*/
int mms_make_sendreq(MmsMsg *retrieveconf);
#endif