summaryrefslogtreecommitdiff
path: root/include/hybbx/proxymail.h
blob: 123b66346f63d92bd3f8d382f81677ce9a93850c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#ifndef HYBBX_PROXYMAIL_H
#define HYBBX_PROXYMAIL_H

/**
 * Inter-Main mail via mains_proxy — separate from local `/mail`.
 *
 * Local mail uses flat-file or SQL under `[mail]`; proxymail uses flat files
 * under `data/proxymail/` on each node. Only service payloads cross the mesh.
 */

#include "hybbx/mail.h"
#include "hybbx/types.h"

#ifdef __cplusplus
extern "C" {
#endif

/** `username@remote-main-service` address string. */
#define HYBBX_PROXYMAIL_ADDRESS_MAX     128u
#define HYBBX_PROXYMAIL_SERVICE_NAME_MAX  64u

struct hybbx_service;
struct hybbx_session;

/**
 * Parse @p address as @c user@remote-service .
 * @return 0 when invalid.
 */
int hybbx_proxymail_parse_address(const char *address,
                                  char *user, size_t user_len,
                                  char *remote_service, size_t remote_len);

/** List proxymail inbox (stub). */
void hybbx_proxymail_list_inbox(struct hybbx_service *service,
                                struct hybbx_session *session);

void hybbx_proxymail_list_inbox_range(struct hybbx_service *service,
                                      struct hybbx_session *session,
                                      unsigned from, unsigned to);

hybbx_result_t hybbx_proxymail_read(struct hybbx_service *service,
                                    struct hybbx_session *session,
                                    unsigned list_index);

hybbx_result_t hybbx_proxymail_delete_range(struct hybbx_service *service,
                                            struct hybbx_session *session,
                                            unsigned from, unsigned to);

hybbx_result_t hybbx_proxymail_recycle_empty(struct hybbx_service *service,
                                             struct hybbx_session *session);

/**
 * Queue outbound proxymail for mesh delivery.
 * @p to_address must be @c user@remote-main-service .
 */
hybbx_result_t hybbx_proxymail_deliver(struct hybbx_service *service,
                                       const char *from_user,
                                       const char *to_address,
                                       const char *subject,
                                       const char *body);

/** Store proxymail received from a remote Main. */
void hybbx_proxymail_receive(struct hybbx_service *service,
                             const char *from_address,
                             const char *to_address,
                             const char *subject,
                             const char *body);

#ifdef __cplusplus
}
#endif

#endif /* HYBBX_PROXYMAIL_H */
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com