X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Finclude%2Fctdl_module.h;h=7005c1c38a8df3368b7c2a1032cabaed093b8883;hb=5ec417e35ec1eb0b1b0ed055157177d9a2163d61;hp=eddcbeffcc92df2cfe961eb23cb9001200a8518b;hpb=e24d4d39b9e026d260c7745014bafe63e19f9b0b;p=citadel.git diff --git a/citadel/include/ctdl_module.h b/citadel/include/ctdl_module.h index eddcbeffc..7005c1c38 100644 --- a/citadel/include/ctdl_module.h +++ b/citadel/include/ctdl_module.h @@ -26,18 +26,7 @@ #include #include #include - -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - +#include #include #include #ifdef HAVE_STRINGS_H @@ -77,7 +66,7 @@ SUBJECT) -#define CtdlAideFPMessage(TEXT, SUBJECT, N, STR, STRLEN) \ +#define CtdlAideFPMessage(TEXT, SUBJECT, N, STR, STRLEN, ccid, ioid, TIME) \ flood_protect_quickie_message( \ "Citadel", \ NULL, \ @@ -88,7 +77,10 @@ SUBJECT, \ N, \ STR, \ - STRLEN) + STRLEN, \ + ccid, \ + ioid, \ + TIME) /* * Hook functions available to modules. */ @@ -117,6 +109,10 @@ #define PRIO_UNSTEALTH 45000 /* Priorities for EVT_STEALTH */ #define PRIO_STEALTH 50000 +void CtdlRegisterTDAPVetoHook(int (*fcn_ptr)(StrBuf*), int EventType, int Priority); +void CtdlUnregisterTDAPVetoHook(int (*fcn_ptr) (StrBuf*), int EventType); + + void CtdlRegisterSessionHook(void (*fcn_ptr)(void), int EventType, int Priority); void CtdlUnregisterSessionHook(void (*fcn_ptr)(void), int EventType); void CtdlShutdownServiceHooks(void); @@ -127,10 +123,10 @@ void CtdlUnregisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType); void CtdlRegisterXmsgHook(int (*fcn_ptr)(char *, char *, char *, char *), int order); void CtdlUnregisterXmsgHook(int (*fcn_ptr)(char *, char *, char *, char *), int order); -void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *), - int EventType); -void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *), +void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes*), int EventType); +void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *, recptypes *), + int EventType); void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ); void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) ); @@ -226,6 +222,9 @@ long CtdlGetCurrentMessageNumber(void); /* * Expose various room operation functions from room_ops.c to the modules API */ +typedef struct CfgLineType CfgLineType; +typedef struct RoomNetCfgLine RoomNetCfgLine; +typedef struct OneRoomNetCfg OneRoomNetCfg; unsigned CtdlCreateRoom(char *new_room_name, int new_room_type, @@ -234,18 +233,19 @@ unsigned CtdlCreateRoom(char *new_room_name, int really_create, int avoid_access, int new_room_view); -int CtdlGetRoom(struct ctdlroom *qrbuf, char *room_name); +int CtdlGetRoom(struct ctdlroom *qrbuf, const char *room_name); int CtdlGetRoomLock(struct ctdlroom *qrbuf, char *room_name); int CtdlDoIHavePermissionToDeleteThisRoom(struct ctdlroom *qr); -void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf, - int *result, int *view); +void CtdlRoomAccess(struct ctdlroom *roombuf, struct ctdluser *userbuf, int *result, int *view); void CtdlPutRoomLock(struct ctdlroom *qrbuf); -void CtdlForEachRoom(void (*CallBack)(struct ctdlroom *EachRoom, void *out_data), - void *in_data); +typedef void (*ForEachRoomCallBack)(struct ctdlroom *EachRoom, void *out_data); +void CtdlForEachRoom(ForEachRoomCallBack CB, void *in_data); +typedef void (*ForEachRoomNetCfgCallBack)(struct ctdlroom *EachRoom, void *out_data, OneRoomNetCfg *OneRNCFG); +void CtdlForEachNetCfgRoom(ForEachRoomNetCfgCallBack CB, void *in_data, RoomNetCfg filter); +void SaveChangedConfigs(void); void CtdlDeleteRoom(struct ctdlroom *qrbuf); int CtdlRenameRoom(char *old_name, char *new_name, int new_floor); -void CtdlUserGoto (char *where, int display_result, int transiently, - int *msgs, int *new); +void CtdlUserGoto (char *where, int display_result, int transiently, int *msgs, int *new, long *oldest, long *newest); struct floor *CtdlGetCachedFloor(int floor_num); void CtdlScheduleRoomForDeletion(struct ctdlroom *qrbuf); void CtdlGetFloor (struct floor *flbuf, int floor_num); @@ -349,7 +349,7 @@ struct config { int c_pop3s_port; int c_smtps_port; char c_auto_cull; - char c_instant_expunge; + char c_niu_5; char c_allow_spoofing; char c_journal_email; char c_journal_pubmsgs; @@ -373,14 +373,54 @@ struct config { time_t c_pop3_fastest; int c_spam_flag_only; int c_guest_logins; + int c_nntp_port; + int c_nntps_port; }; +struct configlen { + long c_nodename; + long c_fqdn; + long c_humannode; + long c_phonenum; + long c_twitroom; + long c_moreprompt; + long c_site_location; + long c_sysadm; + long c_niu_2; + long c_ip_addr; + long c_logpages; + long c_baseroom; + long c_aideroom; + long c_ldap_host; + long c_ldap_base_dn; + long c_ldap_bind_dn; + long c_ldap_bind_pw; + long c_journal_dest; + long c_default_cal_zone; + long c_funambol_host; + long c_funambol_source; + long c_funambol_auth; + long c_master_user; + long c_master_pass; + long c_pager_program; +}; + +#define SET_CFGSTRBUF(which, buffer) configlen.which = safestrncpy(config.which, ChrPtr(buffer), sizeof(config.which)) +#define SET_CFGSTR(which, buffer) configlen.which = safestrncpy(config.which, buffer, sizeof(config.which)) extern struct config config; +extern struct configlen configlen; -typedef struct CfgLineType CfgLineType; -typedef struct RoomNetCfgLine RoomNetCfgLine; -typedef struct OneRoomNetCfg OneRoomNetCfg; +#define NODENAME config.c_nodename +#define FQDN config.c_fqdn +#define CTDLUID config.c_ctdluid +#define CREATAIDE config.c_creataide +#define REGISCALL config.c_regiscall +#define TWITDETECT config.c_twitdetect +#define TWITROOM config.c_twitroom +#define RESTRICT_INTERNET config.c_restrict + +#define CFG_KEY(which) config.which, configlen.which typedef void (*CfgLineParser)(const CfgLineType *ThisOne, StrBuf *Line, const char *LinePos, OneRoomNetCfg *rncfg); typedef void (*CfgLineSerializer)(const CfgLineType *ThisOne, StrBuf *OuptputBuffer, OneRoomNetCfg *rncfg, RoomNetCfgLine *data); @@ -393,15 +433,18 @@ struct CfgLineType { CfgLineDeAllocator DeAllocator; ConstStr Str; int IsSingleLine; + int nSegments; }; struct RoomNetCfgLine { RoomNetCfgLine *next; - StrBuf *Value; + int nValues; + StrBuf **Value; }; struct OneRoomNetCfg { long lastsent; + long changed; StrBuf *Sender; StrBuf *RoomInfo; RoomNetCfgLine *NetConfigs[maxRoomNetCfg]; @@ -409,14 +452,60 @@ struct OneRoomNetCfg { }; -#define CtdlREGISTERRoomCfgType(a, p, uniq, s, d) RegisterRoomCfgType(#a, sizeof(#a) - 1, a, p, uniq, s, d); -void RegisterRoomCfgType(const char* Name, long len, RoomNetCfg eCfg, CfgLineParser p, int uniq, CfgLineSerializer s, CfgLineDeAllocator d); +#define CtdlREGISTERRoomCfgType(a, p, uniq, nSegs, s, d) RegisterRoomCfgType(#a, sizeof(#a) - 1, a, p, uniq, nSegs, s, d); +void RegisterRoomCfgType(const char* Name, long len, RoomNetCfg eCfg, CfgLineParser p, int uniq, int nSegments, CfgLineSerializer s, CfgLineDeAllocator d); void ParseGeneric(const CfgLineType *ThisOne, StrBuf *Line, const char *LinePos, OneRoomNetCfg *sc); void SerializeGeneric(const CfgLineType *ThisOne, StrBuf *OutputBuffer, OneRoomNetCfg *sc, RoomNetCfgLine *data); void DeleteGenericCfgLine(const CfgLineType *ThisOne, RoomNetCfgLine **data); +RoomNetCfgLine *DuplicateOneGenericCfgLine(const RoomNetCfgLine *data); +void AddRoomCfgLine(OneRoomNetCfg *OneRNCfg, struct ctdlroom *qrbuf, RoomNetCfg LineType, RoomNetCfgLine *Line); +OneRoomNetCfg* CtdlGetNetCfgForRoom(long QRNumber); +typedef struct _nodeconf { + int DeleteMe; + StrBuf *NodeName; + StrBuf *Secret; + StrBuf *Host; + StrBuf *Port; +}CtdlNodeConf; +HashList* CtdlLoadIgNetCfg(void); + + +int CtdlNetconfigCheckRoomaccess(char *errmsgbuf, + size_t n, + const char* RemoteIdentifier); + + +typedef struct __NetMap { + StrBuf *NodeName; + time_t lastcontact; + StrBuf *NextHop; +}CtdlNetMap; + +HashList* CtdlReadNetworkMap(void); +StrBuf *CtdlSerializeNetworkMap(HashList *Map); +void NetworkLearnTopology(char *node, char *path, HashList *the_netmap, int *netmap_changed); +int CtdlIsValidNode(const StrBuf **nexthop, + const StrBuf **secret, + StrBuf *node, + HashList *IgnetCfg, + HashList *the_netmap); + + + + +int CtdlNetworkTalkingTo(const char *nodename, long len, int operation); + +/* + * Operations that can be performed by network_talking_to() + */ +enum { + NTT_ADD, + NTT_REMOVE, + NTT_CHECK +}; /* * Expose API calls from user_ops.c @@ -467,9 +556,6 @@ void CtdlUserLogout(void); /* * Expose API calls from msgbase.c */ -char *CtdlGetSysConfig(char *sysconfname); -void CtdlPutSysConfig(char *sysconfname, char *sysconfdata); - @@ -479,4 +565,5 @@ void CtdlPutSysConfig(char *sysconfname, char *sysconfdata); long CtdlLocateMessageByEuid(char *euid, struct ctdlroom *qrbuf); + #endif /* CTDL_MODULE_H */