X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Finclude%2Fctdl_module.h;h=ab182b3627ce7f8ca74bc3883483f6fd490b069e;hb=d262741cce924786b2de5f3f10f5470e5d45743e;hp=12926921509fb8f14ad0351e970a1332506ef411;hpb=b42480fc7900ffa7af50090b051d9c6359ad54ec;p=citadel.git diff --git a/citadel/include/ctdl_module.h b/citadel/include/ctdl_module.h index 129269215..ab182b362 100644 --- a/citadel/include/ctdl_module.h +++ b/citadel/include/ctdl_module.h @@ -77,7 +77,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 +88,10 @@ SUBJECT, \ N, \ STR, \ - STRLEN) + STRLEN, \ + ccid, \ + ioid, \ + TIME) /* * Hook functions available to modules. */ @@ -117,6 +120,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); @@ -226,6 +233,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,14 +244,20 @@ 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 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, @@ -378,6 +394,90 @@ struct config { extern struct config config; +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); +typedef void (*CfgLineDeAllocator)(const CfgLineType *ThisOne, RoomNetCfgLine **data); + +struct CfgLineType { + RoomNetCfg C; + CfgLineParser Parser; + CfgLineSerializer Serializer; + CfgLineDeAllocator DeAllocator; + ConstStr Str; + int IsSingleLine; + int nSegments; +}; + +struct RoomNetCfgLine { + RoomNetCfgLine *next; + int nValues; + StrBuf **Value; +}; + +struct OneRoomNetCfg { + long lastsent; + long changed; + StrBuf *Sender; + StrBuf *RoomInfo; + RoomNetCfgLine *NetConfigs[maxRoomNetCfg]; + StrBuf *misc; +}; + + +#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