blob: 6fc7ac40e998f742099c23ad52ed8698c870fff1 [file] [log] [blame]
/*
* etch_plainmailboxmgr.h
* mailbox manager accepts packets for potential delivery to a mailbox or to an
* alternate message handler if an appropriate mailbox is not available.
* a mailbox can be created on request keyed by the a message's ID.
*/
#ifndef ETCHPLAINMBOXMGR_H
#define ETCHPLAINMBOXMGR_H
#include "etch_mailboxmgr.h"
#include "etch_resources.h"
#include "etchmutex.h"
#include "etch_url.h"
#define ETCHMBMGR_DEFNUMMAILBOXES 8
#if(0)
PLAINMAILBOXMGR
| register(mailbox)
| unregister(mailbox)
| unregisterAll();
| getMailbox(messageID);
- MAILBOXMANAGER
| transportCall(Who to, message)
| redeliver(Who from, message)
| unregister(mailbox)
|- SESSIONMESSAGE<SessionData>
| | sessionMessage(Who from, message)
| - SESSION
| sessionQuery(); sessionControl(); sessionNotify();
- TRANSPORTMESSAGE
| transportMessage(to, Message);
- TRANSPORT
transportQuery(); transportControl(); transportNotify();
getSession(); setSession();
#endif
typedef struct etch_plainmailboxmgr etch_plainmailboxmgr;
typedef etch_plainmailboxmgr etch_mailbox_manager;
/*
* etch_plainmailboxmgr
*/
typedef struct etch_plainmailboxmgr
{
unsigned int hashkey;
unsigned short obj_type;
unsigned short class_id;
struct objmask* vtab;
int (*destroy)(void*);
void*(*clone) (void*);
obj_gethashkey get_hashkey;
struct objmask* parent;
etchresult* result;
unsigned int refcount;
unsigned int length;
unsigned char is_null;
unsigned char is_copy;
unsigned char is_static;
unsigned char reserved;
int max_delay;
etchmutex* xlock; /* owned - unused */
etchmutex* rwlock; /* not owned */
etch_hashtable* mailboxes; /* owned */
unsigned char is_connection_up;
/* - - - - - - - - - - - - - - -
* i_mailbox_manager interface
* - - - - - - - - - - - - - - -
*/
i_mailbox_manager* imanager; /* owned */
etch_mbm_transport_call transport_call;
etch_mbm_redeliver redeliver;
etch_mbm_unregister unregister;
/* i_transportmessage of next lower layer (messagizer) */
i_transportmessage* transport; /* not owned */
/* i_sessionmessage of next higher layer (delivery service) */
i_sessionmessage* session; /* not owned */
/* - - - - - - - - - - - - - - -
* i_sessionmessage interface
* - - - - - - - - - - - - - - -
*/
i_sessionmessage* isessionmsg; /* owned */
etch_session_message session_message;
etch_session_control session_control;
etch_session_notify session_notify;
etch_session_query session_query;
/* - - - - - - - - - - - - - - -
* i_transportmessage interface
* - - - - - - - - - - - - - - -
*/
i_transportmessage* transportmsg; /* owned */
etch_transport_message transport_message;
etch_transport_control transport_control;
etch_transport_notify transport_notify;
etch_transport_query transport_query;
etch_transport_get_session get_session;
etch_transport_set_session set_session;
} etch_plainmailboxmgr;
typedef struct etch_plainmailboxmgr etch_mailboxmgr;
int64 message_id_farm;
etchmutex* g_atomiclock;
int64 etch_generate_message_id();
/**
* new_plain_mailbox_manager()
* etch_plainmailboxmgr constructor
* @param itm i_transportmessage interface object, caller retains ownership.
* @param uri url string, caller relinquishes ownership.
* @param resxmap caller retains ownership.
*/
etch_plainmailboxmgr* new_plain_mailbox_manager(i_transportmessage*,
wchar_t* uri, etch_resources*, etchmutex*);
i_mailbox* pmboxmgr_get_mailbox(etch_plainmailboxmgr*, etch_int64* msgid);
int pmboxmgr_register_mailbox(etch_plainmailboxmgr*, i_mailbox*);
int pmboxmgr_unregister_all(etch_plainmailboxmgr*);
etch_hashtable* new_pmboxmgr_mailboxmap();
int pmboxmgr_size(etch_plainmailboxmgr*);
#endif /* ETCHPLAINMBOXMGR_H */