/*
* $Id: protos.h,v 0.0.0.1 2003/08/21
*
- * AUTHOR: Petr Smolik petr.smolik@wo.cz
- *
- * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
+ * -------------------------------------------------------------------
+ * ORTE
+ * Open Real-Time Ethernet
+ *
+ * Copyright (C) 2001-2006
+ * Department of Control Engineering FEE CTU Prague, Czech Republic
+ * http://dce.felk.cvut.cz
+ * http://www.ocera.org
+ *
+ * Author: Petr Smolik petr@smoliku.cz
+ * Advisor: Pavel Pisa
+ * Project Responsible: Zdenek Hanzalek
* --------------------------------------------------------------------
*
* This program is free software; you can redistribute it and/or modify
extern void
sock_cleanup(sock_t *sock);
extern int
-sock_setsockopt(sock_t *sock,int optname,const char *optval, int optlen);
+sock_setsockopt(sock_t *sock,int level,int optname,const char *optval, int optlen);
extern int
-sock_getsockopt(sock_t *sock,int optname,char *optval, int *optlen);
+sock_getsockopt(sock_t *sock,int level,int optname,char *optval, int *optlen);
extern int
-sock_bind(sock_t *sock,u_int16_t port);
+sock_bind(sock_t *sock,uint16_t port, IPAddress listen);
extern int
sock_recvfrom(sock_t *sock, void *buf, int max_len,struct sockaddr_in *des,int des_len);
extern int
sock_sendto(sock_t *sock, void *buf, int len,struct sockaddr_in *des,int des_len);
extern int
-sock_ioctl(sock_t *sock, int cmd, int *arg);
+sock_ioctl(sock_t *sock, long cmd, unsigned long *arg);
extern int
sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount);
///////////////////////////////////////////////////////////////////////////////
// conv.c
-extern void
-conv_u16(u_int16_t *x,char ef);
-extern void
-conv_u32(u_int32_t *x,char ef);
-extern void
-conv_sn(SequenceNumber *sn,char ef);
-extern void
-conv_ntp(NtpTime *ntp,char ef);
+extern int
+getStringPart(char *string,char divChar,int *iterator,char *buff);
///////////////////////////////////////////////////////////////////////////////
// htimerNtp.c
///////////////////////////////////////////////////////////////////////////////
// objectEntry.c
+UL_LIST_CUST_DEC(ObjectEntryMulticast,
+ ObjectEntryOID,CSTRemoteReader,
+ multicastRemoteReaders,multicastNode);
GAVL_CUST_NODE_INT_DEC(ObjectEntryHID, ObjectEntry, ObjectEntryHID, HostId,
objRoot, hidNode, hid, gavl_cmp_int)
GAVL_CUST_NODE_INT_DEC(ObjectEntryAID, ObjectEntryHID, ObjectEntryAID, AppId,
extern ObjectEntryOID *
objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params);
extern int
-objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID);
+objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy);
extern void
objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry);
extern void
extern Boolean
getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress);
extern void
-appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,Boolean forWM);
+appSelfParamChanged(ORTEDomain *d,Boolean lock,Boolean unlock,
+ Boolean forWM,Boolean alive);
+extern Boolean
+matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2);
+extern ObjectEntryOID *
+getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
+ AppParams *ap);
+extern ObjectEntryOID *
+getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID,
+ ORTESubsProp *sp);
///////////////////////////////////////////////////////////////////////////////
// event.c
CSChange,ParameterSequence,
attributes,node);
extern int
+parameterGetDataLength(CSChange *csChange);
+extern int
parameterDelete(CSChange *csChange);
extern int
-parameterCodeStreamFromCSChange(CSChange *csChange,
- u_int8_t *rtps_msg,u_int32_t max_msg_len);
+parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
extern int
-parameterDecodeStreamToCSChange(CSChange *csChange,u_int8_t *rtps_msg,
- u_int16_t submsg_len,u_int8_t needByteSwap);
+parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec);
extern int
parameterUpdateCSChange(
CSChange *csChange,AppParams *ap,Boolean Manager);
///////////////////////////////////////////////////////////////////////////////
// ORTETypeRegister.c
-GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, char *,
+GAVL_CUST_NODE_INT_DEC(ORTEType, TypeEntry, TypeNode, const char *,
types, node, typeRegister.typeName, gavl_cmp_str)
///////////////////////////////////////////////////////////////////////////////
// ORTEThreadUtils.c
extern void
-ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,u_int16_t port);
+ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port);
extern void
ORTEDomainWakeUpSendingThread(ObjectEntry *objectEntry);
///////////////////////////////////////////////////////////////////////////////
// ORTEAppRecvMetatrafficThread.c
extern void
-ORTEAppRecvMetatrafficThread(ORTEDomain *d);
+ORTEAppRecvThread(TaskProp *tp);
-///////////////////////////////////////////////////////////////////////////////
-// ORTEAppRecvUserdataThread.c
-extern void
-ORTEAppRecvUserdataThread(ORTEDomain *d);
///////////////////////////////////////////////////////////////////////////////
// ORTEAppSendThread.c
extern void
ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta);
+extern void
+ORTEAppSendThread(TaskProp *tp);
///////////////////////////////////////////////////////////////////////////////
// RTPSHeader.c
-extern int16_t
-RTPSHeaderCreate(u_int8_t *msg,HostId hid,AppId aid);
-extern int16_t
-RTPSHeaderCheck(u_int8_t *msg,int32_t len,MessageInterpret *mi);
+extern int
+RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid);
+extern int
+RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSPad.c
extern void
-RTPSPad(u_int8_t *rtps_msg,MessageInterpret *mi);
+RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSInfoDST.c
extern void
-RTPSInfoDST(u_int8_t *rtps_msg,MessageInterpret *mi);
+RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSInfoREPLY.c
-extern void
-RTPSInfoREPLY(u_int8_t *rtps_msg,MessageInterpret *mi);
+extern int
+RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port);
+void
+RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
-// RTPSInfoREPLY.c
-extern int32_t
-RTPSInfoREPLYCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
- IPAddress ipaddress,Port port);
+// RTPSInfoSRC.c
extern void
-RTPSInfoSRC(u_int8_t *rtps_msg,MessageInterpret *mi);
+RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSInfoTS.c
-extern int32_t
-RTPSInfoTSCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,NtpTime time);
+extern int
+RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time);
extern void
-RTPSInfoTS(u_int8_t *rtps_msg,MessageInterpret *mi);
+RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSVar.c
+extern int
+RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
extern void
-RTPSVar(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
+RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
///////////////////////////////////////////////////////////////////////////////
// RTPSAck.c
-extern int32_t
-RTPSAckCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
+extern int
+RTPSAckCreate(CDR_Codec *cdrCodec,
SequenceNumber *seqNumber,
ObjectId roid,ObjectId woid,Boolean f_bit);
extern void
-RTPSAck(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
+RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
///////////////////////////////////////////////////////////////////////////////
// RTPSHeardBeat.c
extern int
-RTPSHeardBeatCreate(u_int8_t *rtps_msg,u_int32_t max_msg_len,
- SequenceNumber *firstSeqNumber,SequenceNumber *lastSeqNumber,
- ObjectId woid,ObjectId roid,Boolean f_bit);
+RTPSHeartBeatCreate(CDR_Codec *cdrCodec,
+ SequenceNumber *fsn,SequenceNumber *lsn,
+ ObjectId roid,ObjectId woid,Boolean f_bit);
extern void
-RTPSHeardBeat(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi);
+RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi);
///////////////////////////////////////////////////////////////////////////////
// RTPSGap.c
-extern void
-RTPSGap(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
+extern int
+RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange);
+void
+RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
///////////////////////////////////////////////////////////////////////////////
// RTPSIssue.c
-extern int32_t
-RTPSIssueCreateHeader(u_int8_t *rtps_msg,u_int32_t max_msg_len,u_int32_t length,
+extern int
+RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length,
ObjectId roid,ObjectId woid,SequenceNumber sn);
extern void
-RTPSIssue(ORTEDomain *d,u_int8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress);
+RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress);
///////////////////////////////////////////////////////////////////////////////
// RTPSUtils.c
extern int gavl_cmp_ntp_time(const NtpTime *a,const NtpTime *b);
extern int gavl_cmp_sn(const SequenceNumber *a, const SequenceNumber *b);
extern int gavl_cmp_guid(const GUID_RTPS *a, const GUID_RTPS *b);
-extern int gavl_cmp_str(char *const *a,char *const *b);
-extern int getMaxMessageLength(ORTEDomain *d);
+extern int gavl_cmp_str(const char *const *a,const char *const *b);
///////////////////////////////////////////////////////////////////////////////
// RTPSCSTWriter.c
UL_LIST_CUST_DEC(CSTWriterCSChange,
CSTWriter,CSChange,
csChanges,nodeList);
+UL_LIST_CUST_DEC(CSChangeParticipant,
+ CSChange,CSChangeForReader,
+ writerParticipants,participantNode);
GAVL_CUST_NODE_INT_DEC(CSTWriter,
CSTPublications, CSTWriter, GUID_RTPS,
cstWriter, node, guid, gavl_cmp_guid);
ObjectId oid,CSTWriterParams *params,ORTETypeRegister *typeRegister);
extern void
CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter);
-extern void
-CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object,
- ObjectId oid);
+extern CSTRemoteReader *
+CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject,
+ ObjectId oid,ObjectEntryOID *sobject);
extern void
CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
extern void
extern void
CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
extern void
-CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader,
- CSChangeForReader *csChangeForReader,Boolean destroyCSChange);
+CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader,
+ Boolean destroyCSChange);
extern void
CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange);
extern Boolean
CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter);
extern void
CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader);
+extern int
+CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader);
+extern void
+CSTWriterMulticast(CSChangeForReader *csChangeForReader);
///////////////////////////////////////////////////////////////////////////////
// RTPSCSTWriterTimer.c
+extern int
+CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter);
extern int
CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter);
extern int
UL_LIST_CUST_DEC(CSTReaderCSChange,
CSTReader,CSChange,
csChanges,nodeList);
-GAVL_CUST_NODE_INT_DEC(CSTReader,
- CSTSubscriptions, CSTReader, GUID_RTPS,
- cstReader, node, guid, gavl_cmp_guid);
+GAVL_CUST_NODE_INT_DEC(CSTReader, /* prefix */
+ CSTSubscriptions, /* root_t */
+ CSTReader, /* item_t */
+ GUID_RTPS, /* key_t */
+ cstReader, /* root_node */
+ node, /* item_node */
+ guid, /* item_key */
+ gavl_cmp_guid); /* cmp_fnc */
GAVL_CUST_NODE_INT_DEC(CSTRemoteWriter,
CSTReader, CSTRemoteWriter, GUID_RTPS,
cstRemoteWriter, node, guid, gavl_cmp_guid);
CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader);
///////////////////////////////////////////////////////////////////////////////
-// ORTEDomainApp.c
-UL_LIST_CUST_DEC(SubscriptionPattern,
- PatternEntry,SubscriptionPatternNode,
- subscription,node);
-
+// ORTEDomain.c
+ORTEDomain *
+ORTEDomainCreate(int domain, ORTEDomainProp *prop,
+ ORTEDomainAppEvents *events,Boolean manager);
+Boolean
+ORTEDomainDestroy(ORTEDomain *d,Boolean manager);
+///////////////////////////////////////////////////////////////////////////////
+// ORTEDomainApp.c
+UL_LIST_CUST_DEC(Pattern,
+ PatternEntry,PatternNode,
+ patterns,node);
+
///////////////////////////////////////////////////////////////////////////////
// ORTETypeRegister.c
extern Boolean
-ORTETypeRegisterFind(ORTEDomain *d,char *typeName);
+ORTETypeRegisterFind(ORTEDomain *d,const char *typeName);
///////////////////////////////////////////////////////////////////////////////
// ORTEPublication.c
PSEntry, ObjectEntryOID, GUID_RTPS,
publications, psNode, guid, gavl_cmp_guid);
extern int
-ORTEPublicationSendLocked(ORTEPublication *cstWriter);
+ORTEPublicationSendLocked(ORTEPublication *cstWriter,
+ ORTEPublicationSendParam *psp);
+
+///////////////////////////////////////////////////////////////////////////////
+// ORTESubcription.c
+extern int
+ORTESubscriptionDestroyLocked(ORTESubscription *cstReader);
///////////////////////////////////////////////////////////////////////////////
// ORTEPublicationTimer.c