From 68202cc7e325aa5e6962a38b7b560230a516dcb6 Mon Sep 17 00:00:00 2001 From: smolik Date: Wed, 23 Feb 2005 10:12:08 +0000 Subject: [PATCH] New ORTE version 0.3.0 committed - fixed csChange memory leakage in RTPSVar - added support CDR types (imported from ORBIT) * CDR_Codec type for serialization/deserialization are used functions - java interface - preliminary - IDL compiler, jorte library - both preliminary - multicast communication * new demo in orte/example/multicast - added registration retries and period parameters. New event generated when application fail to register to a manager (onRegFail). --- ChangleLog | 16 +- Makefile.cvs | 2 +- Makefile.in | 45 +- Makefile.rules | 10 +- OCERA_TOP_DIR | 7 + aclocal.m4 | 3 + admin/idl.m4 | 47 + admin/jorte.m4 | 60 + admin/linux.m4 | 49 +- admin/pkg.m4 | 57 + authors | 4 +- configure | 495 +++++++- configure.in | 53 +- orte/Makefile.am | 10 +- orte/Makefile.in | 24 +- orte/Makefile.omk | 4 +- orte/contrib/decoder/decode_msg.c | 1 + orte/contrib/shape/BoxType.c | 85 ++ orte/contrib/shape/BoxType.h | 55 + orte/contrib/shape/BoxType.idl | 12 + orte/contrib/shape/FPublisher.ui | 2 +- orte/contrib/shape/FPublisher.ui.h | 2 +- orte/contrib/shape/FSubscriber.ui | 2 +- orte/contrib/shape/FSubscriber.ui.h | 18 +- orte/contrib/shape/ortedemo.pro | 2 +- orte/contrib/shape/ortedemo_types.c | 68 - orte/contrib/shape/ortedemo_types.h | 42 - orte/contrib/shape/richtext.cpp | 4 +- orte/examples/Makefile.am | 2 +- orte/examples/Makefile.in | 20 +- orte/examples/Makefile.omk | 2 +- orte/examples/hello/Makefile.am | 24 +- orte/examples/hello/Makefile.in | 136 +- orte/examples/hello/Makefile.omk | 12 +- .../{HelloWorldPublisher.c => h_publisher.c} | 22 +- ...{HelloWorldSubscriber.c => h_subscriber.c} | 23 +- orte/examples/hello/msvc/makefile.msc | 6 +- orte/examples/multicast/Makefile | 14 + orte/examples/multicast/Makefile.am | 5 + orte/examples/multicast/Makefile.in | 478 +++++++ orte/examples/multicast/Makefile.omk | 12 + orte/examples/multicast/m_subscriber.c | 88 ++ orte/examples/multicast/msvc/makefile.msc | 46 + orte/examples/ping/Makefile.in | 18 +- orte/examples/ping/msvc/makefile.msc | 4 +- orte/examples/ping/orteping.c | 49 +- orte/examples/reliable/Makefile.am | 20 +- orte/examples/reliable/Makefile.in | 101 +- orte/examples/reliable/Makefile.omk | 8 +- orte/examples/reliable/msvc/makefile.msc | 8 +- .../reliable/{publisher.c => r_publisher.c} | 2 +- ...besteffort.c => r_subscriber_besteffort.c} | 7 +- ...iberreliable.c => r_subscriber_reliable.c} | 7 +- orte/examples/spy/Makefile.in | 18 +- orte/examples/spy/ortespy.c | 9 +- orte/examples/type/ThreeTypes.idl | 20 + orte/examples/type/readme.txt | 1 - orte/examples/type/test-any.idl | 5 + orte/idl-compiler/Makefile.am | 13 + orte/idl-compiler/Makefile.in | 527 ++++++++ orte/idl-compiler/orte-idl-c-backend.c | 139 +++ orte/idl-compiler/orte-idl-c-backend.h | 64 + orte/idl-compiler/orte-idl-c-headers.c | 664 ++++++++++ orte/idl-compiler/orte-idl-c-impls.c | 190 +++ orte/idl-compiler/orte-idl-c-utils.c | 330 +++++ orte/idl-compiler/orte-idl-driver.c | 100 ++ orte/idl-compiler/orte-idl-main.c | 183 +++ orte/idl-compiler/orte-idl-utils.c | 720 +++++++++++ orte/idl-compiler/orte-idl2.h | 37 + orte/idl-compiler/orte-idl3-types.h | 41 + orte/include/Makefile.omk | 15 +- orte/include/defines.h | 15 +- orte/include/jorte/4all.h | 13 + orte/include/jorte/getNtpTime.h | 29 + orte/include/jorte/jorte.h | 60 + orte/include/jorte/org_ocera_orte_Domain.h | 61 + .../jorte/org_ocera_orte_DomainEvents.h | 21 + .../include/jorte/org_ocera_orte_DomainProp.h | 21 + orte/include/jorte/org_ocera_orte_JOrte.h | 53 + orte/include/jorte/org_ocera_orte_Manager.h | 37 + .../jorte/org_ocera_orte_Publication.h | 37 + .../jorte/org_ocera_orte_Subscription.h | 61 + .../jorte/org_ocera_orte_tools_Conversions.h | 45 + .../org_ocera_orte_tools_GetORTEConstant.h | 21 + orte/include/jorte/typedefs_defines_jorte.h | 48 + orte/include/orte.h | 19 +- orte/include/orte/basic_types.h | 29 + orte/include/orte/cdr.h | 168 +++ orte/include/orte/defines_api.h | 24 + .../{config.h.in => orte/orte_config.h.in} | 20 +- orte/include/{ => orte}/orte_config_omk_rtl.h | 6 +- .../include/{ => orte}/orte_config_omk_unix.h | 6 +- orte/include/orte/protos_api.h | 47 +- orte/include/orte/typedefs_api.h | 80 +- orte/include/orte/typedefs_defines_rtps.h | 6 +- orte/include/orte_all.h | 11 +- orte/include/orte_headers.h | 30 +- orte/include/protos.h | 133 +- orte/include/rtai/compat.h | 16 - orte/include/rtl/compat_onetd.h | 62 + .../include/rtl/{compat.h => compat_rtlwip.h} | 12 +- orte/include/rtps_endian.h | 33 + orte/include/typedefs.h | 52 +- orte/java/Makefile | 14 + orte/java/Makefile.omk | 42 + orte/java/build.xml | 60 + orte/java/makeant.bat | 5 + orte/java/src/org/ocera/orte/Domain.java | 341 +++++ .../java/src/org/ocera/orte/DomainEvents.java | 76 ++ orte/java/src/org/ocera/orte/DomainProp.java | 75 ++ orte/java/src/org/ocera/orte/JOrte.java | 99 ++ orte/java/src/org/ocera/orte/Manager.java | 137 ++ .../java/src/org/ocera/orte/OrteCallback.java | 8 + orte/java/src/org/ocera/orte/Publication.java | 142 +++ .../java/src/org/ocera/orte/Subscription.java | 130 ++ .../org/ocera/orte/SubscriptionCallback.java | 16 + .../orte/examples/hello/HelloMessage.java | 76 ++ .../ocera/orte/examples/hello/Publisher.java | 71 ++ .../ocera/orte/examples/hello/Subscriber.java | 141 +++ orte/java/src/org/ocera/orte/manifest | 6 + .../src/org/ocera/orte/tools/CheckType.java | 56 + .../src/org/ocera/orte/tools/Conversions.java | 84 ++ .../org/ocera/orte/tools/GetORTEConstant.java | 66 + .../src/org/ocera/orte/types/GUID_RTPS.java | 78 ++ .../src/org/ocera/orte/types/MessageData.java | 55 + .../ocera/orte/types/MessageInterpret.java | 91 ++ .../src/org/ocera/orte/types/NtpTime.java | 82 ++ .../org/ocera/orte/types/ORTEConstant.java | 136 ++ .../org/ocera/orte/types/ProtocolVersion.java | 48 + .../src/org/ocera/orte/types/RecvInfo.java | 151 +++ .../src/org/ocera/orte/types/RecvStatus.java | 78 ++ .../src/org/ocera/orte/types/SendInfo.java | 53 + .../src/org/ocera/orte/types/SendStatus.java | 57 + .../org/ocera/orte/types/SequenceNumber.java | 61 + .../src/org/ocera/orte/types/VendorId.java | 49 + orte/libjorte/JGetORTEConstant.c | 159 +++ orte/libjorte/JIPAddressToString.c | 49 + orte/libjorte/JNtpTimeToStringMs.c | 70 ++ orte/libjorte/JNtpTimeToStringUs.c | 70 ++ orte/libjorte/JORTEDomainAppCreate.c | 78 ++ orte/libjorte/JORTEDomainAppDestroy.c | 49 + orte/libjorte/JORTEDomainInitEvents.c | 61 + orte/libjorte/JORTEDomainMgrCreate.c | 78 ++ orte/libjorte/JORTEDomainMgrDestroy.c | 53 + orte/libjorte/JORTEDomainPropDefaultGet.c | 60 + orte/libjorte/JORTEDomainStart.c | 53 + orte/libjorte/JORTEInit.c | 48 + orte/libjorte/JORTEPublicationCreate.c | 181 +++ orte/libjorte/JORTEPublicationDestroy.c | 53 + orte/libjorte/JORTEPublicationSend.c | 60 + orte/libjorte/JORTESleepMs.c | 43 + orte/libjorte/JORTESubscriptionCreate.c | 567 +++++++++ orte/libjorte/JORTESubscriptionDestroy.c | 85 ++ orte/libjorte/JORTETypeRegisterAdd.c | 67 + orte/libjorte/JStringToIPAddress.c | 51 + orte/libjorte/Makefile | 14 + orte/libjorte/Makefile.am | 41 + orte/libjorte/Makefile.in | 1101 +++++++++++++++++ orte/libjorte/Makefile.omk | 41 + orte/libjorte/getNtpTime.c | 57 + orte/liborte/Makefile.am | 10 +- orte/liborte/Makefile.in | 170 +-- orte/liborte/Makefile.omk | 14 +- orte/liborte/ORTEAppRecvMetatrafficThread.c | 106 -- orte/liborte/ORTEAppRecvThread.c | 148 +++ orte/liborte/ORTEAppRecvUserdataThread.c | 109 -- orte/liborte/ORTEAppSendThread.c | 100 +- orte/liborte/ORTEDomain.c | 689 ++++++++++- orte/liborte/ORTEDomainApp.c | 382 +----- orte/liborte/ORTEDomainMgr.c | 303 +---- orte/liborte/ORTEMisc.c | 13 +- orte/liborte/ORTEPublication.c | 91 +- orte/liborte/ORTEPublicationTimer.c | 2 +- orte/liborte/ORTESubscription.c | 10 +- orte/liborte/ORTEThreadUtils.c | 2 +- orte/liborte/ORTETypeRegister.c | 30 +- orte/liborte/ORTEVerbosity.c | 4 +- orte/liborte/RTPSAck.c | 143 ++- orte/liborte/RTPSCSTReader.c | 32 +- orte/liborte/RTPSCSTReaderProc.c | 43 +- orte/liborte/RTPSCSTReaderTimer.c | 56 +- orte/liborte/RTPSCSTWriter.c | 262 +++- orte/liborte/RTPSCSTWriterTimer.c | 393 +++--- orte/liborte/RTPSGap.c | 116 +- orte/liborte/RTPSHeader.c | 94 +- orte/liborte/RTPSHeardBeat.c | 122 +- orte/liborte/RTPSInfoDST.c | 20 +- orte/liborte/RTPSInfoREPLY.c | 72 +- orte/liborte/RTPSInfoSRC.c | 36 +- orte/liborte/RTPSInfoTS.c | 57 +- orte/liborte/RTPSIssue.c | 114 +- orte/liborte/RTPSPad.c | 2 +- orte/liborte/RTPSUtils.c | 6 - orte/liborte/RTPSVar.c | 895 ++++++++------ orte/liborte/cdr.c | 418 +++++++ orte/liborte/conv.c | 48 - orte/liborte/debug.c | 17 +- orte/liborte/htimerNtp.c | 8 +- orte/liborte/objectEntry.c | 43 +- orte/liborte/objectEntryTimer.c | 16 +- orte/liborte/objectUtils.c | 121 +- orte/liborte/parameter.c | 289 +++-- orte/liborte/rtl/Makefile.in | 18 +- orte/liborte/sock.c | 48 +- orte/liborte/usedSections.txt | 10 +- orte/manager/Makefile.in | 18 +- orte/manager/ortemanager.c | 42 +- readme | 16 +- switch2standalone | 8 +- todo | 15 + 210 files changed, 15360 insertions(+), 2839 deletions(-) create mode 100644 OCERA_TOP_DIR create mode 100644 admin/idl.m4 create mode 100644 admin/jorte.m4 create mode 100644 admin/pkg.m4 create mode 100644 orte/contrib/shape/BoxType.c create mode 100644 orte/contrib/shape/BoxType.h create mode 100644 orte/contrib/shape/BoxType.idl delete mode 100644 orte/contrib/shape/ortedemo_types.c delete mode 100644 orte/contrib/shape/ortedemo_types.h rename orte/examples/hello/{HelloWorldPublisher.c => h_publisher.c} (88%) rename orte/examples/hello/{HelloWorldSubscriber.c => h_subscriber.c} (88%) create mode 100644 orte/examples/multicast/Makefile create mode 100644 orte/examples/multicast/Makefile.am create mode 100644 orte/examples/multicast/Makefile.in create mode 100644 orte/examples/multicast/Makefile.omk create mode 100644 orte/examples/multicast/m_subscriber.c create mode 100644 orte/examples/multicast/msvc/makefile.msc rename orte/examples/reliable/{publisher.c => r_publisher.c} (96%) rename orte/examples/reliable/{subscriberbesteffort.c => r_subscriber_besteffort.c} (93%) rename orte/examples/reliable/{subscriberreliable.c => r_subscriber_reliable.c} (93%) create mode 100644 orte/examples/type/ThreeTypes.idl delete mode 100644 orte/examples/type/readme.txt create mode 100644 orte/examples/type/test-any.idl create mode 100644 orte/idl-compiler/Makefile.am create mode 100644 orte/idl-compiler/Makefile.in create mode 100644 orte/idl-compiler/orte-idl-c-backend.c create mode 100644 orte/idl-compiler/orte-idl-c-backend.h create mode 100644 orte/idl-compiler/orte-idl-c-headers.c create mode 100644 orte/idl-compiler/orte-idl-c-impls.c create mode 100644 orte/idl-compiler/orte-idl-c-utils.c create mode 100644 orte/idl-compiler/orte-idl-driver.c create mode 100644 orte/idl-compiler/orte-idl-main.c create mode 100644 orte/idl-compiler/orte-idl-utils.c create mode 100644 orte/idl-compiler/orte-idl2.h create mode 100644 orte/idl-compiler/orte-idl3-types.h create mode 100644 orte/include/jorte/4all.h create mode 100644 orte/include/jorte/getNtpTime.h create mode 100644 orte/include/jorte/jorte.h create mode 100644 orte/include/jorte/org_ocera_orte_Domain.h create mode 100644 orte/include/jorte/org_ocera_orte_DomainEvents.h create mode 100644 orte/include/jorte/org_ocera_orte_DomainProp.h create mode 100644 orte/include/jorte/org_ocera_orte_JOrte.h create mode 100644 orte/include/jorte/org_ocera_orte_Manager.h create mode 100644 orte/include/jorte/org_ocera_orte_Publication.h create mode 100644 orte/include/jorte/org_ocera_orte_Subscription.h create mode 100644 orte/include/jorte/org_ocera_orte_tools_Conversions.h create mode 100644 orte/include/jorte/org_ocera_orte_tools_GetORTEConstant.h create mode 100644 orte/include/jorte/typedefs_defines_jorte.h create mode 100644 orte/include/orte/basic_types.h create mode 100644 orte/include/orte/cdr.h rename orte/include/{config.h.in => orte/orte_config.h.in} (93%) rename orte/include/{ => orte}/orte_config_omk_rtl.h (98%) rename orte/include/{ => orte}/orte_config_omk_unix.h (98%) create mode 100644 orte/include/rtl/compat_onetd.h rename orte/include/rtl/{compat.h => compat_rtlwip.h} (85%) create mode 100644 orte/include/rtps_endian.h create mode 100644 orte/java/Makefile create mode 100644 orte/java/Makefile.omk create mode 100644 orte/java/build.xml create mode 100644 orte/java/makeant.bat create mode 100644 orte/java/src/org/ocera/orte/Domain.java create mode 100644 orte/java/src/org/ocera/orte/DomainEvents.java create mode 100644 orte/java/src/org/ocera/orte/DomainProp.java create mode 100644 orte/java/src/org/ocera/orte/JOrte.java create mode 100644 orte/java/src/org/ocera/orte/Manager.java create mode 100644 orte/java/src/org/ocera/orte/OrteCallback.java create mode 100644 orte/java/src/org/ocera/orte/Publication.java create mode 100644 orte/java/src/org/ocera/orte/Subscription.java create mode 100644 orte/java/src/org/ocera/orte/SubscriptionCallback.java create mode 100644 orte/java/src/org/ocera/orte/examples/hello/HelloMessage.java create mode 100644 orte/java/src/org/ocera/orte/examples/hello/Publisher.java create mode 100644 orte/java/src/org/ocera/orte/examples/hello/Subscriber.java create mode 100644 orte/java/src/org/ocera/orte/manifest create mode 100644 orte/java/src/org/ocera/orte/tools/CheckType.java create mode 100644 orte/java/src/org/ocera/orte/tools/Conversions.java create mode 100644 orte/java/src/org/ocera/orte/tools/GetORTEConstant.java create mode 100644 orte/java/src/org/ocera/orte/types/GUID_RTPS.java create mode 100644 orte/java/src/org/ocera/orte/types/MessageData.java create mode 100644 orte/java/src/org/ocera/orte/types/MessageInterpret.java create mode 100644 orte/java/src/org/ocera/orte/types/NtpTime.java create mode 100644 orte/java/src/org/ocera/orte/types/ORTEConstant.java create mode 100644 orte/java/src/org/ocera/orte/types/ProtocolVersion.java create mode 100644 orte/java/src/org/ocera/orte/types/RecvInfo.java create mode 100644 orte/java/src/org/ocera/orte/types/RecvStatus.java create mode 100644 orte/java/src/org/ocera/orte/types/SendInfo.java create mode 100644 orte/java/src/org/ocera/orte/types/SendStatus.java create mode 100644 orte/java/src/org/ocera/orte/types/SequenceNumber.java create mode 100644 orte/java/src/org/ocera/orte/types/VendorId.java create mode 100644 orte/libjorte/JGetORTEConstant.c create mode 100644 orte/libjorte/JIPAddressToString.c create mode 100644 orte/libjorte/JNtpTimeToStringMs.c create mode 100644 orte/libjorte/JNtpTimeToStringUs.c create mode 100644 orte/libjorte/JORTEDomainAppCreate.c create mode 100644 orte/libjorte/JORTEDomainAppDestroy.c create mode 100644 orte/libjorte/JORTEDomainInitEvents.c create mode 100644 orte/libjorte/JORTEDomainMgrCreate.c create mode 100644 orte/libjorte/JORTEDomainMgrDestroy.c create mode 100644 orte/libjorte/JORTEDomainPropDefaultGet.c create mode 100644 orte/libjorte/JORTEDomainStart.c create mode 100644 orte/libjorte/JORTEInit.c create mode 100644 orte/libjorte/JORTEPublicationCreate.c create mode 100644 orte/libjorte/JORTEPublicationDestroy.c create mode 100644 orte/libjorte/JORTEPublicationSend.c create mode 100644 orte/libjorte/JORTESleepMs.c create mode 100644 orte/libjorte/JORTESubscriptionCreate.c create mode 100644 orte/libjorte/JORTESubscriptionDestroy.c create mode 100644 orte/libjorte/JORTETypeRegisterAdd.c create mode 100644 orte/libjorte/JStringToIPAddress.c create mode 100644 orte/libjorte/Makefile create mode 100644 orte/libjorte/Makefile.am create mode 100644 orte/libjorte/Makefile.in create mode 100644 orte/libjorte/Makefile.omk create mode 100644 orte/libjorte/getNtpTime.c delete mode 100644 orte/liborte/ORTEAppRecvMetatrafficThread.c create mode 100644 orte/liborte/ORTEAppRecvThread.c delete mode 100644 orte/liborte/ORTEAppRecvUserdataThread.c create mode 100644 orte/liborte/cdr.c diff --git a/ChangleLog b/ChangleLog index 6aaf390..e869352 100644 --- a/ChangleLog +++ b/ChangleLog @@ -1,11 +1,21 @@ -v0.3.0 - +v0.3.0 - 050220 - fixed csChange memory lake in RTPSVar +- added support CDR types (imported from ORBIT) + * CDR_Codec type + for serialization/deserialization are used functions +- java interface - preliminary +- IDL compiler, jorte library - both preliminary +- multicast communication + * new demo in orte/example/multicast +- documentation in developing branch +- added registration retries and period parameters. New event + generated when application fail to register to a manager (onRegFail). v0.2.3 - 09/26/2004 - fixed unsolve symbols for RTNet - fixed aclocal script for 1.8.3 version (admin/linux.m4) -- add support shared lobraries (libtool) +- added support shared lobraries (libtool) - added new target (FreeBSD) - ortemanager runable like windows service - MinGW pthread corection (when is instaled a version of pthread) @@ -33,5 +43,5 @@ v0.2.0 - 01/08/2004 V0.1.1 - 12/14/2002 -- cleaned up source code a little. +- a little cleaned up source code. diff --git a/Makefile.cvs b/Makefile.cvs index 00b7f67..8e96a3d 100644 --- a/Makefile.cvs +++ b/Makefile.cvs @@ -1,7 +1,7 @@ default: all all: - aclocal -I admin + aclocal -I admin autoheader automake autoconf diff --git a/Makefile.in b/Makefile.in index 88052a3..38a14b7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -36,20 +36,22 @@ POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/modtool.in \ - $(top_srcdir)/configure $(top_srcdir)/orte/include/config.h.in \ - admin/compile admin/config.guess admin/config.sub \ - admin/depcomp admin/install-sh admin/ltconfig admin/ltmain.sh \ - admin/missing admin/mkinstalldirs + $(top_srcdir)/configure \ + $(top_srcdir)/orte/include/orte/orte_config.h.in admin/compile \ + admin/config.guess admin/config.sub admin/depcomp \ + admin/install-sh admin/ltconfig admin/ltmain.sh admin/missing \ + admin/mkinstalldirs subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = modtool SOURCES = DIST_SOURCES = @@ -86,8 +88,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -121,6 +129,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -160,6 +170,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -261,22 +272,22 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -orte/include/config.h: orte/include/stamp-h1 +orte/include/orte/orte_config.h: orte/include/orte/stamp-h1 @if test ! -f $@; then \ - rm -f orte/include/stamp-h1; \ - $(MAKE) orte/include/stamp-h1; \ + rm -f orte/include/orte/stamp-h1; \ + $(MAKE) orte/include/orte/stamp-h1; \ else :; fi -orte/include/stamp-h1: $(top_srcdir)/orte/include/config.h.in $(top_builddir)/config.status - @rm -f orte/include/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status orte/include/config.h -$(top_srcdir)/orte/include/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) +orte/include/orte/stamp-h1: $(top_srcdir)/orte/include/orte/orte_config.h.in $(top_builddir)/config.status + @rm -f orte/include/orte/stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status orte/include/orte/orte_config.h +$(top_srcdir)/orte/include/orte/orte_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) - rm -f orte/include/stamp-h1 + rm -f orte/include/orte/stamp-h1 touch $@ distclean-hdr: - -rm -f orte/include/config.h orte/include/stamp-h1 + -rm -f orte/include/orte/orte_config.h orte/include/orte/stamp-h1 modtool: $(top_builddir)/config.status $(srcdir)/modtool.in cd $(top_builddir) && $(SHELL) ./config.status $@ @@ -409,7 +420,7 @@ distclean-tags: distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) - $(mkdir_p) $(distdir)/. $(distdir)/admin $(distdir)/orte/include + $(mkdir_p) $(distdir)/. $(distdir)/admin $(distdir)/orte/include/orte @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ diff --git a/Makefile.rules b/Makefile.rules index dbc09e3..74bedb0 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -35,12 +35,14 @@ #LINUX_DIR := /home/cvs/ocera/ocera-build/kernel/linux #RTL_DIR := /home/cvs/ocera/ocera-build/kernel/rtlinux #CONFIG_RTLINUX = y -OCERA_DIR := $(shell ( cd -L $(MAKERULES_DIR)/../../../.. ; pwd -L ) ) +#OCERA_DIR := $(shell ( cd -L $(MAKERULES_DIR)/../../../.. ; pwd -L ) ) +-include $(MAKERULES_DIR)/OCERA_TOP_DIR BUILD_DIR_NAME = _build COMPILED_DIR_NAME = _compiled -GROUP_DIR_NAME = orte - +ifndef GROUP_DIR_NAME +GROUP_DIR_NAME = nogroup +endif # We need to ensure definition of sources directory first ifndef SOURCES_DIR @@ -332,7 +334,7 @@ SOLIB_SOURCES += $$($(1)_SOURCES) $(USER_LIB_DIR)/lib$(1).so: $$($(1)_OBJSLO) @$(QUIET_CMD_ECHO) " LINK $$@" - $(Q) $(LD) --shared --soname=lib$(1).so -o $$@ $$^ + $(Q) $(LD) --shared --soname=lib$(1).so -o $$@ $$^ $(LOADLIBES) endef diff --git a/OCERA_TOP_DIR b/OCERA_TOP_DIR new file mode 100644 index 0000000..a93cb8a --- /dev/null +++ b/OCERA_TOP_DIR @@ -0,0 +1,7 @@ +# Position of the OCERA top direcotory relative to Makefile.rules file + +ifndef OCERA_DIR +OCERA_DIR := $(shell ( cd -L $(MAKERULES_DIR)/../../../.. ; pwd -L ) ) +endif + +GROUP_DIR_NAME = orte diff --git a/aclocal.m4 b/aclocal.m4 index 5223bc7..657425c 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -4607,4 +4607,7 @@ fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4_include([admin/idl.m4]) +m4_include([admin/jorte.m4]) m4_include([admin/linux.m4]) +m4_include([admin/pkg.m4]) diff --git a/admin/idl.m4 b/admin/idl.m4 new file mode 100644 index 0000000..fea0eaa --- /dev/null +++ b/admin/idl.m4 @@ -0,0 +1,47 @@ +# Add --enable-orte-idl option to configure. +# From Petr Smolik + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +AC_DEFUN([AM_ORTE_IDL], +[AC_MSG_CHECKING([whether to enable orte IDL compiler]) + dnl orte-idl is disabled by default + AC_ARG_ENABLE(orte-idl, +[ --enable-orte-idl enable to compile orte IDL compiler], + USE_ORTE_IDL=$enableval, + USE_ORTE_IDL=no) + AC_MSG_RESULT([$USE_ORTE_IDL]) + + if test ${USE_ORTE_IDL} == "yes" ; then + PKG_CHECK_MODULES(LIBIDL, libIDL-2.0) + CFLAGS="$CFLAGS $LIBIDL_CFLAGS" + LIBS="$LIBS $LIBIDL_LIBS" + #popt + AC_CHECK_LIB([popt], [poptSetOtherOptionHelp]) + fi + + AM_CONDITIONAL(CONFIG_ORTE_IDL, [test $USE_ORTE_IDL = yes]) + AC_SUBST(CONFIG_ORTE_IDL) + +] +) + +AU_DEFUN([jm_ORTE_IDL], [AM_ORTE_IDL]) diff --git a/admin/jorte.m4 b/admin/jorte.m4 new file mode 100644 index 0000000..2cb2b99 --- /dev/null +++ b/admin/jorte.m4 @@ -0,0 +1,60 @@ +# Add --enable-orte-idl option to configure. +# From Petr Smolik + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +AC_DEFUN([AM_JORTE], +[AC_MSG_CHECKING([whether to compile jorte]) + + AC_ARG_WITH([java], + [AC_HELP_STRING([--with-java=DIR], + [path to JAVA home directory for jorte compilation])], + [JAVA_HOME_DIR="${withval}"], + [JAVA_HOME_DIR="no"]) +# [JAVA_HOME_DIR="${JAVA_HOME}"]) + + USE_JORTE=no + if test "${JAVA_HOME_DIR}" != "no" ; then + if [[ -e "${JAVA_HOME_DIR}/include/jni.h" ]] ; then + USE_JORTE=yes + JNI_INCLUDES="-I$JAVA_HOME_DIR/include" + dnl Strange thing, jni.h requires jni_md.h which is under genunix here.. + dnl and under linux here.. + test -d "$JAVA_HOME_DIR/include/linux" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/linux" + test -d "$JAVA_HOME_DIR/include/genunix" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/genunix" + test -d "$JAVA_HOME_DIR/include/win32" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/win32" + CFLAGS="$CFLAGS $JNI_INCLUDES" + AC_DEFINE([CONFIG_JORTE],[1],[Define to enable JORTE's compilation]) + fi + fi + + AC_MSG_RESULT([$USE_JORTE]) + + AM_CONDITIONAL(CONFIG_JORTE, [test $USE_JORTE = yes]) + AC_SUBST(CONFIG_JORTE) + +] +) + +AU_DEFUN([jm_JORTE], [AM_JORTE]) diff --git a/admin/linux.m4 b/admin/linux.m4 index 8d9cf4d..77eb2cf 100644 --- a/admin/linux.m4 +++ b/admin/linux.m4 @@ -267,11 +267,17 @@ AC_DEFUN([DS_RTLINUX], [RTLINUX_DIR="${withval}"], [RTLINUX_DIR=/usr/src/rtlinux]) - AC_ARG_WITH([rtlinuxudp], - [AC_HELP_STRING([--with-rtlinuxudp=DIR], - [path to RTLinux UDP source directory])], - [RTLINUXUDP_DIR="${withval}"], - [RTLINUXUDP_DIR="${RTLINUX_DIR}"]) + AC_ARG_WITH([rtlinuxwip], + [AC_HELP_STRING([--with-rtlinuxwip=DIR], + [path to RTLinux wIP source directory])], + [RTLINUXWIP_DIR="${withval}"], + [RTLINUXWIP_DIR="${RTLINUX_DIR}"]) + + AC_ARG_WITH([rtlinuxonetd], + [AC_HELP_STRING([--with-rtlinuxonetd=DIR], + [path to RTLinux onetd source directory])], + [RTLINUXONETD_DIR="${withval}"], + [RTLINUXONETD_DIR="${RTLINUX_DIR}"]) DS_LINUX_CONFIG_OPTION_MODULE([CONFIG_RTLINUX]) @@ -285,17 +291,32 @@ AC_DEFUN([DS_RTLINUX], fi AC_MSG_RESULT([found]) AC_DEFINE([CONFIG_ORTE_RTL],[1],[Define if kernel is RTLinux patched]) - AC_MSG_CHECKING([RTLinux for UDP]) - if [[ ! -e "${RTLINUXUDP_DIR}/include/udp.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/nic.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/ip.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/ethernet.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/nictab.h" ]] ; then - AC_MSG_ERROR([incorrect RTLinux UDP directory!!!]) + + AC_MSG_CHECKING([RTLinux for a UDP stack]) + RTL_STACK="no" + + if [[ -e "${RTLINUXWIP_DIR}/include/udp.h" -a \ + -e "${RTLINUXWIP_DIR}/include/nic.h" -a \ + -e "${RTLINUXWIP_DIR}/include/ip.h" -a \ + -e "${RTLINUXWIP_DIR}/include/ethernet.h" -a \ + -e "${RTLINUXWIP_DIR}/include/nictab.h" ]] ; then + AC_MSG_RESULT([found wIP]) + AC_DEFINE([CONFIG_ORTE_RTL_WIP],[1],[Define if wIP stack is found]) + RTL_STACK="yes" + fi + + if [[ -e "${RTLINUXONETD_DIR}/onetd.h" ]] ; then + AC_MSG_RESULT([found onetd]) + AC_DEFINE([CONFIG_ORTE_RTL_ONETD],[1],[Define if onetd stack is found]) + RTL_STACK="yes" fi + + if test "${RTL_STACK}" == "no" ; then + AC_MSG_ERROR([incorrect a RTLinux UDP directory.]) + fi + RT_GCCLIB_DIR=`${RTLINUX_CC} -print-search-dirs | sed -n -e 's/^install: \(.*\)$/\1/p'` - RTLINUX_CFLAGS="${RTLINUX_CFLAGS} -I${RTLINUXUDP_DIR}/include -idirafter ${RT_GCCLIB_DIR}/include -nostdinc" - AC_MSG_RESULT([found]) + RTLINUX_CFLAGS="${RTLINUX_CFLAGS} -I${RTLINUXWIP_DIR}/include -I${RTLINUXONETD_DIR} -idirafter ${RT_GCCLIB_DIR}/include -nostdinc" $1 else $2 diff --git a/admin/pkg.m4 b/admin/pkg.m4 new file mode 100644 index 0000000..f2bfc2d --- /dev/null +++ b/admin/pkg.m4 @@ -0,0 +1,57 @@ + +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page +dnl also defines GSTUFF_PKG_ERRORS on error +AC_DEFUN([PKG_CHECK_MODULES], [ + succeeded=no + + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + AC_MSG_CHECKING(for $2) + + if $PKG_CONFIG --exists "$2" ; then + AC_MSG_RESULT(yes) + succeeded=yes + + AC_MSG_CHECKING($1_CFLAGS) + $1_CFLAGS=`$PKG_CONFIG --cflags "$2"` + AC_MSG_RESULT($$1_CFLAGS) + + AC_MSG_CHECKING($1_LIBS) + $1_LIBS=`$PKG_CONFIG --libs "$2"` + AC_MSG_RESULT($$1_LIBS) + else + $1_CFLAGS="" + $1_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + ifelse([$4], ,echo $$1_PKG_ERRORS,) + fi + + AC_SUBST($1_CFLAGS) + AC_SUBST($1_LIBS) + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + ifelse([$3], , :, [$3]) + else + ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) + fi +]) + + diff --git a/authors b/authors index 87eaa5f..c76dab4 100644 --- a/authors +++ b/authors @@ -17,10 +17,10 @@ Pavel Pisa * help with architecture Michal Sojka - * RTLinux proting + * RTLinux ports Jan Kiszka - * RTAI porting + * RTAI ports Zdenek Sebek * documentation diff --git a/configure b/configure index 067f4ae..bcd10b3 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for orte 0.2.3. +# Generated by GNU Autoconf 2.59 for orte 0.3.0. # # Report bugs to . # @@ -428,8 +428,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='orte' PACKAGE_TARNAME='orte' -PACKAGE_VERSION='0.2.3' -PACKAGE_STRING='orte 0.2.3' +PACKAGE_VERSION='0.3.0' +PACKAGE_STRING='orte 0.3.0' PACKAGE_BUGREPORT='petr.smolik@wo.cz' # Factoring default headers for most tests. @@ -469,7 +469,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ORTE_MAJOR_VERSION ORTE_MINOR_VERSION ORTE_MICRO_VERSION ORTE_VERSION ORTE_INTERFACE_AGE ORTE_BINARY_AGE LT_RELEASE LT_CURRENT LT_REVISION LT_AGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LINUX_DIR LINUX_ARCH LINUX_AFLAGS LINUX_LDFLAGS LINUX_ARFLAGS LINUX_CROSS_COMPILE LINUX_KERNELRELEASE LINUX_CFLAGS LINUX_CC LINUX_LD LINUX_AS LINUX_MODULE_EXT CONFIG_ORTE_KERNEL CONFIG_ORTE_KERNEL_TRUE CONFIG_ORTE_KERNEL_FALSE CONFIG_RTHAL_TRUE CONFIG_RTHAL_FALSE CONFIG_ADEOS_TRUE CONFIG_ADEOS_FALSE RTAI_CFLAGS CONFIG_RTLINUX_TRUE CONFIG_RTLINUX_FALSE RTLINUX_CFLAGS RTLINUX_CC CONFIG_ORTE_RT USE_RTAI_TRUE USE_RTAI_FALSE USE_RTLINUX_TRUE USE_RTLINUX_FALSE CONFIG_ORTE_RT_TRUE CONFIG_ORTE_RT_FALSE CONFIG_ORTE_WIN_TRUE CONFIG_ORTE_WIN_FALSE CONFIG_ORTE_CYGWIN_TRUE CONFIG_ORTE_CYGWIN_FALSE CONFIG_ORTE_MINGW_TRUE CONFIG_ORTE_MINGW_FALSE CONFIG_ORTE_UNIX_TRUE CONFIG_ORTE_UNIX_FALSE moduledir modulePROGRAMS_INSTALL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB LN_S ECHO CPP EGREP LIBTOOL INCLUDES LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ORTE_MAJOR_VERSION ORTE_MINOR_VERSION ORTE_MICRO_VERSION ORTE_VERSION ORTE_INTERFACE_AGE ORTE_BINARY_AGE LT_RELEASE LT_CURRENT LT_REVISION LT_AGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LINUX_DIR LINUX_ARCH LINUX_AFLAGS LINUX_LDFLAGS LINUX_ARFLAGS LINUX_CROSS_COMPILE LINUX_KERNELRELEASE LINUX_CFLAGS LINUX_CC LINUX_LD LINUX_AS LINUX_MODULE_EXT CONFIG_ORTE_KERNEL CONFIG_ORTE_KERNEL_TRUE CONFIG_ORTE_KERNEL_FALSE CONFIG_RTHAL_TRUE CONFIG_RTHAL_FALSE CONFIG_ADEOS_TRUE CONFIG_ADEOS_FALSE RTAI_CFLAGS CONFIG_RTLINUX_TRUE CONFIG_RTLINUX_FALSE RTLINUX_CFLAGS RTLINUX_CC CONFIG_ORTE_RT USE_RTAI_TRUE USE_RTAI_FALSE USE_RTLINUX_TRUE USE_RTLINUX_FALSE CONFIG_ORTE_RT_TRUE CONFIG_ORTE_RT_FALSE CONFIG_ORTE_WIN_TRUE CONFIG_ORTE_WIN_FALSE CONFIG_ORTE_CYGWIN_TRUE CONFIG_ORTE_CYGWIN_FALSE CONFIG_ORTE_MINGW_TRUE CONFIG_ORTE_MINGW_FALSE CONFIG_ORTE_UNIX_TRUE CONFIG_ORTE_UNIX_FALSE moduledir modulePROGRAMS_INSTALL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB PKG_CONFIG LIBIDL_CFLAGS LIBIDL_LIBS CONFIG_ORTE_IDL_TRUE CONFIG_ORTE_IDL_FALSE CONFIG_ORTE_IDL CONFIG_JORTE_TRUE CONFIG_JORTE_FALSE CONFIG_JORTE LN_S ECHO CPP EGREP LIBTOOL INCLUDES LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -938,7 +938,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures orte 0.2.3 to adapt to many kinds of systems. +\`configure' configures orte 0.3.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1005,7 +1005,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of orte 0.2.3:";; + short | recursive ) echo "Configuration of orte 0.3.0:";; esac cat <<\_ACEOF @@ -1016,6 +1016,7 @@ Optional Features: (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors + --enable-orte-idl enable to compile orte IDL compiler --enable-shared=PKGS build shared libraries default=yes --enable-static=PKGS build static libraries default=yes --enable-fast-install=PKGS optimize for fast installation default=yes @@ -1029,7 +1030,9 @@ Optional Packages: installation --with-rtnet=DIR path to RTnet installation directory --with-rtlinux=DIR path to RTLinux source directory - --with-rtlinuxudp=DIR path to RTLinux UDP source directory + --with-rtlinuxwip=DIR path to RTLinux wIP source directory + --with-rtlinuxonetd=DIR path to RTLinux onetd source directory + --with-java=DIR path to JAVA home directory for jorte compilation --with-gnu-ld assume the C compiler uses GNU ld default=no --with-pic try to use only PIC/non-PIC objects default=use both @@ -1141,7 +1144,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -orte configure 0.2.3 +orte configure 0.3.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1155,7 +1158,7 @@ cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by orte $as_me 0.2.3, which was +It was created by orte $as_me 0.3.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1520,8 +1523,8 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ############################### # Package info ORTE_MAJOR_VERSION=0 -ORTE_MINOR_VERSION=2 -ORTE_MICRO_VERSION=3 +ORTE_MINOR_VERSION=3 +ORTE_MICRO_VERSION=0 ORTE_INTERFACE_AGE=0 ORTE_BINARY_AGE=0 ORTE_VERSION=$ORTE_MAJOR_VERSION.$ORTE_MINOR_VERSION.$ORTE_MICRO_VERSION @@ -1632,7 +1635,7 @@ test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- - ac_config_headers="$ac_config_headers orte/include/config.h" + ac_config_headers="$ac_config_headers orte/include/orte/orte_config.h" am__api_version="1.8" # Find a good install program. We prefer a C program (faster), @@ -2385,12 +2388,21 @@ else fi; -# Check whether --with-rtlinuxudp or --without-rtlinuxudp was given. -if test "${with_rtlinuxudp+set}" = set; then - withval="$with_rtlinuxudp" - RTLINUXUDP_DIR="${withval}" +# Check whether --with-rtlinuxwip or --without-rtlinuxwip was given. +if test "${with_rtlinuxwip+set}" = set; then + withval="$with_rtlinuxwip" + RTLINUXWIP_DIR="${withval}" else - RTLINUXUDP_DIR="${RTLINUX_DIR}" + RTLINUXWIP_DIR="${RTLINUX_DIR}" +fi; + + +# Check whether --with-rtlinuxonetd or --without-rtlinuxonetd was given. +if test "${with_rtlinuxonetd+set}" = set; then + withval="$with_rtlinuxonetd" + RTLINUXONETD_DIR="${withval}" +else + RTLINUXONETD_DIR="${RTLINUX_DIR}" fi; @@ -2444,21 +2456,45 @@ cat >>confdefs.h <<\_ACEOF #define CONFIG_ORTE_RTL 1 _ACEOF - echo "$as_me:$LINENO: checking RTLinux for UDP" >&5 -echo $ECHO_N "checking RTLinux for UDP... $ECHO_C" >&6 - if [ ! -e "${RTLINUXUDP_DIR}/include/udp.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/nic.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/ip.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/ethernet.h" -o \ - ! -e "${RTLINUXUDP_DIR}/include/nictab.h" ] ; then - { { echo "$as_me:$LINENO: error: incorrect RTLinux UDP directory!!!" >&5 -echo "$as_me: error: incorrect RTLinux UDP directory!!!" >&2;} + + echo "$as_me:$LINENO: checking RTLinux for a UDP stack" >&5 +echo $ECHO_N "checking RTLinux for a UDP stack... $ECHO_C" >&6 + RTL_STACK="no" + + if [ -e "${RTLINUXWIP_DIR}/include/udp.h" -a \ + -e "${RTLINUXWIP_DIR}/include/nic.h" -a \ + -e "${RTLINUXWIP_DIR}/include/ip.h" -a \ + -e "${RTLINUXWIP_DIR}/include/ethernet.h" -a \ + -e "${RTLINUXWIP_DIR}/include/nictab.h" ] ; then + echo "$as_me:$LINENO: result: found wIP" >&5 +echo "${ECHO_T}found wIP" >&6 + +cat >>confdefs.h <<\_ACEOF +#define CONFIG_ORTE_RTL_WIP 1 +_ACEOF + + RTL_STACK="yes" + fi + + if [ -e "${RTLINUXONETD_DIR}/onetd.h" ] ; then + echo "$as_me:$LINENO: result: found onetd" >&5 +echo "${ECHO_T}found onetd" >&6 + +cat >>confdefs.h <<\_ACEOF +#define CONFIG_ORTE_RTL_ONETD 1 +_ACEOF + + RTL_STACK="yes" + fi + + if test "${RTL_STACK}" == "no" ; then + { { echo "$as_me:$LINENO: error: incorrect a RTLinux UDP directory." >&5 +echo "$as_me: error: incorrect a RTLinux UDP directory." >&2;} { (exit 1); exit 1; }; } fi + RT_GCCLIB_DIR=`${RTLINUX_CC} -print-search-dirs | sed -n -e 's/^install: \(.*\)$/\1/p'` - RTLINUX_CFLAGS="${RTLINUX_CFLAGS} -I${RTLINUXUDP_DIR}/include -idirafter ${RT_GCCLIB_DIR}/include -nostdinc" - echo "$as_me:$LINENO: result: found" >&5 -echo "${ECHO_T}found" >&6 + RTLINUX_CFLAGS="${RTLINUX_CFLAGS} -I${RTLINUXWIP_DIR}/include -I${RTLINUXONETD_DIR} -idirafter ${RT_GCCLIB_DIR}/include -nostdinc" USE_RTLINUX=yes else USE_RTLINUX=no @@ -3809,6 +3845,267 @@ else fi +############################### +# Checks for ability to compile ORTE_IDL + +echo "$as_me:$LINENO: checking whether to enable orte IDL compiler" >&5 +echo $ECHO_N "checking whether to enable orte IDL compiler... $ECHO_C" >&6 + # Check whether --enable-orte-idl or --disable-orte-idl was given. +if test "${enable_orte_idl+set}" = set; then + enableval="$enable_orte_idl" + USE_ORTE_IDL=$enableval +else + USE_ORTE_IDL=no +fi; + echo "$as_me:$LINENO: result: $USE_ORTE_IDL" >&5 +echo "${ECHO_T}$USE_ORTE_IDL" >&6 + + if test ${USE_ORTE_IDL} == "yes" ; then + + succeeded=no + + if test -z "$PKG_CONFIG"; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG + +if test -n "$PKG_CONFIG"; then + echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 +echo "${ECHO_T}$PKG_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + fi + + if test "$PKG_CONFIG" = "no" ; then + echo "*** The pkg-config script could not be found. Make sure it is" + echo "*** in your path, or set the PKG_CONFIG environment variable" + echo "*** to the full path to pkg-config." + echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config." + else + PKG_CONFIG_MIN_VERSION=0.9.0 + if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then + echo "$as_me:$LINENO: checking for libIDL-2.0" >&5 +echo $ECHO_N "checking for libIDL-2.0... $ECHO_C" >&6 + + if $PKG_CONFIG --exists "libIDL-2.0" ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + succeeded=yes + + echo "$as_me:$LINENO: checking LIBIDL_CFLAGS" >&5 +echo $ECHO_N "checking LIBIDL_CFLAGS... $ECHO_C" >&6 + LIBIDL_CFLAGS=`$PKG_CONFIG --cflags "libIDL-2.0"` + echo "$as_me:$LINENO: result: $LIBIDL_CFLAGS" >&5 +echo "${ECHO_T}$LIBIDL_CFLAGS" >&6 + + echo "$as_me:$LINENO: checking LIBIDL_LIBS" >&5 +echo $ECHO_N "checking LIBIDL_LIBS... $ECHO_C" >&6 + LIBIDL_LIBS=`$PKG_CONFIG --libs "libIDL-2.0"` + echo "$as_me:$LINENO: result: $LIBIDL_LIBS" >&5 +echo "${ECHO_T}$LIBIDL_LIBS" >&6 + else + LIBIDL_CFLAGS="" + LIBIDL_LIBS="" + ## If we have a custom action on failure, don't print errors, but + ## do set a variable so people can do so. + LIBIDL_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libIDL-2.0"` + echo $LIBIDL_PKG_ERRORS + fi + + + + else + echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." + echo "*** See http://www.freedesktop.org/software/pkgconfig" + fi + fi + + if test $succeeded = yes; then + : + else + { { echo "$as_me:$LINENO: error: Library requirements (libIDL-2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5 +echo "$as_me: error: Library requirements (libIDL-2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;} + { (exit 1); exit 1; }; } + fi + + CFLAGS="$CFLAGS $LIBIDL_CFLAGS" + LIBS="$LIBS $LIBIDL_LIBS" + #popt + +echo "$as_me:$LINENO: checking for poptSetOtherOptionHelp in -lpopt" >&5 +echo $ECHO_N "checking for poptSetOtherOptionHelp in -lpopt... $ECHO_C" >&6 +if test "${ac_cv_lib_popt_poptSetOtherOptionHelp+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpopt $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char poptSetOtherOptionHelp (); +int +main () +{ +poptSetOtherOptionHelp (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_popt_poptSetOtherOptionHelp=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_popt_poptSetOtherOptionHelp=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_popt_poptSetOtherOptionHelp" >&5 +echo "${ECHO_T}$ac_cv_lib_popt_poptSetOtherOptionHelp" >&6 +if test $ac_cv_lib_popt_poptSetOtherOptionHelp = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPOPT 1 +_ACEOF + + LIBS="-lpopt $LIBS" + +fi + + fi + + + +if test $USE_ORTE_IDL = yes; then + CONFIG_ORTE_IDL_TRUE= + CONFIG_ORTE_IDL_FALSE='#' +else + CONFIG_ORTE_IDL_TRUE='#' + CONFIG_ORTE_IDL_FALSE= +fi + + + + + + +############################### +# Checks for ability to compile JORTE +echo "$as_me:$LINENO: checking whether to compile jorte" >&5 +echo $ECHO_N "checking whether to compile jorte... $ECHO_C" >&6 + + +# Check whether --with-java or --without-java was given. +if test "${with_java+set}" = set; then + withval="$with_java" + JAVA_HOME_DIR="${withval}" +else + JAVA_HOME_DIR="no" +fi; +# [JAVA_HOME_DIR="${JAVA_HOME}"]) + + USE_JORTE=no + if test "${JAVA_HOME_DIR}" != "no" ; then + if [ -e "${JAVA_HOME_DIR}/include/jni.h" ] ; then + USE_JORTE=yes + JNI_INCLUDES="-I$JAVA_HOME_DIR/include" + test -d "$JAVA_HOME_DIR/include/linux" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/linux" + test -d "$JAVA_HOME_DIR/include/genunix" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/genunix" + test -d "$JAVA_HOME_DIR/include/win32" && + JNI_INCLUDES="$JNI_INCLUDES -I$JAVA_HOME_DIR/include/win32" + CFLAGS="$CFLAGS $JNI_INCLUDES" + +cat >>confdefs.h <<\_ACEOF +#define CONFIG_JORTE 1 +_ACEOF + + fi + fi + + echo "$as_me:$LINENO: result: $USE_JORTE" >&5 +echo "${ECHO_T}$USE_JORTE" >&6 + + + +if test $USE_JORTE = yes; then + CONFIG_JORTE_TRUE= + CONFIG_JORTE_FALSE='#' +else + CONFIG_JORTE_TRUE='#' + CONFIG_JORTE_FALSE= +fi + + + + + + ############################### # Checks for libraries and init libtools if test -z ${CONFIG_ORTE_RT} ; then @@ -4329,7 +4626,6 @@ deplibs_check_method=$lt_cv_deplibs_check_method - # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output" >&5 echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6 @@ -5486,7 +5782,7 @@ test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes case $host in *-*-irix6*) # Find out which ABI we are using. - echo '#line 5489 "configure"' > conftest.$ac_ext + echo '#line 5785 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -6062,7 +6358,7 @@ chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no -if { (eval echo configure:6065: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then +if { (eval echo configure:6361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then @@ -7995,7 +8291,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <>conftest.$ac_ext <<_ACEOF #endif +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in onetd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #ifdef HAVE_LINUX_IF_H + #include + #endif + #ifdef HAVE_LINUX_IN_H + #include + #endif + #ifdef HAVE_PTHREAD_H + #include + #endif + + #include <$ac_header> _ACEOF rm -f conftest.$ac_objext @@ -10054,7 +10421,7 @@ fi ############################### # includes -INCLUDES='-I$(top_srcdir)/orte/include' +INCLUDES='-I$(top_srcdir)/orte/include -I$(top_builddir)/orte/include' ############################### @@ -10523,8 +10890,7 @@ fi if test -z ${CONFIG_ORTE_RT} ; then - -for ac_func in strdup gethostbyname getopt_long +for ac_func in gethostbyname getopt_long do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 @@ -10627,7 +10993,7 @@ done fi - ac_config_files="$ac_config_files Makefile orte/Makefile orte/liborte/Makefile orte/liborte/rtl/Makefile orte/examples/Makefile orte/examples/hello/Makefile orte/examples/reliable/Makefile orte/examples/ping/Makefile orte/examples/spy/Makefile orte/manager/Makefile" + ac_config_files="$ac_config_files Makefile orte/Makefile orte/liborte/Makefile orte/liborte/rtl/Makefile orte/examples/Makefile orte/examples/hello/Makefile orte/examples/multicast/Makefile orte/examples/reliable/Makefile orte/examples/ping/Makefile orte/examples/spy/Makefile orte/idl-compiler/Makefile orte/libjorte/Makefile orte/manager/Makefile" @@ -10821,6 +11187,20 @@ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${CONFIG_ORTE_IDL_TRUE}" && test -z "${CONFIG_ORTE_IDL_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"CONFIG_ORTE_IDL\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"CONFIG_ORTE_IDL\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${CONFIG_JORTE_TRUE}" && test -z "${CONFIG_JORTE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"CONFIG_JORTE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"CONFIG_JORTE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files @@ -11092,7 +11472,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by orte $as_me 0.2.3, which was +This file was extended by orte $as_me 0.3.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11155,7 +11535,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -orte config.status 0.2.3 +orte config.status 0.3.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -11271,13 +11651,16 @@ do "orte/liborte/rtl/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/liborte/rtl/Makefile" ;; "orte/examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/Makefile" ;; "orte/examples/hello/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/hello/Makefile" ;; + "orte/examples/multicast/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/multicast/Makefile" ;; "orte/examples/reliable/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/reliable/Makefile" ;; "orte/examples/ping/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/ping/Makefile" ;; "orte/examples/spy/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/examples/spy/Makefile" ;; + "orte/idl-compiler/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/idl-compiler/Makefile" ;; + "orte/libjorte/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/libjorte/Makefile" ;; "orte/manager/Makefile" ) CONFIG_FILES="$CONFIG_FILES orte/manager/Makefile" ;; "modtool" ) CONFIG_FILES="$CONFIG_FILES modtool" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "orte/include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS orte/include/config.h" ;; + "orte/include/orte/orte_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS orte/include/orte/orte_config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; @@ -11467,6 +11850,15 @@ s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@PKG_CONFIG@,$PKG_CONFIG,;t t +s,@LIBIDL_CFLAGS@,$LIBIDL_CFLAGS,;t t +s,@LIBIDL_LIBS@,$LIBIDL_LIBS,;t t +s,@CONFIG_ORTE_IDL_TRUE@,$CONFIG_ORTE_IDL_TRUE,;t t +s,@CONFIG_ORTE_IDL_FALSE@,$CONFIG_ORTE_IDL_FALSE,;t t +s,@CONFIG_ORTE_IDL@,$CONFIG_ORTE_IDL,;t t +s,@CONFIG_JORTE_TRUE@,$CONFIG_JORTE_TRUE,;t t +s,@CONFIG_JORTE_FALSE@,$CONFIG_JORTE_FALSE,;t t +s,@CONFIG_JORTE@,$CONFIG_JORTE,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@CPP@,$CPP,;t t @@ -12198,21 +12590,20 @@ fi chmod +x modtool - # ====================================================================== -# generate orte/include/orte_config.h +# generate orte/include/orte/orte_config.h # ====================================================================== -{ echo "$as_me:$LINENO: creating orte/include/orte_config.h" >&5 -echo "$as_me: creating orte/include/orte_config.h" >&6;} +{ echo "$as_me:$LINENO: creating orte/include/orte/orte_config.h" >&5 +echo "$as_me: creating orte/include/orte/orte_config.h" >&6;} sed -e "s/ PACKAGE/ ORTE_PACKAGE/" -e "s/ VERSION/ ORTE_VERSION/" \ - orte/include/config.h >orte/include/orte_config.h.new -if cmp -s orte/include/orte_config.h.new orte/include/orte_config.h; then - rm orte/include/orte_config.h.new - { echo "$as_me:$LINENO: orte/include/orte_config.h is unchanged" >&5 -echo "$as_me: orte/include/orte_config.h is unchanged" >&6;} + orte/include/orte/orte_config.h >orte/include/orte/orte_config.h.new +if cmp -s orte/include/orte/orte_config.h.new orte/include/orte/orte_config.h; then + rm orte/include/orte/orte_config.h.new + { echo "$as_me:$LINENO: orte/include/orte/orte_config.h is unchanged" >&5 +echo "$as_me: orte/include/orte/orte_config.h is unchanged" >&6;} else - mv orte/include/orte_config.h.new orte/include/orte_config.h + mv orte/include/orte/orte_config.h.new orte/include/orte/orte_config.h fi echo \ @@ -12224,7 +12615,7 @@ Configuration ORTE: Compiler flags: ${CFLAGS} Host System Type: ${host} - See config.h for future configuration information. + See orte_config.h for future configuration information. Now you can run make diff --git a/configure.in b/configure.in index fb87b03..3b13261 100644 --- a/configure.in +++ b/configure.in @@ -1,19 +1,19 @@ # Process this file with autoconf to produce a configure script. # -# $Id: configure.in,v 1.11 2004/09/21 21:09:33 smolik Exp $ +# $Id: configure.in,v 1.12 2005/02/23 10:12:09 smolik Exp $ # autoconf requirement AC_PREREQ([2.56]) -AC_INIT([orte],[0.2.3],[petr.smolik@wo.cz]) +AC_INIT([orte],[0.3.0],[petr.smolik@wo.cz]) AC_CONFIG_AUX_DIR(admin) ############################### # Package info ORTE_MAJOR_VERSION=0 -ORTE_MINOR_VERSION=2 -ORTE_MICRO_VERSION=3 +ORTE_MINOR_VERSION=3 +ORTE_MICRO_VERSION=0 ORTE_INTERFACE_AGE=0 ORTE_BINARY_AGE=0 ORTE_VERSION=$ORTE_MAJOR_VERSION.$ORTE_MINOR_VERSION.$ORTE_MICRO_VERSION @@ -44,7 +44,7 @@ echo #Check for CPU / vendor / OS AC_CANONICAL_HOST AC_CANONICAL_TARGET -AM_CONFIG_HEADER(orte/include/config.h) +AM_CONFIG_HEADER(orte/include/orte/orte_config.h) AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) @@ -117,6 +117,14 @@ fi AC_PROG_CC AC_PROG_RANLIB +############################### +# Checks for ability to compile ORTE_IDL +AM_ORTE_IDL + +############################### +# Checks for ability to compile JORTE +AM_JORTE + ############################### # Checks for libraries and init libtools if test -z ${CONFIG_ORTE_RT} ; then @@ -203,6 +211,17 @@ if test ${USE_RTLINUX} == 'yes' ; then #include #endif ]) + AC_CHECK_HEADERS([onetd.h],,,[ + #ifdef HAVE_LINUX_IF_H + #include + #endif + #ifdef HAVE_LINUX_IN_H + #include + #endif + #ifdef HAVE_PTHREAD_H + #include + #endif + ]) fi # RTAI if test ${USE_RTAI} == 'yes' ; then @@ -212,7 +231,7 @@ fi ############################### # includes -INCLUDES='-I$(top_srcdir)/orte/include' +INCLUDES='-I$(top_srcdir)/orte/include -I$(top_builddir)/orte/include' AC_SUBST(INCLUDES) ############################### @@ -225,7 +244,7 @@ AC_C_INLINE # Checks for library functions. AC_PROG_GCC_TRADITIONAL if test -z ${CONFIG_ORTE_RT} ; then -AC_CHECK_FUNCS([strdup gethostbyname getopt_long]) +AC_CHECK_FUNCS([gethostbyname getopt_long]) fi AC_CONFIG_FILES([Makefile @@ -234,9 +253,12 @@ AC_CONFIG_FILES([Makefile orte/liborte/rtl/Makefile orte/examples/Makefile orte/examples/hello/Makefile + orte/examples/multicast/Makefile orte/examples/reliable/Makefile orte/examples/ping/Makefile orte/examples/spy/Makefile + orte/idl-compiler/Makefile + orte/libjorte/Makefile orte/manager/Makefile]) @@ -245,19 +267,18 @@ modtool ]) chmod +x modtool - # ====================================================================== -# generate orte/include/orte_config.h +# generate orte/include/orte/orte_config.h # ====================================================================== -AC_MSG_NOTICE([creating orte/include/orte_config.h]) +AC_MSG_NOTICE([creating orte/include/orte/orte_config.h]) sed -e "s/ PACKAGE/ ORTE_PACKAGE/" -e "s/ VERSION/ ORTE_VERSION/" \ - orte/include/config.h >orte/include/orte_config.h.new -if cmp -s orte/include/orte_config.h.new orte/include/orte_config.h; then - rm orte/include/orte_config.h.new - AC_MSG_NOTICE([orte/include/orte_config.h is unchanged]) + orte/include/orte/orte_config.h >orte/include/orte/orte_config.h.new +if cmp -s orte/include/orte/orte_config.h.new orte/include/orte/orte_config.h; then + rm orte/include/orte/orte_config.h.new + AC_MSG_NOTICE([orte/include/orte/orte_config.h is unchanged]) else - mv orte/include/orte_config.h.new orte/include/orte_config.h + mv orte/include/orte/orte_config.h.new orte/include/orte/orte_config.h fi echo \ @@ -269,7 +290,7 @@ Configuration ORTE: Compiler flags: ${CFLAGS} Host System Type: ${host} - See config.h for future configuration information. + See orte_config.h for future configuration information. Now you can run make diff --git a/orte/Makefile.am b/orte/Makefile.am index 190bde0..9159d4a 100644 --- a/orte/Makefile.am +++ b/orte/Makefile.am @@ -6,4 +6,12 @@ # Uncomment and customize the following to ORTE your needs: # -SUBDIRS = liborte manager examples +SUBDIRS = liborte manager examples + +if CONFIG_JORTE +SUBDIRS += libjorte +endif + +if CONFIG_ORTE_IDL +SUBDIRS += idl-compiler +endif diff --git a/orte/Makefile.in b/orte/Makefile.in index e4b2440..5c50db0 100644 --- a/orte/Makefile.in +++ b/orte/Makefile.in @@ -42,15 +42,18 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ +@CONFIG_JORTE_TRUE@am__append_1 = libjorte +@CONFIG_ORTE_IDL_TRUE@am__append_2 = idl-compiler subdir = orte DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = @@ -62,7 +65,7 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) +DIST_SUBDIRS = liborte manager examples libjorte idl-compiler DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ @@ -77,8 +80,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -112,6 +121,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -151,6 +162,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -205,7 +217,7 @@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -SUBDIRS = liborte manager examples +SUBDIRS = liborte manager examples $(am__append_1) $(am__append_2) all: all-recursive .SUFFIXES: @@ -392,7 +404,7 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - list='$(SUBDIRS)'; for subdir in $$list; do \ + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || mkdir "$(distdir)/$$subdir" \ diff --git a/orte/Makefile.omk b/orte/Makefile.omk index 8bdcff9..378f29b 100644 --- a/orte/Makefile.omk +++ b/orte/Makefile.omk @@ -1 +1,3 @@ -SUBDIRS = include liborte manager examples +SUBDIRS = include liborte manager examples libjorte java + + diff --git a/orte/contrib/decoder/decode_msg.c b/orte/contrib/decoder/decode_msg.c index cbf167d..0455059 100644 --- a/orte/contrib/decoder/decode_msg.c +++ b/orte/contrib/decoder/decode_msg.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include diff --git a/orte/contrib/shape/BoxType.c b/orte/contrib/shape/BoxType.c new file mode 100644 index 0000000..bf5198f --- /dev/null +++ b/orte/contrib/shape/BoxType.c @@ -0,0 +1,85 @@ +/* + * This file was generated by orte-idl - DO NOT EDIT! + */ + +#include "BoxType.h" + +/****************************************************************/ +/* struct - BoxRect */ +/****************************************************************/ + +void BoxRect_serialize(CDR_Codec *cdrCodec,BoxRect *object) { + CORBA_short_serialize(cdrCodec,&(object->top_left_x)); + CORBA_short_serialize(cdrCodec,&(object->top_left_y)); + CORBA_short_serialize(cdrCodec,&(object->bottom_right_x)); + CORBA_short_serialize(cdrCodec,&(object->bottom_right_y)); +} + +void +BoxRect_deserialize(CDR_Codec *cdrCodec,BoxRect *object) { + CORBA_short_deserialize(cdrCodec,&(object->top_left_x)); + CORBA_short_deserialize(cdrCodec,&(object->top_left_y)); + CORBA_short_deserialize(cdrCodec,&(object->bottom_right_x)); + CORBA_short_deserialize(cdrCodec,&(object->bottom_right_y)); +} + +int +BoxRect_get_max_size(ORTEGetMaxSizeParam *gms) { + CORBA_short_get_max_size(gms); + CORBA_short_get_max_size(gms); + CORBA_short_get_max_size(gms); + CORBA_short_get_max_size(gms); + return gms->csize; +} + +Boolean +BoxRect_type_register(ORTEDomain *d) { + Boolean ret; + + ret=ORTETypeRegisterAdd(d, + "BoxRect", + (ORTETypeSerialize)BoxRect_serialize, + (ORTETypeDeserialize)BoxRect_deserialize, + BoxRect_get_max_size, + 0); + return ret; +} + +/****************************************************************/ +/* struct - BoxType */ +/****************************************************************/ + +void BoxType_serialize(CDR_Codec *cdrCodec,BoxType *object) { + CORBA_octet_serialize(cdrCodec,&(object->color)); + CORBA_long_serialize(cdrCodec,&(object->shape)); + BoxRect_serialize(cdrCodec,&(object->rectangle)); +} + +void +BoxType_deserialize(CDR_Codec *cdrCodec,BoxType *object) { + CORBA_octet_deserialize(cdrCodec,&(object->color)); + CORBA_long_deserialize(cdrCodec,&(object->shape)); + BoxRect_deserialize(cdrCodec,&(object->rectangle)); +} + +int +BoxType_get_max_size(ORTEGetMaxSizeParam *gms) { + CORBA_octet_get_max_size(gms); + CORBA_long_get_max_size(gms); + BoxRect_get_max_size(gms); + return gms->csize; +} + +Boolean +BoxType_type_register(ORTEDomain *d) { + Boolean ret; + + ret=ORTETypeRegisterAdd(d, + "BoxType", + (ORTETypeSerialize)BoxType_serialize, + (ORTETypeDeserialize)BoxType_deserialize, + BoxType_get_max_size, + 0); + return ret; +} + diff --git a/orte/contrib/shape/BoxType.h b/orte/contrib/shape/BoxType.h new file mode 100644 index 0000000..3f4ea28 --- /dev/null +++ b/orte/contrib/shape/BoxType.h @@ -0,0 +1,55 @@ +/* + * This file was generated by orte-idl - DO NOT EDIT! + */ + +#ifndef BoxType_H +#define BoxType_H 1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#ifndef EXCLUDE_ORTE_H +#include +#endif /* EXCLUDE_ORTE_H */ + +/** typedefs **/ +#if !defined(_BoxRect_defined) +#define _BoxRect_defined 1 +typedef struct BoxRect_type BoxRect; +struct BoxRect_type { +CORBA_short top_left_x; +CORBA_short top_left_y; +CORBA_short bottom_right_x; +CORBA_short bottom_right_y; +}; + +#endif +#if !defined(_BoxType_defined) +#define _BoxType_defined 1 +typedef struct BoxType_type BoxType; +struct BoxType_type { +CORBA_octet color; +CORBA_long shape; +BoxRect rectangle; +}; + +#endif + +/** impls declarations **/ +void BoxRect_serialize(CDR_Codec *cdrCodec,BoxRect *object); +void BoxRect_deserialize(CDR_Codec *cdrCodec,BoxRect *object); +int BoxRect_get_max_size(ORTEGetMaxSizeParam *gms); +Boolean BoxRect_type_register(ORTEDomain *d); + +void BoxType_serialize(CDR_Codec *cdrCodec,BoxType *object); +void BoxType_deserialize(CDR_Codec *cdrCodec,BoxType *object); +int BoxType_get_max_size(ORTEGetMaxSizeParam *gms); +Boolean BoxType_type_register(ORTEDomain *d); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif diff --git a/orte/contrib/shape/BoxType.idl b/orte/contrib/shape/BoxType.idl new file mode 100644 index 0000000..714ab4b --- /dev/null +++ b/orte/contrib/shape/BoxType.idl @@ -0,0 +1,12 @@ +struct BoxRect { + short top_left_x; + short top_left_y; + short bottom_right_x; + short bottom_right_y; +}; + +struct BoxType { + octet color; + long shape; + BoxRect rectangle; +}; diff --git a/orte/contrib/shape/FPublisher.ui b/orte/contrib/shape/FPublisher.ui index baac5e6..fe38ec1 100644 --- a/orte/contrib/shape/FPublisher.ui +++ b/orte/contrib/shape/FPublisher.ui @@ -149,7 +149,7 @@ orte.h - ortedemo_types.h + BoxType.h FPublisher.ui.h diff --git a/orte/contrib/shape/FPublisher.ui.h b/orte/contrib/shape/FPublisher.ui.h index 0860d6b..0d84876 100644 --- a/orte/contrib/shape/FPublisher.ui.h +++ b/orte/contrib/shape/FPublisher.ui.h @@ -19,7 +19,7 @@ void FPublisher::init() rect.setRect(0,0,25,45); ORTEInit(); domain=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); - ORTETypeRegisterBoxType(domain); + BoxType_type_register(domain); publisher=NULL; } diff --git a/orte/contrib/shape/FSubscriber.ui b/orte/contrib/shape/FSubscriber.ui index e08e2db..cba85a5 100644 --- a/orte/contrib/shape/FSubscriber.ui +++ b/orte/contrib/shape/FSubscriber.ui @@ -201,7 +201,7 @@ orte.h pthread.h - ortedemo_types.h + BoxType.h FSubscriber.ui.h diff --git a/orte/contrib/shape/FSubscriber.ui.h b/orte/contrib/shape/FSubscriber.ui.h index 5217ae6..b30fe01 100644 --- a/orte/contrib/shape/FSubscriber.ui.h +++ b/orte/contrib/shape/FSubscriber.ui.h @@ -16,7 +16,7 @@ void FSubscriber::init() { ORTEInit(); domain=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); - ORTETypeRegisterBoxType(domain); + BoxType_type_register(domain); subscriberBlue=subscriberGreen=subscriberRed=NULL; subscriberBlack=subscriberYellow=NULL; } @@ -42,6 +42,7 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) FSubscriber *s=(FSubscriber*)recvCallBackParam; QRect rect; + a->lock(); switch (info->status) { case NEW_DATA: @@ -91,7 +92,8 @@ void FSubscriber::initSubscribers( int iBlue, int iGreen, int iRed, int iBlack, &deadline, &msBlue, recvCallBack, - this); + this, + IPADDRESS_INVALID); combo->insertItem("Blue",combo->count()); } if (iGreen) { @@ -105,7 +107,8 @@ void FSubscriber::initSubscribers( int iBlue, int iGreen, int iRed, int iBlack, &deadline, &msGreen, recvCallBack, - this); + this, + IPADDRESS_INVALID); combo->insertItem("Green",combo->count()); } if (iRed) { @@ -119,7 +122,8 @@ void FSubscriber::initSubscribers( int iBlue, int iGreen, int iRed, int iBlack, &deadline, &msRed, recvCallBack, - this); + this, + IPADDRESS_INVALID); combo->insertItem("Red",combo->count()); } if (iBlack) { @@ -133,7 +137,8 @@ void FSubscriber::initSubscribers( int iBlue, int iGreen, int iRed, int iBlack, &deadline, &msBlack, recvCallBack, - this); + this, + IPADDRESS_INVALID); combo->insertItem("Black",combo->count()); } if (iYellow) { @@ -147,7 +152,8 @@ void FSubscriber::initSubscribers( int iBlue, int iGreen, int iRed, int iBlack, &deadline, &msYellow, recvCallBack, - this); + this, + IPADDRESS_INVALID); combo->insertItem("Yellow",combo->count()); } } diff --git a/orte/contrib/shape/ortedemo.pro b/orte/contrib/shape/ortedemo.pro index d29cca9..d2518bf 100644 --- a/orte/contrib/shape/ortedemo.pro +++ b/orte/contrib/shape/ortedemo.pro @@ -1,7 +1,7 @@ SOURCES += main.cpp \ MyQFrame.cpp \ richtext.cpp \ - ortedemo_types.c + BoxType.c HEADERS += richtext.h \ MyQFrame.h TARGET = ortedemo diff --git a/orte/contrib/shape/ortedemo_types.c b/orte/contrib/shape/ortedemo_types.c deleted file mode 100644 index 26f6fa0..0000000 --- a/orte/contrib/shape/ortedemo_types.c +++ /dev/null @@ -1,68 +0,0 @@ -#include "ortedemo_types.h" - -/*****************************************************************************/ -void -BoxTypeSerialize(ORTECDRStream *cdr_stream, void *instance) { - BoxType *boxType=(BoxType*)instance; - - //color - *(int*)cdr_stream->bufferPtr=boxType->color; - cdr_stream->bufferPtr+=sizeof(int); - //shape - *(int*)cdr_stream->bufferPtr=boxType->shape; - cdr_stream->bufferPtr+=sizeof(int); - //************************************************************ - //Box position - //top_left_x - *(int*)cdr_stream->bufferPtr=boxType->rectangle.top_left_x; - cdr_stream->bufferPtr+=sizeof(int); - //top_left_y - *(int*)cdr_stream->bufferPtr=boxType->rectangle.top_left_y; - cdr_stream->bufferPtr+=sizeof(int); - //bottom_right_x - *(int*)cdr_stream->bufferPtr=boxType->rectangle.bottom_right_x; - cdr_stream->bufferPtr+=sizeof(int); - //bottom_right_y - *(int*)cdr_stream->bufferPtr=boxType->rectangle.bottom_right_y; - cdr_stream->bufferPtr+=sizeof(int); -} - -/*****************************************************************************/ -void -BoxTypeDeserialize(ORTECDRStream *cdr_stream, void *instance) { - BoxType *boxType=(BoxType*)instance; - - //color - boxType->color=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); - //shape - boxType->shape=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); - //************************************************************ - //Box position - //top_left_x - boxType->rectangle.top_left_x=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); - //top_left_y - boxType->rectangle.top_left_y=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); - //bottom_right_x - boxType->rectangle.bottom_right_x=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); - //bottom_right_y - boxType->rectangle.bottom_right_y=*(int*)cdr_stream->bufferPtr; - cdr_stream->bufferPtr+=sizeof(int); -} - -/*****************************************************************************/ -Boolean -ORTETypeRegisterBoxType(ORTEDomain *d) { - return ORTETypeRegisterAdd( - d, - "BoxType", - BoxTypeSerialize, - BoxTypeDeserialize, - sizeof(BoxType)); - -} - diff --git a/orte/contrib/shape/ortedemo_types.h b/orte/contrib/shape/ortedemo_types.h deleted file mode 100644 index 0ba2354..0000000 --- a/orte/contrib/shape/ortedemo_types.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef ORTEDEMO_TYPES_H -#define ORTEDEMO_TYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -//#include -#include - - -#define ELLIPSE 0 -#define RECTANGLE 1 -#define TRIANGLE 2 - -#define BLUE 0 -#define GREEN 1 -#define RED 2 -#define BLACK 3 -#define YELLOW 4 - -typedef struct BoxRect { - int top_left_x; - int top_left_y; - int bottom_right_x; - int bottom_right_y; -} BoxRect; - -typedef struct BoxType { - int color; - int shape; - BoxRect rectangle; -} BoxType; - -extern Boolean -ORTETypeRegisterBoxType(ORTEDomain *d); - -#ifdef __cplusplus -} /* extern "C"*/ -#endif - -#endif diff --git a/orte/contrib/shape/richtext.cpp b/orte/contrib/shape/richtext.cpp index d1c0bdf..b001714 100644 --- a/orte/contrib/shape/richtext.cpp +++ b/orte/contrib/shape/richtext.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -** $Id: richtext.cpp,v 1.6 2004/07/12 20:17:58 smolik Exp $ +** $Id: richtext.cpp,v 1.7 2005/02/23 10:14:23 smolik Exp $ ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** @@ -75,7 +75,7 @@ static const char* subscriberExamples[] = { " printf(\"%s\",instance);
" " break;
" " case DEADLINE:
" - " printf(\"deadline occured\");
" + " printf(\"deadline occurred\");
" " break;
" " }
" "}
", diff --git a/orte/examples/Makefile.am b/orte/examples/Makefile.am index d4dafa4..f74fe16 100644 --- a/orte/examples/Makefile.am +++ b/orte/examples/Makefile.am @@ -8,5 +8,5 @@ if CONFIG_ORTE_RT SUBDIRS = hello else -SUBDIRS = hello reliable ping spy +SUBDIRS = hello multicast reliable ping spy endif diff --git a/orte/examples/Makefile.in b/orte/examples/Makefile.in index 0ef13a1..c2cba20 100644 --- a/orte/examples/Makefile.in +++ b/orte/examples/Makefile.in @@ -37,12 +37,13 @@ host_triplet = @host@ subdir = orte/examples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = @@ -54,7 +55,7 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = hello reliable ping spy +DIST_SUBDIRS = hello multicast reliable ping spy DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ @@ -69,8 +70,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -104,6 +111,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -143,6 +152,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -197,7 +207,7 @@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -@CONFIG_ORTE_RT_FALSE@SUBDIRS = hello reliable ping spy +@CONFIG_ORTE_RT_FALSE@SUBDIRS = hello multicast reliable ping spy # # Makefile for the Ocera Real-Time Ethernet diff --git a/orte/examples/Makefile.omk b/orte/examples/Makefile.omk index 524b9d0..a2444a7 100644 --- a/orte/examples/Makefile.omk +++ b/orte/examples/Makefile.omk @@ -1,7 +1,7 @@ default_CONFIG = CONFIG_OC_ETH_ORTE_EXAMPLES=y default_CONFIG += CONFIG_OC_ETH_ORTE_EXAMPLES_RTL=n -SUBDIRS = ping spy hello reliable +SUBDIRS = ping multicast spy hello reliable diff --git a/orte/examples/hello/Makefile.am b/orte/examples/hello/Makefile.am index 617516f..0cf485b 100644 --- a/orte/examples/hello/Makefile.am +++ b/orte/examples/hello/Makefile.am @@ -1,15 +1,15 @@ if CONFIG_ORTE_RT - module_PROGRAMS = HelloWorldSubscriber_rt.ko HelloWorldPublisher_rt.ko - HelloWorldSubscriber_rt_ko_SOURCES = HelloWorldSubscriber.c - HelloWorldSubscriber_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ - HelloWorldPublisher_rt_ko_SOURCES = HelloWorldPublisher.c - HelloWorldPublisher_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ + module_PROGRAMS = h_subscriber_rt.ko h_publisher_rt.ko + h_subscriber_rt_ko_SOURCES = h_subscriber.c + h_subscriber_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ + h_publisher_rt_ko_SOURCES = h_publisher.c + h_publisher_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ else - noinst_PROGRAMS = HelloWorldPublisher HelloWorldSubscriber - HelloWorldPublisher_SOURCES = HelloWorldPublisher.c - HelloWorldPublisher_LDADD = $(top_builddir)/orte/liborte/liborte.la - HelloWorldPublisher_LDFLAGS = -static - HelloWorldSubscriber_SOURCES = HelloWorldSubscriber.c - HelloWorldSubscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la - HelloWorldSubscriber_LDFLAGS = -static + noinst_PROGRAMS = h_publisher h_subscriber + h_publisher_SOURCES = h_publisher.c + h_publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la + h_publisher_LDFLAGS = -static + h_subscriber_SOURCES = h_subscriber.c + h_subscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la + h_subscriber_LDFLAGS = -static endif \ No newline at end of file diff --git a/orte/examples/hello/Makefile.in b/orte/examples/hello/Makefile.in index 4df6df2..14a5ea6 100644 --- a/orte/examples/hello/Makefile.in +++ b/orte/examples/hello/Makefile.in @@ -14,7 +14,7 @@ @SET_MAKE@ -SOURCES = $(HelloWorldPublisher_SOURCES) $(HelloWorldPublisher_rt_ko_SOURCES) $(HelloWorldSubscriber_SOURCES) $(HelloWorldSubscriber_rt_ko_SOURCES) +SOURCES = $(h_publisher_SOURCES) $(h_publisher_rt_ko_SOURCES) $(h_subscriber_SOURCES) $(h_subscriber_rt_ko_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -37,52 +37,49 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ -@CONFIG_ORTE_RT_TRUE@module_PROGRAMS = \ -@CONFIG_ORTE_RT_TRUE@ HelloWorldSubscriber_rt.ko$(EXEEXT) \ -@CONFIG_ORTE_RT_TRUE@ HelloWorldPublisher_rt.ko$(EXEEXT) -@CONFIG_ORTE_RT_FALSE@noinst_PROGRAMS = HelloWorldPublisher$(EXEEXT) \ -@CONFIG_ORTE_RT_FALSE@ HelloWorldSubscriber$(EXEEXT) +@CONFIG_ORTE_RT_TRUE@module_PROGRAMS = h_subscriber_rt.ko$(EXEEXT) \ +@CONFIG_ORTE_RT_TRUE@ h_publisher_rt.ko$(EXEEXT) +@CONFIG_ORTE_RT_FALSE@noinst_PROGRAMS = h_publisher$(EXEEXT) \ +@CONFIG_ORTE_RT_FALSE@ h_subscriber$(EXEEXT) subdir = orte/examples/hello DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(moduledir)" PROGRAMS = $(module_PROGRAMS) $(noinst_PROGRAMS) -am__HelloWorldPublisher_SOURCES_DIST = HelloWorldPublisher.c -@CONFIG_ORTE_RT_FALSE@am_HelloWorldPublisher_OBJECTS = \ -@CONFIG_ORTE_RT_FALSE@ HelloWorldPublisher.$(OBJEXT) -HelloWorldPublisher_OBJECTS = $(am_HelloWorldPublisher_OBJECTS) -@CONFIG_ORTE_RT_FALSE@HelloWorldPublisher_DEPENDENCIES = \ +am__h_publisher_SOURCES_DIST = h_publisher.c +@CONFIG_ORTE_RT_FALSE@am_h_publisher_OBJECTS = h_publisher.$(OBJEXT) +h_publisher_OBJECTS = $(am_h_publisher_OBJECTS) +@CONFIG_ORTE_RT_FALSE@h_publisher_DEPENDENCIES = \ @CONFIG_ORTE_RT_FALSE@ $(top_builddir)/orte/liborte/liborte.la -am__HelloWorldPublisher_rt_ko_SOURCES_DIST = HelloWorldPublisher.c -@CONFIG_ORTE_RT_TRUE@am_HelloWorldPublisher_rt_ko_OBJECTS = \ -@CONFIG_ORTE_RT_TRUE@ HelloWorldPublisher.$(OBJEXT) -HelloWorldPublisher_rt_ko_OBJECTS = \ - $(am_HelloWorldPublisher_rt_ko_OBJECTS) -HelloWorldPublisher_rt_ko_LDADD = $(LDADD) -am__HelloWorldSubscriber_SOURCES_DIST = HelloWorldSubscriber.c -@CONFIG_ORTE_RT_FALSE@am_HelloWorldSubscriber_OBJECTS = \ -@CONFIG_ORTE_RT_FALSE@ HelloWorldSubscriber.$(OBJEXT) -HelloWorldSubscriber_OBJECTS = $(am_HelloWorldSubscriber_OBJECTS) -@CONFIG_ORTE_RT_FALSE@HelloWorldSubscriber_DEPENDENCIES = \ +am__h_publisher_rt_ko_SOURCES_DIST = h_publisher.c +@CONFIG_ORTE_RT_TRUE@am_h_publisher_rt_ko_OBJECTS = \ +@CONFIG_ORTE_RT_TRUE@ h_publisher.$(OBJEXT) +h_publisher_rt_ko_OBJECTS = $(am_h_publisher_rt_ko_OBJECTS) +h_publisher_rt_ko_LDADD = $(LDADD) +am__h_subscriber_SOURCES_DIST = h_subscriber.c +@CONFIG_ORTE_RT_FALSE@am_h_subscriber_OBJECTS = \ +@CONFIG_ORTE_RT_FALSE@ h_subscriber.$(OBJEXT) +h_subscriber_OBJECTS = $(am_h_subscriber_OBJECTS) +@CONFIG_ORTE_RT_FALSE@h_subscriber_DEPENDENCIES = \ @CONFIG_ORTE_RT_FALSE@ $(top_builddir)/orte/liborte/liborte.la -am__HelloWorldSubscriber_rt_ko_SOURCES_DIST = HelloWorldSubscriber.c -@CONFIG_ORTE_RT_TRUE@am_HelloWorldSubscriber_rt_ko_OBJECTS = \ -@CONFIG_ORTE_RT_TRUE@ HelloWorldSubscriber.$(OBJEXT) -HelloWorldSubscriber_rt_ko_OBJECTS = \ - $(am_HelloWorldSubscriber_rt_ko_OBJECTS) -HelloWorldSubscriber_rt_ko_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +am__h_subscriber_rt_ko_SOURCES_DIST = h_subscriber.c +@CONFIG_ORTE_RT_TRUE@am_h_subscriber_rt_ko_OBJECTS = \ +@CONFIG_ORTE_RT_TRUE@ h_subscriber.$(OBJEXT) +h_subscriber_rt_ko_OBJECTS = $(am_h_subscriber_rt_ko_OBJECTS) +h_subscriber_rt_ko_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/HelloWorldPublisher.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/HelloWorldSubscriber.Po +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/h_publisher.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/h_subscriber.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ @@ -91,14 +88,12 @@ LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(HelloWorldPublisher_SOURCES) \ - $(HelloWorldPublisher_rt_ko_SOURCES) \ - $(HelloWorldSubscriber_SOURCES) \ - $(HelloWorldSubscriber_rt_ko_SOURCES) -DIST_SOURCES = $(am__HelloWorldPublisher_SOURCES_DIST) \ - $(am__HelloWorldPublisher_rt_ko_SOURCES_DIST) \ - $(am__HelloWorldSubscriber_SOURCES_DIST) \ - $(am__HelloWorldSubscriber_rt_ko_SOURCES_DIST) +SOURCES = $(h_publisher_SOURCES) $(h_publisher_rt_ko_SOURCES) \ + $(h_subscriber_SOURCES) $(h_subscriber_rt_ko_SOURCES) +DIST_SOURCES = $(am__h_publisher_SOURCES_DIST) \ + $(am__h_publisher_rt_ko_SOURCES_DIST) \ + $(am__h_subscriber_SOURCES_DIST) \ + $(am__h_subscriber_rt_ko_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -115,8 +110,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -150,6 +151,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -189,6 +192,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -243,16 +247,16 @@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -@CONFIG_ORTE_RT_TRUE@HelloWorldSubscriber_rt_ko_SOURCES = HelloWorldSubscriber.c -@CONFIG_ORTE_RT_TRUE@HelloWorldSubscriber_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ -@CONFIG_ORTE_RT_TRUE@HelloWorldPublisher_rt_ko_SOURCES = HelloWorldPublisher.c -@CONFIG_ORTE_RT_TRUE@HelloWorldPublisher_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ -@CONFIG_ORTE_RT_FALSE@HelloWorldPublisher_SOURCES = HelloWorldPublisher.c -@CONFIG_ORTE_RT_FALSE@HelloWorldPublisher_LDADD = $(top_builddir)/orte/liborte/liborte.la -@CONFIG_ORTE_RT_FALSE@HelloWorldPublisher_LDFLAGS = -static -@CONFIG_ORTE_RT_FALSE@HelloWorldSubscriber_SOURCES = HelloWorldSubscriber.c -@CONFIG_ORTE_RT_FALSE@HelloWorldSubscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la -@CONFIG_ORTE_RT_FALSE@HelloWorldSubscriber_LDFLAGS = -static +@CONFIG_ORTE_RT_TRUE@h_subscriber_rt_ko_SOURCES = h_subscriber.c +@CONFIG_ORTE_RT_TRUE@h_subscriber_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ +@CONFIG_ORTE_RT_TRUE@h_publisher_rt_ko_SOURCES = h_publisher.c +@CONFIG_ORTE_RT_TRUE@h_publisher_rt_ko_LINK = $(top_builddir)/modtool --link -o $@ +@CONFIG_ORTE_RT_FALSE@h_publisher_SOURCES = h_publisher.c +@CONFIG_ORTE_RT_FALSE@h_publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la +@CONFIG_ORTE_RT_FALSE@h_publisher_LDFLAGS = -static +@CONFIG_ORTE_RT_FALSE@h_subscriber_SOURCES = h_subscriber.c +@CONFIG_ORTE_RT_FALSE@h_subscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la +@CONFIG_ORTE_RT_FALSE@h_subscriber_LDFLAGS = -static all: all-am .SUFFIXES: @@ -321,18 +325,18 @@ clean-noinstPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done -HelloWorldPublisher$(EXEEXT): $(HelloWorldPublisher_OBJECTS) $(HelloWorldPublisher_DEPENDENCIES) - @rm -f HelloWorldPublisher$(EXEEXT) - $(LINK) $(HelloWorldPublisher_LDFLAGS) $(HelloWorldPublisher_OBJECTS) $(HelloWorldPublisher_LDADD) $(LIBS) -HelloWorldPublisher_rt.ko$(EXEEXT): $(HelloWorldPublisher_rt_ko_OBJECTS) $(HelloWorldPublisher_rt_ko_DEPENDENCIES) - @rm -f HelloWorldPublisher_rt.ko$(EXEEXT) - $(HelloWorldPublisher_rt_ko_LINK) $(HelloWorldPublisher_rt_ko_LDFLAGS) $(HelloWorldPublisher_rt_ko_OBJECTS) $(HelloWorldPublisher_rt_ko_LDADD) $(LIBS) -HelloWorldSubscriber$(EXEEXT): $(HelloWorldSubscriber_OBJECTS) $(HelloWorldSubscriber_DEPENDENCIES) - @rm -f HelloWorldSubscriber$(EXEEXT) - $(LINK) $(HelloWorldSubscriber_LDFLAGS) $(HelloWorldSubscriber_OBJECTS) $(HelloWorldSubscriber_LDADD) $(LIBS) -HelloWorldSubscriber_rt.ko$(EXEEXT): $(HelloWorldSubscriber_rt_ko_OBJECTS) $(HelloWorldSubscriber_rt_ko_DEPENDENCIES) - @rm -f HelloWorldSubscriber_rt.ko$(EXEEXT) - $(HelloWorldSubscriber_rt_ko_LINK) $(HelloWorldSubscriber_rt_ko_LDFLAGS) $(HelloWorldSubscriber_rt_ko_OBJECTS) $(HelloWorldSubscriber_rt_ko_LDADD) $(LIBS) +h_publisher$(EXEEXT): $(h_publisher_OBJECTS) $(h_publisher_DEPENDENCIES) + @rm -f h_publisher$(EXEEXT) + $(LINK) $(h_publisher_LDFLAGS) $(h_publisher_OBJECTS) $(h_publisher_LDADD) $(LIBS) +h_publisher_rt.ko$(EXEEXT): $(h_publisher_rt_ko_OBJECTS) $(h_publisher_rt_ko_DEPENDENCIES) + @rm -f h_publisher_rt.ko$(EXEEXT) + $(h_publisher_rt_ko_LINK) $(h_publisher_rt_ko_LDFLAGS) $(h_publisher_rt_ko_OBJECTS) $(h_publisher_rt_ko_LDADD) $(LIBS) +h_subscriber$(EXEEXT): $(h_subscriber_OBJECTS) $(h_subscriber_DEPENDENCIES) + @rm -f h_subscriber$(EXEEXT) + $(LINK) $(h_subscriber_LDFLAGS) $(h_subscriber_OBJECTS) $(h_subscriber_LDADD) $(LIBS) +h_subscriber_rt.ko$(EXEEXT): $(h_subscriber_rt_ko_OBJECTS) $(h_subscriber_rt_ko_DEPENDENCIES) + @rm -f h_subscriber_rt.ko$(EXEEXT) + $(h_subscriber_rt_ko_LINK) $(h_subscriber_rt_ko_LDFLAGS) $(h_subscriber_rt_ko_OBJECTS) $(h_subscriber_rt_ko_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -340,8 +344,8 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelloWorldPublisher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelloWorldSubscriber.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h_publisher.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h_subscriber.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ diff --git a/orte/examples/hello/Makefile.omk b/orte/examples/hello/Makefile.omk index 96ed9f4..b56ddf4 100644 --- a/orte/examples/hello/Makefile.omk +++ b/orte/examples/hello/Makefile.omk @@ -2,11 +2,11 @@ ifeq ($(CONFIG_OC_ETH_ORTE_EXAMPLES),y) INCLUDES = -I $(srcdir)/../../include -utils_PROGRAMS = helloPublisher helloSubscriber +utils_PROGRAMS = h_publisher h_subscriber -helloPublisher_SOURCES = HelloWorldPublisher.c +h_publisher_SOURCES = h_publisher.c -helloSubscriber_SOURCES = HelloWorldSubscriber.c +h_subscriber_SOURCES = h_subscriber.c lib_LOADLIBES = orte pthread @@ -17,13 +17,13 @@ endif #CONFIG_OC_ETH_ORTE_EXAMPLES ifeq ($(CONFIG_OC_ETH_ORTE_EXAMPLES_RTL),y) -rtlinux_MODULES = HelloWorldPublisher_rt HelloWorldSubscriber_rt +rtlinux_MODULES = h_publisher_rt h_subscriber_rt rtlinux_INCLUDES = -I $(srcdir)/../../include -HelloWorldPublisher_rt_SOURCES = HelloWorldPublisher.c +h_publisher_rt_SOURCES = h_publisher.c -HelloWorldSubscriber_rt_SOURCES = HelloWorldSubscriber.c +h_subscriber_rt_SOURCES = h_subscriber.c rtlinux_LOADLIBES = orte_rt pthread_rwlock_rt diff --git a/orte/examples/hello/HelloWorldPublisher.c b/orte/examples/hello/h_publisher.c similarity index 88% rename from orte/examples/hello/HelloWorldPublisher.c rename to orte/examples/hello/h_publisher.c index ff1ffdd..cc8488a 100644 --- a/orte/examples/hello/HelloWorldPublisher.c +++ b/orte/examples/hello/h_publisher.c @@ -1,7 +1,7 @@ /* - * $Id: HelloWorldPublisher.c,v 0.0.0.1 2003/12/26 + * $Id: h_publisher.c,v 0.0.1.0 2005/01/03 * - * DEBUG: section HelloWorldPublisher + * DEBUG: section h_publisher * AUTHOR: Petr Smolik petr.smolik@wo.cz * * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ @@ -54,7 +54,7 @@ publisherCreate(void *arg) { ORTEPublication *p; NtpTime persistence, delay; - ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64); + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,NULL,sizeof(instance2Send)); NTPTIME_BUILD(persistence,3); NTPTIME_BUILD(delay,1); p=ORTEPublicationCreate( @@ -76,6 +76,7 @@ publisherCreate(void *arg) { int main(int argc, char *args[]) { ORTEInit(); + ORTEVerbositySetOptions("ALL.10"); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); if (!d) { printf("ORTEDomainAppCreate failed!\n"); @@ -84,6 +85,10 @@ main(int argc, char *args[]) { publisherCreate((void*)d); while(1) ORTESleepMs(1000); + + ORTESleepMs(10000); + printf("finnished!\n"); + ORTEDomainAppDestroy(d); return 0; } @@ -96,10 +101,14 @@ MODULE_PARM(manager,"1s"); MODULE_PARM_DESC(manager,"IP address of local manager"); MODULE_LICENSE("GPL"); pthread_t thread; -ORTEDomainProp dp; void * domainInit(void *arg) { + ORTEDomainProp dp; + + ORTEVerbositySetOptions(verbosity); + ORTEDomainPropDefaultGet(&dp); + dp.appLocalManager=StringToIPAddress(manager); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_TRUE); return arg; } @@ -115,13 +124,10 @@ int init_module(void) { ORTEInit(); - ORTEVerbositySetOptions(verbosity); - ORTEDomainPropDefaultGet(&dp); - dp.appLocalManager=StringToIPAddress(manager); pthread_create(&thread,NULL,&domainInit,NULL); //allocate resources in RT pthread_join(thread,NULL); if (d) { - ORTEDomainStart(d,ORTE_TRUE,ORTE_TRUE,ORTE_TRUE); //application start + ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE); //application start if (pthread_create(&thread,NULL,&publisherCreate,NULL)!=0) printf("pthread_create failed!\n"); } else diff --git a/orte/examples/hello/HelloWorldSubscriber.c b/orte/examples/hello/h_subscriber.c similarity index 88% rename from orte/examples/hello/HelloWorldSubscriber.c rename to orte/examples/hello/h_subscriber.c index 4af74d7..99e3f9c 100644 --- a/orte/examples/hello/HelloWorldSubscriber.c +++ b/orte/examples/hello/h_subscriber.c @@ -1,7 +1,7 @@ /* - * $Id: HelloWorldSubscriber.c,v 0.0.0.1 2003/12/26 + * $Id: h_subscriber.c,v 0.0.1.0 2005/01/03 * - * DEBUG: section HelloWorldSubscriber + * DEBUG: section h_subscriber * AUTHOR: Petr Smolik petr.smolik@wo.cz * * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ @@ -44,7 +44,7 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) printf("%s\n",instance); break; case DEADLINE: - printf("deadline occured\n"); + printf("deadline occurred\n"); break; } } @@ -55,7 +55,7 @@ subscriberCreate(void *arg) { ORTESubscription *s; NtpTime deadline,minimumSeparation; - ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64); + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,NULL,sizeof(instance2Recv)); NTPTIME_BUILD(deadline,10); NTPTIME_BUILD(minimumSeparation,0); s=ORTESubscriptionCreate( @@ -68,7 +68,8 @@ subscriberCreate(void *arg) { &deadline, &minimumSeparation, recvCallBack, - NULL); + NULL, + IPADDRESS_INVALID); return arg; } @@ -78,6 +79,7 @@ subscriberCreate(void *arg) { int main(int argc, char *args[]) { ORTEInit(); + ORTEVerbositySetOptions("ALL.10"); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); if (!d) { printf("ORTEDomainAppCreate failed!\n"); @@ -98,10 +100,14 @@ MODULE_PARM(manager,"s"); MODULE_PARM_DESC(manager,"IP address of local manager"); MODULE_LICENSE("GPL"); pthread_t thread; -ORTEDomainProp dp; void * domainInit(void *arg) { + ORTEDomainProp dp; + + ORTEDomainPropDefaultGet(&dp); + ORTEVerbositySetOptions(verbosity); + dp.appLocalManager=StringToIPAddress(manager); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_TRUE); return arg; } @@ -116,13 +122,10 @@ domainDestroy(void *arg) { int init_module(void) { ORTEInit(); - ORTEDomainPropDefaultGet(&dp); - ORTEVerbositySetOptions(verbosity); - dp.appLocalManager=StringToIPAddress(manager); pthread_create(&thread,NULL,&domainInit,NULL); //allocate resources in RT pthread_join(thread,NULL); if (d) { - ORTEDomainStart(d,ORTE_TRUE,ORTE_TRUE,ORTE_TRUE); //application start + ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE); //application start if (pthread_create(&thread,NULL,&subscriberCreate,NULL)!=0) printf("pthread_create failed!\n"); } else diff --git a/orte/examples/hello/msvc/makefile.msc b/orte/examples/hello/msvc/makefile.msc index 63d6eb2..cca6ce8 100644 --- a/orte/examples/hello/msvc/makefile.msc +++ b/orte/examples/hello/msvc/makefile.msc @@ -17,15 +17,15 @@ CC= $(MSCDIR)\bin\cl LINK= $(MSCDIR)\bin\link LIBRARIAN= $(MSCDIR)\bin\lib -TARGETS=HelloWorldPublisher.exe HelloWorldSubscriber.exe +TARGETS=h_publisher.exe h_subscriber.exe all : default default : $(TARGETS) -HelloWorldPublisher.exe: ..\HelloWorldPublisher.obj +h_publisher.exe: ..\h_publisher.obj -HelloWorldSubscriber.exe: ..\HelloWorldSubscriber.obj +h_subscriber.exe: ..\h_subscriber.obj # --------------------------------------------------------------------- # Generic Compilation Rules diff --git a/orte/examples/multicast/Makefile b/orte/examples/multicast/Makefile new file mode 100644 index 0000000..f595272 --- /dev/null +++ b/orte/examples/multicast/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/orte/examples/multicast/Makefile.am b/orte/examples/multicast/Makefile.am new file mode 100644 index 0000000..3db7fd5 --- /dev/null +++ b/orte/examples/multicast/Makefile.am @@ -0,0 +1,5 @@ +noinst_PROGRAMS = m_subscriber + +m_subscriber_SOURCES = m_subscriber.c +m_subscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la +m_subscriber_LDFLAGS = -static diff --git a/orte/examples/multicast/Makefile.in b/orte/examples/multicast/Makefile.in new file mode 100644 index 0000000..5f36824 --- /dev/null +++ b/orte/examples/multicast/Makefile.in @@ -0,0 +1,478 @@ +# Makefile.in generated by automake 1.8.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +SOURCES = $(m_subscriber_SOURCES) + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +noinst_PROGRAMS = m_subscriber$(EXEEXT) +subdir = orte/examples/multicast +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_m_subscriber_OBJECTS = m_subscriber.$(OBJEXT) +m_subscriber_OBJECTS = $(am_m_subscriber_OBJECTS) +m_subscriber_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte +depcomp = $(SHELL) $(top_srcdir)/admin/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/m_subscriber.Po +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(m_subscriber_SOURCES) +DIST_SOURCES = $(m_subscriber_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ +CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ +CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ +CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ +CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ +CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ +CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ +CONFIG_ORTE_MINGW_FALSE = @CONFIG_ORTE_MINGW_FALSE@ +CONFIG_ORTE_MINGW_TRUE = @CONFIG_ORTE_MINGW_TRUE@ +CONFIG_ORTE_RT = @CONFIG_ORTE_RT@ +CONFIG_ORTE_RT_FALSE = @CONFIG_ORTE_RT_FALSE@ +CONFIG_ORTE_RT_TRUE = @CONFIG_ORTE_RT_TRUE@ +CONFIG_ORTE_UNIX_FALSE = @CONFIG_ORTE_UNIX_FALSE@ +CONFIG_ORTE_UNIX_TRUE = @CONFIG_ORTE_UNIX_TRUE@ +CONFIG_ORTE_WIN_FALSE = @CONFIG_ORTE_WIN_FALSE@ +CONFIG_ORTE_WIN_TRUE = @CONFIG_ORTE_WIN_TRUE@ +CONFIG_RTHAL_FALSE = @CONFIG_RTHAL_FALSE@ +CONFIG_RTHAL_TRUE = @CONFIG_RTHAL_TRUE@ +CONFIG_RTLINUX_FALSE = @CONFIG_RTLINUX_FALSE@ +CONFIG_RTLINUX_TRUE = @CONFIG_RTLINUX_TRUE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INCLUDES = @INCLUDES@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX_AFLAGS = @LINUX_AFLAGS@ +LINUX_ARCH = @LINUX_ARCH@ +LINUX_ARFLAGS = @LINUX_ARFLAGS@ +LINUX_AS = @LINUX_AS@ +LINUX_CC = @LINUX_CC@ +LINUX_CFLAGS = @LINUX_CFLAGS@ +LINUX_CROSS_COMPILE = @LINUX_CROSS_COMPILE@ +LINUX_DIR = @LINUX_DIR@ +LINUX_KERNELRELEASE = @LINUX_KERNELRELEASE@ +LINUX_LD = @LINUX_LD@ +LINUX_LDFLAGS = @LINUX_LDFLAGS@ +LINUX_MODULE_EXT = @LINUX_MODULE_EXT@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +ORTE_BINARY_AGE = @ORTE_BINARY_AGE@ +ORTE_INTERFACE_AGE = @ORTE_INTERFACE_AGE@ +ORTE_MAJOR_VERSION = @ORTE_MAJOR_VERSION@ +ORTE_MICRO_VERSION = @ORTE_MICRO_VERSION@ +ORTE_MINOR_VERSION = @ORTE_MINOR_VERSION@ +ORTE_VERSION = @ORTE_VERSION@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +RTAI_CFLAGS = @RTAI_CFLAGS@ +RTLINUX_CC = @RTLINUX_CC@ +RTLINUX_CFLAGS = @RTLINUX_CFLAGS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_RTAI_FALSE = @USE_RTAI_FALSE@ +USE_RTAI_TRUE = @USE_RTAI_TRUE@ +USE_RTLINUX_FALSE = @USE_RTLINUX_FALSE@ +USE_RTLINUX_TRUE = @USE_RTLINUX_TRUE@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulePROGRAMS_INSTALL = @modulePROGRAMS_INSTALL@ +moduledir = @moduledir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +m_subscriber_SOURCES = m_subscriber.c +m_subscriber_LDADD = $(top_builddir)/orte/liborte/liborte.la +m_subscriber_LDFLAGS = -static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orte/examples/multicast/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu orte/examples/multicast/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +m_subscriber$(EXEEXT): $(m_subscriber_OBJECTS) $(m_subscriber_DEPENDENCIES) + @rm -f m_subscriber$(EXEEXT) + $(LINK) $(m_subscriber_LDFLAGS) $(m_subscriber_OBJECTS) $(m_subscriber_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m_subscriber.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/orte/examples/multicast/Makefile.omk b/orte/examples/multicast/Makefile.omk new file mode 100644 index 0000000..3756026 --- /dev/null +++ b/orte/examples/multicast/Makefile.omk @@ -0,0 +1,12 @@ +ifeq ($(CONFIG_OC_ETH_ORTE_EXAMPLES),y) + +utils_PROGRAMS = m_subscriber + +INCLUDES = -I $(srcdir)/../../include + +m_subscriber_SOURCES = m_subscriber.c + +lib_LOADLIBES = orte pthread + +endif #CONFIG_OC_ETH_ORTE_EXAMPLES + diff --git a/orte/examples/multicast/m_subscriber.c b/orte/examples/multicast/m_subscriber.c new file mode 100644 index 0000000..c1ad3d4 --- /dev/null +++ b/orte/examples/multicast/m_subscriber.c @@ -0,0 +1,88 @@ +/* + * $Id: m_subscriber.c,v 0.0.1.0 2005/01/03 + * + * DEBUG: section m_subscriber + * AUTHOR: Petr Smolik petr.smolik@wo.cz + * + * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ + * -------------------------------------------------------------------- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ +#include "orte.h" +#include + +ORTEDomain *d = NULL; +char instance2Recv[64]; + +int maxDataSize(ORTEGetMaxSizeParam *gms) { + return gms->max_size; +} + +void +recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) { + char *instance=(char*)vinstance; + + switch (info->status) { + case NEW_DATA: + printf("%s\n",instance); + break; + case DEADLINE: + printf("deadline occurred\n"); + break; + } +} + + +void * +subscriberCreate(void *arg) { + ORTESubscription *s; + NtpTime deadline,minimumSeparation; + + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,maxDataSize,sizeof(instance2Recv)); + NTPTIME_BUILD(deadline,10); + NTPTIME_BUILD(minimumSeparation,0); + s=ORTESubscriptionCreate( + d, + IMMEDIATE, + BEST_EFFORTS, + "Example HelloMsg", + "HelloMsg", + &instance2Recv, + &deadline, + &minimumSeparation, + recvCallBack, + NULL, + StringToIPAddress("225.0.0.2")); + return arg; +} + +int +main(int argc, char *args[]) { + ORTEDomainProp dp; + + ORTEInit(); + ORTEDomainPropDefaultGet(&dp); + dp.multicast.enabled=ORTE_TRUE; + dp.multicast.ipAddress=StringToIPAddress("225.0.0.1"); + ORTEVerbositySetOptions("ALL.10"); + d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_FALSE); + if (!d) { + printf("ORTEDomainAppCreate failed!\n"); + return 0; + } + subscriberCreate(NULL); + while (1) + ORTESleepMs(1000); + return 0; +} + diff --git a/orte/examples/multicast/msvc/makefile.msc b/orte/examples/multicast/msvc/makefile.msc new file mode 100644 index 0000000..2aad60e --- /dev/null +++ b/orte/examples/multicast/msvc/makefile.msc @@ -0,0 +1,46 @@ +# --------------------------------------------------------------------- +# Microsoft C/C++ Installation Directory +# +# CHANGE this definition to point to your compiler's installation directory +# --------------------------------------------------------------------- +MSCDIR= c:\Progra~1\micros~3\vc98 + +CFLAGS = -c -Zi -MD $(INCLUDE) +LIB_CFLAGS= $(CFLAGS) -LD +INCLUDE= -I$(MSCDIR)\include -I..\..\..\include -I..\..\..\include\win32 +LIBS= $(MSCDIR)\lib\msvcrt.lib $(MSCDIR)\lib\uuid.lib $(MSCDIR)\lib\oldnames.lib \ + $(MSCDIR)\lib\kernel32.lib $(MSCDIR)\lib\libcd.lib $(MSCDIR)\lib\wsock32.lib \ + $(MSCDIR)\lib\advapi32.lib $(MSCDIR)\lib\ws2_32.lib\ + ..\..\..\contrib\win_pthread\pthreadVC.lib \ + ..\..\..\liborte\msvc\liborte.lib +CC= $(MSCDIR)\bin\cl +LINK= $(MSCDIR)\bin\link +LIBRARIAN= $(MSCDIR)\bin\lib + +TARGETS= m_subscriber.exe + +all : default + +default : $(TARGETS) + +m_subscriber.exe: ..\m_subscriber.obj + +# --------------------------------------------------------------------- +# Generic Compilation Rules +# +# Do NOT change anything below this point. +# --------------------------------------------------------------------- +#.SUFFIXES: .c .obj .exe + +.c.obj: + $(CC) $(CFLAGS) $< -Fo$*.obj + +.obj.exe: + $(LINK) -out:$@ $(ORTELIB) $< $(LIBS) + +clean : + del *.obj + del *.exe + del *.pdb + + diff --git a/orte/examples/ping/Makefile.in b/orte/examples/ping/Makefile.in index 404d4fb..554c1e9 100644 --- a/orte/examples/ping/Makefile.in +++ b/orte/examples/ping/Makefile.in @@ -41,12 +41,13 @@ bin_PROGRAMS = orteping$(EXEEXT) subdir = orte/examples/ping DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) @@ -54,7 +55,7 @@ PROGRAMS = $(bin_PROGRAMS) am_orteping_OBJECTS = orteping.$(OBJEXT) orteping_OBJECTS = $(am_orteping_OBJECTS) orteping_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/orteping.Po @@ -84,8 +85,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -119,6 +126,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -158,6 +167,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ diff --git a/orte/examples/ping/msvc/makefile.msc b/orte/examples/ping/msvc/makefile.msc index a146d9a..97f23b3 100644 --- a/orte/examples/ping/msvc/makefile.msc +++ b/orte/examples/ping/msvc/makefile.msc @@ -17,13 +17,13 @@ CC= $(MSCDIR)\bin\cl LINK= $(MSCDIR)\bin\link LIBRARIAN= $(MSCDIR)\bin\lib -TARGETS=ORTEPing.exe +TARGETS=orteping.exe all : default default : $(TARGETS) -ORTEPing.exe: ..\ORTEPing.obj getopt.obj getopt_long.obj +orteping.exe: ..\orteping.obj getopt.obj getopt_long.obj # --------------------------------------------------------------------- # Generic Compilation Rules diff --git a/orte/examples/ping/orteping.c b/orte/examples/ping/orteping.c index 421f181..df842bf 100644 --- a/orte/examples/ping/orteping.c +++ b/orte/examples/ping/orteping.c @@ -37,6 +37,14 @@ #endif Boolean quite=ORTE_FALSE; +int regfail=0; + +//event system +void +onRegFail(void *param) { + printf("registration to a manager failed\n"); + regfail=1; +} void recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) { @@ -48,7 +56,7 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) printf("received fresh issue %d\n",*instance); break; case DEADLINE: - printf("deadline occured\n"); + printf("deadline occurred\n"); break; } } @@ -70,7 +78,7 @@ sendCallBack(const ORTESendInfo *info,void *vinstance, void *sendCallBackParam) static void usage(void) { printf("usage: orteping \n"); - printf(" -d, --domain working manager domain\n"); + printf(" -d, --domain working application domain\n"); printf(" -p, --publisher create publisher Ping,PingData\n"); printf(" -S, --strength strength of publisher <1>\n"); printf(" -D, --delay delay between two publications <1000>\n"); @@ -79,6 +87,9 @@ static void usage(void) { printf(" -P, --purge purge time for services\n"); printf(" -E, --expiration expiration time of application\n"); printf(" -m, --minimumSeparation minimumSeparation between two issues\n"); + printf(" -I, --metaMulticast use multicast IPAddr for metatraffic comm.\n"); + printf(" -i, --dataMulticast use multicast IPAddr for userdata comm.\n"); + printf(" -t, --timetolive time-to-live for multicast packets\n"); printf(" -v, --verbosity set verbosity level SECTION, up to LEVEL:...\n"); printf(" examples: ORTEManager -v 51.7:32.5 sections 51 and 32\n"); printf(" ORTEManager -v ALL.7 all sections up to level 7\n"); @@ -99,6 +110,9 @@ int main(int argc,char *argv[]) { { "purge",1,0, 'P' }, { "expiration",1,0, 'E' }, { "minimumSeparation",1,0, 'm' }, + { "metaMulticast",1,0, 'I' }, + { "dataMulticast",1,0, 'i' }, + { "timetolive",1,0, 't' }, { "delay",1,0, 'D' }, { "verbosity",1,0, 'v' }, { "quiet",0,0, 'q' }, @@ -118,6 +132,8 @@ int main(int argc,char *argv[]) { NtpTime persistence,deadline,minimumSeparation,delay; Boolean havePublisher=ORTE_FALSE; Boolean haveSubscriber=ORTE_FALSE; + IPAddress smIPAddress=IPADDRESS_INVALID; + ORTEDomainAppEvents events; ORTEInit(); ORTEDomainPropDefaultGet(&dp); @@ -125,9 +141,9 @@ int main(int argc,char *argv[]) { NTPTIME_BUILD(delay,1); //1s #if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE - while ((opt = getopt_long(argc, argv, "m:S:d:v:R:E:P:l:D:Vhpsq",&long_opts[0], NULL)) != EOF) { + while ((opt = getopt_long(argc, argv, "m:S:d:v:R:E:P:l:I:i:t:D:Vhpsq",&long_opts[0], NULL)) != EOF) { #else - while ((opt = getopt(argc, argv, "m:S:d:v:R:E:P:l:D:Vhpsq")) != EOF) { + while ((opt = getopt(argc, argv, "m:S:d:v:R:E:P:l:I:i:t:D:Vhpsq")) != EOF) { #endif switch (opt) { case 'S': @@ -160,6 +176,17 @@ int main(int argc,char *argv[]) { case 'D': NtpTimeAssembFromMs(delay,strtol(optarg,NULL,0)/1000,strtol(optarg,NULL,0)%1000); break; + case 'I': + dp.multicast.enabled=ORTE_TRUE; + dp.multicast.ipAddress=StringToIPAddress(optarg); + break; + case 'i': + dp.multicast.enabled=ORTE_TRUE; + smIPAddress=StringToIPAddress(optarg); + break; + case 't': + dp.multicast.ttl=strtol(optarg,NULL,0); + break; case 'l': ORTEVerbositySetLogFile(optarg); case 'q': @@ -175,10 +202,15 @@ int main(int argc,char *argv[]) { exit(opt == 'h' ? 0 : 1); } } + + //initiate event system + ORTEDomainInitEvents(&events); + events.onRegFail=onRegFail; + //Create application - d=ORTEDomainAppCreate(domain,&dp,NULL,ORTE_FALSE); + d=ORTEDomainAppCreate(domain,&dp,&events,ORTE_FALSE); //Register ser./deser. rutines with maximal size 4 Bytes - ORTETypeRegisterAdd(d,"PingData",NULL,NULL,4); + ORTETypeRegisterAdd(d,"PingData",NULL,NULL,NULL,4); //Create publisher if (havePublisher) { NTPTIME_BUILD(persistence,5); @@ -205,10 +237,11 @@ int main(int argc,char *argv[]) { &deadline, &minimumSeparation, recvCallBack, - NULL); + NULL, + smIPAddress); } //never ending loop - while (1) + while (!regfail) ORTESleepMs(1000); exit(0); } diff --git a/orte/examples/reliable/Makefile.am b/orte/examples/reliable/Makefile.am index 0a09880..7fa1722 100644 --- a/orte/examples/reliable/Makefile.am +++ b/orte/examples/reliable/Makefile.am @@ -1,13 +1,13 @@ -noinst_PROGRAMS = publisher subscriberreliable subscriberbesteffort +noinst_PROGRAMS = r_publisher r_subscriber_reliable r_subscriber_besteffort -publisher_SOURCES = publisher.c -publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la -publisher_LDFLAGS = -static +r_publisher_SOURCES = r_publisher.c +r_publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_publisher_LDFLAGS = -static -subscriberreliable_SOURCES = subscriberreliable.c -subscriberreliable_LDADD = $(top_builddir)/orte/liborte/liborte.la -subscriberreliable_LDFLAGS = -static +r_subscriber_reliable_SOURCES = r_subscriber_reliable.c +r_subscriber_reliable_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_subscriber_reliable_LDFLAGS = -static -subscriberbesteffort_SOURCES = subscriberbesteffort.c -subscriberbesteffort_LDADD = $(top_builddir)/orte/liborte/liborte.la -subscriberbesteffort_LDFLAGS = -static +r_subscriber_besteffort_SOURCES = r_subscriber_besteffort.c +r_subscriber_besteffort_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_subscriber_besteffort_LDFLAGS = -static diff --git a/orte/examples/reliable/Makefile.in b/orte/examples/reliable/Makefile.in index cbba95b..674844e 100644 --- a/orte/examples/reliable/Makefile.in +++ b/orte/examples/reliable/Makefile.in @@ -14,7 +14,7 @@ @SET_MAKE@ -SOURCES = $(publisher_SOURCES) $(subscriberbesteffort_SOURCES) $(subscriberreliable_SOURCES) +SOURCES = $(r_publisher_SOURCES) $(r_subscriber_besteffort_SOURCES) $(r_subscriber_reliable_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -37,36 +37,39 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ -noinst_PROGRAMS = publisher$(EXEEXT) subscriberreliable$(EXEEXT) \ - subscriberbesteffort$(EXEEXT) +noinst_PROGRAMS = r_publisher$(EXEEXT) r_subscriber_reliable$(EXEEXT) \ + r_subscriber_besteffort$(EXEEXT) subdir = orte/examples/reliable DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) -am_publisher_OBJECTS = publisher.$(OBJEXT) -publisher_OBJECTS = $(am_publisher_OBJECTS) -publisher_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la -am_subscriberbesteffort_OBJECTS = subscriberbesteffort.$(OBJEXT) -subscriberbesteffort_OBJECTS = $(am_subscriberbesteffort_OBJECTS) -subscriberbesteffort_DEPENDENCIES = \ +am_r_publisher_OBJECTS = r_publisher.$(OBJEXT) +r_publisher_OBJECTS = $(am_r_publisher_OBJECTS) +r_publisher_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la +am_r_subscriber_besteffort_OBJECTS = \ + r_subscriber_besteffort.$(OBJEXT) +r_subscriber_besteffort_OBJECTS = \ + $(am_r_subscriber_besteffort_OBJECTS) +r_subscriber_besteffort_DEPENDENCIES = \ $(top_builddir)/orte/liborte/liborte.la -am_subscriberreliable_OBJECTS = subscriberreliable.$(OBJEXT) -subscriberreliable_OBJECTS = $(am_subscriberreliable_OBJECTS) -subscriberreliable_DEPENDENCIES = \ +am_r_subscriber_reliable_OBJECTS = r_subscriber_reliable.$(OBJEXT) +r_subscriber_reliable_OBJECTS = $(am_r_subscriber_reliable_OBJECTS) +r_subscriber_reliable_DEPENDENCIES = \ $(top_builddir)/orte/liborte/liborte.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/publisher.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/subscriberbesteffort.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/subscriberreliable.Po +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/r_publisher.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/r_subscriber_besteffort.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/r_subscriber_reliable.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ @@ -75,10 +78,11 @@ LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(publisher_SOURCES) $(subscriberbesteffort_SOURCES) \ - $(subscriberreliable_SOURCES) -DIST_SOURCES = $(publisher_SOURCES) $(subscriberbesteffort_SOURCES) \ - $(subscriberreliable_SOURCES) +SOURCES = $(r_publisher_SOURCES) $(r_subscriber_besteffort_SOURCES) \ + $(r_subscriber_reliable_SOURCES) +DIST_SOURCES = $(r_publisher_SOURCES) \ + $(r_subscriber_besteffort_SOURCES) \ + $(r_subscriber_reliable_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -95,8 +99,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -130,6 +140,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -169,6 +181,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -223,15 +236,15 @@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -publisher_SOURCES = publisher.c -publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la -publisher_LDFLAGS = -static -subscriberreliable_SOURCES = subscriberreliable.c -subscriberreliable_LDADD = $(top_builddir)/orte/liborte/liborte.la -subscriberreliable_LDFLAGS = -static -subscriberbesteffort_SOURCES = subscriberbesteffort.c -subscriberbesteffort_LDADD = $(top_builddir)/orte/liborte/liborte.la -subscriberbesteffort_LDFLAGS = -static +r_publisher_SOURCES = r_publisher.c +r_publisher_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_publisher_LDFLAGS = -static +r_subscriber_reliable_SOURCES = r_subscriber_reliable.c +r_subscriber_reliable_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_subscriber_reliable_LDFLAGS = -static +r_subscriber_besteffort_SOURCES = r_subscriber_besteffort.c +r_subscriber_besteffort_LDADD = $(top_builddir)/orte/liborte/liborte.la +r_subscriber_besteffort_LDFLAGS = -static all: all-am .SUFFIXES: @@ -272,15 +285,15 @@ clean-noinstPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done -publisher$(EXEEXT): $(publisher_OBJECTS) $(publisher_DEPENDENCIES) - @rm -f publisher$(EXEEXT) - $(LINK) $(publisher_LDFLAGS) $(publisher_OBJECTS) $(publisher_LDADD) $(LIBS) -subscriberbesteffort$(EXEEXT): $(subscriberbesteffort_OBJECTS) $(subscriberbesteffort_DEPENDENCIES) - @rm -f subscriberbesteffort$(EXEEXT) - $(LINK) $(subscriberbesteffort_LDFLAGS) $(subscriberbesteffort_OBJECTS) $(subscriberbesteffort_LDADD) $(LIBS) -subscriberreliable$(EXEEXT): $(subscriberreliable_OBJECTS) $(subscriberreliable_DEPENDENCIES) - @rm -f subscriberreliable$(EXEEXT) - $(LINK) $(subscriberreliable_LDFLAGS) $(subscriberreliable_OBJECTS) $(subscriberreliable_LDADD) $(LIBS) +r_publisher$(EXEEXT): $(r_publisher_OBJECTS) $(r_publisher_DEPENDENCIES) + @rm -f r_publisher$(EXEEXT) + $(LINK) $(r_publisher_LDFLAGS) $(r_publisher_OBJECTS) $(r_publisher_LDADD) $(LIBS) +r_subscriber_besteffort$(EXEEXT): $(r_subscriber_besteffort_OBJECTS) $(r_subscriber_besteffort_DEPENDENCIES) + @rm -f r_subscriber_besteffort$(EXEEXT) + $(LINK) $(r_subscriber_besteffort_LDFLAGS) $(r_subscriber_besteffort_OBJECTS) $(r_subscriber_besteffort_LDADD) $(LIBS) +r_subscriber_reliable$(EXEEXT): $(r_subscriber_reliable_OBJECTS) $(r_subscriber_reliable_DEPENDENCIES) + @rm -f r_subscriber_reliable$(EXEEXT) + $(LINK) $(r_subscriber_reliable_LDFLAGS) $(r_subscriber_reliable_OBJECTS) $(r_subscriber_reliable_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -288,9 +301,9 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/publisher.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subscriberbesteffort.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subscriberreliable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_publisher.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_subscriber_besteffort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/r_subscriber_reliable.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ diff --git a/orte/examples/reliable/Makefile.omk b/orte/examples/reliable/Makefile.omk index 6150d39..fcd089c 100644 --- a/orte/examples/reliable/Makefile.omk +++ b/orte/examples/reliable/Makefile.omk @@ -2,13 +2,13 @@ ifeq ($(CONFIG_OC_ETH_ORTE_EXAMPLES),y) INCLUDES = -I $(srcdir)/../../include -utils_PROGRAMS = publisher subscriberreliable subscriberbesteffort +utils_PROGRAMS = r_publisher r_subscriber_reliable r_subscriber_besteffort -publisher_SOURCES = publisher.c +r_publisher_SOURCES = r_publisher.c -subscriberreliable_SOURCES = subscriberreliable.c +r_subscriber_reliable_SOURCES = r_subscriber_reliable.c -subscriberbesteffort_SOURCES = subscriberbesteffort.c +r_subscriber_besteffort_SOURCES = r_subscriber_besteffort.c lib_LOADLIBES = orte pthread diff --git a/orte/examples/reliable/msvc/makefile.msc b/orte/examples/reliable/msvc/makefile.msc index 7ceb77d..2695e43 100644 --- a/orte/examples/reliable/msvc/makefile.msc +++ b/orte/examples/reliable/msvc/makefile.msc @@ -17,17 +17,17 @@ CC= $(MSCDIR)\bin\cl LINK= $(MSCDIR)\bin\link LIBRARIAN= $(MSCDIR)\bin\lib -TARGETS=publisher.exe subscriberreliable.exe subscriberbesteffort.exe +TARGETS=r_publisher.exe r_subscriber_reliable.exe r_subscriber_besteffort.exe all : default default : $(TARGETS) -publisher.exe: ..\publisher.obj +r_publisher.exe: ..\r_publisher.obj -subscriberreliable.exe: ..\subscriberreliable.obj +r_subscriber_reliable.exe: ..\r_subscriber_reliable.obj -subscriberbesteffort.exe: ..\subscriberbesteffort.obj +r_subscriber_besteffort.exe: ..\r_subscriber_besteffort.obj # --------------------------------------------------------------------- # Generic Compilation Rules diff --git a/orte/examples/reliable/publisher.c b/orte/examples/reliable/r_publisher.c similarity index 96% rename from orte/examples/reliable/publisher.c rename to orte/examples/reliable/r_publisher.c index 31b03d6..67690da 100644 --- a/orte/examples/reliable/publisher.c +++ b/orte/examples/reliable/r_publisher.c @@ -51,7 +51,7 @@ main(int argc, char *args[]) { ORTEInit(); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); - ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64); + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,NULL,sizeof(instance2Send)); NTPTIME_BUILD(persistence,3); NTPTIME_BUILD(repeating,1); p=ORTEPublicationCreate( diff --git a/orte/examples/reliable/subscriberbesteffort.c b/orte/examples/reliable/r_subscriber_besteffort.c similarity index 93% rename from orte/examples/reliable/subscriberbesteffort.c rename to orte/examples/reliable/r_subscriber_besteffort.c index 0ad6bd5..63cbc3a 100644 --- a/orte/examples/reliable/subscriberbesteffort.c +++ b/orte/examples/reliable/r_subscriber_besteffort.c @@ -37,7 +37,7 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) printf("%s\n",instance); break; case DEADLINE: - printf("deadline occured\n"); + printf("deadline occurred\n"); break; } } @@ -51,7 +51,7 @@ main(int argc, char *args[]) { ORTEInit(); //ORTEVerbositySetOptions("ALL,10"); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); - ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64); + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,NULL,sizeof(instance2Recv)); NTPTIME_BUILD(deadline,3); NTPTIME_BUILD(minimumSeparation,0); s=ORTESubscriptionCreate( @@ -64,7 +64,8 @@ main(int argc, char *args[]) { &deadline, &minimumSeparation, recvCallBack, - NULL); + NULL, + IPADDRESS_INVALID); #ifndef CONFIG_ORTE_RT while (1) ORTESleepMs(1000); diff --git a/orte/examples/reliable/subscriberreliable.c b/orte/examples/reliable/r_subscriber_reliable.c similarity index 93% rename from orte/examples/reliable/subscriberreliable.c rename to orte/examples/reliable/r_subscriber_reliable.c index 9757076..e3d4f64 100644 --- a/orte/examples/reliable/subscriberreliable.c +++ b/orte/examples/reliable/r_subscriber_reliable.c @@ -37,7 +37,7 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) printf("%s\n",instance); break; case DEADLINE: - printf("deadline occured\n"); + printf("deadline occurred\n"); break; } } @@ -51,7 +51,7 @@ main(int argc, char *args[]) { ORTEInit(); //ORTEVerbositySetOptions("ALL,10"); d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE); - ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64); + ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,NULL,sizeof(instance2Recv)); NTPTIME_BUILD(deadline,3); NTPTIME_BUILD(minimumSeparation,0); s=ORTESubscriptionCreate( @@ -64,7 +64,8 @@ main(int argc, char *args[]) { &deadline, &minimumSeparation, recvCallBack, - NULL); + NULL, + IPADDRESS_INVALID); #ifndef CONFIG_ORTE_RT while (1) ORTESleepMs(1000); diff --git a/orte/examples/spy/Makefile.in b/orte/examples/spy/Makefile.in index 95f72c2..d6669d5 100644 --- a/orte/examples/spy/Makefile.in +++ b/orte/examples/spy/Makefile.in @@ -41,12 +41,13 @@ bin_PROGRAMS = ortespy$(EXEEXT) subdir = orte/examples/spy DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) @@ -54,7 +55,7 @@ PROGRAMS = $(bin_PROGRAMS) am_ortespy_OBJECTS = ortespy.$(OBJEXT) ortespy_OBJECTS = $(am_ortespy_OBJECTS) ortespy_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/ortespy.Po @@ -84,8 +85,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -119,6 +126,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -158,6 +167,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ diff --git a/orte/examples/spy/ortespy.c b/orte/examples/spy/ortespy.c index fd2a088..98403c1 100644 --- a/orte/examples/spy/ortespy.c +++ b/orte/examples/spy/ortespy.c @@ -55,14 +55,14 @@ recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) NtpTimeToStringUs(info->remoteTimePublished, rbuff)); break; case DEADLINE: -// printf("deadline occured\n"); +// printf("deadline occurred\n"); break; } } ORTESubscription* subscriptionCallBack(const char *topic, const char *type, void *param) { - ORTETypeRegisterAdd(d,type,NULL,NULL,0); + ORTETypeRegisterAdd(d,type,NULL,NULL,NULL,0); if (strcmp(topic,"Red")==0) return NULL; return ORTESubscriptionCreate( d, @@ -74,7 +74,8 @@ subscriptionCallBack(const char *topic, const char *type, void *param) { &deadline, &minimumSeparation, recvCallBack, - NULL); + NULL, + IPADDRESS_INVALID); } static void usage(void) { @@ -153,7 +154,7 @@ int main(int argc,char *argv[]) { printf("|------------------------------------------------------------------------------|\n"); d=ORTEDomainAppCreate(domain,&dp,NULL,ORTE_TRUE); ORTEDomainAppSubscriptionPatternAdd(d,"*","*",subscriptionCallBack,NULL); - ORTEDomainStart(d,ORTE_TRUE,ORTE_TRUE,ORTE_TRUE); + ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE); while (1) { ORTESleepMs(1000); } diff --git a/orte/examples/type/ThreeTypes.idl b/orte/examples/type/ThreeTypes.idl new file mode 100644 index 0000000..03c6f88 --- /dev/null +++ b/orte/examples/type/ThreeTypes.idl @@ -0,0 +1,20 @@ +const short SHORT_CONST = 12; +const string STRING_CONST = "mystring"; + +struct FirstType { + short myShort; +}; + +struct SecondType { + string myString; +}; + +typedef long ReturnCode_t; + +struct ThirdType { + FirstType myFirstType; + SecondType mySecondType; + + ReturnCode_t tt; + unsigned long MyLong; +}; diff --git a/orte/examples/type/readme.txt b/orte/examples/type/readme.txt deleted file mode 100644 index fa177d3..0000000 --- a/orte/examples/type/readme.txt +++ /dev/null @@ -1 +0,0 @@ -see contrib/shape/ortedemo \ No newline at end of file diff --git a/orte/examples/type/test-any.idl b/orte/examples/type/test-any.idl new file mode 100644 index 0000000..bf46d80 --- /dev/null +++ b/orte/examples/type/test-any.idl @@ -0,0 +1,5 @@ +struct TestAnyStruct +{ + string<20> string_value; + long long_value; +}; diff --git a/orte/idl-compiler/Makefile.am b/orte/idl-compiler/Makefile.am new file mode 100644 index 0000000..fe6c29d --- /dev/null +++ b/orte/idl-compiler/Makefile.am @@ -0,0 +1,13 @@ +orte_idl_SOURCES = \ + orte-idl-main.c \ + orte-idl-driver.c \ + orte-idl-utils.c \ + orte-idl3-types.h \ + orte-idl-c-backend.h \ + orte-idl-c-backend.c \ + orte-idl-c-headers.c \ + orte-idl-c-impls.c \ + orte-idl-c-utils.c \ + orte-idl2.h + +bin_PROGRAMS = orte-idl diff --git a/orte/idl-compiler/Makefile.in b/orte/idl-compiler/Makefile.in new file mode 100644 index 0000000..2a5fabd --- /dev/null +++ b/orte/idl-compiler/Makefile.in @@ -0,0 +1,527 @@ +# Makefile.in generated by automake 1.8.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +SOURCES = $(orte_idl_SOURCES) + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +bin_PROGRAMS = orte-idl$(EXEEXT) +subdir = orte/idl-compiler +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_orte_idl_OBJECTS = orte-idl-main.$(OBJEXT) \ + orte-idl-driver.$(OBJEXT) orte-idl-utils.$(OBJEXT) \ + orte-idl-c-backend.$(OBJEXT) orte-idl-c-headers.$(OBJEXT) \ + orte-idl-c-impls.$(OBJEXT) orte-idl-c-utils.$(OBJEXT) +orte_idl_OBJECTS = $(am_orte_idl_OBJECTS) +orte_idl_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte +depcomp = $(SHELL) $(top_srcdir)/admin/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/orte-idl-c-backend.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-c-headers.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-c-impls.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-c-utils.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-driver.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-main.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/orte-idl-utils.Po +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(orte_idl_SOURCES) +DIST_SOURCES = $(orte_idl_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ +CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ +CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ +CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ +CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ +CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ +CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ +CONFIG_ORTE_MINGW_FALSE = @CONFIG_ORTE_MINGW_FALSE@ +CONFIG_ORTE_MINGW_TRUE = @CONFIG_ORTE_MINGW_TRUE@ +CONFIG_ORTE_RT = @CONFIG_ORTE_RT@ +CONFIG_ORTE_RT_FALSE = @CONFIG_ORTE_RT_FALSE@ +CONFIG_ORTE_RT_TRUE = @CONFIG_ORTE_RT_TRUE@ +CONFIG_ORTE_UNIX_FALSE = @CONFIG_ORTE_UNIX_FALSE@ +CONFIG_ORTE_UNIX_TRUE = @CONFIG_ORTE_UNIX_TRUE@ +CONFIG_ORTE_WIN_FALSE = @CONFIG_ORTE_WIN_FALSE@ +CONFIG_ORTE_WIN_TRUE = @CONFIG_ORTE_WIN_TRUE@ +CONFIG_RTHAL_FALSE = @CONFIG_RTHAL_FALSE@ +CONFIG_RTHAL_TRUE = @CONFIG_RTHAL_TRUE@ +CONFIG_RTLINUX_FALSE = @CONFIG_RTLINUX_FALSE@ +CONFIG_RTLINUX_TRUE = @CONFIG_RTLINUX_TRUE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INCLUDES = @INCLUDES@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX_AFLAGS = @LINUX_AFLAGS@ +LINUX_ARCH = @LINUX_ARCH@ +LINUX_ARFLAGS = @LINUX_ARFLAGS@ +LINUX_AS = @LINUX_AS@ +LINUX_CC = @LINUX_CC@ +LINUX_CFLAGS = @LINUX_CFLAGS@ +LINUX_CROSS_COMPILE = @LINUX_CROSS_COMPILE@ +LINUX_DIR = @LINUX_DIR@ +LINUX_KERNELRELEASE = @LINUX_KERNELRELEASE@ +LINUX_LD = @LINUX_LD@ +LINUX_LDFLAGS = @LINUX_LDFLAGS@ +LINUX_MODULE_EXT = @LINUX_MODULE_EXT@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +ORTE_BINARY_AGE = @ORTE_BINARY_AGE@ +ORTE_INTERFACE_AGE = @ORTE_INTERFACE_AGE@ +ORTE_MAJOR_VERSION = @ORTE_MAJOR_VERSION@ +ORTE_MICRO_VERSION = @ORTE_MICRO_VERSION@ +ORTE_MINOR_VERSION = @ORTE_MINOR_VERSION@ +ORTE_VERSION = @ORTE_VERSION@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +RTAI_CFLAGS = @RTAI_CFLAGS@ +RTLINUX_CC = @RTLINUX_CC@ +RTLINUX_CFLAGS = @RTLINUX_CFLAGS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_RTAI_FALSE = @USE_RTAI_FALSE@ +USE_RTAI_TRUE = @USE_RTAI_TRUE@ +USE_RTLINUX_FALSE = @USE_RTLINUX_FALSE@ +USE_RTLINUX_TRUE = @USE_RTLINUX_TRUE@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulePROGRAMS_INSTALL = @modulePROGRAMS_INSTALL@ +moduledir = @moduledir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +orte_idl_SOURCES = \ + orte-idl-main.c \ + orte-idl-driver.c \ + orte-idl-utils.c \ + orte-idl3-types.h \ + orte-idl-c-backend.h \ + orte-idl-c-backend.c \ + orte-idl-c-headers.c \ + orte-idl-c-impls.c \ + orte-idl-c-utils.c \ + orte-idl2.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orte/idl-compiler/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu orte/idl-compiler/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +orte-idl$(EXEEXT): $(orte_idl_OBJECTS) $(orte_idl_DEPENDENCIES) + @rm -f orte-idl$(EXEEXT) + $(LINK) $(orte_idl_LDFLAGS) $(orte_idl_OBJECTS) $(orte_idl_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-c-backend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-c-headers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-c-impls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-c-utils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-driver.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orte-idl-utils.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/orte/idl-compiler/orte-idl-c-backend.c b/orte/idl-compiler/orte-idl-c-backend.c new file mode 100644 index 0000000..1082639 --- /dev/null +++ b/orte/idl-compiler/orte-idl-c-backend.c @@ -0,0 +1,139 @@ +//#include "config.h" + +#include "orte-idl-c-backend.h" +#include +#include +#include +#include +#include +#include + +static FILE *out_for_pass(const char *input_filename, int pass, + OIDL_Run_Info *rinfo); + +gboolean +orbit_idl_output_c (IDL_tree tree, + OIDL_Run_Info *rinfo) +{ + int i; + char *ctmp; + OIDL_C_Info ci; + + ci.base_name = g_path_get_basename(rinfo->input_filename); + ctmp = strrchr(ci.base_name, '.'); + g_assert(ctmp); + *ctmp = '\0'; + + ci.c_base_name = g_strdup(ci.base_name); + if(!isalpha((guchar)ci.c_base_name[0])) + ci.c_base_name[0] = '_'; + for(i = 0; ci.c_base_name[i]; i++) { + if(!isalnum((guchar)ci.c_base_name[i])) ci.c_base_name[i] = '_'; + } + + ci.ext_dcls = g_string_new(NULL); + + ci.do_impl_hack = 1; + for(i = 0; i < OUTPUT_NUM_PASSES; i++) { + if( (1 << i) & rinfo->enabled_passes) { + ci.fh = out_for_pass(rinfo->input_filename, 1 << i, rinfo); + + switch(1 << i) { + case OUTPUT_HEADERS: + orte_idl_output_c_headers(tree, rinfo, &ci); + break; + case OUTPUT_IMPLS: + orte_idl_output_c_impls(tree, rinfo, &ci); + break; + } +// if (1 << i == OUTPUT_DEPS) +// fclose(ci.fh); +// else + pclose(ci.fh); + } + } + g_string_free(ci.ext_dcls,TRUE); + + return TRUE; +} + +char * +orbit_idl_c_filename_for_pass (const char *input_filename, + int pass) +{ + char *filename; + char *basename; + char *dot; + const char *tack_on = NULL; + + basename = g_path_get_basename (input_filename); + dot = strrchr (basename, '.'); + if (dot != NULL) + *dot = '\0'; + + switch (pass) { + case OUTPUT_HEADERS: + tack_on = ".h"; + break; + case OUTPUT_IMPLS: + tack_on = ".c"; + break; + default: + g_error("Unknown output pass"); + break; + } + + filename = g_strconcat (basename, tack_on, NULL); + g_free (basename); + + return filename; +} + +static FILE * +out_for_pass (const char *input_filename, + int pass, + OIDL_Run_Info *rinfo) +{ + FILE *fp; + char *output_filename; + char *cmdline; + +/* if (pass == OUTPUT_DEPS) { + if (!g_file_test (".deps", G_FILE_TEST_IS_DIR)) { + if (mkdir (".deps", 0775) < 0) { + g_warning ("failed to create '.deps' directory '%s'", + strerror (errno)); + return NULL; + } + } + + if (rinfo->deps_file) + fp = fopen (rinfo->deps_file, "w"); + else + fp = NULL; + + if (fp == NULL) + g_warning ("failed to open '%s': %s\n", + rinfo->deps_file, strerror (errno)); + + } else {*/ + output_filename = orbit_idl_c_filename_for_pass (input_filename, pass); + + cmdline = g_alloca (strlen (rinfo->output_formatter) + + strlen (output_filename) + + sizeof(" > ")); + sprintf (cmdline, "%s > %s", rinfo->output_formatter, output_filename); + + g_free (output_filename); + + /* Many versions of cpp do evil translating internal + * strings, producing bogus output, so clobber LC_ALL */ + putenv ("LC_ALL=C"); + fp = popen (cmdline, "w"); + + if (fp == NULL) + g_error ("failed to popen '%s': %s\n", cmdline, strerror(errno)); +// } + + return fp; +} diff --git a/orte/idl-compiler/orte-idl-c-backend.h b/orte/idl-compiler/orte-idl-c-backend.h new file mode 100644 index 0000000..bac6dca --- /dev/null +++ b/orte/idl-compiler/orte-idl-c-backend.h @@ -0,0 +1,64 @@ +#ifndef ORBIT_IDL_C_BACKEND_H +#define ORBIT_IDL_C_BACKEND_H + +#include "orte-idl2.h" + +#include + +#define OIDL_C_WARNING "/*\n * This file was generated by orte-idl - DO NOT EDIT!\n */\n\n" + +typedef struct { + char *base_name; + char *c_base_name; + FILE *fh; + GString *ext_dcls; + gboolean do_impl_hack; +} OIDL_C_Info; + +gboolean orbit_idl_output_c (IDL_tree tree, + OIDL_Run_Info *rinfo); +void orte_idl_output_c_headers (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci); +void orte_idl_output_c_impls (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci); +/*void orte_idl_output_c_deps (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci);*/ + +void orbit_output_typecode (OIDL_C_Info *ci, IDL_tree ts); + +char *orbit_idl_c_filename_for_pass (const char *input_filename, int pass); + +/* utils */ +char *orte_cbe_get_typespec_str (IDL_tree tree); +void orte_cbe_write_typespec (FILE *of, + IDL_tree tree); +void orbit_cbe_write_param_typespec (FILE *of, + IDL_tree tree); +void orbit_cbe_op_write_proto (FILE *of, + IDL_tree op, + const char *nom_prefix, + gboolean for_epv); +IDL_tree orte_cbe_get_typespec (IDL_tree tree); +void orte_cbe_write_const (FILE *of, + IDL_tree tree); +gboolean orbit_cbe_type_is_fixed_length (IDL_tree ts); +gboolean orte_cbe_type_is_builtin (IDL_tree tree); +void orte_cbe_id_define_hack (FILE *fh, + const char *def_prefix, + const char *def_name, + const char *def_value); +void orbit_cbe_id_cond_hack (FILE *fh, + const char *def_prefix, + const char *def_name, + const char *def_value); +char *orte_cbe_get_typecode_name (IDL_tree tree); +void orbit_cbe_flatten_args (IDL_tree tree, + FILE *of, + const char *name); +void orbit_cbe_unflatten_args (IDL_tree tree, + FILE *of, + const char *name); +#endif diff --git a/orte/idl-compiler/orte-idl-c-headers.c b/orte/idl-compiler/orte-idl-c-headers.c new file mode 100644 index 0000000..38eaa4a --- /dev/null +++ b/orte/idl-compiler/orte-idl-c-headers.c @@ -0,0 +1,664 @@ +//#include "config.h" +#include "orte-idl-c-backend.h" + +#include +#include + +/* ch = C header */ +static void ch_output_types(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +//static void ch_output_poa(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +//static void ch_output_itypes (IDL_tree tree, OIDL_C_Info *ci); +static void ch_output_impls_decl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +//static void ch_output_skel_protos(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); + +void +orte_idl_output_c_headers (IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + fprintf (ci->fh, OIDL_C_WARNING); + fprintf(ci->fh, "#ifndef %s%s_H\n", rinfo->header_guard_prefix, ci->c_base_name); + fprintf(ci->fh, "#define %s%s_H 1\n\n", rinfo->header_guard_prefix, ci->c_base_name); + + fprintf(ci->fh, "#ifdef __cplusplus\n"); + fprintf(ci->fh, "extern \"C\" {\n"); + fprintf(ci->fh, "#endif /* __cplusplus */\n\n"); + + fprintf(ci->fh, "#ifndef EXCLUDE_ORTE_H\n"); + fprintf(ci->fh, "#include \n"); + fprintf(ci->fh, "#endif /* EXCLUDE_ORTE_H */\n"); + + /* Do all the typedefs, etc. */ + fprintf(ci->fh, "\n/** typedefs **/\n"); + ch_output_types(tree, rinfo, ci); + + fprintf(ci->fh, "\n/** impls declarations **/\n"); + ch_output_impls_decl(tree, rinfo, ci); + + if ( ci->ext_dcls && ci->ext_dcls->str ) + fputs( ci->ext_dcls->str, ci->fh); /* this may be huge! */ + + fprintf(ci->fh, "\n"); + fprintf(ci->fh, "#ifdef __cplusplus\n"); + fprintf(ci->fh, "}\n"); + fprintf(ci->fh, "#endif /* __cplusplus */\n\n"); + + fprintf(ci->fh, "#endif\n"); +} + +static void +ch_output_var(IDL_tree val, IDL_tree name, OIDL_C_Info *ci) +{ + orte_cbe_write_typespec(ci->fh, val); + + fprintf(ci->fh, " "); + switch(IDL_NODE_TYPE(name)) { + case IDLN_IDENT: + fprintf(ci->fh, "%s", IDL_IDENT(name).str); + break; + case IDLN_TYPE_ARRAY: + { + IDL_tree curitem; + + fprintf(ci->fh, "%s", IDL_IDENT(IDL_TYPE_ARRAY(name).ident).str); + for(curitem = IDL_TYPE_ARRAY(name).size_list; curitem; curitem = IDL_LIST(curitem).next) { + fprintf(ci->fh, "[%" IDL_LL "d]", IDL_INTEGER(IDL_LIST(curitem).data).value); + } + } + break; + default: + g_error("Weird varname - %s", IDL_tree_type_names[IDL_NODE_TYPE(name)]); + break; + } + fprintf(ci->fh, ";\n"); +} + +static void ch_output_interface(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_type_struct(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_type_enum(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_type_dcl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_native(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_type_union(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_codefrag(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_output_const_dcl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); +static void ch_prep(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci); + +//static void ch_type_alloc_and_tc(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci, gboolean do_alloc); + +static void +ch_output_types (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci) +{ + if (!tree) + return; + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_EXCEPT_DCL: { + char *id; + + id = IDL_ns_ident_to_qstring ( + IDL_IDENT_TO_NS (IDL_EXCEPT_DCL (tree).ident), "_", 0); + + fprintf (ci->fh, "#undef ex_%s\n", id); + fprintf (ci->fh, "#define ex_%s \"%s\"\n", + id, IDL_IDENT (IDL_EXCEPT_DCL (tree).ident).repo_id); + + g_free (id); + + ch_output_type_struct (tree, rinfo, ci); + } + break; + case IDLN_FORWARD_DCL: + case IDLN_INTERFACE: + ch_output_interface (tree, rinfo, ci); + break; + case IDLN_TYPE_STRUCT: + ch_output_type_struct (tree, rinfo, ci); + break; + case IDLN_TYPE_ENUM: + ch_output_type_enum (tree, rinfo, ci); + break; + case IDLN_TYPE_DCL: + ch_output_type_dcl (tree, rinfo, ci); + break; + case IDLN_TYPE_UNION: + ch_output_type_union (tree, rinfo, ci); + break; + case IDLN_CODEFRAG: + ch_output_codefrag (tree, rinfo, ci); + break; + case IDLN_SRCFILE: { + if (rinfo->onlytop) { + char *idlfn = IDL_SRCFILE (tree).filename; + + if (!IDL_SRCFILE (tree).seenCnt && + !IDL_SRCFILE(tree).isTop && + !IDL_SRCFILE(tree).wasInhibit) { + gchar *hfn, *htail; + + hfn = g_path_get_basename (idlfn); + htail = strrchr (hfn,'.'); + + g_assert (htail && strlen (htail) >= 2); + + htail [1] = 'h'; + htail [2] = 0; + + fprintf (ci->fh, "#include \"%s\"\n", hfn); + + g_free (hfn); + } + + fprintf (ci->fh, "/* from IDL source file \"%s\" " + "(seen %d, isTop %d, wasInhibit %d) */ \n", + idlfn, + IDL_SRCFILE (tree).seenCnt, + IDL_SRCFILE (tree).isTop, + IDL_SRCFILE (tree).wasInhibit); + } + } + break; + case IDLN_CONST_DCL: + ch_output_const_dcl (tree, rinfo, ci); + break; + case IDLN_NATIVE: + ch_output_native (tree, rinfo, ci); + break; + default: + break; + } + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_MODULE: + ch_output_types (IDL_MODULE (tree).definition_list, rinfo, ci); + break; + case IDLN_LIST: { + IDL_tree sub; + + for (sub = tree; sub; sub = IDL_LIST (sub).next) { + ch_output_types (IDL_LIST (sub).data, rinfo, ci); + } + } + break; + case IDLN_INTERFACE: + ch_output_types (IDL_INTERFACE (tree).body, rinfo, ci); + break; + default: + break; + } +} + +static void +ch_output_interface(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *fullname; + fullname = orte_cbe_get_typespec_str(tree); + fprintf(ci->fh, "#if !defined(ORTE_DECL_%s) && !defined(_%s_defined)\n#define ORTE_DECL_%s 1\n#define _%s_defined 1\n", fullname, fullname, fullname, fullname); + + if ( tree->declspec & IDLF_DECLSPEC_PIDL ) { + /* PIDL interfaces are not normal CORBA Objects */ + fprintf(ci->fh, "typedef struct %s_type *%s;\n", fullname, fullname); + fprintf(ci->fh, "#ifndef TC_%s\n", fullname); + fprintf(ci->fh, "# define TC_%s TC_CORBA_Object\n", fullname); + fprintf(ci->fh, "#endif\n"); + } else { + fprintf(ci->fh, "#define %s__freekids CORBA_Object__freekids\n", fullname); + fprintf(ci->fh, "typedef CORBA_Object %s;\n", fullname); + fprintf(ci->fh, "extern CORBA_unsigned_long %s__classid;\n", fullname); +// ch_type_alloc_and_tc(tree, rinfo, ci, FALSE); + } + + fprintf(ci->fh, "#endif\n"); + g_free(fullname); +} + +static void +ch_output_type_enum (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci) +{ + IDL_tree l; + char *enumid; + + /* CORBA spec says to do + * typedef unsigned int enum_name; + * and then #defines for each enumerator. + * This works just as well and seems cleaner. + */ + + enumid = IDL_ns_ident_to_qstring ( + IDL_IDENT_TO_NS (IDL_TYPE_ENUM (tree).ident), "_", 0); + fprintf (ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", enumid, enumid); + fprintf (ci->fh, "typedef enum {\n"); + + for (l = IDL_TYPE_ENUM (tree).enumerator_list; l; l = IDL_LIST (l).next) { + char *id; + + id = IDL_ns_ident_to_qstring ( + IDL_IDENT_TO_NS (IDL_LIST (l).data), "_", 0); + + fprintf (ci->fh, " %s%s\n", id, IDL_LIST (l).next ? "," : ""); + + g_free (id); + } + + fprintf (ci->fh, "} %s;\n", enumid); + +// ch_type_alloc_and_tc (tree, rinfo, ci, FALSE); + + fprintf (ci->fh, "#endif\n"); + + g_free (enumid); +} + +static void +ch_output_type_dcl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + IDL_tree l; + + ch_prep (IDL_TYPE_DCL (tree).type_spec, rinfo, ci); + + for (l = IDL_TYPE_DCL (tree).dcls; l; l = IDL_LIST (l).next) { + char *ctmp = NULL; + + IDL_tree ent = IDL_LIST (l).data; + + switch (IDL_NODE_TYPE(ent)) { + case IDLN_IDENT: + ctmp = IDL_ns_ident_to_qstring ( + IDL_IDENT_TO_NS (ent), "_", 0); + break; + case IDLN_TYPE_ARRAY: + ctmp = IDL_ns_ident_to_qstring ( + IDL_IDENT_TO_NS (IDL_TYPE_ARRAY (ent).ident), "_", 0); + break; + default: + g_assert_not_reached (); + break; + } + + fprintf (ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", ctmp, ctmp); + fprintf (ci->fh, "typedef "); + orte_cbe_write_typespec (ci->fh, IDL_TYPE_DCL (tree).type_spec); + + switch (IDL_NODE_TYPE (ent)) { + case IDLN_IDENT: + fprintf (ci->fh, " %s;\n", ctmp); + fprintf (ci->fh, "#define %s_serialize(x) ", ctmp); + orte_cbe_write_typespec (ci->fh, IDL_TYPE_DCL (tree).type_spec); + fprintf (ci->fh, "_serialize(x)\n"); + + fprintf (ci->fh, "#define %s_deserialize(x) ", ctmp); + orte_cbe_write_typespec (ci->fh, IDL_TYPE_DCL (tree).type_spec); + fprintf (ci->fh, "_deserialize(x)\n"); + break; + case IDLN_TYPE_ARRAY: { + IDL_tree sub; + + fprintf (ci->fh, " %s", ctmp); + for (sub = IDL_TYPE_ARRAY (ent).size_list; sub; sub = IDL_LIST (sub).next) + fprintf (ci->fh, "[%" IDL_LL "d]", + IDL_INTEGER (IDL_LIST (sub).data).value); + + fprintf (ci->fh, ";\n"); + fprintf (ci->fh, "typedef "); + orte_cbe_write_typespec (ci->fh, IDL_TYPE_DCL (tree).type_spec); + fprintf (ci->fh, " %s_slice", ctmp); + for (sub = IDL_LIST (IDL_TYPE_ARRAY (ent).size_list).next; + sub; sub = IDL_LIST (sub).next) + fprintf (ci->fh, "[%" IDL_LL "d]", IDL_INTEGER (IDL_LIST (sub).data).value); + fprintf(ci->fh, ";\n"); + } + break; + default: + break; + } + +// ch_type_alloc_and_tc (ent, rinfo, ci, TRUE); + fprintf (ci->fh, "#endif\n"); + g_free (ctmp); + } +} + +static void +ch_output_native(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *ctmp; + IDL_tree id = IDL_NATIVE(tree).ident; + ctmp = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(id), "_", 0); + fprintf(ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", ctmp, ctmp); + fprintf(ci->fh, "typedef struct %s_type *%s;\n", ctmp, ctmp); + /* Dont even think about emitting a typecode. */ + fprintf(ci->fh, "#endif\n"); + g_free(ctmp); +} + +static void +ch_output_type_struct(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *id; + IDL_tree cur, curmem; + + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_TYPE_STRUCT(tree).ident), + "_", 0); + fprintf(ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", id, id); + /* put typedef out first for recursive seq */ + fprintf(ci->fh, "typedef struct %s_type %s;\n", id, id); + + /* Scan for any nested decls */ + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + IDL_tree ts; + ts = IDL_MEMBER(IDL_LIST(cur).data).type_spec; + ch_prep(ts, rinfo, ci); + } + + fprintf(ci->fh, "struct %s_type {\n", id); + + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) { + ch_output_var(IDL_MEMBER(IDL_LIST(cur).data).type_spec, IDL_LIST(curmem).data, ci); + } + } + if(!IDL_TYPE_STRUCT(tree).member_list) + fprintf(ci->fh, "int dummy;\n"); + fprintf(ci->fh, "};\n\n"); + +// ch_type_alloc_and_tc(tree, rinfo, ci, TRUE); + + fprintf(ci->fh, "#endif\n"); + + g_free(id); +} + +static void +ch_output_type_union(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *id; + IDL_tree curitem; + + if (IDL_NODE_TYPE (IDL_TYPE_UNION (tree).switch_type_spec) == IDLN_TYPE_ENUM) + ch_output_type_enum (IDL_TYPE_UNION (tree).switch_type_spec, rinfo, ci); + + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_TYPE_UNION(tree).ident), "_", 0); + fprintf(ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", id, id); + fprintf(ci->fh, "typedef struct %s_type %s;\n", id, id); + + /* Scan for any nested decls */ + for(curitem = IDL_TYPE_UNION(tree).switch_body; curitem; curitem = IDL_LIST(curitem).next) { + IDL_tree member = IDL_CASE_STMT(IDL_LIST(curitem).data).element_spec; + ch_prep(IDL_MEMBER(member).type_spec, rinfo, ci); + } + + fprintf(ci->fh, "struct %s_type {\n", id); + orte_cbe_write_typespec(ci->fh, IDL_TYPE_UNION(tree).switch_type_spec); + fprintf(ci->fh, " _d;\nunion {\n"); + + for(curitem = IDL_TYPE_UNION(tree).switch_body; curitem; curitem = IDL_LIST(curitem).next) { + IDL_tree member; + + member = IDL_CASE_STMT(IDL_LIST(curitem).data).element_spec; + ch_output_var(IDL_MEMBER(member).type_spec, + IDL_LIST(IDL_MEMBER(member).dcls).data, + ci); + } + + fprintf(ci->fh, "} _u;\n};\n"); + +// ch_type_alloc_and_tc(tree, rinfo, ci, TRUE); + + fprintf(ci->fh, "#endif\n"); + + g_free(id); +} + +static void +ch_output_codefrag(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + GSList *list; + + for(list = IDL_CODEFRAG(tree).lines; list; + list = g_slist_next(list)) { + if(!strncmp(list->data, + "#pragma include_defs", + sizeof("#pragma include_defs")-1)) { + char *ctmp, *cte; + ctmp = ((char *)list->data) + sizeof("#pragma include_defs"); + while(*ctmp && (isspace((int)*ctmp) || *ctmp == '"')) ctmp++; + cte = ctmp; + while(*cte && !isspace((int)*cte) && *cte != '"') cte++; + *cte = '\0'; + fprintf(ci->fh, "#include <%s>\n", ctmp); + } else + fprintf(ci->fh, "%s\n", (char *)list->data); + } +} + +static void +ch_output_const_dcl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *id; + IDL_tree ident; + IDL_tree typespec; + + ident = IDL_CONST_DCL (tree).ident; + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS (ident), "_", 0); + + fprintf(ci->fh, "#ifndef %s\n", id); + fprintf(ci->fh, "#define %s ", id); + + orte_cbe_write_const(ci->fh, + IDL_CONST_DCL(tree).const_exp); + + typespec = orbit_cbe_get_typespec (IDL_CONST_DCL(tree).const_type); + if (IDL_NODE_TYPE (typespec) == IDLN_TYPE_INTEGER && + !IDL_TYPE_INTEGER (typespec).f_signed) + fprintf(ci->fh, "U"); + + fprintf(ci->fh, "\n"); + fprintf(ci->fh, "#endif /* !%s */\n\n", id); + + g_free(id); +} + +static void +ch_prep_fixed(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *ctmp; + + ctmp = orte_cbe_get_typespec_str(tree); + fprintf(ci->fh, + "typedef struct { CORBA_unsigned_short _digits; CORBA_short _scale; CORBA_char _value[%d]; } %s;\n", + (int) (IDL_INTEGER(IDL_TYPE_FIXED(tree).positive_int_const).value + 2)/2, + ctmp); + g_free(ctmp); + +// ch_type_alloc_and_tc(tree, rinfo, ci, TRUE); +} + +static void +ch_prep_sequence(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *ctmp, *fullname, *fullname_def, *ctmp2; + IDL_tree tts; + gboolean separate_defs, fake_if; + IDL_tree fake_seq = NULL; + + tts = orbit_cbe_get_typespec(IDL_TYPE_SEQUENCE(tree).simple_type_spec); + ctmp = orte_cbe_get_typespec_str(IDL_TYPE_SEQUENCE(tree).simple_type_spec); + ctmp2 = orte_cbe_get_typespec_str(tts); + fake_if = (IDL_NODE_TYPE(tts) == IDLN_INTERFACE); + if(fake_if) + { + g_free(ctmp2); + ctmp2 = g_strdup("CORBA_Object"); + } + separate_defs = strcmp(ctmp, ctmp2); + fullname = orte_cbe_get_typespec_str(tree); + + if(separate_defs) + { + if(fake_if) + tts = IDL_type_object_new(); + fake_seq = IDL_type_sequence_new(tts, NULL); + IDL_NODE_UP(fake_seq) = IDL_NODE_UP(tree); + ch_prep_sequence(fake_seq, rinfo, ci); + fullname_def = g_strdup_printf("CORBA_sequence_%s", ctmp2); + if(!fake_if) + IDL_TYPE_SEQUENCE(fake_seq).simple_type_spec = NULL; + } + else + fullname_def = g_strdup(fullname); + + if(IDL_NODE_TYPE(IDL_TYPE_SEQUENCE(tree).simple_type_spec) + == IDLN_TYPE_SEQUENCE) + ch_prep_sequence(IDL_TYPE_SEQUENCE(tree).simple_type_spec, rinfo, ci); + + /* NOTE: ORBIT_DECL_%s protects redef of everything (struct,TC,externs) + * while _%s_defined protects only the struct */ + + fprintf(ci->fh, "#if !defined(ORTE_DECL_%s)\n#define ORTE_DECL_%s 1\n", + fullname, fullname); + if ( ci->do_impl_hack ) + orte_cbe_id_define_hack(ci->fh, "ORTE_IMPL", fullname, ci->c_base_name); + + if(separate_defs) + { + fprintf(ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", + fullname, fullname); + if(!strcmp(ctmp, "CORBA_RepositoryId")) + fprintf(ci->fh, "/* CRACKHEADS */\n"); + fprintf(ci->fh, "typedef %s %s;\n", fullname_def, fullname); + fprintf(ci->fh, "#endif\n"); +// ch_type_alloc_and_tc(tree, rinfo, ci, FALSE); + fprintf(ci->fh, "#define %s__alloc %s__alloc\n", + fullname, fullname_def); + fprintf(ci->fh, "#define %s__freekids %s__freekids\n", + fullname, fullname_def); + fprintf(ci->fh, "#define CORBA_sequence_%s_allocbuf CORBA_sequence_%s_allocbuf\n", + ctmp, ctmp2); + fprintf(ci->fh, "#define %s_serialize(x) %s_serialize(x)\n", fullname, fullname_def); + + fprintf(ci->fh, "#define %s_deserialize(x) %s_deserialize(x)\n", fullname, fullname_def); + IDL_tree_free(fake_seq); + } + else + { + char *tc, *member_type; + + fprintf(ci->fh, "#if !defined(_%s_defined)\n#define _%s_defined 1\n", + fullname, fullname); + fprintf(ci->fh, "typedef struct { CORBA_unsigned_long _maximum, _length; "); + orte_cbe_write_typespec(ci->fh, IDL_TYPE_SEQUENCE(tree).simple_type_spec); + fprintf(ci->fh, "* _buffer; CORBA_boolean _release; } "); + orte_cbe_write_typespec(ci->fh, tree); + fprintf(ci->fh, ";\n#endif\n"); +// ch_type_alloc_and_tc(tree, rinfo, ci, TRUE); + + tc = orte_cbe_get_typecode_name (orbit_cbe_get_typespec (tree)); + member_type = orte_cbe_type_is_builtin (IDL_TYPE_SEQUENCE (tree).simple_type_spec) ? + ctmp + strlen ("CORBA_") : ctmp; + + fprintf (ci->fh, "#define CORBA_sequence_%s_allocbuf(l) " + "((%s*)ORBit_small_allocbuf (%s, (l)))\n", + member_type, member_type, tc); + + g_free (tc); + } + + fprintf(ci->fh, "#endif\n"); + + g_free(ctmp2); + g_free(ctmp); + g_free(fullname); + g_free(fullname_def); +} + + +static +void ch_prep (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci) +{ + switch (IDL_NODE_TYPE (tree)) { + case IDLN_TYPE_SEQUENCE: + ch_prep_sequence (tree, rinfo, ci); + break; + case IDLN_TYPE_FIXED: + ch_prep_fixed (tree, rinfo, ci); + break; + case IDLN_TYPE_STRUCT: + ch_output_type_struct (tree, rinfo, ci); + break; + case IDLN_TYPE_ENUM: + ch_output_type_enum (tree, rinfo, ci); + break; + default: + break; + } +} + +static void +ch_output_decl(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *id; + IDL_tree cur; + + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_TYPE_STRUCT(tree).ident), + "_", 0); + fprintf(ci->fh, "void %s_serialize(CDR_Codec *cdrCodec,%s *object);\n", id, id); + fprintf(ci->fh, "void %s_deserialize(CDR_Codec *cdrCodec,%s *object);\n", id, id); + fprintf(ci->fh, "int %s_get_max_size(ORTEGetMaxSizeParam *gms);\n", id); + fprintf(ci->fh, "Boolean %s_type_register(ORTEDomain *d);\n", id); + fprintf(ci->fh, "\n"); + + /* Scan for any nested decls */ + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + IDL_tree ts; + ts = IDL_MEMBER(IDL_LIST(cur).data).type_spec; + switch (IDL_NODE_TYPE (ts)) { + case IDLN_TYPE_STRUCT: + ch_output_decl(ts, rinfo, ci); + break; + default: + break; + } + } + + g_free(id); +} + + +static void +ch_output_impls_decl (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci) +{ + if (!tree) + return; + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_TYPE_STRUCT: + ch_output_decl (tree, rinfo, ci); + break; + default: + break; + } + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_MODULE: + ch_output_impls_decl (IDL_MODULE (tree).definition_list, rinfo, ci); + break; + case IDLN_LIST: { + IDL_tree sub; + + for (sub = tree; sub; sub = IDL_LIST (sub).next) { + ch_output_impls_decl (IDL_LIST (sub).data, rinfo, ci); + } + } + break; + case IDLN_INTERFACE: + ch_output_impls_decl (IDL_INTERFACE (tree).body, rinfo, ci); + break; + default: + break; + } +} diff --git a/orte/idl-compiler/orte-idl-c-impls.c b/orte/idl-compiler/orte-idl-c-impls.c new file mode 100644 index 0000000..70c8e3e --- /dev/null +++ b/orte/idl-compiler/orte-idl-c-impls.c @@ -0,0 +1,190 @@ +//#include "config.h" +#include "orte-idl-c-backend.h" + +#include +#include + +/* ch = C header */ +static void ci_output_impls (IDL_tree tree,OIDL_Run_Info *rinfo,OIDL_C_Info *ci); + + +void +orte_idl_output_c_impls (IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + fprintf (ci->fh, OIDL_C_WARNING); + + fprintf(ci->fh, "#include \"%s.h\"\n\n",ci->base_name); + + /* Do all the serialization, deserialization etc. */ + ci_output_impls(tree, rinfo, ci); + +} + +static void +ci_output_var(IDL_tree val, IDL_tree name, OIDL_C_Info *ci, int type) +{ + + fprintf(ci->fh, " "); + orte_cbe_write_typespec(ci->fh, val); + + switch (type) { + case 0: + fprintf(ci->fh, "_serialize(cdrCodec,&(object->"); + break; + case 1: + fprintf(ci->fh, "_deserialize(cdrCodec,&(object->"); + break; + default: + break; + } + + switch(IDL_NODE_TYPE(name)) { + case IDLN_IDENT: + fprintf(ci->fh, "%s", IDL_IDENT(name).str); + break; +/* case IDLN_TYPE_ARRAY: + { + IDL_tree curitem; + + fprintf(ci->fh, "%s", IDL_IDENT(IDL_TYPE_ARRAY(name).ident).str); + for(curitem = IDL_TYPE_ARRAY(name).size_list; curitem; curitem = IDL_LIST(curitem).next) { + fprintf(ci->fh, "[%" IDL_LL "d]", IDL_INTEGER(IDL_LIST(curitem).data).value); + } + } + break;*/ + default: + g_error("Weird varname - %s", IDL_tree_type_names[IDL_NODE_TYPE(name)]); + break; + } + +// if (type==1) + fprintf(ci->fh, ")"); + + fprintf(ci->fh, ");\n"); +} + +static void +ci_output_impls_struct(IDL_tree tree, OIDL_Run_Info *rinfo, OIDL_C_Info *ci) +{ + char *id; + IDL_tree cur,curmem,cur_tspec; + + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(IDL_TYPE_STRUCT(tree).ident), + "_", 0); + + /* serialize */ + fprintf(ci->fh, "/****************************************************************/\n"); + fprintf(ci->fh, "/* struct - %-50s */\n", id); + fprintf(ci->fh, "/****************************************************************/\n\n"); + + fprintf(ci->fh, "void %s_serialize(CDR_Codec *cdrCodec,%s *object) {\n", id, id); +// fprintf(ci->fh, " %s *object=(%s*)instance;\n\n", id, id); + + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) { + ci_output_var(IDL_MEMBER(IDL_LIST(cur).data).type_spec, IDL_LIST(curmem).data, ci, 0); + } + } + fprintf(ci->fh, "}\n\n"); + + /* deserialize */ + fprintf(ci->fh, "void\n%s_deserialize(CDR_Codec *cdrCodec,%s *object) {\n", id, id); +// fprintf(ci->fh, " %s *object=(%s*)instance;\n\n", id, id); + + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) { + ci_output_var(IDL_MEMBER(IDL_LIST(cur).data).type_spec, IDL_LIST(curmem).data, ci, 1); + } + } + fprintf(ci->fh, "}\n\n"); + + /* get_max_size */ + fprintf(ci->fh, "int\n%s_get_max_size(ORTEGetMaxSizeParam *gms) {\n", id); + + for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + for(curmem = IDL_MEMBER(IDL_LIST(cur).data).dcls; curmem; curmem = IDL_LIST(curmem).next) { + fprintf(ci->fh, " "); + orte_cbe_write_typespec(ci->fh, IDL_MEMBER(IDL_LIST(cur).data).type_spec); + fprintf(ci->fh, "_get_max_size(gms"); + + cur_tspec=IDL_MEMBER(IDL_LIST(cur).data).type_spec; + switch (IDL_NODE_TYPE (cur_tspec)) { + case IDLN_TYPE_STRING: + if (IDL_TYPE_STRING (cur_tspec).positive_int_const) { + int length = IDL_INTEGER (IDL_TYPE_STRING (cur_tspec).positive_int_const).value; + fprintf(ci->fh, ",%d",length); + } + break; + default: + break; + } + fprintf(ci->fh, ");\n"); + } + } + fprintf(ci->fh, " return gms->csize;\n"); + fprintf(ci->fh, "}\n\n"); + + /* get_max_size */ + fprintf(ci->fh, "Boolean\n%s_type_register(ORTEDomain *d) {\n", id); + fprintf(ci->fh, " Boolean ret;\n\n"); + fprintf(ci->fh, " ret=ORTETypeRegisterAdd(d,\n"); + fprintf(ci->fh, " \"%s\",\n",id); + fprintf(ci->fh, " (ORTETypeSerialize)%s_serialize,\n",id); + fprintf(ci->fh, " (ORTETypeDeserialize)%s_deserialize,\n",id); + fprintf(ci->fh, " %s_get_max_size,\n",id); + fprintf(ci->fh, " 0);\n"); + fprintf(ci->fh, " return ret;\n"); + fprintf(ci->fh, "}\n\n"); + + /* Scan for any nested decls */ +/* for(cur = IDL_TYPE_STRUCT(tree).member_list; cur; cur = IDL_LIST(cur).next) { + IDL_tree ts; + ts = IDL_MEMBER(IDL_LIST(cur).data).type_spec; + switch (IDL_NODE_TYPE (ts)) { + case IDLN_TYPE_STRUCT: + ch_output_decl(ts, rinfo, ci); + break; + default: + break; + } + } + + g_free(id);*/ +} + + +static void +ci_output_impls (IDL_tree tree, + OIDL_Run_Info *rinfo, + OIDL_C_Info *ci) +{ + if (!tree) + return; + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_TYPE_STRUCT: + ci_output_impls_struct (tree, rinfo, ci); + break; + default: + break; + } + + switch (IDL_NODE_TYPE (tree)) { + case IDLN_MODULE: + ci_output_impls (IDL_MODULE (tree).definition_list, rinfo, ci); + break; + case IDLN_LIST: { + IDL_tree sub; + + for (sub = tree; sub; sub = IDL_LIST (sub).next) { + ci_output_impls (IDL_LIST (sub).data, rinfo, ci); + } + } + break; + case IDLN_INTERFACE: + ci_output_impls (IDL_INTERFACE (tree).body, rinfo, ci); + break; + default: + break; + } +} diff --git a/orte/idl-compiler/orte-idl-c-utils.c b/orte/idl-compiler/orte-idl-c-utils.c new file mode 100644 index 0000000..10b36c9 --- /dev/null +++ b/orte/idl-compiler/orte-idl-c-utils.c @@ -0,0 +1,330 @@ +//#include "config.h" + +#include "orte-idl-c-backend.h" + +#include + +char * +orte_cbe_get_typecode_name (IDL_tree tree) +{ + if (!tree) + return g_strdup ("TC_FIXME"); + else + return g_strconcat ("TC_", orte_cbe_get_typespec_str (tree), NULL); +} + +gboolean +orte_cbe_type_is_builtin(IDL_tree tree) +{ + return FALSE; + switch(IDL_NODE_TYPE(tree)) { + case IDLN_LIST: + case IDLN_GENTREE: + case IDLN_MEMBER: + case IDLN_NATIVE: + case IDLN_CASE_STMT: + case IDLN_MODULE: + case IDLN_BINOP: + case IDLN_UNARYOP: + case IDLN_CODEFRAG: + g_error("Strange type for being a builtin"); + break; + case IDLN_INTEGER: + case IDLN_STRING: + case IDLN_WIDE_STRING: + case IDLN_CHAR: + case IDLN_WIDE_CHAR: + case IDLN_FIXED: + case IDLN_FLOAT: + case IDLN_BOOLEAN: + case IDLN_CONST_DCL: + case IDLN_TYPE_INTEGER: + case IDLN_TYPE_FLOAT: + case IDLN_TYPE_CHAR: + case IDLN_TYPE_WIDE_CHAR: + case IDLN_TYPE_STRING: + case IDLN_TYPE_WIDE_STRING: + case IDLN_TYPE_BOOLEAN: + case IDLN_TYPE_OCTET: + case IDLN_TYPE_ANY: + case IDLN_TYPE_OBJECT: + case IDLN_TYPE_TYPECODE: + case IDLN_TYPE_ENUM: + return TRUE; + break; + case IDLN_TYPE_DCL: + case IDLN_EXCEPT_DCL: + case IDLN_ATTR_DCL: + case IDLN_OP_DCL: + case IDLN_PARAM_DCL: + case IDLN_TYPE_FIXED: + case IDLN_TYPE_SEQUENCE: + case IDLN_TYPE_ARRAY: + case IDLN_TYPE_STRUCT: + case IDLN_TYPE_UNION: + case IDLN_IDENT: + case IDLN_INTERFACE: + case IDLN_FORWARD_DCL: + default: + return FALSE; + break; + } + + return FALSE; +} + +/** + Gets the "type" of {tree} as known in C. + The return value was alloc'd via g_malloc, and must be g_free'd. +**/ +char * +orte_cbe_get_typespec_str(IDL_tree tree) +{ + char *retval = NULL; + GString *tmpstr = NULL; + + if(!tree) { + return g_strdup("void"); + } + + switch(IDL_NODE_TYPE(tree)) { + case IDLN_MEMBER: + return orte_cbe_get_typespec_str(IDL_MEMBER(tree).type_spec); + break; + case IDLN_TYPE_ANY: + retval = "CORBA_any"; + break; + case IDLN_TYPE_FLOAT: + switch(IDL_TYPE_FLOAT(tree).f_type) { + case IDL_FLOAT_TYPE_FLOAT: + retval = "CORBA_float"; + break; + case IDL_FLOAT_TYPE_DOUBLE: + retval = "CORBA_double"; + break; + case IDL_FLOAT_TYPE_LONGDOUBLE: + retval = "CORBA_long_double"; + break; + } + break; + case IDLN_TYPE_FIXED: + return g_strdup_printf( "CORBA_fixed_%" IDL_LL "d_%" IDL_LL "d", + IDL_INTEGER(IDL_TYPE_FIXED(tree).positive_int_const).value, + IDL_INTEGER(IDL_TYPE_FIXED(tree).integer_lit).value); + break; + case IDLN_TYPE_INTEGER: + tmpstr = g_string_new(NULL); + g_string_append(tmpstr, "CORBA_"); + if(!IDL_TYPE_INTEGER(tree).f_signed) + g_string_append(tmpstr, "unsigned_"); + + switch(IDL_TYPE_INTEGER(tree).f_type) { + case IDL_INTEGER_TYPE_SHORT: + g_string_append(tmpstr, "short"); + break; + case IDL_INTEGER_TYPE_LONGLONG: + g_string_append(tmpstr, "long_"); + /* FALLTHROUGH */ + case IDL_INTEGER_TYPE_LONG: + g_string_append(tmpstr, "long"); + break; + } + break; + case IDLN_TYPE_STRING: + retval = "CORBA_string"; /* this is non-standard! */ + break; + case IDLN_TYPE_OCTET: + retval = "CORBA_octet"; + break; + case IDLN_TYPE_WIDE_STRING: + retval = "CORBA_wstring"; /* this is non-standard! */ + break; + case IDLN_TYPE_CHAR: + retval = "CORBA_char"; + break; + case IDLN_TYPE_WIDE_CHAR: + retval = "CORBA_wchar"; + break; + case IDLN_TYPE_BOOLEAN: + retval = "CORBA_boolean"; + break; + case IDLN_TYPE_STRUCT: + return orte_cbe_get_typespec_str(IDL_TYPE_STRUCT(tree).ident); + case IDLN_EXCEPT_DCL: + return orte_cbe_get_typespec_str(IDL_EXCEPT_DCL(tree).ident); + case IDLN_TYPE_ARRAY: + return orte_cbe_get_typespec_str(IDL_TYPE_ARRAY(tree).ident); + case IDLN_TYPE_UNION: + return orte_cbe_get_typespec_str(IDL_TYPE_UNION(tree).ident); + case IDLN_TYPE_ENUM: + return orte_cbe_get_typespec_str(IDL_TYPE_ENUM(tree).ident); + case IDLN_IDENT: + return IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(tree), "_", 0); + case IDLN_PARAM_DCL: + return orte_cbe_get_typespec_str(IDL_PARAM_DCL(tree).param_type_spec); + case IDLN_TYPE_SEQUENCE: + { + IDL_tree subtype = IDL_TYPE_SEQUENCE(tree).simple_type_spec; + char *ctmp, *base; + ctmp = orte_cbe_get_typespec_str(subtype); + /* We should have built-in alias to make this next line not needed */ + base = orte_cbe_type_is_builtin(subtype) + ? ctmp + strlen("CORBA_") : ctmp; + retval = g_strdup_printf( "CORBA_sequence_%s", base); + g_free(ctmp); + return retval; + } + break; + case IDLN_NATIVE: + retval = "gpointer"; + break; + case IDLN_FORWARD_DCL: + case IDLN_INTERFACE: + return orte_cbe_get_typespec_str(IDL_INTERFACE(tree).ident); + case IDLN_TYPE_OBJECT: + retval = "CORBA_Object"; + break; + case IDLN_TYPE_TYPECODE: + retval = "CORBA_TypeCode"; + break; + default: + g_error("We were asked to get a typename for a %s", + IDL_tree_type_names[IDL_NODE_TYPE(tree)]); + break; + } + + if (retval) + return g_strdup (retval); + else + return g_string_free (tmpstr, FALSE); +} + +void +orte_cbe_write_typespec(FILE *of, IDL_tree tree) +{ + char *name = orte_cbe_get_typespec_str(tree); + fprintf( of, name); + g_free(name); +} + +/* Writes the value of the constant in 'tree' to file handle 'of' */ +static char * +orte_cbe_get_const(IDL_tree tree) +{ + char *opc = NULL, *retval, *ctmp; + GString *tmpstr = g_string_new(NULL); + + switch(IDL_NODE_TYPE(tree)) { + case IDLN_BOOLEAN: + g_string_printf(tmpstr, "%s", IDL_BOOLEAN(tree).value?"CORBA_TRUE":"CORBA_FALSE"); + break; + case IDLN_CHAR: + g_string_printf(tmpstr, "'%s'", IDL_CHAR(tree).value); + break; + case IDLN_FLOAT: + g_string_printf(tmpstr, "%f", IDL_FLOAT(tree).value); + break; + case IDLN_INTEGER: + g_string_printf(tmpstr, "%" IDL_LL "d", IDL_INTEGER(tree).value); + break; + case IDLN_STRING: + g_string_printf(tmpstr, "\"%s\"", IDL_STRING(tree).value); + break; + case IDLN_WIDE_CHAR: + g_string_printf(tmpstr, "L'%ls'", IDL_WIDE_CHAR(tree).value); + break; + case IDLN_WIDE_STRING: + g_string_printf(tmpstr, "L\"%ls\"", IDL_WIDE_STRING(tree).value); + break; + case IDLN_BINOP: + g_string_printf(tmpstr, "("); + ctmp = orte_cbe_get_const(IDL_BINOP(tree).left); + g_string_append(tmpstr, ctmp); + g_free(ctmp); + switch(IDL_BINOP(tree).op) { + case IDL_BINOP_OR: + opc = "|"; + break; + case IDL_BINOP_XOR: + opc = "^"; + break; + case IDL_BINOP_AND: + opc = "&"; + break; + case IDL_BINOP_SHR: + opc = ">>"; + break; + case IDL_BINOP_SHL: + opc = "<<"; + break; + case IDL_BINOP_ADD: + opc = "+"; + break; + case IDL_BINOP_SUB: + opc = "-"; + break; + case IDL_BINOP_MULT: + opc = "*"; + break; + case IDL_BINOP_DIV: + opc = "/"; + break; + case IDL_BINOP_MOD: + opc = "%"; + break; + } + g_string_append_printf(tmpstr, " %s ", opc); + ctmp = orte_cbe_get_const(IDL_BINOP(tree).right); + g_string_append_printf(tmpstr, "%s)", ctmp); + g_free(ctmp); + break; + case IDLN_UNARYOP: + switch(IDL_UNARYOP(tree).op) { + case IDL_UNARYOP_PLUS: opc = "+"; break; + case IDL_UNARYOP_MINUS: opc = "-"; break; + case IDL_UNARYOP_COMPLEMENT: opc = "~"; break; + } + ctmp = orte_cbe_get_const(IDL_UNARYOP(tree).operand); + g_string_printf(tmpstr, "%s%s", opc, ctmp); + g_free(ctmp); + break; + case IDLN_IDENT: + { + char *id; + id = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(tree), "_", 0); + g_string_printf(tmpstr, "%s", id); + g_free(id); + } + break; + default: + g_error("We were asked to print a constant for %s", IDL_tree_type_names[tree->_type]); + break; + } + + retval = tmpstr->str; + + g_string_free(tmpstr, FALSE); + + return retval; +} + +void +orte_cbe_write_const(FILE *of, IDL_tree tree) +{ + char *ctmp; + + ctmp = orte_cbe_get_const(tree); + fprintf(of, "%s", ctmp); + g_free(ctmp); +} + +/* This is the WORST HACK in the WORLD, really truly, but the C preprocessor doesn't allow us to use + strings, so we have to work around it by using individual characters. */ +void +orte_cbe_id_define_hack(FILE *fh, const char *def_prefix, const char *def_name, const char *def_value) +{ + int i, n; + n = strlen(def_value); + for(i = 0; i < n; i++) + fprintf(fh, "#define %s_%s_%d '%c'\n", def_prefix, def_name, i, def_value[i]); +} diff --git a/orte/idl-compiler/orte-idl-driver.c b/orte/idl-compiler/orte-idl-driver.c new file mode 100644 index 0000000..50d4e93 --- /dev/null +++ b/orte/idl-compiler/orte-idl-driver.c @@ -0,0 +1,100 @@ +/************************************************************************** + + orbit-idl-driver.c (Dispatch parsed tree to various backends) + + Copyright (C) 1999 Elliot Lee + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: orte-idl-driver.c,v 1.1 2005/02/23 10:14:28 smolik Exp $ + +***************************************************************************/ + +//#include "config.h" + +#include "orte-idl2.h" +//#include "orte-idl-backend.h" +#include "orte-idl-c-backend.h" + +#include + +static void +orbit_idl_tree_fake_ops (IDL_tree tree, IDL_ns ns) +{ + IDL_tree node; + + if (!tree) + return; + + switch(IDL_NODE_TYPE(tree)) { + case IDLN_MODULE: + orbit_idl_tree_fake_ops (IDL_MODULE (tree).definition_list, ns); + break; + case IDLN_INTERFACE: + orbit_idl_tree_fake_ops (IDL_INTERFACE (tree).body, ns); + break; + case IDLN_LIST: + for (node = tree; node; node = IDL_LIST (node).next) + orbit_idl_tree_fake_ops (IDL_LIST (node).data, ns); + break; + case IDLN_ATTR_DCL: + orbit_idl_attr_fake_ops (tree, ns); + break; + default: + break; + } +} + +gboolean +orbit_idl_to_backend (const char *filename, + OIDL_Run_Info *rinfo) +{ + IDL_ns ns; + IDL_tree tree; + int errcode; + gboolean retval; + + errcode = IDL_parse_filename ( + filename, rinfo->cpp_args, NULL, + &tree, &ns, + (rinfo->show_cpp_errors ? IDLF_SHOW_CPP_ERRORS : 0) | + (rinfo->is_pidl ? IDLF_XPIDL : 0) | + (rinfo->onlytop ? IDLF_INHIBIT_INCLUDES : 0) | + IDLF_TYPECODES | + IDLF_SRCFILES | + IDLF_CODEFRAGS, + rinfo->idl_warn_level); + + rinfo->ns = ns; + + if (rinfo->debug_level > 3) + orbit_idl_print_node (tree, 0); + + if (errcode != IDL_SUCCESS) { + if (errcode == -1) + g_warning ("Parse of %s failed: %s", filename, g_strerror (errno)); + + return 0; + } + + orbit_idl_tree_fake_ops (tree, ns); + + if (!strcmp (rinfo->output_language, "c")) + retval = orbit_idl_output_c (tree, rinfo); +/* else + retval = orbit_idl_backend_output (rinfo, tree); +*/ + return retval; +} diff --git a/orte/idl-compiler/orte-idl-main.c b/orte/idl-compiler/orte-idl-main.c new file mode 100644 index 0000000..ddece3d --- /dev/null +++ b/orte/idl-compiler/orte-idl-main.c @@ -0,0 +1,183 @@ +/************************************************************************** + + orbit-idl-main.c (Driver program for the IDL parser & backend) + + Copyright (C) 1999 Elliot Lee + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: orte-idl-main.c,v 1.1 2005/02/23 10:14:28 smolik Exp $ + +***************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#include "orte-idl2.h" + +/* Settings made from the command line (prefaced with cl_) */ +static gboolean cl_disable_headers = FALSE, + cl_disable_impls = FALSE; + +static int cl_idlwarnlevel = 2; +static int cl_debuglevel = 0; +static int cl_is_pidl = 0; +static char *cl_output_lang = "c"; +static char *cl_header_guard_prefix = ""; +static char *cl_deps_file = NULL; +static gboolean cl_onlytop = FALSE; + +#define BASE_CPP_ARGS "-D__ORBIT_IDL__ " +static GString *cl_cpp_args; + +#define INDENT_COMMAND "cat" + +static char *c_output_formatter = INDENT_COMMAND; + +/* Callbacks for popt */ +static void +cl_libIDL_version_callback(poptContext con, enum poptCallbackReason reason, + const struct poptOption *opt, char *arg, + void *data) +{ + g_print("libIDL %s (CORBA %s)", + IDL_get_libver_string(), + IDL_get_IDLver_string()); + + exit(0); +} + +static void +cl_cpp_callback(poptContext con, enum poptCallbackReason reason, + const struct poptOption *opt, char *arg, + void *data) +{ + g_assert(opt!=NULL); + + if(opt->shortName=='D') + g_string_append(cl_cpp_args, "-D"); + else if(opt->shortName=='I') + g_string_append(cl_cpp_args, "-I"); + + g_string_append(cl_cpp_args, arg); + g_string_append_c(cl_cpp_args, ' '); +} + +static const +struct poptOption cl_libIDL_callback_options[] = { + {NULL, '\0', POPT_ARG_CALLBACK, (void *)cl_libIDL_version_callback, + 0, NULL, NULL}, + {"libIDL-version", '\0', POPT_ARG_NONE, NULL, 0, + "Show version of libIDL used.", NULL}, + {NULL, '\0', 0, NULL, 0, NULL, NULL} +}; + +static const +struct poptOption cl_cpp_callback_options[] = { + {NULL, '\0', POPT_ARG_CALLBACK, (void *)cl_cpp_callback, 0, NULL, NULL}, + {"define", 'D', POPT_ARGFLAG_ONEDASH | POPT_ARG_STRING, NULL, 0, + "Define value in preprocessor", NULL}, + {"include", 'I', POPT_ARGFLAG_ONEDASH | POPT_ARG_STRING, NULL, 0, + "Add search path for include files", NULL}, + {NULL, '\0', 0, NULL, 0, NULL, NULL} +}; + +static const +struct poptOption options[] = { + {NULL, '\0', POPT_ARG_INCLUDE_TABLE, &cl_cpp_callback_options, 0, NULL, NULL}, + {NULL, '\0', POPT_ARG_INCLUDE_TABLE, &cl_libIDL_callback_options, 0, NULL, NULL}, + {"lang", 'l', POPT_ARG_STRING, &cl_output_lang, 0, "Output language (default is C)", NULL}, + {"debug", 'd', POPT_ARG_INT, &cl_debuglevel, 0, "Debug level 0 to 4", NULL}, + {"idlwarnlevel", '\0', POPT_ARG_INT, &cl_idlwarnlevel, 0, "IDL warning level 0 to 4, default is 2", NULL}, + {"noheaders", '\0', POPT_ARG_NONE, &cl_disable_headers, 0, "Don't output headers", NULL}, + {"noimpls", '\0', POPT_ARG_NONE, &cl_disable_impls, 0, "Don't output implementations", NULL}, + {"c-output-formatter", '\0', POPT_ARG_STRING, &c_output_formatter, 0, "Program to use to format output (normally, indent)", "PROGRAM"}, + {"onlytop", '\0', POPT_ARG_NONE, &cl_onlytop, 0, "Inhibit includes", NULL}, + {"pidl", '\0', POPT_ARG_NONE, &cl_is_pidl, 0, "Treat as Pseudo IDL", NULL}, + {"deps", '\0', POPT_ARG_STRING, &cl_deps_file, 0, "Generate dependency info suitable for inclusion in Makefile", "FILENAME"}, + {"headerguardprefix", '\0', POPT_ARG_STRING, &cl_header_guard_prefix, 0, "Prefix for #ifdef header guards. Sometimes useful to avoid conflicts.", NULL}, + POPT_AUTOHELP + {NULL, '\0', 0, NULL, 0, NULL, NULL} +}; + + +/********** main routines **********/ +int main(int argc, const char *argv[]) +{ + poptContext pcon; + int rc, retval = 0; + const char *arg; + OIDL_Run_Info rinfo; + + /* Argument parsing, etc. */ + cl_cpp_args = g_string_new("-D__ORBIT_IDL__ "); + + if(getenv("C_OUTPUT_FORMATTER")) + c_output_formatter = getenv("C_OUTPUT_FORMATTER"); + + pcon = poptGetContext ("orte-idl", argc, argv, options, 0); + poptSetOtherOptionHelp (pcon, ""); + + if(argc < 2) { + poptPrintUsage(pcon, stdout, 0); + return 0; + } + + if((rc=poptGetNextOpt(pcon)) < -1) { + g_print ("orte-idl: bad argument %s: %s\n", + poptBadOption(pcon, POPT_BADOPTION_NOALIAS), + poptStrerror(rc)); + exit(0); + } + + /* Prep our run info for the backend */ + rinfo.cpp_args = cl_cpp_args->str; + rinfo.debug_level = cl_debuglevel; + rinfo.idl_warn_level = cl_idlwarnlevel; + rinfo.is_pidl = cl_is_pidl; + rinfo.enabled_passes = + (cl_disable_headers?0:OUTPUT_HEADERS) + |(cl_disable_impls?0:OUTPUT_IMPLS); + + rinfo.deps_file = cl_deps_file; + + rinfo.output_formatter = c_output_formatter; + rinfo.output_language = cl_output_lang; + rinfo.header_guard_prefix = cl_header_guard_prefix; + rinfo.onlytop = cl_onlytop; + +// printf ("orbit-idl-2 " VERSION " compiling\n"); + printf (" %s mode, passes: %s%s\n\n", + rinfo.is_pidl ? "pidl" : "", + cl_disable_headers ? "" : "headers ", + cl_disable_impls ? "" : "impls "); + + /* Do it */ + while((arg=poptGetArg(pcon))!=NULL) { + rinfo.input_filename = g_strdup (arg); /* g_path_get_basename(arg); - what !? */ + if (!orbit_idl_to_backend(arg, &rinfo)) { + g_warning("%s compilation failed", arg); + retval = 1; + } + g_free(rinfo.input_filename); + } + + return retval; +} diff --git a/orte/idl-compiler/orte-idl-utils.c b/orte/idl-compiler/orte-idl-utils.c new file mode 100644 index 0000000..c2dee90 --- /dev/null +++ b/orte/idl-compiler/orte-idl-utils.c @@ -0,0 +1,720 @@ +//#include "config.h" +#include "orte-idl2.h" +#include + +void +orbit_idl_check_oneway_op (IDL_tree op) +{ + g_assert (IDL_NODE_TYPE(op) == IDLN_OP_DCL); + + if (IDL_OP_DCL (op).f_oneway) { + IDL_tree sub; + + for (sub = IDL_OP_DCL (op).parameter_dcls; sub; sub = IDL_LIST (sub).next) { + IDL_tree param = IDL_LIST (sub).data; + + if (IDL_PARAM_DCL (param).attr == IDL_PARAM_OUT || + IDL_PARAM_DCL (param).attr == IDL_PARAM_INOUT) { + g_warning ("Out or Inout parameter in declaration of oneway '%s'", + IDL_IDENT(IDL_OP_DCL(op).ident).str); + break; + } + } + + if (IDL_OP_DCL (op).op_type_spec) + g_warning ("Return value in declaration of oneway '%s'", + IDL_IDENT(IDL_OP_DCL(op).ident).str); + } +} + +void +orbit_idl_attr_fake_ops(IDL_tree attr, IDL_ns ns) +{ + IDL_tree attr_name, ident, curnode, op1, op2, intf; + GString *attrname; + OIDL_Attr_Info *setme; + + g_assert(attr && IDL_NODE_TYPE(attr) == IDLN_ATTR_DCL); + + attrname = g_string_new(NULL); + + for(curnode = IDL_ATTR_DCL(attr).simple_declarations; curnode; curnode = IDL_LIST(curnode).next) { + op1 = op2 = NULL; + + attr_name = IDL_LIST(curnode).data; + + g_string_printf(attrname, "_get_%s", + IDL_IDENT(attr_name).str); + ident = IDL_ident_new(g_strdup(attrname->str)); + IDL_IDENT_TO_NS(ident) = IDL_IDENT_TO_NS(attr_name); + op1 = IDL_op_dcl_new(0, IDL_ATTR_DCL(attr).param_type_spec, ident, NULL, NULL, NULL); + IDL_NODE_UP(op1) = IDL_NODE_UP(attr); + intf = IDL_NODE_UP (IDL_NODE_UP (op1)); + IDL_NS(ns).current = IDL_IDENT_TO_NS (IDL_INTERFACE (intf).ident); + IDL_ns_place_new(ns, ident); + + if(!IDL_ATTR_DCL(attr).f_readonly) { + g_string_printf(attrname, "_set_%s", + IDL_IDENT(attr_name).str); + ident = IDL_ident_new(g_strdup(attrname->str)); + IDL_IDENT_TO_NS(ident) = IDL_IDENT_TO_NS(attr_name); + op2 = IDL_op_dcl_new(0, NULL, ident, NULL, NULL, NULL); + IDL_NODE_UP(op2) = IDL_NODE_UP(attr); + intf = IDL_NODE_UP (IDL_NODE_UP (op2)); + IDL_NS(ns).current = IDL_IDENT_TO_NS (IDL_INTERFACE (intf).ident); + IDL_ns_place_new(ns, ident); + IDL_OP_DCL(op2).parameter_dcls = IDL_list_new( + IDL_param_dcl_new(IDL_PARAM_IN, + IDL_ATTR_DCL(attr).param_type_spec, + IDL_ident_new(g_strdup("value")))); + } + + setme = g_new0(OIDL_Attr_Info, 1); + setme->op1 = op1; + setme->op2 = op2; + attr_name->data = setme; + } + + g_string_free(attrname, TRUE); +} + +#define INDENT_INCREMENT_1 2 +#define INDENT_INCREMENT_2 4 + +static void do_indent(int level) { + int i; + for(i = 0; i < level; i++) g_print(" "); +} + +static const char * const nodenames[] = { + "DATUM", + "LOOP", + "SWITCH", + "CASE", + "COMPLEX", + "CONST", + "SET", + NULL +}; + +void +orbit_idl_print_node(IDL_tree node, int indent_level) +{ + IDL_tree curnode; + char *s; + + do_indent(indent_level); + + if(node == NULL) { + g_print("(null)\n"); + return; + } + + g_print("[%d] ", IDL_NODE_REFS(node)); + + switch(IDL_NODE_TYPE(node)) { + + case IDLN_NONE: + g_print("NONE\n"); + break; + + case IDLN_LIST: + g_print("LIST:\n"); + for(curnode = node; curnode; + curnode = IDL_LIST(curnode).next) { + orbit_idl_print_node(IDL_LIST(curnode).data, indent_level + INDENT_INCREMENT_1); + } + break; + + case IDLN_GENTREE: + break; + + case IDLN_INTEGER: + g_print("INTEGER: %" IDL_LL "d\n", IDL_INTEGER(node).value); + break; + + case IDLN_STRING: + g_print("STRING: %s\n", IDL_STRING(node).value); + break; + + case IDLN_WIDE_STRING: + g_print("WIDE STRING: %ls\n", IDL_WIDE_STRING(node).value); + break; + + case IDLN_CHAR: + g_print("CHAR: %s\n", IDL_CHAR(node).value); + break; + + case IDLN_WIDE_CHAR: + g_print("WIDE CHAR: %ls\n", IDL_WIDE_CHAR(node).value); + break; + + case IDLN_FIXED: + g_print("FIXED: %s\n", IDL_FIXED(node).value); + break; + + case IDLN_FLOAT: + g_print("FLOAT: %f\n", IDL_FLOAT(node).value); + break; + + case IDLN_BOOLEAN: + g_print("BOOLEAN: %s\n", (IDL_BOOLEAN(node).value)?"True":"False"); + break; + + case IDLN_IDENT: + s = IDL_ns_ident_to_qstring(IDL_IDENT_TO_NS(node), "_", 0); + g_print("IDENT: %s NSQ: %s RID: \"%s\"\n", + IDL_IDENT(node).str, s, + IDL_IDENT_REPO_ID(node) ? IDL_IDENT_REPO_ID(node) : ""); + g_free(s); + break; + + case IDLN_TYPE_DCL: + g_print("TYPE DCL:\n"); + orbit_idl_print_node(IDL_TYPE_DCL(node).type_spec, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("decls:\n"); + orbit_idl_print_node(IDL_TYPE_DCL(node).dcls, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_CONST_DCL: + g_print("CONST DCL:\n"); + orbit_idl_print_node(IDL_CONST_DCL(node).const_type, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("ident:\n"); + orbit_idl_print_node(IDL_CONST_DCL(node).ident, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("const_exp:\n"); + orbit_idl_print_node(IDL_CONST_DCL(node).const_exp, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_EXCEPT_DCL: + g_print("EXCEPT DCL:\n"); + orbit_idl_print_node(IDL_EXCEPT_DCL(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("members:\n"); + orbit_idl_print_node(IDL_EXCEPT_DCL(node).members, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_ATTR_DCL: + g_print("ATTR_DCL (%s):\n", (IDL_ATTR_DCL(node).f_readonly)?"readonly":"rw"); + orbit_idl_print_node(IDL_ATTR_DCL(node).param_type_spec, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("simple_declarations:\n"); + orbit_idl_print_node(IDL_ATTR_DCL(node).simple_declarations, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_OP_DCL: + g_print("OP DCL (%s):\n", (IDL_OP_DCL(node).f_oneway)?"oneway":"normal"); + orbit_idl_print_node(IDL_OP_DCL(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("op_type_spec:\n"); + orbit_idl_print_node(IDL_OP_DCL(node).op_type_spec, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("parameter_dcls:\n"); + orbit_idl_print_node(IDL_OP_DCL(node).parameter_dcls, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("raises_expr:\n"); + orbit_idl_print_node(IDL_OP_DCL(node).raises_expr, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("context_expr:\n"); + orbit_idl_print_node(IDL_OP_DCL(node).context_expr, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_PARAM_DCL: + g_print("PARAM DCL: "); + switch(IDL_PARAM_DCL(node).attr) { + case IDL_PARAM_IN: g_print("(in)\n"); break; + case IDL_PARAM_OUT: g_print("(out)\n"); break; + case IDL_PARAM_INOUT: g_print("(inout)\n"); break; + } + orbit_idl_print_node(IDL_PARAM_DCL(node).param_type_spec, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("simple_declarator:\n"); + orbit_idl_print_node(IDL_PARAM_DCL(node).simple_declarator, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_FORWARD_DCL: + g_print("FORWARD DCL:\n"); + orbit_idl_print_node(IDL_FORWARD_DCL(node).ident, indent_level + INDENT_INCREMENT_1); + break; + case IDLN_INTERFACE: + g_print("INTERFACE:\n"); + orbit_idl_print_node(IDL_INTERFACE(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("inheritance_spec:\n"); + orbit_idl_print_node(IDL_INTERFACE(node).inheritance_spec, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("body:\n"); + orbit_idl_print_node(IDL_INTERFACE(node).body, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_MODULE: + g_print("MODULE:\n"); + orbit_idl_print_node(IDL_MODULE(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("definition_list:\n"); + orbit_idl_print_node(IDL_MODULE(node).definition_list, indent_level + INDENT_INCREMENT_2); + break; + + case IDLN_TYPE_INTEGER: + if(!IDL_TYPE_INTEGER(node).f_signed) g_print("TYPE unsigned "); + switch(IDL_TYPE_INTEGER(node).f_type) { + case IDL_INTEGER_TYPE_SHORT: g_print("short\n"); break; + case IDL_INTEGER_TYPE_LONG: g_print("long\n"); break; + case IDL_INTEGER_TYPE_LONGLONG: g_print("long long\n"); break; + } + break; + case IDLN_TYPE_FLOAT: + switch(IDL_TYPE_FLOAT(node).f_type) { + case IDL_FLOAT_TYPE_FLOAT: g_print("TYPE float\n"); break; + case IDL_FLOAT_TYPE_DOUBLE: g_print("TYPE double\n"); break; + case IDL_FLOAT_TYPE_LONGDOUBLE: g_print("TYPE long double\n"); break; + } + break; + case IDLN_TYPE_FIXED: + g_print("TYPE fixed:\n"); + orbit_idl_print_node(IDL_TYPE_FIXED(node).positive_int_const, indent_level + INDENT_INCREMENT_1); + orbit_idl_print_node(IDL_TYPE_FIXED(node).integer_lit, indent_level + INDENT_INCREMENT_1); + break; + case IDLN_TYPE_STRING: + g_print("TYPE string:\n"); + orbit_idl_print_node(IDL_TYPE_STRING(node).positive_int_const, indent_level + INDENT_INCREMENT_1); + break; + case IDLN_TYPE_WIDE_STRING: + g_print("TYPE wide string:\n"); + orbit_idl_print_node(IDL_TYPE_WIDE_STRING(node).positive_int_const, indent_level + INDENT_INCREMENT_1); + break; + case IDLN_TYPE_ENUM: + g_print("TYPE enum:\n"); + orbit_idl_print_node(IDL_TYPE_ENUM(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("enumerator_list:\n"); + orbit_idl_print_node(IDL_TYPE_ENUM(node).enumerator_list, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_TYPE_ARRAY: + g_print("TYPE array:\n"); + orbit_idl_print_node(IDL_TYPE_ARRAY(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("size_list:\n"); + orbit_idl_print_node(IDL_TYPE_ARRAY(node).size_list, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_TYPE_SEQUENCE: + g_print("TYPE sequence:\n"); + orbit_idl_print_node(IDL_TYPE_SEQUENCE(node).simple_type_spec, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("positive_int_const:\n"); + orbit_idl_print_node(IDL_TYPE_SEQUENCE(node).positive_int_const, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_TYPE_STRUCT: + g_print("TYPE struct:\n"); + orbit_idl_print_node(IDL_TYPE_STRUCT(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("member_list:\n"); + orbit_idl_print_node(IDL_TYPE_STRUCT(node).member_list, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_TYPE_UNION: + g_print("TYPE union:\n"); + orbit_idl_print_node(IDL_TYPE_UNION(node).ident, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("switch_type_spec:\n"); + orbit_idl_print_node(IDL_TYPE_UNION(node).switch_type_spec, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("switch_body:\n"); + orbit_idl_print_node(IDL_TYPE_UNION(node).switch_body, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_MEMBER: + g_print("MEMBER:\n"); + orbit_idl_print_node(IDL_MEMBER(node).type_spec, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("dcls:\n"); + orbit_idl_print_node(IDL_MEMBER(node).dcls, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_CASE_STMT: + g_print("CASE_STMT:\n"); + orbit_idl_print_node(IDL_CASE_STMT(node).labels, indent_level + INDENT_INCREMENT_1); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("element_spec:\n"); + orbit_idl_print_node(IDL_CASE_STMT(node).element_spec, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_BINOP: + g_print("BINOP "); + switch(IDL_BINOP(node).op) { + case IDL_BINOP_OR: g_print("or:\n"); break; + case IDL_BINOP_XOR: g_print("xor:\n"); break; + case IDL_BINOP_AND: g_print("and:\n"); break; + case IDL_BINOP_SHR: g_print("shr:\n"); break; + case IDL_BINOP_SHL: g_print("shl:\n"); break; + case IDL_BINOP_ADD: g_print("add:\n"); break; + case IDL_BINOP_SUB: g_print("sub:\n"); break; + case IDL_BINOP_MULT: g_print("mult:\n"); break; + case IDL_BINOP_DIV: g_print("div:\n"); break; + case IDL_BINOP_MOD: g_print("mod:\n"); break; + } + do_indent(indent_level + INDENT_INCREMENT_1); g_print("left:\n"); + orbit_idl_print_node(IDL_BINOP(node).left, indent_level + INDENT_INCREMENT_2); + do_indent(indent_level + INDENT_INCREMENT_1); g_print("right:\n"); + orbit_idl_print_node(IDL_BINOP(node).right, indent_level + INDENT_INCREMENT_2); + break; + case IDLN_UNARYOP: + g_print("UNARYOP "); + switch(IDL_UNARYOP(node).op) { + case IDL_UNARYOP_PLUS: g_print("plus:\n"); break; + case IDL_UNARYOP_MINUS: g_print("minus:\n"); break; + case IDL_UNARYOP_COMPLEMENT: g_print("complement:\n"); break; + } + orbit_idl_print_node(IDL_UNARYOP(node).operand, indent_level + INDENT_INCREMENT_1); + break; + case IDLN_TYPE_CHAR: + g_print("TYPE char\n"); + break; + case IDLN_TYPE_WIDE_CHAR: + g_print("TYPE wide char\n"); + break; + case IDLN_TYPE_BOOLEAN: + g_print("TYPE boolean\n"); + break; + case IDLN_TYPE_OCTET: + g_print("TYPE octet\n"); + break; + case IDLN_TYPE_OBJECT: + g_print("TYPE object\n"); + break; + case IDLN_TYPE_ANY: + g_print("TYPE any\n"); + break; + case IDLN_TYPE_TYPECODE: + g_print("TYPE TypeCode\n"); + break; + case IDLN_CODEFRAG: + g_print("CODEFRAG\n"); + break; + default: + g_print("unhandled %d\n", IDL_NODE_TYPE(node)); + } +} + +static void +IDL_tree_traverse_helper(IDL_tree p, GFunc f, + gconstpointer func_data, + GHashTable *visited_nodes, + gboolean include_self) +{ + IDL_tree curitem; + + if (g_hash_table_lookup (visited_nodes, p)) + return; + + g_hash_table_insert (visited_nodes, p, ((gpointer)1)); + + for (curitem = IDL_INTERFACE (p).inheritance_spec; curitem; + curitem = IDL_LIST (curitem).next) { + IDL_tree_traverse_helper (IDL_get_parent_node + (IDL_LIST (curitem).data, IDLN_INTERFACE, NULL), f, func_data, visited_nodes, TRUE); + } + + if (include_self) + f(p, (gpointer)func_data); +} + +void +IDL_tree_traverse_parents_full (IDL_tree p, + GFunc f, + gconstpointer func_data, + gboolean include_self) +{ + GHashTable *visited_nodes = g_hash_table_new (NULL, g_direct_equal); + + if (!(p && f)) + return; + + if (IDL_NODE_TYPE(p) != IDLN_INTERFACE) + p = IDL_get_parent_node (p, IDLN_INTERFACE, NULL); + + if (!p) + return; + + IDL_tree_traverse_helper (p, f, func_data, visited_nodes, include_self); + + g_hash_table_destroy (visited_nodes); +} + +void +IDL_tree_traverse_parents (IDL_tree p, + GFunc f, + gconstpointer func_data) +{ + IDL_tree_traverse_parents_full (p, f, func_data, TRUE); +} + +/* For use by below function */ +static const int * const +orbit_cbe_get_typeoffsets_table (void) +{ + static int typeoffsets[IDLN_LAST]; + static gboolean initialized = FALSE; + + if (!initialized) { + int i; + + for (i = 0; i < IDLN_LAST; ++i) + typeoffsets[i] = -1; + + typeoffsets[IDLN_FORWARD_DCL] = 8; /* (same as objref) */ + typeoffsets[IDLN_TYPE_INTEGER] = 0; + typeoffsets[IDLN_TYPE_FLOAT] = 0; + typeoffsets[IDLN_TYPE_FIXED] = 3; + typeoffsets[IDLN_TYPE_CHAR] = 5; + typeoffsets[IDLN_TYPE_WIDE_CHAR] = 6; + typeoffsets[IDLN_TYPE_STRING] = 12; + typeoffsets[IDLN_TYPE_WIDE_STRING] = 13; + typeoffsets[IDLN_TYPE_BOOLEAN] = 4; + typeoffsets[IDLN_TYPE_OCTET] = 7; + typeoffsets[IDLN_TYPE_ANY] = 16; + typeoffsets[IDLN_TYPE_OBJECT] = 9; + typeoffsets[IDLN_TYPE_TYPECODE] = 9; + typeoffsets[IDLN_TYPE_ENUM] = 8; + typeoffsets[IDLN_TYPE_SEQUENCE] = 14; + typeoffsets[IDLN_TYPE_ARRAY] = 15; + typeoffsets[IDLN_TYPE_STRUCT] = 10; + typeoffsets[IDLN_TYPE_UNION] = 11; + typeoffsets[IDLN_NATIVE] = 15; /* no pointers ever, same as fixed array */ + typeoffsets[IDLN_INTERFACE] = 9; /* (same as objref) */ + + initialized = TRUE; + } + + return typeoffsets; +} + + +/** + This is a rather hairy function. Its purpose is to output the + required number of *'s that indicate the amount of indirection + for input, output, & input-output parameters, and return + values. We do this by having a table of the number of *'s for + each type and purpose (nptrrefs_required), taken from 19.20 + of the CORBA 2.2 spec, and then having a table that translates + from the IDLN_* enums into an index into nptrrefs_required (typeoffsets) +**/ +gint +oidl_param_info(IDL_tree in_param, IDL_ParamRole role, gboolean *isSlice) +{ + IDL_tree param; + const int * const typeoffsets = orbit_cbe_get_typeoffsets_table (); + const int nptrrefs_required[][4] = { + {0,1,1,0} /* float */, + {0,1,1,0} /* double */, + {0,1,1,0} /* long double */, + {1,1,1,0} /* fixed_d_s 3 */, + {0,1,1,0} /* boolean */, + {0,1,1,0} /* char */, + {0,1,1,0} /* wchar */, + {0,1,1,0} /* octet */, + {0,1,1,0} /* enum */, + {0,1,1,0} /* objref */, + {1,1,1,0} /* fixed struct 10 */, + {1,1,1,0} /* fixed union */, + {0,1,1,0} /* string */, + {0,1,1,0} /* wstring */, + {1,1,2,1} /* sequence */, + {0,0,0,0} /* fixed array */, + {1,1,2,1} /* any 16 */ + }; + int retval = 0; + int typeidx; + + *isSlice = FALSE; + + if(!in_param) + return 0; /* void */ + + /* Now, how do we use this table? :) */ + param = orbit_cbe_get_typespec (in_param); + + g_assert (param); + + switch (IDL_NODE_TYPE (param)) { + case IDLN_TYPE_STRUCT: + case IDLN_TYPE_UNION: + if (((role == DATA_RETURN) || (role == DATA_OUT)) && + !orbit_cbe_type_is_fixed_length(param)) + retval++; + break; + + case IDLN_TYPE_ARRAY: + if ( role == DATA_RETURN ) { + *isSlice = TRUE; + retval = 1; + + } else if (role == DATA_OUT && + !orbit_cbe_type_is_fixed_length (param)) { + *isSlice = TRUE; + retval = 2; + } + break; + + case IDLN_NATIVE: + if ( IDL_NATIVE (param).user_type + && strcmp (IDL_NATIVE (param).user_type, + "IDL_variable_length_struct") == 0 ) + return role == DATA_OUT ? 2 : 1; + break; + + case IDLN_EXCEPT_DCL: + fprintf (stderr, "Error: exception declared at '%s:%d' cannot be " + "used as a method parameter\n", in_param->_file, + in_param->_line); + exit (1); + break; + default: + break; + } + + /* ERROR ! */ + typeidx = typeoffsets [IDL_NODE_TYPE (param)]; + g_assert (typeidx >= 0); + + switch (role) { + case DATA_IN: + role = 0; + break; + case DATA_INOUT: + role = 1; + break; + case DATA_OUT: + role = 2; + break; + case DATA_RETURN: + role = 3; + break; + default: + g_assert_not_reached (); + break; + } + + retval += nptrrefs_required [typeidx] [role]; + + return retval; +} + +/** + Fixed-length-ness is a property that CORBA defines, and it is + a property of each type, not each kind. Furthermore, it doesnt + depend on the language mapping. Generally, the GIOP coding + a fixed length variable will be a known length (determined by the TC), + regardless of the data within the variable. + + With the C mapping, fixed --> nothing to free in this node + Note that in the C mapping, everything is a struct and is + fixed length in that sense. Thus variable length types show + up in C as pointers. + + Recursive types introduced by sequences are not a problem for this + func, because sequences are not fixed length, and terminate + the recursion. +**/ + +gboolean +orbit_cbe_type_is_fixed_length(IDL_tree ts) +{ + gboolean is_fixed = TRUE; + IDL_tree curitem; + + ts = orbit_cbe_get_typespec(ts); + switch(IDL_NODE_TYPE(ts)) { + case IDLN_TYPE_FLOAT: + case IDLN_TYPE_INTEGER: + case IDLN_TYPE_ENUM: + case IDLN_TYPE_CHAR: + case IDLN_TYPE_WIDE_CHAR: + case IDLN_TYPE_OCTET: + case IDLN_TYPE_BOOLEAN: + return TRUE; + break; + case IDLN_TYPE_SEQUENCE: + case IDLN_TYPE_STRING: + case IDLN_TYPE_WIDE_STRING: + case IDLN_TYPE_OBJECT: + case IDLN_FORWARD_DCL: + case IDLN_INTERFACE: + case IDLN_TYPE_ANY: + case IDLN_NATIVE: + case IDLN_TYPE_TYPECODE: + return FALSE; + break; + case IDLN_TYPE_UNION: + for(curitem = IDL_TYPE_UNION(ts).switch_body; curitem; + curitem = IDL_LIST(curitem).next) { + is_fixed &= orbit_cbe_type_is_fixed_length(IDL_LIST(IDL_CASE_STMT(IDL_LIST(curitem).data).element_spec).data); + } + return is_fixed; + break; + case IDLN_EXCEPT_DCL: + case IDLN_TYPE_STRUCT: + for(curitem = IDL_TYPE_STRUCT(ts).member_list; curitem; + curitem = IDL_LIST(curitem).next) { + is_fixed &= orbit_cbe_type_is_fixed_length(IDL_LIST(curitem).data); + } + return is_fixed; + break; + case IDLN_TYPE_ARRAY: + return orbit_cbe_type_is_fixed_length(IDL_TYPE_DCL(IDL_get_parent_node(ts, IDLN_TYPE_DCL, NULL)).type_spec); + break; + case IDLN_TYPE_DCL: + return orbit_cbe_type_is_fixed_length(IDL_TYPE_DCL(ts).type_spec); + break; + case IDLN_IDENT: + case IDLN_LIST: + return orbit_cbe_type_is_fixed_length(IDL_NODE_UP(ts)); + break; + case IDLN_MEMBER: + return orbit_cbe_type_is_fixed_length(IDL_MEMBER(ts).type_spec); + break; + default: + g_warning("I'm not sure if type %s is fixed-length", IDL_tree_type_names[IDL_NODE_TYPE(ts)]); + return FALSE; + } +} + +IDL_tree +orbit_cbe_get_typespec(IDL_tree node) +{ + if(node == NULL) + return NULL; + + switch(IDL_NODE_TYPE(node)) { + case IDLN_TYPE_INTEGER: + case IDLN_TYPE_FLOAT: + case IDLN_TYPE_FIXED: + case IDLN_TYPE_CHAR: + case IDLN_TYPE_WIDE_CHAR: + case IDLN_TYPE_STRING: + case IDLN_TYPE_WIDE_STRING: + case IDLN_TYPE_BOOLEAN: + case IDLN_TYPE_OCTET: + case IDLN_TYPE_ANY: + case IDLN_TYPE_OBJECT: + case IDLN_TYPE_ENUM: + case IDLN_TYPE_SEQUENCE: + case IDLN_TYPE_ARRAY: + case IDLN_TYPE_STRUCT: + case IDLN_TYPE_UNION: + case IDLN_EXCEPT_DCL: + case IDLN_FORWARD_DCL: + case IDLN_INTERFACE: + case IDLN_NATIVE: + case IDLN_TYPE_TYPECODE: + return node; + break; + case IDLN_TYPE_DCL: + return orbit_cbe_get_typespec(IDL_TYPE_DCL(node).type_spec); + break; + case IDLN_PARAM_DCL: + return orbit_cbe_get_typespec(IDL_PARAM_DCL(node).param_type_spec); + break; + case IDLN_MEMBER: + return orbit_cbe_get_typespec(IDL_MEMBER(node).type_spec); + break; + case IDLN_LIST: + case IDLN_IDENT: + return orbit_cbe_get_typespec(IDL_get_parent_node(node, IDLN_ANY, NULL)); + break; + default: + g_error("Unhandled node type %s!", IDL_tree_type_names[IDL_NODE_TYPE(node)]); + return NULL; + } +} + +IDL_ParamRole +oidl_attr_to_paramrole(enum IDL_param_attr attr) +{ + switch(attr) { + case IDL_PARAM_IN: + return DATA_IN; + case IDL_PARAM_OUT: + return DATA_OUT; + case IDL_PARAM_INOUT: + return DATA_INOUT; + default: + g_warning("Unknown IDL_param_attr %d", attr); + return -1; + } +} diff --git a/orte/idl-compiler/orte-idl2.h b/orte/idl-compiler/orte-idl2.h new file mode 100644 index 0000000..478c972 --- /dev/null +++ b/orte/idl-compiler/orte-idl2.h @@ -0,0 +1,37 @@ +#ifndef ORTE_IDL2_H +#define ORTE_IDL2_H 1 + +#include "orte-idl3-types.h" + +gboolean orbit_idl_to_backend (const char *filename, + OIDL_Run_Info *rinfo); + +gboolean orbit_idl_backend_output (OIDL_Run_Info *rinfo, + IDL_tree tree); + +/* Utils */ +void orbit_idl_attr_fake_ops (IDL_tree attr, + IDL_ns ns); +void orbit_idl_print_node (IDL_tree node, + int indent_level); +void IDL_tree_traverse_parents (IDL_tree p, + GFunc f, + gconstpointer func_data); +void IDL_tree_traverse_parents_full (IDL_tree p, + GFunc f, + gconstpointer func_data, + gboolean include_self); +gboolean orbit_cbe_type_contains_complex (IDL_tree ts); +void orbit_idl_check_oneway_op (IDL_tree op); + +typedef enum { DATA_IN=1, DATA_INOUT=2, DATA_OUT=4, DATA_RETURN=8 } IDL_ParamRole; +gint oidl_param_info(IDL_tree param, IDL_ParamRole role, gboolean *isSlice); + +gboolean orbit_cbe_type_is_fixed_length(IDL_tree ts); +IDL_tree orbit_cbe_get_typespec(IDL_tree node); +IDL_ParamRole oidl_attr_to_paramrole(enum IDL_param_attr attr); + +#define ORTE_RETVAL_VAR_NAME "_ORTE_retval" +#define ORTE_EPV_VAR_NAME "_ORTE_epv" + +#endif /* ORBIT_IDL2_H */ diff --git a/orte/idl-compiler/orte-idl3-types.h b/orte/idl-compiler/orte-idl3-types.h new file mode 100644 index 0000000..4ccd9db --- /dev/null +++ b/orte/idl-compiler/orte-idl3-types.h @@ -0,0 +1,41 @@ +#ifndef ORTE_IDL3_TYPES_H +#define ORTE_IDL3_TYPES_H 1 + +#include +#include +#include +#include + +typedef struct _OIDL_Marshal_Context OIDL_Marshal_Context; + +#define OUTPUT_NUM_PASSES 7 + +typedef struct { + char *cpp_args; + int debug_level; + int idl_warn_level; + int show_cpp_errors; + int is_pidl; + + enum { OUTPUT_HEADERS=1<<0, + OUTPUT_IMPLS=1<<1 + } enabled_passes; + + char *output_formatter; + + char *output_language; + char *input_filename; + char *backend_directory; + char *deps_file; + char *header_guard_prefix; + gboolean onlytop; + + IDL_ns ns; /* Use ns instead of namespace because that's a C++ reserved keyword */ +} OIDL_Run_Info; + +typedef struct { + IDL_tree op1; + IDL_tree op2; +} OIDL_Attr_Info; + +#endif diff --git a/orte/include/Makefile.omk b/orte/include/Makefile.omk index c5ec5e7..9288771 100644 --- a/orte/include/Makefile.omk +++ b/orte/include/Makefile.omk @@ -1,10 +1,13 @@ -default_CONFIG = CONFIG_OC_ETH_ORTE=x - ifeq ($(CONFIG_OC_ETH_ORTE),y) +renamed_include_HEADERS = \ +orte/orte_config_omk_unix.h->orte/orte_config.h + nobase_include_HEADERS = \ orte.h \ -orte_config_omk_unix.h \ +orte/cdr.h \ +orte/basic_types.h \ +orte/orte_config_omk_unix.h \ orte/typedefs_defines_rtps.h \ orte/defines_api.h \ orte/typedefs_api.h \ @@ -15,13 +18,13 @@ endif #CONFIG_OC_ETH_ORTE ############################################################################# # RT-Linux version of build -default_CONFIG = CONFIG_OC_ETH_ORTE_RTL=x - ifeq ($(CONFIG_OC_ETH_ORTE_RTL),y) nobase_rtlinux_HEADERS = \ orte.h \ -orte_config_omk_rtl.h \ +orte/cdr.h \ +orte/basic_types.h \ +orte/orte_config_omk_rtl.h \ orte/typedefs_defines_rtps.h \ orte/defines_api.h \ orte/typedefs_api.h \ diff --git a/orte/include/defines.h b/orte/include/defines.h index 5ff8bb9..4983d5b 100644 --- a/orte/include/defines.h +++ b/orte/include/defines.h @@ -42,9 +42,11 @@ extern "C" { #ifndef ENABLE_MEM_CHECK #define MALLOC malloc #define FREE free + #define REALLOC realloc #else #define MALLOC mem_check_malloc #define FREE mem_check_free + #define REALLOC mem_check_realloc #endif ////////////////////////////////////////////////////////////////////////////// @@ -72,19 +74,8 @@ extern "C" { #define HASH_INUSE 0x11111111 #define HASH_DELETED 0xffffffff -////////////////////////////////////////////////////////////////////////////// -// conv -//#if defined CONFIG_ORTE_WIN || defined _MSC_VER || !define HAVE_BYTESWAP_H -#if !defined HAVE_BYTESWAP_H && !defined HAVE_ASM_BYTEORDER_H -/* Swap bytes in 16 bit value. */ -#define bswap_16(x) \ - ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) +#define GUID_PRINTF(g) (g).hid,(g).aid,(g).oid -/* Swap bytes in 32 bit value. */ -#define bswap_32(x) \ - ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) -#endif #ifdef __cplusplus } /* extern "C"*/ diff --git a/orte/include/jorte/4all.h b/orte/include/jorte/4all.h new file mode 100644 index 0000000..8dfcd81 --- /dev/null +++ b/orte/include/jorte/4all.h @@ -0,0 +1,13 @@ +/* 4all.h */ +/* +typedef struct +{ + JavaVM *jvm; + jobject obj; + jobject rinfo; + int value; // !! pro testovani +} JORTECallbackContext_t; +*/ +// pro test purposes only +#define TEST_STAGE + diff --git a/orte/include/jorte/getNtpTime.h b/orte/include/jorte/getNtpTime.h new file mode 100644 index 0000000..b43b1d8 --- /dev/null +++ b/orte/include/jorte/getNtpTime.h @@ -0,0 +1,29 @@ +/* getNtpTime.h */ + +/** + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +#include "orte.h" + +extern NtpTime +getNtpTime(JNIEnv *env, jobject obj); + diff --git a/orte/include/jorte/jorte.h b/orte/include/jorte/jorte.h new file mode 100644 index 0000000..9c7a5e3 --- /dev/null +++ b/orte/include/jorte/jorte.h @@ -0,0 +1,60 @@ +/* jorte.h */ + +/** + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +/* +#ifndef _JORTE_H +#define _JORTE_H +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "orte.h" + +// switch program behaviour (test stage,....) +#include "4all.h" + +// NtpTime +#include "getNtpTime.h" + +// new type definitions +#include "typedefs_defines_jorte.h" + +// auto-generated headers by JNI +#include "org_ocera_orte_tools_Conversions.h" +#include "org_ocera_orte_Domain.h" +#include "org_ocera_orte_DomainEvents.h" +#include "org_ocera_orte_DomainProp.h" +#include "org_ocera_orte_tools_GetORTEConstant.h" +#include "org_ocera_orte_JOrte.h" +#include "org_ocera_orte_Manager.h" +#include "org_ocera_orte_Publication.h" +#include "org_ocera_orte_Subscription.h" + +#ifdef __cplusplus +} /* extern "C"*/ +#endif + +/* +#endif // _JORTE_H +*/ diff --git a/orte/include/jorte/org_ocera_orte_Domain.h b/orte/include/jorte/org_ocera_orte_Domain.h new file mode 100644 index 0000000..5b14e2d --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_Domain.h @@ -0,0 +1,61 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_Domain */ + +#ifndef _Included_org_ocera_orte_Domain +#define _Included_org_ocera_orte_Domain +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_Domain + * Method: jORTEDomainDefaultAppCreate + * Signature: (IZ)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Domain_jORTEDomainDefaultAppCreate + (JNIEnv *, jclass, jint, jboolean); + +/* + * Class: org_ocera_orte_Domain + * Method: jORTEDomainAppCreate + * Signature: (IIIZ)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Domain_jORTEDomainAppCreate + (JNIEnv *, jclass, jint, jint, jint, jboolean); + +/* + * Class: org_ocera_orte_Domain + * Method: jORTEDomainADestroy + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Domain_jORTEDomainADestroy + (JNIEnv *, jclass, jint); + +/* + * Class: org_ocera_orte_Domain + * Method: jORTEDomainStart + * Signature: (IZZZ)V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_Domain_jORTEDomainStart + (JNIEnv *, jclass, jint, jboolean, jboolean, jboolean); + +/* + * Class: org_ocera_orte_Domain + * Method: jORTETypeRegisterAdd + * Signature: (ILjava/lang/String;J)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Domain_jORTETypeRegisterAdd + (JNIEnv *, jclass, jint, jstring, jlong); + +/* + * Class: org_ocera_orte_Domain + * Method: jORTETypeRegisterDestroyAll + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Domain_jORTETypeRegisterDestroyAll + (JNIEnv *, jclass, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_DomainEvents.h b/orte/include/jorte/org_ocera_orte_DomainEvents.h new file mode 100644 index 0000000..26e64b1 --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_DomainEvents.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_DomainEvents */ + +#ifndef _Included_org_ocera_orte_DomainEvents +#define _Included_org_ocera_orte_DomainEvents +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_DomainEvents + * Method: jORTEDomainInitEvents + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_DomainEvents_jORTEDomainInitEvents + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_DomainProp.h b/orte/include/jorte/org_ocera_orte_DomainProp.h new file mode 100644 index 0000000..a513f22 --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_DomainProp.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_DomainProp */ + +#ifndef _Included_org_ocera_orte_DomainProp +#define _Included_org_ocera_orte_DomainProp +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_DomainProp + * Method: jORTEDomainPropDefaultGet + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_DomainProp_jORTEDomainPropDefaultGet + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_JOrte.h b/orte/include/jorte/org_ocera_orte_JOrte.h new file mode 100644 index 0000000..1bdc52e --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_JOrte.h @@ -0,0 +1,53 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_JOrte */ + +#ifndef _Included_org_ocera_orte_JOrte +#define _Included_org_ocera_orte_JOrte +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_JOrte + * Method: jORTEInit + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_JOrte_jORTEInit + (JNIEnv *, jclass); + +/* + * Class: org_ocera_orte_JOrte + * Method: jORTESleepMs + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_JOrte_jORTESleepMs + (JNIEnv *, jclass, jlong); + +/* + * Class: org_ocera_orte_JOrte + * Method: jORTEVerbositySetOptions + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_JOrte_jORTEVerbositySetOptions + (JNIEnv *, jclass, jstring); + +/* + * Class: org_ocera_orte_JOrte + * Method: jORTEVerbositySetLogFile + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_JOrte_jORTEVerbositySetLogFile + (JNIEnv *, jclass, jstring); + +/* + * Class: org_ocera_orte_JOrte + * Method: jORTEAppSendThread + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_ocera_orte_JOrte_jORTEAppSendThread + (JNIEnv *, jclass, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_Manager.h b/orte/include/jorte/org_ocera_orte_Manager.h new file mode 100644 index 0000000..d708fce --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_Manager.h @@ -0,0 +1,37 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_Manager */ + +#ifndef _Included_org_ocera_orte_Manager +#define _Included_org_ocera_orte_Manager +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_Manager + * Method: jORTEDomainDefaultMgrCreate + * Signature: (IZ)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Manager_jORTEDomainDefaultMgrCreate + (JNIEnv *, jclass, jint, jboolean); + +/* + * Class: org_ocera_orte_Manager + * Method: jORTEDomainMgrCreate + * Signature: (IIIZ)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Manager_jORTEDomainMgrCreate + (JNIEnv *, jclass, jint, jint, jint, jboolean); + +/* + * Class: org_ocera_orte_Manager + * Method: jORTEDomainMgrDestroy + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Manager_jORTEDomainMgrDestroy + (JNIEnv *, jclass, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_Publication.h b/orte/include/jorte/org_ocera_orte_Publication.h new file mode 100644 index 0000000..926d41a --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_Publication.h @@ -0,0 +1,37 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_Publication */ + +#ifndef _Included_org_ocera_orte_Publication +#define _Included_org_ocera_orte_Publication +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_Publication + * Method: jORTEPublicationCreate + * Signature: (ILjava/lang/String;Ljava/lang/String;Lorg/ocera/orte/types/MessageData;Lorg/ocera/orte/types/NtpTime;I)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Publication_jORTEPublicationCreate + (JNIEnv *, jobject, jint, jstring, jstring, jobject, jobject, jint); + +/* + * Class: org_ocera_orte_Publication + * Method: jORTEPublicationDestroy + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Publication_jORTEPublicationDestroy + (JNIEnv *, jobject, jint); + +/* + * Class: org_ocera_orte_Publication + * Method: jORTEPublicationSend + * Signature: (ILorg/ocera/orte/types/MessageData;)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Publication_jORTEPublicationSend + (JNIEnv *, jobject, jint, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_Subscription.h b/orte/include/jorte/org_ocera_orte_Subscription.h new file mode 100644 index 0000000..51c8318 --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_Subscription.h @@ -0,0 +1,61 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_Subscription */ + +#ifndef _Included_org_ocera_orte_Subscription +#define _Included_org_ocera_orte_Subscription +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_Subscription + * Method: jORTESubscriptionCreate + * Signature: (IIILjava/lang/String;Ljava/lang/String;ILorg/ocera/orte/types/NtpTime;Lorg/ocera/orte/types/NtpTime;Lorg/ocera/orte/SubscriptionCallback;J)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_Subscription_jORTESubscriptionCreate + (JNIEnv *, jobject, jint, jint, jint, jstring, jstring, jint, jobject, jobject, jobject, jlong); + +/* + * Class: org_ocera_orte_Subscription + * Method: jORTESubscriptionDestroy + * Signature: (I)Z + */ +JNIEXPORT jboolean JNICALL Java_org_ocera_orte_Subscription_jORTESubscriptionDestroy + (JNIEnv *, jobject, jint); + +/* + * Class: org_ocera_orte_Subscription + * Method: getTopic + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_ocera_orte_Subscription_getTopic + (JNIEnv *, jclass); + +/* + * Class: org_ocera_orte_Subscription + * Method: getTypeName + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_ocera_orte_Subscription_getTypeName + (JNIEnv *, jclass); + +/* + * Class: org_ocera_orte_Subscription + * Method: getDeadline + * Signature: ()Lorg/ocera/orte/types/NtpTime; + */ +JNIEXPORT jobject JNICALL Java_org_ocera_orte_Subscription_getDeadline + (JNIEnv *, jclass); + +/* + * Class: org_ocera_orte_Subscription + * Method: getMinSeparation + * Signature: ()Lorg/ocera/orte/types/NtpTime; + */ +JNIEXPORT jobject JNICALL Java_org_ocera_orte_Subscription_getMinSeparation + (JNIEnv *, jclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_tools_Conversions.h b/orte/include/jorte/org_ocera_orte_tools_Conversions.h new file mode 100644 index 0000000..f75cad2 --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_tools_Conversions.h @@ -0,0 +1,45 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_tools_Conversions */ + +#ifndef _Included_org_ocera_orte_tools_Conversions +#define _Included_org_ocera_orte_tools_Conversions +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_tools_Conversions + * Method: IPAddressToString + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_ocera_orte_tools_Conversions_IPAddressToString + (JNIEnv *, jclass, jlong); + +/* + * Class: org_ocera_orte_tools_Conversions + * Method: StringToIPAddress + * Signature: (Ljava/lang/String;)J + */ +JNIEXPORT jlong JNICALL Java_org_ocera_orte_tools_Conversions_StringToIPAddress + (JNIEnv *, jclass, jstring); + +/* + * Class: org_ocera_orte_tools_Conversions + * Method: NtpTimeToStringMs + * Signature: (Lorg/ocera/orte/types/NtpTime;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_ocera_orte_tools_Conversions_NtpTimeToStringMs + (JNIEnv *, jclass, jobject); + +/* + * Class: org_ocera_orte_tools_Conversions + * Method: NtpTimeToStringUs + * Signature: (Lorg/ocera/orte/types/NtpTime;)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_org_ocera_orte_tools_Conversions_NtpTimeToStringUs + (JNIEnv *, jclass, jobject); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/org_ocera_orte_tools_GetORTEConstant.h b/orte/include/jorte/org_ocera_orte_tools_GetORTEConstant.h new file mode 100644 index 0000000..f9b323e --- /dev/null +++ b/orte/include/jorte/org_ocera_orte_tools_GetORTEConstant.h @@ -0,0 +1,21 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_ocera_orte_tools_GetORTEConstant */ + +#ifndef _Included_org_ocera_orte_tools_GetORTEConstant +#define _Included_org_ocera_orte_tools_GetORTEConstant +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_ocera_orte_tools_GetORTEConstant + * Method: getConstant + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_ocera_orte_tools_GetORTEConstant_getConstant + (JNIEnv *, jobject, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/orte/include/jorte/typedefs_defines_jorte.h b/orte/include/jorte/typedefs_defines_jorte.h new file mode 100644 index 0000000..547ae31 --- /dev/null +++ b/orte/include/jorte/typedefs_defines_jorte.h @@ -0,0 +1,48 @@ +/* typedefs_defines_jorte.h */ + +/** + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +# define UINT32__MIN 0 +# define UINT32__MAX (2^32 -1) + + +typedef struct +{ + JavaVM *jvm; + jobject obj; + jobject rinfo; + int value; // !! pro testovani +} JORTECallbackContext_t; + + +typedef struct +{ + jobject obj_recvStatus; + jobject str_topic; + jobject str_type; + jobject obj_guid; + jobject obj_ntpT_loc; + jobject obj_ntpT_rem; + jobject obj_sn; +} RecvInfoVar_t; + + diff --git a/orte/include/orte.h b/orte/include/orte.h index 0112b2f..584d82b 100644 --- a/orte/include/orte.h +++ b/orte/include/orte.h @@ -25,25 +25,22 @@ extern "C" { #endif -#ifdef HAVE_CONFIG_H - #include "orte_config.h" -#elif defined OMK_FOR_USER - #include "orte_config_omk_unix.h" -#elif defined OMK_FOR_KERNEL - #include "orte_config_omk_rtl.h" +#ifdef _MSC_VER + #include +#else + #include #endif #ifdef HAVE_STDINT_H #include #elif defined HAVE_SYS_TYPES_H #include -#endif -#ifdef HAVE_LINUX_TYPES_H +#elif defined HAVE_LINUX_TYPES_H #include #endif -#if defined _MSC_VER || defined CONFIG_ORTE_MINGW - #include -#endif + +#include +#include #include #include #include diff --git a/orte/include/orte/basic_types.h b/orte/include/orte/basic_types.h new file mode 100644 index 0000000..64d58bc --- /dev/null +++ b/orte/include/orte/basic_types.h @@ -0,0 +1,29 @@ +#ifndef BASIC_TYPES_H +#define BASIC_TYPES_H 1 + + +enum { + CORBA_FALSE = 0, + CORBA_TRUE = 1 +}; + +typedef int16_t CORBA_short; +typedef int32_t CORBA_long; +typedef uint16_t CORBA_unsigned_short; +typedef uint32_t CORBA_unsigned_long; +typedef float CORBA_float; +typedef double CORBA_double; +typedef int8_t CORBA_char; +typedef int16_t CORBA_wchar; +typedef uint8_t CORBA_boolean; +typedef uint8_t CORBA_octet; +typedef double CORBA_long_double; + +/* + * Bad hack, oh well + */ + +typedef CORBA_char *CORBA_string; +typedef CORBA_wchar *CORBA_wstring; + +#endif diff --git a/orte/include/orte/cdr.h b/orte/include/orte/cdr.h new file mode 100644 index 0000000..ed5a3f4 --- /dev/null +++ b/orte/include/orte/cdr.h @@ -0,0 +1,168 @@ +/* + * $Id: cdr.h,v 0.0.0.1 2004/11/26 + * + * AUTHOR: Petr Smolik petr.smolik@wo.cz + * + * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ + * -------------------------------------------------------------------- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * Original of source was from ORBit: A CORBA v2.2 ORB + */ +#ifndef _ORTE_CDR_H_ +#define _ORTE_CDR_H_ + +#include "basic_types.h" + +/* + * Alignment of CORBA types mapped to C. + * These have *nothing* to do with CDR alignment. + */ +#define ORTE_ALIGNOF_CORBA_OCTET 1 +#define ORTE_ALIGNOF_CORBA_BOOLEAN 1 +#define ORTE_ALIGNOF_CORBA_CHAR 1 +#define ORTE_ALIGNOF_CORBA_WCHAR 2 +#define ORTE_ALIGNOF_CORBA_SHORT 2 +#define ORTE_ALIGNOF_CORBA_LONG 4 +#define ORTE_ALIGNOF_CORBA_LONG_LONG 8 +#define ORTE_ALIGNOF_CORBA_FLOAT 4 +#define ORTE_ALIGNOF_CORBA_DOUBLE 8 +#define ORTE_ALIGNOF_CORBA_LONG_DOUBLE 16 +#define ORTE_ALIGNOF_CORBA_STRUCT 1 +#define ORTE_ALIGNOF_CORBA_POINTER 4 + +typedef enum { + BigEndian=0, + LittleEndian=1 +} CDR_Endianness; + +/** + * struct CDR_Codec - used for serialization/deserialization + * @host_endian: + * @data_endian: + * @buffer: buffer for data + * @buf_len: buffer length + * @wptr_max: maximal size of writing data + * @wptr: write pointer + * @rptr: read pointer + * @readonly: readonly attribute + * @release_buffer: use CORBA_TRUE if is necessary to free buffer memory after destruction of structure + * + * Struct @CDR_Codec is used by serialization and deserialization functions. + */ +typedef struct CDR_Codec { + CDR_Endianness host_endian; + CDR_Endianness data_endian; + CORBA_octet *buffer; + unsigned int buf_len; + unsigned int wptr_max; + unsigned int wptr; + unsigned int rptr; + CORBA_boolean readonly; + CORBA_boolean release_buffer; +} CDR_Codec; + +#define HEXDIGIT(c) (isdigit((guchar)(c))?(c)-'0':tolower((guchar)(c))-'a'+10) +#define HEXOCTET(a,b) ((HEXDIGIT((a)) << 4) | HEXDIGIT((b))) + +extern CORBA_boolean CDR_buffer_init(CDR_Codec *codec, const unsigned int size); +extern CDR_Codec *CDR_codec_init(void); +extern CDR_Codec *CDR_codec_init_static(CDR_Codec *codec); +extern void CDR_codec_release_buffer(CDR_Codec *codec); +extern void CDR_codec_free(CDR_Codec *); + +extern CORBA_boolean CDR_buffer_puts(CDR_Codec *codec, const void *data, const unsigned int len); +extern CORBA_boolean CDR_buffer_gets(CDR_Codec *codec, void *dest, const unsigned int len); + +extern CORBA_boolean CDR_put_short(CDR_Codec *codec, CORBA_short s); +extern CORBA_boolean CDR_put_ushort(CDR_Codec *codec, CORBA_unsigned_short us); +extern CORBA_boolean CDR_put_long(CDR_Codec *codec, CORBA_long l); +extern CORBA_boolean CDR_put_ulong(CDR_Codec *codec, CORBA_unsigned_long ul); +#ifdef HAVE_CORBA_LONG_LONG +extern CORBA_boolean CDR_put_long_long(CDR_Codec *codec, CORBA_long_long ll); +extern CORBA_boolean CDR_put_ulong_long(CDR_Codec *codec, CORBA_unsigned_long_long ull); +extern CORBA_boolean CDR_get_ulong_long(CDR_Codec *codec, CORBA_unsigned_long_long *ul); +extern CORBA_boolean CDR_get_long_long(CDR_Codec *codec, CORBA_long_long *ul); +#endif +extern CORBA_boolean CDR_put_float(CDR_Codec *codec, CORBA_float f); +extern CORBA_boolean CDR_put_double(CDR_Codec *codec, CORBA_double d); +extern CORBA_boolean CDR_put_long_double(CDR_Codec *codec, CORBA_long_double ld); +extern CORBA_boolean CDR_put_octet(CDR_Codec *codec, CORBA_octet datum); +extern CORBA_boolean CDR_put_octets(CDR_Codec *codec, void *data, unsigned long len); +extern CORBA_boolean CDR_put_char(CDR_Codec *codec, CORBA_char c); +extern CORBA_boolean CDR_put_boolean(CDR_Codec *codec, CORBA_boolean datum); +extern CORBA_boolean CDR_put_string(CDR_Codec *codec, const char *str); +extern CORBA_boolean CDR_buffer_gets(CDR_Codec *codec, void *dest, const unsigned int len); +extern CORBA_boolean CDR_get_short(CDR_Codec *codec, CORBA_short *us); +extern CORBA_boolean CDR_get_ushort(CDR_Codec *codec, CORBA_unsigned_short *us); +extern CORBA_boolean CDR_get_long(CDR_Codec *codec, CORBA_long *l); +extern CORBA_boolean CDR_get_ulong(CDR_Codec *codec, CORBA_unsigned_long *ul); +extern CORBA_boolean CDR_get_octet(CDR_Codec *codec, CORBA_octet *datum); +extern CORBA_boolean CDR_get_boolean(CDR_Codec *codec, CORBA_boolean *b); +extern CORBA_boolean CDR_get_char(CDR_Codec *codec, CORBA_char *c); +extern CORBA_boolean CDR_get_string(CDR_Codec *codec, CORBA_char **str); +extern CORBA_boolean CDR_get_string_buff(CDR_Codec *codec, CORBA_char *str); +extern CORBA_boolean CDR_get_string_static(CDR_Codec *codec, CORBA_char **str); +extern CORBA_boolean CDR_get_seq_begin(CDR_Codec *codec, CORBA_unsigned_long *ul); + + +/* serialization functions */ +#define CORBA_short_serialize(x,y) CDR_put_short((x),*(y)) +#define CORBA_long_serialize(x,y) CDR_put_long((x),*(y)) +#define CORBA_unsigned_short_serialize(x,y) CDR_put_ushort((x),*(y)) +#define CORBA_unsigned_long_serialize(x,y) CDR_put_ulong((x),*(y)) +#define CORBA_float_serialize(x,y) CDR_put_float((x),*(y)) +#define CORBA_double_serialize(x,y) CDR_put_double((x),*(y)) +#define CORBA_char_serialize(x,y) CDR_put_char((x),*(y)) +#define CORBA_boolean_serialize(x,y) CDR_put_boolean((x),*(y)) +#define CORBA_octet_serialize(x,y) CDR_put_octet((x),*(y)) +#define CORBA_long_double_serialize(x,y) CDR_put_long_double((x),*(y)) +#define CORBA_string_serialize(x,y) CDR_put_string((x),*(y)) + +/* deserialization functions */ +#define CORBA_short_deserialize(x,y) CDR_get_short((x),(y)) +#define CORBA_long_deserialize(x,y) CDR_get_long((x),(y)) +#define CORBA_unsigned_short_deserialize(x,y) CDR_get_ushort((x),(y)) +#define CORBA_unsigned_long_deserialize(x,y) CDR_get_ulong((x),(y)) +#define CORBA_float_deserialize(x,y) CDR_get_float((x),(y)) +#define CORBA_double_deserialize(x,y) CDR_get_double((x),(y)) +#define CORBA_char_deserialize(x,y) CDR_get_char((x),(y)) +#define CORBA_boolean_deserialize(x,y) CDR_get_boolean((x),(y)) +#define CORBA_octet_deserialize(x,y) CDR_get_octet((x),(y)) +#define CORBA_long_double_deserialize(x,y) CDR_get_long_double((x),(y)) +#define CORBA_string_deserialize(x,y) CDR_get_string((x),(y)) + +/* get_max_size functions */ +#define CORBA_short_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_SHORT)+ORTE_ALIGNOF_CORBA_SHORT) +#define CORBA_long_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_LONG)+ORTE_ALIGNOF_CORBA_LONG) +#define CORBA_unsigned_short_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_SHORT)+ORTE_ALIGNOF_CORBA_SHORT) +#define CORBA_unsigned_long_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_LONG)+ORTE_ALIGNOF_CORBA_LONG) +#define CORBA_float_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_FLOAT)+ORTE_ALIGNOF_CORBA_FLOAT) +#define CORBA_double_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_DOUBLE)+ORTE_ALIGNOF_CORBA_DOUBLE) +#define CORBA_char_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_CHAR)+ORTE_ALIGNOF_CORBA_CHAR) +#define CORBA_boolean_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_BOOLEAN)+ORTE_ALIGNOF_CORBA_BOOLEAN) +#define CORBA_octet_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_OCTET)+ORTE_ALIGNOF_CORBA_OCTET) +#define CORBA_long_double_get_max_size(x) ((x)->csize=\ + (unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_LONG_DOUBLE)+ORTE_ALIGNOF_CORBA_DOUBLE) +#define CORBA_string_get_max_size(x,y) \ + ((x)->csize=(unsigned long)ALIGN_ADDRESS((x)->csize,ORTE_ALIGNOF_CORBA_LONG) + ORTE_ALIGNOF_CORBA_LONG + y + 1) + +#endif /* !_ORTE_CDR_H_ */ diff --git a/orte/include/orte/defines_api.h b/orte/include/orte/defines_api.h index 70c89e1..6343507 100644 --- a/orte/include/orte/defines_api.h +++ b/orte/include/orte/defines_api.h @@ -37,6 +37,16 @@ extern "C" { #define ORTE_TIMEOUT -2 #define ORTE_QUEUE_FULL -3 +//////////////////////////////////////////////////////////////////////////////// +//Logging - flags +#define LOG_FNONE 0x00 +#define LOG_FEXCEPTION 0x01 +#define LOG_FWARN 0x02 +#define LOG_FLOCAL_OBJECT 0x04 +#define LOG_FREMOTE_OBJECT 0x08 +#define LOG_FPERIODIC 0x10 +#define LOG_FCONTENT 0x20 + /*****************************************************************/ /** * SeqNumberCmp - comparison of two sequence numbers @@ -249,6 +259,20 @@ extern "C" { p = RTPS_DEFAULT_PORT + d*10+2; \ } + +/* Align an address upward to a boundary, expressed as a number of bytes. + E.g. align to an 8-byte boundary with argument of 8. */ + +/* + * (this + boundary - 1) + * & + * ~(boundary - 1) + */ + +#define ALIGN_ADDRESS(this, boundary) \ + ((void*)((( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1))))) + + #ifdef __cplusplus } /* extern "C"*/ #endif diff --git a/orte/include/config.h.in b/orte/include/orte/orte_config.h.in similarity index 93% rename from orte/include/config.h.in rename to orte/include/orte/orte_config.h.in index 61ef2c3..3591fad 100644 --- a/orte/include/config.h.in +++ b/orte/include/orte/orte_config.h.in @@ -1,4 +1,7 @@ -/* orte/include/config.h.in. Generated from configure.in by autoheader. */ +/* orte/include/orte/orte_config.h.in. Generated from configure.in by autoheader. */ + +/* Define to enable JORTE's compilation */ +#undef CONFIG_JORTE /* Define if is target CYGWIN */ #undef CONFIG_ORTE_CYGWIN @@ -18,6 +21,12 @@ /* Define if kernel is RTLinux patched */ #undef CONFIG_ORTE_RTL +/* Define if onetd stack is found */ +#undef CONFIG_ORTE_RTL_ONETD + +/* Define if wIP stack is found */ +#undef CONFIG_ORTE_RTL_WIP + /* Define if is target a unix system */ #undef CONFIG_ORTE_UNIX @@ -66,6 +75,9 @@ /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL +/* Define to 1 if you have the `popt' library (-lpopt). */ +#undef HAVE_LIBPOPT + /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD @@ -117,6 +129,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_NIC_H +/* Define to 1 if you have the header file. */ +#undef HAVE_ONETD_H + /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H @@ -144,9 +159,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strdup' function. */ -#undef HAVE_STRDUP - /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H diff --git a/orte/include/orte_config_omk_rtl.h b/orte/include/orte/orte_config_omk_rtl.h similarity index 98% rename from orte/include/orte_config_omk_rtl.h rename to orte/include/orte/orte_config_omk_rtl.h index e1d427a..7b0966e 100644 --- a/orte/include/orte_config_omk_rtl.h +++ b/orte/include/orte/orte_config_omk_rtl.h @@ -157,19 +157,19 @@ #define ORTE_PACKAGE_NAME "orte" /* Define to the full name and version of this package. */ -#define ORTE_PACKAGE_STRING "orte 0.2.3" +#define ORTE_PACKAGE_STRING "orte 0.3.0" /* Define to the one symbol short name of this package. */ #define ORTE_PACKAGE_TARNAME "orte" /* Define to the version of this package. */ -#define ORTE_PACKAGE_VERSION "0.2.3" +#define ORTE_PACKAGE_VERSION "0.3.0" /* Define to 1 if you have the ANSI C header files. */ /* #undef STDC_HEADERS */ /* Version number of package */ -#define ORTE_VERSION "0.2.3" +#define ORTE_VERSION "0.3.0" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff --git a/orte/include/orte_config_omk_unix.h b/orte/include/orte/orte_config_omk_unix.h similarity index 98% rename from orte/include/orte_config_omk_unix.h rename to orte/include/orte/orte_config_omk_unix.h index c11b397..a607107 100644 --- a/orte/include/orte_config_omk_unix.h +++ b/orte/include/orte/orte_config_omk_unix.h @@ -181,19 +181,19 @@ #define ORTE_PACKAGE_NAME "orte" /* Define to the full name and version of this package. */ -#define ORTE_PACKAGE_STRING "orte 0.2.3" +#define ORTE_PACKAGE_STRING "orte 0.3.0" /* Define to the one symbol short name of this package. */ #define ORTE_PACKAGE_TARNAME "orte" /* Define to the version of this package. */ -#define ORTE_PACKAGE_VERSION "0.2.3" +#define ORTE_PACKAGE_VERSION "0.3.0" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define ORTE_VERSION "0.2.3" +#define ORTE_VERSION "0.3.0" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ diff --git a/orte/include/orte/protos_api.h b/orte/include/orte/protos_api.h index e2eefe9..377742b 100644 --- a/orte/include/orte/protos_api.h +++ b/orte/include/orte/protos_api.h @@ -64,8 +64,10 @@ NtpTimeToStringUs(NtpTime time,char *buff); /** * ORTEDomainStart - start specific threads * @d: domain object handle - * @recvMetatrafficThread: specifies whether recvMetatrafficThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). - * @recvUserDataThread: specifies whether recvUserDataThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). + * @recvUnicastMetatrafficThread: specifies whether recvUnicastMetatrafficThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). + * @recvMulticastMetatrafficThread: specifies whether recvMulticastMetatrafficThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). + * @recvUnicastUserdataThread: specifies whether recvUnicastUserdataThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). + * @recvMulticastUserdataThread: specifies whether recvMulticastUserdataThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). * @sendThread: specifies whether sendThread should be started (ORTE_TRUE) or remain suspended (ORTE_FALSE). * * Functions @ORTEDomainAppCreate and @ORTEDomainMgrCreate provide facility to create an object with its threads suspended. Use function @ORTEDomainStart to resume those @@ -73,10 +75,11 @@ NtpTimeToStringUs(NtpTime time,char *buff); */ extern void ORTEDomainStart(ORTEDomain *d, - Boolean recvMetatrafficThread, - Boolean recvUserDataThread, + Boolean recvUnicastMetatrafficThread, + Boolean recvMulticastMetatrafficThread, + Boolean recvUnicastUserdataThread, + Boolean recvMulticastUserdataThread, Boolean sendThread); - /** * ORTEDomainPropDefaultGet - returns default properties of a domain * @prop: pointer to struct ORTEDomainProp @@ -177,7 +180,7 @@ ORTEDomainAppSubscriptionPatternDestroy(ORTEDomain *d); /** * ORTEDomainMgrCreate - create manager object in given domain - * @d: given domain + * @domain: given domain * @prop: desired manager's properties * @events: manager's event handlers or NULL * @suspended: specifies whether threads of this manager should be started as well (ORTE_FALSE) or stay suspended (ORTE_TRUE). See @ORTEDomainStart for details how to resume @@ -292,6 +295,17 @@ ORTEPublicationGetStatus(ORTEPublication *cstWriter,ORTEPublStatus *status); extern int ORTEPublicationSend(ORTEPublication *cstWriter); +/** + * ORTEPublicationSendEx - force publication object to issue new data with additional parameters + * @cstWriter: publication object + * @psp: publication parameters + * + * Returns ORTE_OK if successful. + */ +extern int +ORTEPublicationSendEx(ORTEPublication *cstWriter, + ORTEPublicationSendParam *psp); + /////////////////////////////////////////////////////////////////////////////// // ORTESubscription.c @@ -307,6 +321,7 @@ ORTEPublicationSend(ORTEPublication *cstWriter); * @minimumSeparation: minimum time interval between two publications sent by Publisher as requested by Subscriber (strict - minumSep musi byt 0) * @recvCallBack: callback function called when new Subscription has been received or if any change of subscription's status occures * @recvCallBackParam: user parameters for @recvCallBack + * @multicastIPAddress: in case multicast subscripton specify multicast IP address or use IPADDRESS_INVALID to unicast communication * * Returns handle to Subscription object. */ @@ -320,7 +335,8 @@ ORTESubscriptionCreate(ORTEDomain *d, NtpTime *deadline, NtpTime *minimumSeparation, ORTERecvCallBack recvCallBack, - void *recvCallBackParam); + void *recvCallBackParam, + IPAddress multicastIPAddress); /** * ORTESubscriptionDestroy - removes a subscription @@ -389,7 +405,8 @@ ORTESubscriptionPull(ORTESubscription *cstReader); * @typeName: name of data type * @ts: pointer to serialization function. If NULL data will be copied without any processing. * @ds: deserialization function. If NULL data will be copied without any processing. - * @gms: maximum length of data (in bytes) + * @gms: pointer to a function given maximum length of data (in bytes) + * @ms: default maximal size * * Each data type has to be registered. Main purpose of this process is to define serialization and deserialization functions for given data type. The same data type can be * registered several times, previous registrations of the same type will be overwritten. @@ -400,7 +417,7 @@ ORTESubscriptionPull(ORTESubscription *cstReader); */ extern int ORTETypeRegisterAdd(ORTEDomain *d,const char *typeName,ORTETypeSerialize ts, - ORTETypeDeserialize ds,unsigned int gms); + ORTETypeDeserialize ds,ORTETypeGetMaxSize gms,unsigned int ms); /** * ORTETypeRegisterDestroyAll - destroy all registered data types * @d: domain object handle @@ -456,18 +473,6 @@ ORTEVerbositySetLogFile(const char *logfile); extern void ORTEInit(void); -/////////////////////////////////////////////////////////////////////////////// -// ORTEAppSendThread.c - -/** - * ORTEAppSendThread - resume sending thread in context of calling function. - * @d: domain object handle - * - * Sending thread will be resumed. This function never returns. -*/ -extern void -ORTEAppSendThread(ORTEDomain *d); - /////////////////////////////////////////////////////////////////////////////// // ORTEMisc.c /** diff --git a/orte/include/orte/typedefs_api.h b/orte/include/orte/typedefs_api.h index fab66ee..8fef788 100644 --- a/orte/include/orte/typedefs_api.h +++ b/orte/include/orte/typedefs_api.h @@ -52,13 +52,13 @@ typedef enum SubscriptionType { BEST_EFFORTS = 0x01, STRICT_RELIABLE = 0x02 } SubscriptionType; - + /** * enum ORTERecvStatus - status of a subscription * @NEW_DATA: new data has arrived * @DEADLINE: deadline has occurred * - * Specifies which event has occured in the subscription object. + * Specifies which event has occurred in the subscription object. */ typedef enum ORTERecvStatus { NEW_DATA = 0x01, @@ -70,7 +70,7 @@ typedef enum ORTERecvStatus { * @NEED_DATA: need new data (set when callback function specified for publciation is beeing called) * @CQL: transmit queue has been filled up to critical level. * - * Specifies which event has occured in the publication object. Critical level of transmit queue is specified as one of publication properties (ORTEPublProp.criticalQueueLevel). + * Specifies which event has occurred in the publication object. Critical level of transmit queue is specified as one of publication properties (ORTEPublProp.criticalQueueLevel). */ typedef enum ORTESendStatus { NEED_DATA = 0x01, @@ -105,33 +105,40 @@ typedef struct ORTEMulticastProp { IPAddress ipAddress; } ORTEMulticastProp; + /** - * struct ORTECDRStream - used for serialization - * @buffer: buffer for data - * @bufferPtr: current position within buffer - * @needByteSwap: ORTE_TRUE if it is necessary to swap byte ordering otherwise ORTE_FALSE - * @length: buffer length + * struct ORTETypeGetMaxSizeParam - parameters for function ORTETypeGetMaxSize + * @host_endian: + * @data_endian: + * @data: + * @max_size: + * @recv_size: + * @csize: * - * Struct @ORTECDRStream is used by serialization and deserialization functions. + * It used to determine maximal size of intermal buffer for incomming data */ -typedef struct ORTECDRStream { - uint8_t *buffer; - uint8_t *bufferPtr; - Boolean needByteSwap; - int length; -} ORTECDRStream; +typedef struct ORTEGetMaxSizeParam { + CDR_Endianness host_endian; + CDR_Endianness data_endian; + CORBA_octet *data; + unsigned int max_size; + int recv_size; + int csize; +} ORTEGetMaxSizeParam; +typedef void (*ORTETypeSerialize)(CDR_Codec *cdrCodec, void *instance); -typedef void (*ORTETypeSerialize)(ORTECDRStream *cdr_stream, void *instance); +typedef void (*ORTETypeDeserialize)(CDR_Codec *cdrCodec, void *instance); -typedef void (*ORTETypeDeserialize)(ORTECDRStream *cdr_stream, void *instance); +typedef int (*ORTETypeGetMaxSize)(ORTEGetMaxSizeParam *gms); /** * struct ORTETypeRegister - registered data type * @typeName: name of data type * @serialize: pointer to serialization function * @deserialize: pointer to deserialization function - * @getMaxSize: max data type length in bytes + * @getMaxSize: pointer to function given maximal data length + * @maxSize: maximal size of ser./deser. data * * Contains description of registered data type. See @ORTETypeRegisterAdd function for details. */ @@ -139,11 +146,18 @@ typedef struct ORTETypeRegister { const char *typeName; ORTETypeSerialize serialize; ORTETypeDeserialize deserialize; - unsigned int getMaxSize; + ORTETypeGetMaxSize getMaxSize; + unsigned int maxSize; } ORTETypeRegister; /** * struct ORTEDomainBaseProp - base properties of a domain + * @registrationMgrRetries: a manager which want to start communication have to register to other manager. This parametr + * is used for specify maximal repetition retries of registration process when it fail. + * @registrationMgrPeriod: an application which want to start communication have to register to a manager. This parametr + * is used for specify maximal repetition retries of registration process when it fail. + * @registrationAppRetries: same like registrationMgrRetries parameter, but is used for an application + * @registrationAppPeriod: repetition time for registration process * @expirationTime: specifies how long is this application taken as alive in other applications/managers (default 180s) * @refreshPeriod: how often an application refresh itself to its manager or manager to other managers (default 60s) * @purgeTime: how often the local database should be cleaned from invalid (expired) objects (default 60s) @@ -156,6 +170,10 @@ typedef struct ORTETypeRegister { * @maxBlockTime: timeout for send functions if sending queue is full (default 30s) */ typedef struct ORTEDomainBaseProp { + unsigned int registrationMgrRetries; + NtpTime registrationMgrPeriod; + unsigned int registrationAppRetries; + NtpTime registrationAppPeriod; NtpTime expirationTime; NtpTime refreshPeriod; NtpTime purgeTime; @@ -172,14 +190,14 @@ typedef struct ORTEDomainBaseProp { * struct ORTEDomainWireProp - wire properties of a message * @metaBytesPerPacket: maximum number of bytes in single frame (default 1500B) * @metaBytesPerFastPacket: maximum number of bytes in single frame if transmitting queue has reached @criticalQueueLevel level (see @ORTEPublProp struct) - * @metabitsPerACKBitmap: not supported yet - * @userMaxSerDeserSize: maximum number of user data in frame (default 1500B) + * @metabitsPerACKBitmap: not supported yet (default 32) + * @userMaxSerDeserSize: maximum number of user data in frame (default 0x3000B) */ typedef struct ORTEDomainWireProp { unsigned int metaBytesPerPacket; unsigned int metaBytesPerFastPacket; unsigned int metabitsPerACKBitmap; - unsigned int userMaxSerDeserSize; + unsigned int userBytesPerPacket; } ORTEDomainWireProp; /** @@ -224,6 +242,7 @@ typedef struct ORTEPublProp { * @reliabilityRequested: reliability policy requested by the subscription * @deadline: deadline for subscription, a callback function (see @ORTESubscriptionCreate) will be called if no data were received within this period of time * @mode: mode of subscription (strict reliable/best effort), see @SubscriptionType enum for values + * @multicast: registered multicast IP address(read only) */ typedef struct ORTESubsProp { PathName topic; @@ -235,6 +254,7 @@ typedef struct ORTESubsProp { //additional parameters NtpTime deadline; uint32_t mode; + IPAddress multicast; } ORTESubsProp; /** @@ -356,6 +376,15 @@ typedef void typedef ORTESubscription* (*ORTESubscriptionPatternCallBack)(const char *topic, const char *type, void *Param); +/** + * struct ORTEPublicationSendParam - description of sending data + * @instance: pointer to new data instance + * @data_endian: endianing of sending data (BIG | LITTLE) + */ +typedef struct ORTEPublicationSendParam { + void *instance; + int data_endian; +} ORTEPublicationSendParam; //Pattern typedef Boolean @@ -370,7 +399,10 @@ extern void ORTEPatternRegister(ORTEDomain *d,ORTEPatternCheck check, ORTEPatternMatch match,void *param); + //Manager +typedef void +(*ORTEOnRegFail)(void *param); typedef Boolean (*ORTEOnMgrNew)(const struct ORTEAppInfo *appInfo, void *param); typedef void @@ -397,6 +429,8 @@ typedef void /** * struct ORTEDomainAppEvents - Domain event handlers of an application + * @onRegFail: registration protocol has been failed + * @onRegFailParam: user parameters for @onRegFail handler * @onMgrNew: new manager has been created * @onMgrNewParam: user parameters for @onMgrNew handler * @onMgrDelete: manager has been deleted @@ -421,6 +455,8 @@ typedef void * Prototypes of events handler fucntions can be found in file typedefs_api.h. */ typedef struct ORTEDomainAppEvents { + ORTEOnRegFail onRegFail; + void *onRegFailParam; ORTEOnMgrNew onMgrNew; void *onMgrNewParam; ORTEOnMgrDelete onMgrDelete; diff --git a/orte/include/orte/typedefs_defines_rtps.h b/orte/include/orte/typedefs_defines_rtps.h index 69f810e..5931a2a 100644 --- a/orte/include/orte/typedefs_defines_rtps.h +++ b/orte/include/orte/typedefs_defines_rtps.h @@ -44,7 +44,7 @@ typedef int32_t TypeChecksum; /*****************************************************************/ -/** +/* Host identifier. for example: IP address working nodes @@ -52,7 +52,7 @@ typedef int32_t TypeChecksum; typedef uint32_t HostId; #define HID_UNKNOWN 0x00 -/** +/* Application identifier. composed from: 3 bytes - instance Id @@ -63,7 +63,7 @@ typedef uint32_t AppId; #define MANAGEDAPPLICATION 0x01 #define MANAGER 0x02 -/** +/* Object identifier. composed from: 3 bytes - instance Id diff --git a/orte/include/orte_all.h b/orte/include/orte_all.h index d6c5270..e8e3773 100644 --- a/orte/include/orte_all.h +++ b/orte/include/orte_all.h @@ -25,7 +25,10 @@ extern "C" { #endif +#define orte_assert(x) + #include "orte_headers.h" +#include "orte/cdr.h" #include "ul_gavl.h" #include "ul_gavlcust.h" #include "ul_gavlflesint.h" @@ -40,13 +43,7 @@ extern "C" { #include "protos.h" #include "orte/protos_api.h" #include "globals.h" - - -#if WORDS_BIGENDIAN - #define ORTE_MY_MBO 0 //ORTE my Machine Byte Order - big endian -#else - #define ORTE_MY_MBO 1 //ORTE my Machine Byte Order - little endian -#endif +#include "rtps_endian.h" #ifdef __cplusplus } /* extern "C"*/ diff --git a/orte/include/orte_headers.h b/orte/include/orte_headers.h index caecbed..40050c4 100644 --- a/orte/include/orte_headers.h +++ b/orte/include/orte_headers.h @@ -26,11 +26,18 @@ extern "C" { #endif #ifdef HAVE_CONFIG_H - #include "orte_config.h" + #include "orte/orte_config.h" #elif defined OMK_FOR_USER - #include "orte_config_omk_unix.h" + #include "orte/orte_config_omk_unix.h" #elif defined OMK_FOR_KERNEL - #include "orte_config_omk_rtl.h" + #include "orte/orte_config_omk_rtl.h" +#elif defined _MSC_VER + #include "orte/ew_types.h" +#else + #error "" + #error "You don't have file 'orte/orte_config.h'." + #error "Please make sure that this file exists!." + #error "" #endif #ifdef HAVE_ARPA_INET_H @@ -162,6 +169,9 @@ extern "C" { #ifdef HAVE_TIME_H #include #endif +#ifdef HAVE_ONETD_H + #include +#endif //RTAI headers #ifdef HAVE_RTNET_H #include @@ -183,9 +193,16 @@ extern "C" { #include #define ioctl ioctlsocket #elif defined CONFIG_ORTE_RTL - #define SOCK_RTL - #include #include + #ifdef CONFIG_ORTE_RTL_ONETD + #define SOCK_BSD + #include + #elif CONFIG_ORTE_RTL_WIP + #define SOCK_RTLWIP + #include + #else + #error "no UDP stack for RTLinux" + #endif #elif defined CONFIG_ORTE_RTAI #define SOCK_BSD #include @@ -204,9 +221,8 @@ extern "C" { #include #include #include - #include #define ioctl ioctlsocket - #define ORTE_PACKAGE_STRING "orte 0.2.3" + #define ORTE_PACKAGE_STRING "orte 0.3.0" #define CONFIG_ORTE_WIN #endif diff --git a/orte/include/protos.h b/orte/include/protos.h index 708a26a..5cf5c6b 100644 --- a/orte/include/protos.h +++ b/orte/include/protos.h @@ -36,9 +36,9 @@ sock_init_udp(sock_t *sock); 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,uint16_t port); extern int @@ -52,14 +52,6 @@ sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount); /////////////////////////////////////////////////////////////////////////////// // conv.c -extern void -conv_u16(uint16_t *x,char ef); -extern void -conv_u32(uint32_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); @@ -141,6 +133,9 @@ fnmatch(const char *__pattern,const char *__string,int __flags); /////////////////////////////////////////////////////////////////////////////// // 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, @@ -154,7 +149,7 @@ objectEntryFind(ORTEDomain *d,GUID_RTPS *guid); 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 @@ -177,6 +172,14 @@ getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress); extern void 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 @@ -196,13 +199,13 @@ UL_LIST_CUST_DEC(CSChangeAttributes, CSChange,ParameterSequence, attributes,node); extern int +parameterGetDataLength(CSChange *csChange); +extern int parameterDelete(CSChange *csChange); extern int -parameterCodeStreamFromCSChange(CSChange *csChange, - uint8_t *rtps_msg,uint32_t max_msg_len); +parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec); extern int -parameterDecodeStreamToCSChange(CSChange *csChange,uint8_t *rtps_msg, - uint16_t submsg_len,uint8_t needByteSwap); +parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec); extern int parameterUpdateCSChange( CSChange *csChange,AppParams *ap,Boolean Manager); @@ -240,90 +243,91 @@ 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(uint8_t *msg,HostId hid,AppId aid); -extern int16_t -RTPSHeaderCheck(uint8_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(uint8_t *rtps_msg,MessageInterpret *mi); +RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi); /////////////////////////////////////////////////////////////////////////////// // RTPSInfoDST.c extern void -RTPSInfoDST(uint8_t *rtps_msg,MessageInterpret *mi); +RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi); /////////////////////////////////////////////////////////////////////////////// // RTPSInfoREPLY.c -extern void -RTPSInfoREPLY(uint8_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(uint8_t *rtps_msg,uint32_t max_msg_len, - IPAddress ipaddress,Port port); +// RTPSInfoSRC.c extern void -RTPSInfoSRC(uint8_t *rtps_msg,MessageInterpret *mi); +RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi); /////////////////////////////////////////////////////////////////////////////// // RTPSInfoTS.c -extern int32_t -RTPSInfoTSCreate(uint8_t *rtps_msg,uint32_t max_msg_len,NtpTime time); +extern int +RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time); extern void -RTPSInfoTS(uint8_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,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress); +RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress); /////////////////////////////////////////////////////////////////////////////// // RTPSAck.c -extern int32_t -RTPSAckCreate(uint8_t *rtps_msg,uint32_t max_msg_len, +extern int +RTPSAckCreate(CDR_Codec *cdrCodec, SequenceNumber *seqNumber, ObjectId roid,ObjectId woid,Boolean f_bit); extern void -RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress); +RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress); /////////////////////////////////////////////////////////////////////////////// // RTPSHeardBeat.c extern int -RTPSHeardBeatCreate(uint8_t *rtps_msg,uint32_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,uint8_t *rtps_msg,MessageInterpret *mi); +RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi); /////////////////////////////////////////////////////////////////////////////// // RTPSGap.c -extern void -RTPSGap(ORTEDomain *d,uint8_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(uint8_t *rtps_msg,uint32_t max_msg_len,uint32_t length, +extern int +RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length, ObjectId roid,ObjectId woid,SequenceNumber sn); extern void -RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress); +RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress); /////////////////////////////////////////////////////////////////////////////// // RTPSUtils.c @@ -331,13 +335,15 @@ 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(const char *const *a,const char *const *b); -extern int getMaxMessageLength(ORTEDomain *d); /////////////////////////////////////////////////////////////////////////////// // 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); @@ -353,9 +359,9 @@ CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object, 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 @@ -363,17 +369,23 @@ CSTWriterMakeGAP(ORTEDomain *d,CSTWriter *cstWriter,GUID_RTPS *guid); 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 @@ -440,6 +452,14 @@ CSTReaderDeadlineTimer(ORTEDomain *d,void *vcstReader); extern int CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader); +/////////////////////////////////////////////////////////////////////////////// +// 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, @@ -457,7 +477,8 @@ GAVL_CUST_NODE_INT_DEC(PublicationList, PSEntry, ObjectEntryOID, GUID_RTPS, publications, psNode, guid, gavl_cmp_guid); extern int -ORTEPublicationSendLocked(ORTEPublication *cstWriter); +ORTEPublicationSendLocked(ORTEPublication *cstWriter, + ORTEPublicationSendParam *psp); /////////////////////////////////////////////////////////////////////////////// // ORTESubcription.c diff --git a/orte/include/rtai/compat.h b/orte/include/rtai/compat.h index 71cd274..63430d0 100644 --- a/orte/include/rtai/compat.h +++ b/orte/include/rtai/compat.h @@ -32,8 +32,6 @@ #define printf rt_printk /* catch some probably forgotten printf's */ #define malloc rt_malloc #define free rt_free -#define bswap_16 swab16 -#define bswap_32 swab32 typedef __u32 in_addr_t; @@ -70,20 +68,6 @@ static inline int atoi(const char* nptr) } -static inline char *strdup(const char *s) -{ - size_t len = strlen(s)+1; - char *new_s; - - new_s = MALLOC(len); - if (new_s == NULL) - return NULL; - - memcpy(new_s, s, len); - return new_s; -} - - #define sem_init sem_init_rt #define sem_destroy sem_destroy_rt #define sem_timedwait sem_timedwait_rt diff --git a/orte/include/rtl/compat_onetd.h b/orte/include/rtl/compat_onetd.h new file mode 100644 index 0000000..809dcd7 --- /dev/null +++ b/orte/include/rtl/compat_onetd.h @@ -0,0 +1,62 @@ +/* + * $Id: compat.h,v 0.0.0.1 2003/12/19 + * + * AUTHOR: Michal Sojka sojka1@fel.cvut.cz + * + * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ + * -------------------------------------------------------------------- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef _COMPAT_H +#define _COMPAT_H + +#include +#include +#include + +#define printf rtl_printf +#define gettimeofday(tv, tz) do_gettimeofday(tv) + +#define socket ocn_socket +#define setsockopt ocn_setsockopt +#define getsockopt ocn_getsockopt +#define ioctl ocn_ioctl +#define bind ocn_bind +#define getsockname ocn_getsockname +#define recvfrom ocn_recvfrom +#define sendto ocn_sendto +#define close ocn_close + +static inline int atoi(const char* nptr) +{ + return simple_strtol(nptr, (char **)NULL, 10); +} + +static inline __u32 inet_addr(const char *cp) +{ + return in_aton(cp); +} + +static char inet_ntoa_buf[16]; +static inline char *inet_ntoa(struct in_addr in) { + unsigned char *octet; + + octet = (unsigned char *)&(in.s_addr); + sprintf(inet_ntoa_buf, "%u.%u.%u.%u", octet[0], octet[1], octet[2], octet[3]); + + return inet_ntoa_buf; +} + + +#endif /* _COMPAT_H */ diff --git a/orte/include/rtl/compat.h b/orte/include/rtl/compat_rtlwip.h similarity index 85% rename from orte/include/rtl/compat.h rename to orte/include/rtl/compat_rtlwip.h index eee56cc..132734b 100644 --- a/orte/include/rtl/compat.h +++ b/orte/include/rtl/compat_rtlwip.h @@ -25,22 +25,12 @@ #include #define printf rtl_printf -#define bswap_16 swab16 -#define bswap_32 swab32 #define gettimeofday(tv, tz) do_gettimeofday(tv) + #define setsockopt(a, b, c, d, e) (-1) #define getsockopt(a, b, c, d, e) (-1) #define ioctl(a, b, c) (-1) -static inline -char *strdup(char *str) { - char *tmp; - - tmp = malloc(strlen(str) + 1); - if (tmp) - memcpy(tmp, str, strlen(str) + 1); - return tmp; -} static inline int atoi(const char* nptr) { diff --git a/orte/include/rtps_endian.h b/orte/include/rtps_endian.h new file mode 100644 index 0000000..ec95950 --- /dev/null +++ b/orte/include/rtps_endian.h @@ -0,0 +1,33 @@ +#ifndef RTPS_ENDIAN_H +#define RTPS_ENDIAN_H 1 + +#include "orte/orte_config.h" + +#define FLAG_BIG_ENDIAN 0 +#define FLAG_LITTLE_ENDIAN 1 + +#if WORDS_BIGENDIAN + +# define FLAG_ENDIANNESS FLAG_BIG_ENDIAN +# define conversion_needed(to_endianness) ((to_endianness)!=FLAG_BIG_ENDIAN) + +#else + +# define FLAG_ENDIANNESS FLAG_LITTLE_ENDIAN +# define conversion_needed(to_endianness) ((to_endianness)!=FLAG_LITTLE_ENDIAN) + +#endif + +static inline +void rtps_byteswap(uint8_t *outdata, + const uint8_t *data, + uint32_t datalen) +{ + const uint8_t *source_ptr = data; + uint8_t *dest_ptr = outdata + datalen - 1; + while(dest_ptr >= outdata) + *dest_ptr-- = *source_ptr++; +} + + +#endif /* FLAG_ENDIANNESS */ diff --git a/orte/include/typedefs.h b/orte/include/typedefs.h index b194b6b..2b18109 100644 --- a/orte/include/typedefs.h +++ b/orte/include/typedefs.h @@ -26,6 +26,7 @@ extern "C" { #endif typedef struct CSTWriter CSTWriter; //forward declarations +typedef struct CSTRemoteReader CSTRemoteReader; typedef struct CSTReader CSTReader; typedef struct ObjectEntryOID ObjectEntryOID; typedef struct ObjectEntryHID ObjectEntryHID; @@ -44,8 +45,8 @@ typedef struct sock_t { * struct - MessageBuffer */ typedef struct MessageBuffer { - ORTECDRStream cdrStream; - ORTECDRStream *cdrStreamDirect; + CDR_Codec cdrCodec; + CDR_Codec *cdrCodecDirect; Boolean needSend; Boolean containsInfoReply; } MessageBuffer; @@ -56,6 +57,8 @@ typedef struct TaskProp { sock_t sock; pthread_t thread; Boolean terminate; + MessageBuffer mb; + ORTEDomain *d; } TaskProp; @@ -147,7 +150,7 @@ typedef int EVH2(ORTEDomain *,void *); typedef struct HTimFncUserNode { ul_htim_node_t htim; const char *name; - pthread_rwlock_t *lock; //when func share params, lock is called before call the func + pthread_rwlock_t *lock; //when a func share params, lock is called before call the func EVH2 *func; void *arg1; } HTimFncUserNode; @@ -165,22 +168,27 @@ struct ObjectEntryOID{ void *attributes; //atributes of object Boolean appMOM; Boolean privateCreated; //object created by me self app - HTimFncUserNode expirationPurgeTimer; + HTimFncUserNode expirationPurgeTimer; //only for private CSTPublication,CSTSubscription - void *instance; //data stream + void *instance; //data Codec ORTERecvCallBack recvCallBack; ORTESendCallBack sendCallBack; void *callBackParam; NtpTime sendCallBackDelay; - HTimFncUserNode sendCallBackDelayTimer; + HTimFncUserNode sendCallBackDelayTimer; //only for list of publishers or subscribers gavl_node_t psNode; + //multicast + ul_list_head_t multicastRemoteReaders; + int multicastPort; }; struct ObjectEntryAID { gavl_node_t aidNode; AppId aid; HTimNode htimUnicast; //parameters for Unicast gavl_cust_root_field_t oidRoot; + //just one application 1c1 can be connected to AID + ObjectEntryOID *aobject; //application }; struct ObjectEntryHID{ gavl_node_t hidNode; @@ -221,8 +229,9 @@ typedef struct CSChange { SequenceNumber gapSN; //>0 means sn is in GAP // 1 - sn is gap, 2 - sn,sn+1 are gaps, ... ul_list_head_t attributes; - ORTECDRStream cdrStream; //for issue + CDR_Codec cdrCodec; //for issue //how many times was a cstRemoteWriter acknowledged + ul_list_head_t writerParticipants; int remoteReaderCount; int remoteReaderBest; int remoteReaderStrict; @@ -235,6 +244,8 @@ typedef struct CSChange { * struct CSTWriterParams - */ typedef struct CSTWriterParams { + unsigned int registrationRetries; + NtpTime registrationPeriod; NtpTime waitWhileDataUnderwayTime; NtpTime repeatAnnounceTime; NtpTime delayResponceTime; @@ -248,6 +259,8 @@ typedef struct CSTWriterParams { */ typedef struct CSChangeForReader { gavl_node_t node; + ul_list_node_t participantNode; + CSTRemoteReader *cstRemoteReader; CSChange *csChange; StateMachineChFReader commStateChFReader; HTimFncUserNode waitWhileDataUnderwayTimer; @@ -256,10 +269,11 @@ typedef struct CSChangeForReader { /** * struct CSTRemoteReader - */ -typedef struct CSTRemoteReader { +struct CSTRemoteReader { gavl_node_t node; CSTWriter *cstWriter; - ObjectEntryOID *objectEntryOID; + ObjectEntryOID *sobject; /* to send object */ + ObjectEntryOID *pobject; /* physical object (for multicast is differnet than sobject) */ GUID_RTPS guid; gavl_cust_root_field_t csChangeForReader; @@ -268,6 +282,7 @@ typedef struct CSTRemoteReader { //comm states StateMachineHB commStateHB; StateMachineSend commStateSend; + unsigned int commStateToSentCounter; //timing properties HTimFncUserNode delayResponceTimer; @@ -276,7 +291,10 @@ typedef struct CSTRemoteReader { unsigned int HBRetriesCounter; NtpTime lastSentIssueTime; -} CSTRemoteReader; + + //multicast + ul_list_node_t multicastNode; //connected into objectEntryOID +}; typedef struct CSTPublications CSTPublications; /** @@ -300,6 +318,9 @@ struct CSTWriter { pthread_rwlock_t lock; HTimFncUserNode refreshPeriodTimer; + + unsigned int registrationCounter; + HTimFncUserNode registrationTimer; //ser./deser. function ORTETypeRegister *typeRegister; @@ -338,7 +359,7 @@ typedef struct CSChangeFromWriter { typedef struct CSTRemoteWriter { gavl_node_t node; CSTReader *cstReader; - ObjectEntryOID *objectEntryOID; + ObjectEntryOID *spobject; /* sender, physical object */ GUID_RTPS guid; gavl_cust_root_field_t csChangeFromWriter; @@ -428,12 +449,11 @@ struct ORTEDomain { //////////////////////////////////////////////////// //variables for tasks - TaskProp taskRecvMetatraffic; - MessageBuffer mbRecvMetatraffic; + TaskProp taskRecvUnicastMetatraffic; + TaskProp taskRecvMulticastMetatraffic; + TaskProp taskRecvUnicastUserdata; + TaskProp taskRecvMulticastUserdata; TaskProp taskSend; - MessageBuffer mbSend; - TaskProp taskRecvUserdata; - MessageBuffer mbRecvUserdata; //////////////////////////////////////////////////// //databases diff --git a/orte/java/Makefile b/orte/java/Makefile new file mode 100644 index 0000000..f595272 --- /dev/null +++ b/orte/java/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/orte/java/Makefile.omk b/orte/java/Makefile.omk new file mode 100644 index 0000000..79cd16a --- /dev/null +++ b/orte/java/Makefile.omk @@ -0,0 +1,42 @@ +#******************************************************************* +# The JAVA ORTE Project is distributed under the +# Library Gnu General Public Licence. +# See file COPYING for details. +# +#******************************************************************* + +default_CONFIG = CONFIG_OC_JAVA_ORTE=n + +ifeq ($(CONFIG_OC_JAVA_ORTE),y) + +ifndef ANT +TRY_ANT=/opt/ant/bin/ant # Ant is searched here if it isn't found in $PATH +ANT=$(shell if [ -n "`which ant 2>/dev/null`" ]; then which ant; else [ -x $(TRY_ANT) ] && echo $(TRY_ANT); fi) +ifeq ($(ANT),) + +$(warning You need Ant in order to compile this. If you have it in non-standard \ + location, specify it in an ANT variable.) +$(error Ant not found) +endif +endif + +ifndef JAVA_HOME +JAVA_HOME=/opt/java +endif + +export JAVA_HOME + +.PHONY: jar-orte + +utils-pass-local: jar-orte + +jar-orte: + $(ANT) -Djava_class_dir=$(USER_OBJS_DIR)/ -Djava_lib_dir=$(USER_BIN_DIR)/ \ + -buildfile $(srcdir)/build.xml $@ + +#clean-java: +clean-custom: + $(ANT) -Djava_class_dir=$(USER_OBJS_DIR)/ -Djava_lib_dir=$(USER_BIN_DIR)/ \ + -buildfile $(srcdir)/build.xml clean + +endif diff --git a/orte/java/build.xml b/orte/java/build.xml new file mode 100644 index 0000000..4b11674 --- /dev/null +++ b/orte/java/build.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/orte/java/makeant.bat b/orte/java/makeant.bat new file mode 100644 index 0000000..b3aa865 --- /dev/null +++ b/orte/java/makeant.bat @@ -0,0 +1,5 @@ +set JAVA_HOME=D:\app\j2sdk1.4.1 +set ANT=D:\app\apache-ant-1.5.2\bin\ant.bat + +%ANT% +rem %ANT% -verbose diff --git a/orte/java/src/org/ocera/orte/Domain.java b/orte/java/src/org/ocera/orte/Domain.java new file mode 100644 index 0000000..962a0f9 --- /dev/null +++ b/orte/java/src/org/ocera/orte/Domain.java @@ -0,0 +1,341 @@ +/** Domain.java */ +package org.ocera.orte; + +import org.ocera.orte.types.*; +//import org.ocera.orte.tools.CheckType; + +/** + * Class Domain provides methods for work with the ORTE domain. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Domain { + + /** load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + protected int handle; + public DomainProp props; + public DomainEvents events; + // je to tu spravne???????????????????????????????????????????????? + + + + + /** + * constructor that creates default domain + * domain = ORTE_DEFAULT_DOMAIN + * suspended thread = false + */ + public Domain() + { + // initialization of ORTE layer + JOrte.init(); + System.out.println(":j: executed JOrte.init().."); + // this.handle =jORTEDomainDefaultAppCreate(ORTEConstant.ORTE_DEFAULT_DOMAIN,true); - uspane vlakno po startu + this.handle =jORTEDomainDefaultAppCreate(ORTEConstant.ORTE_DEFAULT_DOMAIN,false); + if(this.handle == 0) System.out.println(":j!: zero domain handle! .."); + } + + + /** + * constructor + * + */ + public Domain(int domain, DomainProp ps, DomainEvents ev, boolean suspend) + { + + // initialization of ORTE layer + JOrte.init(); + System.out.println(":j: executed JOrte.init().."); + // set Default Domain Properties + if(ps == null) { + this.props = DomainProp.defaultPropsCreate(); + } + else { + this.props = ps; + } + // init Domain Events + if(ev == null) { + this.events = DomainEvents.init(); + } + else { + this.events = ev; + } + this.handle = jORTEDomainAppCreate(domain,ps.handle,ev.handle,suspend); + if(this.handle == 0) System.out.println(":j!: zero domain handle! .."); + } + + + /** + * destructor + * + */ + protected void finalize() + { + if(!destroyAllRegTypes()) System.out.println(":j!: destroyAllRegTypes fault.."); + if(!destroy()) System.out.println(":j!: ORTEDomainADestroy fault.."); + } + + + /** + * getHandle - returns a handle of the domain + * + * @return handler of the domain + */ + public int getHandle() + { + return this.handle; + } + + /** + * getDomain - returns a handle of the domain + * + * + * @param d given instance of Domain + * @param jp_ORTEDomainProp address from C pointer + * @return handler of the domain + */ + public boolean destroy() + { + if (jORTEDomainADestroy(this.handle)) return true; + return false; + } + + /** + * regNewDataType - + * + * + * @param + * @param + * @param + * @param + * @return + */ + public + boolean regNewDataType(String name, + // serial, deserial, + long maxlength) + { + int b = jORTETypeRegisterAdd(handle, name, + // serial, deserial, + maxlength); + if (b == ORTEConstant.ORTE_BAD_HANDLE) + { + System.out.println(":!j: regNewDataType() - bad domain handle!"); + return false; + } + if (b == ORTEConstant.ORTE_OK) + { + System.out.println(":j: ORTE_OK - regNewDataType().."); + return true; + } + + return false; + } + + + + /** + * destroyAllRegTypes - destroys all previous registered data types. + * + * + * @return boolean value, False when some error occures, otherwise True + */ + public + boolean destroyAllRegTypes() + { + if (jORTETypeRegisterDestroyAll(this.handle)) return true; + return false; + } + + + /** + * createSubscription - + * + * + * @param + * @param + * @param + * @param + * @return + */ + public + Subscription createSubscription(int subsmode, + int substype, + String topic, + String typeName, + int bufflength, + NtpTime deadline, + NtpTime minSeparation, + SubscriptionCallback cb, + /* recvCallBack */ + /* recvCallBackParam*/ + long multicastIP) + { + Subscription s = new Subscription(this, + subsmode, + substype, + topic, + typeName, + bufflength, + deadline, + minSeparation, + cb, + multicastIP); + return s; + } + + + + + /** + * createPublication - + * + * + * @param + * @param + * @param + * @param + * @return + */ + public + Publication createPublication (String topic, + org.ocera.orte.types.MessageData instance, + NtpTime persistence, + int strength) + { + System.out.println(":j: vytvarim publikaci pro DataType: " + instance.getType()); + Publication p = new Publication(this, + topic, + instance, + persistence, + strength); + return p; + } + + + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + /** + * jORTEDomainAppCreate - creates an default application object within given + * domain, returns handle to created object (from C environment), + * NULL in case of any error. + * + * + * @param domain given domain + * @return addres value (from C environment) of the created domain + */ + private static native + int jORTEDomainDefaultAppCreate(int domain,boolean suspend); + + + /** + * jORTEDomainAppCreate - creates an application object within given + * domain, returns handle to created object (from C environment), + * NULL in case of any error. + * + * + * @param domain given domain + * @param handler for C pointer to ORTEDomainProps + * @param handler for C pointer to ORTEDomainEvents + * @param suspended specifies whether threads of this application should be started as well (False) or stay suspended (True) + * @return addres value (from C environment) of the created domain + */ + + private static native + int jORTEDomainAppCreate(int domain, + int propHandle, + int eventsHandle, + boolean suspend); + + + /** + * jORTEDomainADestroy - destroys all application objects in specified + * domain, returns False if some error occures otherwise returns True. + * + * + * @param jp_domhandle handler to domain + * @return boolean value, False when some error occures, otherwise True + */ + private static native + boolean jORTEDomainADestroy(int dhandle); + + + /** + * jORTEDomainStart - + * + * @param dhandle handler to domain + * @param + * @param + * @return + */ + private static native + void jORTEDomainStart(int dhandle, + boolean recvMetatrafficThread, + boolean recvUserDataThread, + boolean sendThread); + + + /** + * jORTETypeRegisterAdd - register new data type. + * + * + * @param dhandle handler to domain + * @param + * @param + * @param + * @return + */ + private static native + int jORTETypeRegisterAdd(int dhandle, + String typeName, + // serial, + // deserial, + long maxlenght); + + + /** + * jORTETypeRegisterDestroyAll - destroys all previous registered data types. + * + * + * @param dhandle handler to domain + * @return boolean value, False when some error occures, otherwise True + */ + private static native + boolean jORTETypeRegisterDestroyAll(int dhandle); + + +/* ****************************************************************** */ + + + + + +} + diff --git a/orte/java/src/org/ocera/orte/DomainEvents.java b/orte/java/src/org/ocera/orte/DomainEvents.java new file mode 100644 index 0000000..af815fc --- /dev/null +++ b/orte/java/src/org/ocera/orte/DomainEvents.java @@ -0,0 +1,76 @@ +/** DomainEvents.java */ +package org.ocera.orte; + + +/** + * Class DomainEvents XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DOPSAT + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz +) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class DomainEvents { + + + /* load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + /* handler to C struct with default domain properties */ + public int handle = 0; + + + + /** + * defaultPropsCreate - create DomainProp with handle to default + * domain properties + * + * @return an object with handle to default domain properties + */ + public static + DomainEvents init() { + DomainEvents events = new DomainEvents(); + int handle = jORTEDomainInitEvents(); + events.handle = handle; + return events; + } + + + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + + /** + * jPropDefaultGet - returns handler to default properties of a domain, + * if occures some error return NULL. + * + * @return handler to default properties of a domain, NULL if error + */ + private static native + int jORTEDomainInitEvents(); + + + +} diff --git a/orte/java/src/org/ocera/orte/DomainProp.java b/orte/java/src/org/ocera/orte/DomainProp.java new file mode 100644 index 0000000..0243b66 --- /dev/null +++ b/orte/java/src/org/ocera/orte/DomainProp.java @@ -0,0 +1,75 @@ +/** DomainProp.java */ +package org.ocera.orte; + + +/** + * Class DomainProp XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DOPSAT + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz +) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class DomainProp { + + + /* load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + /* handler to C struct with default domain properties */ + public int handle = 0; + + + /** + * defaultPropsCreate - create DomainProp with handle to default + * domain properties + * + * @return an object with handle to default domain properties + */ + public static + DomainProp defaultPropsCreate() { + DomainProp prop = new DomainProp(); + int handle = jORTEDomainPropDefaultGet(); + prop.handle = handle; + return prop; + } + + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + + /** + * jPropDefaultGet - returns handler to default properties of a domain, + * if occures some error return NULL. + * + * @return handler to default properties of a domain, NULL if error + */ + private static native + int jORTEDomainPropDefaultGet(); + + + +} + diff --git a/orte/java/src/org/ocera/orte/JOrte.java b/orte/java/src/org/ocera/orte/JOrte.java new file mode 100644 index 0000000..8bd8d12 --- /dev/null +++ b/orte/java/src/org/ocera/orte/JOrte.java @@ -0,0 +1,99 @@ +/* JOrte.java */ + + +package org.ocera.orte; + +public class JOrte { + + + public static + void init() + { + jORTEInit(); + } + + public static + void sleepMs(long msec) + { + jORTESleepMs(msec); + } + + public static + void verbositySetOptions(String opt) + { + jORTEVerbositySetOptions(opt); + } + + public static + void verbositySetLogFile(String logfile) + { + jORTEVerbositySetLogFile(logfile); + } + + public static + void appSendThread(int dhandle) + { + jORTEAppSendThread(dhandle); + } + + + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + + /** + * jORTEInit - initialization of ORTE layer + * + * + * @return void + */ + private static native + void jORTEInit(); + + + /** + * jORTESleepMs - suspend calling thread for given time in ms + * + * + * @param d given time in milisec. + * @return void + */ + private static native + void jORTESleepMs(long msec); + + + /** + * jORTEVerbositySetOptions - + * + * + * @return void + */ + private static native + void jORTEVerbositySetOptions(String opt); + + + /** + * jORTEVerbositySetLogFile - + * + * + * @return void + */ + private static native + void jORTEVerbositySetLogFile(String logfile); + + + /** + * jORTEVerbositySetLogFile - + * + * + * @return void + */ + private static native + void jORTEAppSendThread(int dhandle); + + +} diff --git a/orte/java/src/org/ocera/orte/Manager.java b/orte/java/src/org/ocera/orte/Manager.java new file mode 100644 index 0000000..6fce451 --- /dev/null +++ b/orte/java/src/org/ocera/orte/Manager.java @@ -0,0 +1,137 @@ +/** Manager.java */ +package org.ocera.orte; +import org.ocera.orte.types.ORTEConstant; + + +/** + * Class Manage provides methods for creating and working + * with the ORTE manager. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Manager { + + private int handle; + + /** + * getHandle - returns handler of the manager + * + * @return handler of the manager + */ + public int getHandle() + { + return this.handle; + } + + + /** + * constructor - that creates default Manager + * domain = ORTE_DEFAULT_DOMAIN + * suspended thread = false + */ + public Manager () + { + handle = + jORTEDomainDefaultMgrCreate(ORTEConstant.ORTE_DEFAULT_DOMAIN,false); + } + + + /** + * constructor + * + */ + public Manager (int domain, + DomainProp props, + DomainEvents events, + boolean suspend) + { + handle = jORTEDomainMgrCreate(domain, + props.handle, + events.handle, + suspend); + } + + + /** + * destructor + * + */ + protected void finalize() + { + destroy(); + } + + + /** + * destroy - destroy manager object + * @return boolean: False if bad publication handle, True if succesful + */ + public + boolean destroy() + { + if(jORTEDomainMgrDestroy(this.handle)) return true; + System.out.println(":j!: ORTEDomainMgrDestroy() fault.."); + return false; + } + + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + + /** + * jORTEDomainMgrCreate - creates default Manager + * + * + * @param handle of the domain + * @return handle of the Manager + */ + private static native + int jORTEDomainDefaultMgrCreate(int dhandle,boolean suspend); + + + /** + * jORTEDomainMgrCreate - creates the Manager + * + * + * @param handle of the domain + * @param handle of the domain properties + * @param handle of the domain events + * @return handle of the Manager + */ + private static native + int jORTEDomainMgrCreate(int dhandle, + int propsHandle, + int eventsHandle, + boolean suspend); + + /** + * jORTEDomainMgrDestroy - destroy manager object + * + * + * @param hadle of the domain + * @return if some error occures return False, otherwise True + */ + private static native + boolean jORTEDomainMgrDestroy(int dhandle); +} diff --git a/orte/java/src/org/ocera/orte/OrteCallback.java b/orte/java/src/org/ocera/orte/OrteCallback.java new file mode 100644 index 0000000..004f563 --- /dev/null +++ b/orte/java/src/org/ocera/orte/OrteCallback.java @@ -0,0 +1,8 @@ +/* OrteCallback.java */ +package org.ocera.orte; + + +abstract class OrteCallback +{ + public abstract void callback(); +} diff --git a/orte/java/src/org/ocera/orte/Publication.java b/orte/java/src/org/ocera/orte/Publication.java new file mode 100644 index 0000000..4b51a8b --- /dev/null +++ b/orte/java/src/org/ocera/orte/Publication.java @@ -0,0 +1,142 @@ +/** Publication.java */ +package org.ocera.orte; + +import org.ocera.orte.types.*; +//import org.ocera.tools.CheckType; + +/** + * Class JORTEPublisher provides methods for creating and working + * with the ORTE publisher. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Publication { + + private int handle; + private org.ocera.orte.types.MessageData msgData; + + private boolean b; +/* + private int callbackEnvHandle = 0; +*/ + /** + * getHandle - returns handler of the publication + * + * @return handler of the publication + */ + public int getHandle() + { + return this.handle; + } + + + /** + * constructor + * + */ + public Publication (Domain d, + String topic, + org.ocera.orte.types.MessageData instance, + NtpTime persistence, + int strength) + { + this.handle = jORTEPublicationCreate(d.handle, + topic, + instance.getType(), + instance, + persistence, + strength); + // int sendCallBack, + // sendCallBackParam, + // NtpTime cbDelay + } + + + /** + * destructor + * + */ + protected void finalize() + { + destroy(); + } + + + /** + * destroy - Removes a publication. + * @return False if bad publication handle, True if succesful. + */ + public + boolean destroy() + { + if(jORTEPublicationDestroy(this.handle)) return true; + System.out.println(":j!: Destroy Publication Fault!"); + return false; + } + + + /** + * send - Send the publication. + * @return void + */ + public void send(MessageData instance) + { + msgData.write(); + b = jORTEPublicationSend(this.handle,instance); + if(!b) System.out.println(":j!: Sending Publication Fault!"); + return; + } + + /* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + private native + int jORTEPublicationCreate(int dhandle, + String topic, + String typeName, + org.ocera.orte.types.MessageData instance, + NtpTime persistence, + int strength); + // int sendCallBack, -->NULL + // sendCallBackParam,--> NULL + // NtpTime sendCallBackDelay + + + private native + boolean jORTEPublicationDestroy(int dhandle); + + + private native + boolean jORTEPublicationSend(int phandle, MessageData instance); + + + + /* 'get' methods */ +/* + public static native String getTopic(); + //public static native String getTypeName(); + public static native NtpTime getPersistance(); + public static native int getStrength(); +*/ +} + diff --git a/orte/java/src/org/ocera/orte/Subscription.java b/orte/java/src/org/ocera/orte/Subscription.java new file mode 100644 index 0000000..7add826 --- /dev/null +++ b/orte/java/src/org/ocera/orte/Subscription.java @@ -0,0 +1,130 @@ +/* Subscription.java */ +package org.ocera.orte; +import org.ocera.orte.types.NtpTime; + +/** + * Class JORTEPublisher provides methods for creating and working + * with the ORTE publisher. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Subscription { + + private int handle; + private int callbackContextHandle = 0; + + + /** + * getHandle - returns handler of the subscription + *tCommon: root updated, wakeup +1103482260.672 | WakeUpSendin + * @return handler of the subscription + */ + public int getHandle() + { + return this.handle; + } + + + /** + * constructor + * PROC protected??? - aby sel volat jen z tridy Domain + */ + protected Subscription(Domain d, + int subsmode, + int substype, + String topic, + String typeName, + int bufflength, + NtpTime deadline, + NtpTime minSeparation, + SubscriptionCallback cb, + /* callBackParam */ + long multicastIPAddress) + { + this.handle = jORTESubscriptionCreate(d.handle, + subsmode, + substype, + topic, + typeName, + bufflength, + deadline, + minSeparation, + cb, + /* callBackParam */ + multicastIPAddress); + } + + + /** + * destructor + * + */ + protected void finalize() + { + destroy(); + } + + + /** + * destroy - removes a publication + * @return boolean: False if bad publication handle, True if succesful + */ + protected + boolean destroy() + { + System.out.println(":j!: ORTEPublicationDestroy() called.."); + if(jORTESubscriptionDestroy(this.handle)) return true; + System.out.println(":j!: ORTEPublicationDestroy() fault.."); + return false; + } + + +/* ****************************************************************** * + * * + * native methods * + * * + * ****************************************************************** */ + + public native + int jORTESubscriptionCreate(int dhandle, + int subsmode, /*! union */ + int substype, /*! union */ + String topic, + String typeName, + int bufflength, + NtpTime deadline, + NtpTime minSeparation, + SubscriptionCallback cb, + /* recvCallBackParam */ + long multicastIPAddress); + + private native + boolean jORTESubscriptionDestroy(int dhandle); + + + /* native 'get' methods */ + public static native String getTopic(); + public static native String getTypeName(); + public static native NtpTime getDeadline(); + public static native NtpTime getMinSeparation(); + +} + diff --git a/orte/java/src/org/ocera/orte/SubscriptionCallback.java b/orte/java/src/org/ocera/orte/SubscriptionCallback.java new file mode 100644 index 0000000..47aee2b --- /dev/null +++ b/orte/java/src/org/ocera/orte/SubscriptionCallback.java @@ -0,0 +1,16 @@ +/* SubscriptionCallback.java */ +package org.ocera.orte; +import org.ocera.orte.types.*; + + +public class SubscriptionCallback //extends OrteCallback +{ + + //public void callback() + //public void callback(RecvInfo info, Object instance) + public void callback(RecvInfo info) + { + System.out.println(":j: ****** SubscriptionCallback.callback ******"); + } + +} diff --git a/orte/java/src/org/ocera/orte/examples/hello/HelloMessage.java b/orte/java/src/org/ocera/orte/examples/hello/HelloMessage.java new file mode 100644 index 0000000..c5deecf --- /dev/null +++ b/orte/java/src/org/ocera/orte/examples/hello/HelloMessage.java @@ -0,0 +1,76 @@ +/* HelloMessage.java */ + + +/* ********************************************************* * + * * + * Will be Generated by IDLE * + * * + * ********************************************************* */ + +import java.nio.*; // For ByteBuffer +import org.ocera.orte.*; + + + +public class HelloMessage extends org.ocera.orte.types.MessageData +{ + private String type; + private int maxLength; + private int counter = 0; + + public int cislo; + public byte[] retezec = new byte[20]; + //public String slovo; + + /** constructor */ + public HelloMessage(Domain dom, /*String newType - generovano podle nazvu souboru z IDLu,*/ int maxLength) + { + boolean b; + + this.type = this.getType(); + this.maxLength = maxLength; + + // type name registration + if(counter == 0) + { + counter++; + data = new byte[maxLength]; + System.out.println(":j: registruji newDataType: " + this.type); + b = dom.regNewDataType(this.type,maxLength); + if(b == false) + { + System.out.println(":!j: cannot register new data type!"); + return; + } + } + System.out.println(":j: instance of HelloMessage created.."); + } + + + /** + * getType - Get type of publication + * @return type of publication + */ + public String getType() + { + return super.getType(); + } + + // read data + public void read() + { + ByteBuffer bb = ByteBuffer.wrap(data); + cislo = bb.getInt(); + bb.get(retezec, 0, 20); + } + + // write data + public void write() + { + ByteBuffer bb = ByteBuffer.wrap(data); + bb.putInt(cislo); + bb.put(retezec, 0, 20); + } + + +} diff --git a/orte/java/src/org/ocera/orte/examples/hello/Publisher.java b/orte/java/src/org/ocera/orte/examples/hello/Publisher.java new file mode 100644 index 0000000..7688c0d --- /dev/null +++ b/orte/java/src/org/ocera/orte/examples/hello/Publisher.java @@ -0,0 +1,71 @@ +/** Publisher.java */ +import org.ocera.orte.*; +import org.ocera.orte.types.*; + +/* +import org.ocera.orte.types.ORTEConstant; +import org.ocera.orte.types.NtpTime; +*/ + + +/** + * Class Publisher provides methods for creating and working + * with the ORTE publisher. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Publisher { + + /** load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + public static void main(String[] args) + { + // create a new domain + Domain od = new Domain(ORTEConstant.ORTE_DEFAULT_DOMAIN, + DomainProp.defaultPropsCreate(), + DomainEvents.init(), + false); + if (od == null) + { + System.out.println(":!j:PUB: cannot create default domain!"); + return; + } + System.out.println(":j:PUB: creating new Publication.."); + // HelloMsg(Domain d, String type, int maxLength) + HelloMessage instance = new HelloMessage(od,/* "HelloMsg",*/ 64); + // set publisher's time parameter + NtpTime persistence = new NtpTime(3); + int strength = 1; + // create a publication + Publication pub = od.createPublication("Example HelloMsg", + instance, + persistence, + strength); + while(true) + { + JOrte.sleepMs(1000); + } + } // end main() + +} diff --git a/orte/java/src/org/ocera/orte/examples/hello/Subscriber.java b/orte/java/src/org/ocera/orte/examples/hello/Subscriber.java new file mode 100644 index 0000000..0e2c1e5 --- /dev/null +++ b/orte/java/src/org/ocera/orte/examples/hello/Subscriber.java @@ -0,0 +1,141 @@ +/** Subscriber.java */ +import org.ocera.orte.*; +import org.ocera.orte.types.*; + + + +/** + * Class Publisher provides methods for creating and working + * with the ORTE publisher. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +class MyCallback extends org.ocera.orte.SubscriptionCallback +{ + int i; + int num; + SequenceNumber sn; // only for test purposes + + //public void callback(RecvInfo info, Object instance) + public MyCallback() + { + System.out.println(":j: objekt MyCallback vytvoren.."); + i = 0; // init count + num = 0; // init + } + + //public void callback() + //public void callback(RecvInfo info) + public void callback(RecvInfo info, Object instance) + { + num = info.i; + //System.out.println("Call back: " + obj); + System.out.println("->JAVA"); + System.out.println(":j: callback metoda: jsem tady!!!!!!!!!!!"); + System.out.println(":j: JAVA Call back " + (i++)); + System.out.println(" "); + System.out.println(":j: ---- RecvInfo [prijate]:"); + System.out.println(":j: pomocna: i = " + num);// only for test purposes + System.out.println(":j: recvStatus: " + info.getRecvStatus());// only for test purposes + System.out.println(":j: topic: " + info.getTopic()); // only for test + //info.type = "ahoj ["+ i + "]"; + System.out.println(":j: type: " + info.getType()); // + System.out.println(":j: senderGuid: " + info.getSenderGuid()); // + System.out.println(":j: localTimerecv: " + info.getLocalTimeRecv()); // + System.out.println(":j: remoteTimePub: " + info.getRemoteTimePub()); // + sn = info.getSeqNumber(); + System.out.println(":j: seqNr: high = " + sn.high + " low = " + sn.low); // only for test purposes + System.out.println("/JAVA"); + cnt++; + + } + + static public int cnt = 0; +} + +public class Subscriber { + + public final static int IMMEDIATE = 0x02; + public final static int BEST_EFFORTS = 0x01; + + /** load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + + + + public static void main(String[] args) + { + boolean b; + + // create a new domain + // (constructor without arguments creates default domain) + org.ocera.orte.Domain od = new org.ocera.orte.Domain(); + + + if (od == null) { + System.out.println(":!j:SUBS: PropDefaultGet() failed.. "); + } + else { + System.out.println(":j:SUBS: PropDefaultGet() succesful " + od.props); + } + + + + // register new data type + b = od.regNewDataType("HelloMsg"/*,ser,deser*/,64); + + + // set subscriber's time parameter + NtpTime deadline = new NtpTime(10); + NtpTime minSeparation = new NtpTime(0); + + + System.out.println(":j:SUBS: chystam se vytvorit subscribera"); + + // create subscriber + System.out.println(":j: Subscriber: chystam se vytvorit objekt MyCallback.."); + MyCallback mycallback = new MyCallback(); + //Subscription sub = od.initSubscription(Subscription sub, IMMEDIATE,BEST_EFFORTS, + Subscription sub = od.createSubscription(IMMEDIATE, + BEST_EFFORTS, + "Example HelloMsg", + "HelloMsg", + 64, + deadline, + minSeparation, + mycallback, + /* sendCallBackParam,*/ + 0); + + + while(MyCallback.cnt < 5) { + System.out.println("MyCallback.cnt: " + MyCallback.cnt); + JOrte.sleepMs(1000); + } + sub = null; + System.out.println("Calling gc() ..."); + System.gc(); + + } + +} diff --git a/orte/java/src/org/ocera/orte/manifest b/orte/java/src/org/ocera/orte/manifest new file mode 100644 index 0000000..5963ea7 --- /dev/null +++ b/orte/java/src/org/ocera/orte/manifest @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 + + + + + diff --git a/orte/java/src/org/ocera/orte/tools/CheckType.java b/orte/java/src/org/ocera/orte/tools/CheckType.java new file mode 100644 index 0000000..be9ae39 --- /dev/null +++ b/orte/java/src/org/ocera/orte/tools/CheckType.java @@ -0,0 +1,56 @@ +/* CheckType.java */ +package org.ocera.orte.tools; + + +/** + * Class CheckType checks the boundry of the types, which + * substitutes the 'unsigned' types from C sources, because + * the types used in Java source code are longer than the + * unsigned types in C source code. For example type 'long' + * [64bit] substitutes the type 'uint32_t' [32bit]. + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +public class CheckType { + + /** constants - max and min boundry values of the unsigned integer32 */ + final static long UINT32MAX = (2^32 - 1); + final static long UINT32MIN = 0; + + + /** + * checkUINT_32 - check the boundry of the unsigned int32 type and + * return the bool value if the condition comes true or false + * + * @param number the value which will be checked + * @return boolean value - true if the number is within the range of the unsigned int32 type + */ + + + public static + boolean uint_32(long number) + { + if (number >= UINT32MIN && number <= UINT32MAX) return(true); + return(false); + } + +} + diff --git a/orte/java/src/org/ocera/orte/tools/Conversions.java b/orte/java/src/org/ocera/orte/tools/Conversions.java new file mode 100644 index 0000000..ee28ec4 --- /dev/null +++ b/orte/java/src/org/ocera/orte/tools/Conversions.java @@ -0,0 +1,84 @@ +/* Conversions.java */ +package org.ocera.orte.tools; +import org.ocera.orte.types.*; + +/** + * Class Conversions provides conversions between IPAddress + * and String and between NtpTime and String. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class Conversions { + + /** load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + /** native methods */ + + /** + * IPAddressToString - converts and return IP address from number + * notation into its dot notation in string + * + * @param ipAddress source IP address in number notation + * @return IP address in string(dot) notation + */ + public static native + String IPAddressToString(long ipAddress); + + + /** + * StringToIPAddress - converts IP and returns address from dot notation + * -string into its number notation + * + * @param ipAddress source IP address in string(dot) notation + * @return IP address in number notation + */ + public static native + long StringToIPAddress(String ipAddress); + + + /** + * NtpTimeToStringMs - converts NtpTime from number notation into its + * string notation in miliseconds + * + * @param time time given in JNtpTime object + * @return NtpTime in string notation in miliseconds + */ + public static native + String NtpTimeToStringMs(NtpTime time); + + + /** + * NtpTimeToStringUs - converts NtpTime from number notation into its + * string notation in microseconds + * + * @param time time given in JNtpTime object + * @return NtpTime in string notation in microseconds + */ + public static native + String NtpTimeToStringUs(NtpTime time); + + +} + diff --git a/orte/java/src/org/ocera/orte/tools/GetORTEConstant.java b/orte/java/src/org/ocera/orte/tools/GetORTEConstant.java new file mode 100644 index 0000000..df72516 --- /dev/null +++ b/orte/java/src/org/ocera/orte/tools/GetORTEConstant.java @@ -0,0 +1,66 @@ +/* GetORTEConstant.java */ +package org.ocera.orte.tools; + + +/** + * Class GetORTEConstant is used for reading of constants defined + * in C source code. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + + +public class GetORTEConstant { + + /** name of the constant */ + String cName; + + /** contructor */ + public GetORTEConstant(String name){ + cName = name; + } + + /** load native library 'libjorte.so' */ + static { + System.loadLibrary("jorte"); + } + + + /** nativ function */ + + /** getCConstant - read the constant defined in C source code + * + * @param name original name of the constant + * @return int value of the constant, -1 if constant doesn't exists + */ + public native int getConstant(String name); + + + /* test */ + public static void main(String[] args) { + int c; + GetORTEConstant gc = new GetORTEConstant("RTPS_HEADER_LENGTH"); + + c = gc.getConstant("RTPS_HEADER_LENGTH"); + System.out.println("delka je: " + c); + } + +} + diff --git a/orte/java/src/org/ocera/orte/types/GUID_RTPS.java b/orte/java/src/org/ocera/orte/types/GUID_RTPS.java new file mode 100644 index 0000000..74c3d4d --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/GUID_RTPS.java @@ -0,0 +1,78 @@ +/* GUID_RTPS.java */ +package org.ocera.orte.types; + + +/** + * Class GUID_RTPS substitutes the struct GUID_RTPS + * from C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * HostId hid; + * AppId aid; + * ObjectId oid; + * } GUID_RTPS; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +/* TODO @hid,aid,oid: v C pretypovat z long na uint32_t */ + +public class GUID_RTPS { + private long hid; + private long aid; + private long oid; + + + /* constructor */ + public GUID_RTPS(long hostId, long appId, long objectId) { + hid = hostId; + aid = appId; + oid = objectId; + + System.out.println(":j: instance of GUID_RTPS created.."); + } + + /* toString() */ + public String toString() + { + return("GUID: hid = " + hid + " aid = " + aid + " oid = " + oid); + } + + + /* get GUID_RTPS */ + public GUID_RTPS get() + { + return this; + } + + /* set GUID_RTPS */ + public void set(long h, long a, long o) + { + this.hid = h; + this.aid = a; + this.oid = o; + return; + } +} + + + + + diff --git a/orte/java/src/org/ocera/orte/types/MessageData.java b/orte/java/src/org/ocera/orte/types/MessageData.java new file mode 100644 index 0000000..81dc089 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/MessageData.java @@ -0,0 +1,55 @@ +/* MessageData.java */ + +/* +Rozhranni pro objekty generovane pomoci IDLE. + + + +*/ +package org.ocera.orte.types; + +public class MessageData +{ + //-- new + private String type; + private int maxLength; + // new -- + + protected byte[] data; + + public String getType() + { + char extensionSeparator = '.'; + // get class name + String className = getClass().getName(); + // find last separator + int dot = className.lastIndexOf(extensionSeparator); + return className.substring(dot + 1); + } + + public int getMaxSerializeLength() { + if(data == null) + { + System.out.println(":!j: NULL Message Data!"); + return 0; + } + //return(data.size()); + return(maxLength); + } + + public void read() {}; + public void write() {}; + +/* + // pro test 'name = getClass().getName()' + public static void main(String[] args) + { + MessageData md = new MessageData(); + System.out.println("nazev tridy: " + md.getType()); + } +*/ + +} + + + diff --git a/orte/java/src/org/ocera/orte/types/MessageInterpret.java b/orte/java/src/org/ocera/orte/types/MessageInterpret.java new file mode 100644 index 0000000..1c06385 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/MessageInterpret.java @@ -0,0 +1,91 @@ +/* MessageInterpret.java */ +package org.ocera.orte.types; + + +/** + * Class MessageInterpret substitutes the struct MessageInterpret + * from C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * ProtocolVersion sourceVersion; + * VendorId sourceVendorId; + * HostId sourceHostId; + * AppId sourceAppId; + * HostId destHostId; + * AppId destAppId; + * IPAddress unicastReplyIPAddress; + * Port unicastReplyPort; + * IPAddress multicastReplyIPAddress; + * Port multicastReplyPort; + * Boolean haveTimestamp; + * NtpTime timestamp; + * } MessageInterpret; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class MessageInterpret { + + public ProtocolVersion sourceVersion; + public VendorId sourceVendorId; + public long sourceHostId; + public long sourceAppId; + public long destHostId; + public long destAppId; + public long unicastReplyIPAddress; + public long unicastReplyPort; + public long multicastReplyIPAddress; + public long multicastReplyPort; + public boolean haveTimestamp; + public NtpTime timestamp; + + + /* constructor */ + public MessageInterpret(ProtocolVersion srcVersion, + VendorId srcVendorId, + long srcHostId, + long srcAppId, + long dstHostId, + long dstAppId, + long unicReplyIPAddr, + long unicReplyPort, + long multicReplyIPAddr, + long multicReplyPort, + boolean haveTimeStamp, + NtpTime timeStamp) + + { + sourceVersion = srcVersion; + sourceVendorId = srcVendorId; + sourceHostId = srcHostId; + sourceAppId = srcAppId; + destHostId = dstHostId; + destAppId = dstAppId; + unicastReplyIPAddress = unicReplyIPAddr; + unicastReplyPort = unicReplyPort; + multicastReplyIPAddress = multicReplyIPAddr; + multicastReplyPort = multicReplyPort; + haveTimestamp = haveTimeStamp; + timestamp = timeStamp; + } + +} + diff --git a/orte/java/src/org/ocera/orte/types/NtpTime.java b/orte/java/src/org/ocera/orte/types/NtpTime.java new file mode 100644 index 0000000..52434dc --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/NtpTime.java @@ -0,0 +1,82 @@ +/* NtpTime.java */ +package org.ocera.orte.types; + + +/** + * Class NtpTime substitutes the struct NtpTime from + * C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * int32_t seconds; // time in seconds + * uint32_t fraction; // time in seconds / 2^32 + * } NtpTime; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + /* TODO @fraction: v C pretypovat z long na uint32_t */ + +public class NtpTime { + + private int seconds; /* time in seconds */ + private long fraction; /* time in seconds / 2^32 */ + + + /* constructors */ + + /* NtpTime with fraction part */ + public NtpTime(int sec, long fract) { + seconds = sec; + fraction = fract; + System.out.println(":j: instance of NtpTime created.."); + } + + /* NtpTime with zero fraction part */ + public NtpTime(int sec) { + seconds = sec; + fraction = 0; + System.out.println(":j: instance of NtpTime created.."); + } + + /* toString */ + public String toString() + { + return("ntpTime: sec = " + seconds + " fraction = " + fraction); + } + + + /* get NtpTime */ + public NtpTime get() + { + return this; + } + /* set NtpTime */ + public void set(int s, long f) + { + seconds = s; + fraction = f; + return; + } + + + +} + + diff --git a/orte/java/src/org/ocera/orte/types/ORTEConstant.java b/orte/java/src/org/ocera/orte/types/ORTEConstant.java new file mode 100644 index 0000000..2a720c2 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/ORTEConstant.java @@ -0,0 +1,136 @@ +/** ORTEConstant.java */ +package org.ocera.orte.types; + + +/** + * Class ORTEConstant contains the definitions of basic ORTE constants. + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class ORTEConstant { + + /* ************************************************* * + * constants from the file 'typedefs_defines_rtps.h' * + * ************************************************* */ + + public static final int RTPS_HEADER_LENGTH = 16; + + public static final int MAX_PATHNAME = 128; + public static final int MAX_TYPENAME = 128; + + public static final int ORTE_TRUE = 1; + public static final int ORTE_FALSE = 0; + + + /* hosID*/ + public static final int HID_UNKNOWN = 0x00; + + /* appID */ + public static final int AID_UNKNOWN = 0x00; + public static final int MANAGEDAPPLICATION = 0x01; + public static final int MANAGER = 0x02; + + /* objID */ + public static final int OID_UNKNOWN = 0x00000000; + public static final int OID_APP = 0x000001C1; + public static final int OID_WRITE_APPSELF = 0x000008C2; + public static final int OID_READ_APPSELF = 0x000008C7; + public static final int OID_WRITE_APP = 0x000001C2; + public static final int OID_READ_APP = 0x000001C7; + public static final int OID_WRITE_MGR = 0x000007C2; + public static final int OID_READ_MGR = 0x000007C7; + public static final int OID_WRITE_PUBL = 0x000003C2; + public static final int OID_READ_PUBL = 0x000003C7; + public static final int OID_WRITE_SUBS = 0x000004C2; + public static final int OID_READ_SUBS = 0x000004C7; + /* Kind */ + public static final int OID_APPLICATION = 0x01; + public static final int OID_CSTWRITER = 0x02; + public static final int OID_PUBLICATION = 0x03; + public static final int OID_SUBSCRIPTION = 0x04; + public static final int OID_CSTREADER = 0x07; + // + public static final int OID_USEROBJ = 0x00; + public static final int OID_RESUSEROBJ = 0x40; + public static final int OID_METAOBJ = 0x80; + public static final int OID_RESMETAOBJ = 0xC0; + + + /* IP */ + public static final int IPADDRESS_INVALID = 0; + + + /* port */ + public static final int PORT_INVALID = 0; + + + /* PID */ + public static final int PID_PAD = 0x00; + public static final int PID_SENTINEL = 0x01; + public static final int PID_EXPIRATION_TIME = 0x02; + public static final int PID_PERSISTENCE = 0x03; + public static final int PID_MINIMUM_SEPARATION = 0x04; + public static final int PID_TOPIC = 0x05; + public static final int PID_STRENGTH = 0x06; + public static final int PID_TYPE_NAME = 0x07; + public static final int PID_TYPE_CHECKSUM = 0x08; + public static final int RTPS_PID_TYPE2_NAME = 0x09; + public static final int RTPS_PID_TYPE2_CHECKSUM = 0x0a; + public static final int PID_MATATRAFFIC_MULTICAST_IPADDRESS =0x0b; + public static final int PID_APP_IPADDRESS = 0x0c; + public static final int PID_METATRAFFIC_UNICAST_PORT = 0x0d; + public static final int PID_USERDATA_UNICAST_PORT = 0x0e; + public static final int PID_IS_RELIABLE = 0x0f; + public static final int PID_EXPECTS_ACK = 0x10; + public static final int PID_USERDATA_MULTICAST_IPADDRESS = 0x11; + public static final int PID_MANAGER_KEY = 0x12; + public static final int PID_SEND_QUEUE_SIZE = 0x13; + public static final int PID_RELIABILITY_ENABLED = 0x14; + public static final int PID_PROTOCOL_VERSION = 0x15; + public static final int PID_VENDOR_ID = 0x16; + public static final int PID_VARGAPPS_SEQUENCE_NUMBER_LAST = 0x17; + public static final int PID_RECV_QUEUE_SIZE = 0x18; + public static final int PID_RELIABILITY_OFFERED = 0x19; + public static final int PID_RELIABILITY_REQUESTED = 0x1a; + /* possible values for PID_RELIABILITY_REQUEST */ + public static final int PID_VALUE_RELIABILITY_BEST_EFFORTS = 0x01; + public static final int PID_VALUE_RELIABILITY_STRICT = 0x02; + + + + /* *************************************** * + * constants from the file 'defines_api.h' * + * *************************************** */ + + public static final int MAX_INTERFACES = 5; + public static final int ORTE_DEFAULT_DOMAIN = 0; + public static final int MAX_STRING_IPADDRESS_LENGTH = 4*3+3+1; + public static final int MAX_STRING_NTPTIME_LENGTH = 30; //need fix + + /* Return values */ + public static final int ORTE_OK = 0; + public static final int ORTE_BAD_HANDLE = -1; + public static final int ORTE_TIMEOUT = -2; + public static final int ORTE_QUEUE_FULL = -3; + + +} + diff --git a/orte/java/src/org/ocera/orte/types/ProtocolVersion.java b/orte/java/src/org/ocera/orte/types/ProtocolVersion.java new file mode 100644 index 0000000..c4c195c --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/ProtocolVersion.java @@ -0,0 +1,48 @@ +/* ProtocolVersion.java */ +package org.ocera.orte.types; + + +/** + * Class ProtocolVersion substitutes the struct ProtocolVersion + * from C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * int8_t major; + * int8_t minor; + * } ProtocolVersion; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +public class ProtocolVersion { + + char major; + char minor; + + + /* constructor */ + public ProtocolVersion(char majorNumber, char minorNumber) { + major = majorNumber; + minor = minorNumber; + } + +} + diff --git a/orte/java/src/org/ocera/orte/types/RecvInfo.java b/orte/java/src/org/ocera/orte/types/RecvInfo.java new file mode 100644 index 0000000..e6c20f5 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/RecvInfo.java @@ -0,0 +1,151 @@ +/* RecvInfo.java */ +package org.ocera.orte.types; + +/** + * Class + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * typedef enum ORTESendStatus { + * NEED_DATA = 0x01, + * CQL = 0x02 + * } ORTESendStatus; + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +public class RecvInfo +{ + public int i; + + private RecvStatus status; + private String topic; + private String type; + private GUID_RTPS senderGUID; + private NtpTime localTimeRecv; + private NtpTime remoteTimePub; + private SequenceNumber sn; + + public RecvInfo() + { + i = 0; + status = new RecvStatus(0); + topic = new String(" "); + type = new String(" "); + senderGUID = new GUID_RTPS(0,0,0); + localTimeRecv = new NtpTime(0); + remoteTimePub = new NtpTime(0); + sn = new SequenceNumber(0,0); + + System.out.println(":j: instance of RecvInfo created.."); + } + +// SET & GET + +// RecvStatus + // set status + public RecvStatus getRecvStatus() + { + return status.get(); + } + // set status + public void setRecvStatus(int value) + { + status.set(value); + return; + } + +// Topic + public String getTopic() + { + return topic; + } + // set status + public void setTopic(String t) + { + topic = t; + return; + } + +// Type + public String getType() + { + return type; + } + // set status + public void setType(String t) + { + type = t; + return; + } + + +// SenderGuid + // get GUID_RTPS + public GUID_RTPS getSenderGuid() + { + return senderGUID.get(); + } + // set GUID_RTPS + public void setSenderGuid(long h, long a, long o) + { + senderGUID.set(h,a,o); + return; + } + + +// localTimeRecv + // get ntpTime + public NtpTime getLocalTimeRecv() + { + return localTimeRecv.get(); + } + // set GUID_RTPS + public void setLocalTimeRecv(int sec, long fraction) + { + localTimeRecv.set(sec,fraction); + return; + } + + +// remoteTimePub + // get ntpTime + public NtpTime getRemoteTimePub() + { + return remoteTimePub.get(); + } + // set GUID_RTPS + public void setRemoteTimePub(int sec, long fraction) + { + remoteTimePub.set(sec,fraction); + return; + } + + +// Sequence number + // get sn + public SequenceNumber getSeqNumber() + { + return sn.get(); + } + // set sn + public void setSeqNumber(int high, int low) + { + sn.set(high, low); + return; + } + +} diff --git a/orte/java/src/org/ocera/orte/types/RecvStatus.java b/orte/java/src/org/ocera/orte/types/RecvStatus.java new file mode 100644 index 0000000..e8fb61d --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/RecvStatus.java @@ -0,0 +1,78 @@ +/* RecvStatus.java */ +package org.ocera.orte.types; + + +/** + * Class SendStatus + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * typedef enum ORTESendStatus { + * NEED_DATA = 0x01, + * CQL = 0x02 + * } ORTESendStatus; + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +public class RecvStatus +{ + // nemam to pridat k ostat konstantam???????? + public static final int NEED_DATA = 0x01; + public static final int DEADLINE = 0x02; + + private int value; + + /* constructor */ + public RecvStatus(int a) + { + value = a; + System.out.println(":j: instance of RecvStatus created.."); + } + + /* toString */ + public String toString() + { + return(value + " "); + } + + /* get status */ + public RecvStatus get() + { + return this; + } + + /* set status */ + public void set(int v) + { + value = v; + return; + } + + + public boolean needData() + { + if (this.value == NEED_DATA) return true; + return false; + } + + public boolean deadline() + { + if (this.value == DEADLINE) return true; + return false; + } + +} diff --git a/orte/java/src/org/ocera/orte/types/SendInfo.java b/orte/java/src/org/ocera/orte/types/SendInfo.java new file mode 100644 index 0000000..2079cf1 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/SendInfo.java @@ -0,0 +1,53 @@ +/* SendInfo.java */ +package org.ocera.orte.types; + + +/** + * Class SendInfo + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * typedef enum ORTESendStatus { + * NEED_DATA = 0x01, + * CQL = 0x02 + * } ORTESendStatus; + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +public class SendInfo +{ + SendStatus status; + String topic; + String type; + GUID_RTPS senderGUID; + SequenceNumber sn; + + // constructor + public SendInfo() + { + // vytvorit objekt JSendStatus + nahrat z C + // nahrat z C topic + // nahrat z C type + // vytvorit + nahrat GUID + // vytvorit + nahrat SN + } + + + + + +} diff --git a/orte/java/src/org/ocera/orte/types/SendStatus.java b/orte/java/src/org/ocera/orte/types/SendStatus.java new file mode 100644 index 0000000..49e9ec6 --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/SendStatus.java @@ -0,0 +1,57 @@ +/* SendStatus.java */ +package org.ocera.orte.types; + + +/** + * Class SendStatus + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * typedef enum ORTESendStatus { + * NEED_DATA = 0x01, + * CQL = 0x02 + * } ORTESendStatus; + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +public class SendStatus +{ + // nemam to pridat k ostat konstantam???????? + public static final int NEED_DATA = 0x01; + public static final int CQL = 0x02; + + private int value; + + // constructor + public SendStatus(int a) + { + value = a; + } + + public boolean needData() + { + if (this.value == NEED_DATA) return true; + return false; + } + + public boolean critQueueLevel() + { + if (this.value == CQL) return true; + return false; + } + +} diff --git a/orte/java/src/org/ocera/orte/types/SequenceNumber.java b/orte/java/src/org/ocera/orte/types/SequenceNumber.java new file mode 100644 index 0000000..1b4923b --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/SequenceNumber.java @@ -0,0 +1,61 @@ +/* SequenceNumber.java */ +package org.ocera.orte.types; + + +/** + * Class SequenceNumber substitutes the struct SequenceNumber + * from C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * int32_t high; + * int32_t low; + * } SequenceNumber; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + + +public class SequenceNumber +{ + public int high; + public int low; + + + /* constructor */ + public SequenceNumber(int h, int l) + { + this.high = h; + this.low = l; + System.out.println(":j: instance SequenceNumber created.."); + } + + public SequenceNumber get() + { + return this; + } + + public void set(int h, int l) + { + this.high = h; + this.low = l; + } +} + diff --git a/orte/java/src/org/ocera/orte/types/VendorId.java b/orte/java/src/org/ocera/orte/types/VendorId.java new file mode 100644 index 0000000..dc81cde --- /dev/null +++ b/orte/java/src/org/ocera/orte/types/VendorId.java @@ -0,0 +1,49 @@ +/* VendorId.java */ +package org.ocera.orte.types; + + +/** + * Class VendorId substitutes the struct VendorId + * from C-source code defines in: 'typedefs_defines_rtps.h' + * + * typedef struct { + * int8_t major; + * int8_t minor; + * } VendorId; + * + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + + +public class VendorId { + + char major; + char minor; + + + /* constructor */ + public VendorId(char majorNumber,char minorNumber) { + major = majorNumber; + minor = minorNumber; + } + +} + diff --git a/orte/libjorte/JGetORTEConstant.c b/orte/libjorte/JGetORTEConstant.c new file mode 100644 index 0000000..aec2700 --- /dev/null +++ b/orte/libjorte/JGetORTEConstant.c @@ -0,0 +1,159 @@ +/* JGetORTEConstant.c */ +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +/* pregenerated header */ +#include "jorte/org_ocera_orte_tools_GetORTEConstant.h" +/* library header file's path */ +#include "orte.h" + +/* macro for comparing 2 strings */ +/* if(a==b) -> strcmp = 0 */ +#define compare(a,b) ((strcmp((a),(b)) == 0) ? 1 : 0) + + +/* global variables */ +/* +JNIEnv *globalJavaEnv; +jclass javaClass; +jobj javaObject; +jmethodID globalMid; +*/ + + +/* native function - prototype declared in pregenerated header */ +JNIEXPORT jint JNICALL +Java_org_ocera_tools_GetORTEConstant_getConstant +(JNIEnv *env, jobject jobj, jstring jname) +{ + const char *constant; + int const_value = 0; + + /* get the constant name from JAVA Enviromnent*/ + constant = (*env)->GetStringUTFChars(env,jname,0); + + + + + /* check if the name of the constant is correct * + * if yes, return the constant value * + */ + + /* RTPS_HEADER_LENGTH */ + #ifdef RTPS_HEADER_LENGTH + if (compare(constant,"RTPS_HEADER_LENGTH")) + const_value = RTPS_HEADER_LENGTH; + #endif + + + /* MAX_PATHNAME */ + #ifdef MAX_PATHNAME + if (compare(constant,"MAX_PATHNAME")) + const_value = MAX_PATHNAME; + #endif + + + /* MAX_TYPENAME */ + #ifdef MAX_TYPENAME + if (compare(constant,"MAX_TYPENAME")) + const_value = MAX_TYPENAME; + #endif + + + /* ORTE_TRUE */ + #ifdef ORTE_TRUE + if (compare(constant,"ORTE_TRUE")) + const_value = ORTE_TRUE; + #endif + + + /* ORTE_FALSE */ + #ifdef ORTE_FALSE + if (compare(constant,"ORTE_FALSE")) + const_value = ORTE_FALSE; + #endif + +/* +HID_UNKNOWN + +AID_UNKNOWN + +MANAGEDAPPLICATION + +MANAGER + +OID_UNKNOWN + +OID_APP + +OID_WRITE_APPSELF + + +*/ + + + /* return the result value*/ + if (const_value == 0) return (-1); + + return (const_value); + +} + + + +/* +X 10 + +int main(void) { + +const char *c = "MAX"; + +#ifdef c + printf("je definovano \n"); + return(1); +#endif + + printf("neni definovano \n"); + return(0); + +} + +int get_const(char *konstanta) +{ +#define xxx(name) if (strcmp(konstanta, #name )) return name + xxx(MAX); + xxx(MIN); +} + + +// command cpp c_file +// napoveda cpp + +*/ + + + + diff --git a/orte/libjorte/JIPAddressToString.c b/orte/libjorte/JIPAddressToString.c new file mode 100644 index 0000000..ffc7c01 --- /dev/null +++ b/orte/libjorte/JIPAddressToString.c @@ -0,0 +1,49 @@ +/* IPAdressToString.c */ +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_tools_Conversions.h" + + + +/* native function - prototype declared in pregenerated header */ +JNIEXPORT jstring JNICALL +Java_org_ocera_orte_tools_JORTEConversions_IPAddressToString +(JNIEnv *env, jclass class, jlong long_ipAddr) +{ + char buff[16]; + IPAddress ip; + + // conversion between data types + ip = (IPAddress) long_ipAddr; + // call the original liborte function + IPAddressToString(ip, buff); + // send the result to JAVA Environment + return((*env)->NewStringUTF(env, buff)); +} diff --git a/orte/libjorte/JNtpTimeToStringMs.c b/orte/libjorte/JNtpTimeToStringMs.c new file mode 100644 index 0000000..b83deca --- /dev/null +++ b/orte/libjorte/JNtpTimeToStringMs.c @@ -0,0 +1,70 @@ +/* JNtpTimeToStringMs.c */ +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_tools_Conversions.h" + + + +/* native function - prototype declared in pregenerated header */ +JNIEXPORT jstring JNICALL +Java_org_ocera_orte_tools_JORTEConversions_NtpTimeToStringMs +(JNIEnv *env, jclass class, jobject j_ntpTime) +{ + char buff[65]; // 32 + 32 + 1 end char + NtpTime time; + jfieldID fieldID; + jclass ntpTimeClass; + + + // NtpTime - get object's class + ntpTimeClass = (*env)->GetObjectClass(env, j_ntpTime); + + // seconds - get object field ID + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"seconds","I"); + if(fieldID == NULL) + return((*env)->NewStringUTF(env, "error when reading Java-ntpTime")); + // get objects value + time.seconds = (int32_t) (*env)->GetIntField(env,j_ntpTime,fieldID); + + // reset pointer + fieldID = NULL; + + // fraction - get object field ID + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"fraction","J"); + if(fieldID == NULL) + return((*env)->NewStringUTF(env, "error when reading Java-ntpTime")); + // get object's value + time.fraction = (uint32_t) (*env)->GetIntField(env,j_ntpTime,fieldID); + + // calling original liborte function + NtpTimeToStringMs(time,buff); + // return result of the conversion + return((*env)->NewStringUTF(env, buff)); +} diff --git a/orte/libjorte/JNtpTimeToStringUs.c b/orte/libjorte/JNtpTimeToStringUs.c new file mode 100644 index 0000000..7eff5e5 --- /dev/null +++ b/orte/libjorte/JNtpTimeToStringUs.c @@ -0,0 +1,70 @@ +/* JNtpTimeToStringUs.c */ +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_tools_Conversions.h" + + + +/* native function - prototype declared in pregenerated header */ +JNIEXPORT jstring JNICALL +Java_org_ocera_orte_tools_JORTEConversions_NtpTimeToStringUs +(JNIEnv *env, jclass class, jobject j_ntpTime) +{ + char buff[65]; // 32 + 32 + 1 end char + NtpTime time; + jfieldID fieldID; + jclass ntpTimeClass; + + + // NtpTime - get object's class + ntpTimeClass = (*env)->GetObjectClass(env, j_ntpTime); + + // seconds - get object field ID + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"seconds","I"); + if(fieldID == NULL) + return((*env)->NewStringUTF(env, "error when reading Java NtpTime")); + // get objects value + time.seconds = (int32_t) (*env)->GetIntField(env,j_ntpTime,fieldID); + + // reset pointer + fieldID = NULL; + + // fraction - get object field ID + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"fraction","J"); + if(fieldID == NULL) + return((*env)->NewStringUTF(env, "error when reading Java NtpTime")); + // get object's value + time.fraction = (uint32_t) (*env)->GetIntField(env,j_ntpTime,fieldID); + + // calling an orte's function + NtpTimeToStringUs(time,buff); + // return result of the conversion + return((*env)->NewStringUTF(env, buff)); +} diff --git a/orte/libjorte/JORTEDomainAppCreate.c b/orte/libjorte/JORTEDomainAppCreate.c new file mode 100644 index 0000000..3d5bf2a --- /dev/null +++ b/orte/libjorte/JORTEDomainAppCreate.c @@ -0,0 +1,78 @@ +/* JORTEDomainAppCreate.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Domain.h" + + + +// create default application domain +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Domain_jORTEDomainDefaultAppCreate +(JNIEnv *env, jclass class, jint jdomain,jboolean jsusp) +{ + jint d; + + printf(":c: jsem pred ORTEDomainDefaultAppCreate() \n"); + + /* call the liborte function */ + d = (jint) ORTEDomainAppCreate((int)jdomain, + NULL, + NULL, + (Boolean) jsusp); + if(!d) { + printf(":!c: ORTEDomainDefaultAppCreate() FAILED.. \n"); + return 0; + } + printf(":c: ORTEDomainDefautlAppCreate() ok.. + %d \n", d); + return (d); +} + +// create user application domain +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Domain_jORTEDomainAppCreate +(JNIEnv *env, jclass cls, jint jdomain, + jint propHandle, jint eventsHandle, jboolean jsusp) +{ + jint d; + + printf(":c: jsem pred ORTEDomainAppCreate() \n"); + /* call the liborte function */ + d = (jint) ORTEDomainAppCreate((int)jdomain, + (ORTEDomainProp *) propHandle, + (ORTEDomainAppEvents *) eventsHandle, + (Boolean) jsusp); + if(!d) { + printf(":!c: ORTEDomainAppCreate() FAILED.. \n"); + return 0; + } + printf(":c: ORTEDomainAppCreate() ok.. + %d \n", d); + return (d); +} diff --git a/orte/libjorte/JORTEDomainAppDestroy.c b/orte/libjorte/JORTEDomainAppDestroy.c new file mode 100644 index 0000000..031b24f --- /dev/null +++ b/orte/libjorte/JORTEDomainAppDestroy.c @@ -0,0 +1,49 @@ +/* JORTEDomainAppDestroy.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz +) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Domain.h" + + + +JNIEXPORT jboolean JNICALL +Java_org_ocera_orte_Domain_jORTEDomainADestroy +(JNIEnv *env, jclass cls, jint dhandle) +{ + if (!dhandle) return 0; + /* call the liborte function */ + if (ORTEDomainAppDestroy((ORTEDomain *) dhandle)) { + /* printf(":c: ORTEDomainAppDestroy() succesfuly \n"); */ + return 1; + } + printf(":!c: ORTEDomainAppDestroy failed! \n"); + return 0; +} diff --git a/orte/libjorte/JORTEDomainInitEvents.c b/orte/libjorte/JORTEDomainInitEvents.c new file mode 100644 index 0000000..029f290 --- /dev/null +++ b/orte/libjorte/JORTEDomainInitEvents.c @@ -0,0 +1,61 @@ +/* JORTEDomainInitEvents.c */ + + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz +) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_DomainEvents.h" + + + +JNIEXPORT jint JNICALL +Java_org_ocera_orte_DomainEvents_jORTEDomainInitEvents +(JNIEnv *env, jclass cls) +{ + ORTEDomainAppEvents *evs; + + /* allocation space for the pointer to struc ORTEDomainProp */ + evs = (ORTEDomainAppEvents *) malloc(sizeof(ORTEDomainAppEvents)); + if (evs == NULL) { + printf(":!c: not enough of memory to alocation ORTEDomainAppEvents.."); + return 0; + } + + /* call the liborte function */ + if (!ORTEDomainInitEvents(evs)) { + printf(":!c: ORTEDomainInitEvents() failed.. \n"); + free(evs); + return 0; + } + printf(":c: ORTEDomainInitEvents() succesful.. %p \n",evs); + return ((jint) evs); + +} diff --git a/orte/libjorte/JORTEDomainMgrCreate.c b/orte/libjorte/JORTEDomainMgrCreate.c new file mode 100644 index 0000000..e8231ca --- /dev/null +++ b/orte/libjorte/JORTEDomainMgrCreate.c @@ -0,0 +1,78 @@ +/* JORTEDomainMgrCreate.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Manager.h" + + + +// create default manager domain +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Manager_jORTEDomainDefaultMgrCreate +(JNIEnv *env, jclass cls, jint jdomain, jboolean susp) +{ + jint d; + + printf(":c: jsem pred ORTEDomainDefaultMgrCreate() \n"); + /* call the liborte function */ + d = (jint) ORTEDomainMgrCreate((int)jdomain, + NULL, + NULL, + (Boolean) susp); + if(!d) { + printf(":!c: ORTEDomainDefaultMgrCreate() FAILED.. \n"); + return 0; + } + printf(":c: ORTEDomainDefautlMgrCreate() ok.. + %d \n", d); + return (d); +} + + +// create user manager domain +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Manager_jORTEDomainMgrCreate +(JNIEnv *env, jclass cls, jint jdomain, jint propHandle, + jint eventsHandle, jboolean susp) +{ + jint d; + + printf(":c: jsem pred ORTEDomainMgrCreate() \n"); + /* call the liborte function */ + d = (jint) ORTEDomainMgrCreate((int)jdomain, + (ORTEDomainProp *) propHandle, + (ORTEDomainAppEvents *) eventsHandle, + (Boolean) susp); + if(!d) { + printf(":!c: ORTEDomainMgrCreate() FAILED.. \n"); + return 0; + } + printf(":c: ORTEDomainMgrCreate() ok.. + %d \n", d); + return (d); +} diff --git a/orte/libjorte/JORTEDomainMgrDestroy.c b/orte/libjorte/JORTEDomainMgrDestroy.c new file mode 100644 index 0000000..4bef67e --- /dev/null +++ b/orte/libjorte/JORTEDomainMgrDestroy.c @@ -0,0 +1,53 @@ +/* JORTEDomainMgrDestroy.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk +.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Manager.h" + + + +JNIEXPORT jboolean JNICALL +Java_org_ocera_orte_Manager_jORTEDomainMgrDestroy +(JNIEnv *env, jclass cls, jint dhandle) +{ + int8_t b; + + // call the liborte function + b = ORTEDomainMgrDestroy((ORTEDomain *) dhandle); + if(b == ORTE_OK) + { + //printf(":c: ORTEDomainMgrDestroy() succesfuly.. \n"); + return 1; + } + if (b == ORTE_BAD_HANDLE) + printf(":!c: ORTEDomainMgrDestroy() failed! (bad domain handle..) \n"); + return 0; +} diff --git a/orte/libjorte/JORTEDomainPropDefaultGet.c b/orte/libjorte/JORTEDomainPropDefaultGet.c new file mode 100644 index 0000000..7045a1a --- /dev/null +++ b/orte/libjorte/JORTEDomainPropDefaultGet.c @@ -0,0 +1,60 @@ +/* JORTEDomainPropDefaultGet.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz +) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_DomainProp.h" + + + +JNIEXPORT jint JNICALL +Java_org_ocera_orte_DomainProp_jORTEDomainPropDefaultGet +(JNIEnv *env, jclass cls) +{ + ORTEDomainProp *dprop; + + /* allocation space for the pointer to struc ORTEDomainProp */ + dprop = (ORTEDomainProp *) malloc(sizeof(ORTEDomainProp)); + if (dprop == NULL) { + printf(":!c: not enough of memory to alocation ORTEDomainProp.."); + return 0; + } + + /* call the liborte function */ + if (!ORTEDomainPropDefaultGet(dprop)) { + printf(":!c: ORTEDomainPropDefaultGet() failed.. \n"); + free(dprop); + return 0; + } + printf(":c: ORTEDomainPropDefaultGet() succesful.. %p \n",dprop); + return ((jint) dprop); + +} diff --git a/orte/libjorte/JORTEDomainStart.c b/orte/libjorte/JORTEDomainStart.c new file mode 100644 index 0000000..22a7641 --- /dev/null +++ b/orte/libjorte/JORTEDomainStart.c @@ -0,0 +1,53 @@ +/* JORTEDomainStart.c */ + + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Domain.h" + + +// ve fci chybi 2 Multicast argumenty - maji se dodat??? +JNIEXPORT void JNICALL +Java_org_ocera_orte_Domain_jORTEDomainStart +(JNIEnv *env, jclass cls, jint dom_handle, + jboolean recvUnicastMetatrafficThread, + jboolean recvUnicastUserDataThread, + jboolean sendThread) +{ + // vyresit problemy s booleanem + ORTEDomainStart((ORTEDomain *) dom_handle, + (Boolean) recvUnicastMetatrafficThread, + ORTE_FALSE, // Multicast ! + (Boolean) recvUnicastUserDataThread, + ORTE_FALSE, // Multicast ! + (Boolean) sendThread); + +} + diff --git a/orte/libjorte/JORTEInit.c b/orte/libjorte/JORTEInit.c new file mode 100644 index 0000000..67183a6 --- /dev/null +++ b/orte/libjorte/JORTEInit.c @@ -0,0 +1,48 @@ +/* JORTEInit.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_JOrte.h" + + + +JNIEXPORT void JNICALL +Java_org_ocera_orte_JOrte_jORTEInit +(JNIEnv *env, jclass cls) +{ + /* intitialize ORTE layer */ + ORTEInit(); + printf(":c: provedena ORTEInit()..\n"); + + /* kontrolni hlasky */ + // ORTEVerbositySetOptions("ALL:10"); + +} + diff --git a/orte/libjorte/JORTEPublicationCreate.c b/orte/libjorte/JORTEPublicationCreate.c new file mode 100644 index 0000000..b6dd2e2 --- /dev/null +++ b/orte/libjorte/JORTEPublicationCreate.c @@ -0,0 +1,181 @@ +/* JORTEPublicationCreate.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +#include "jorte/getNtpTime.h" +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Publication.h" + + + +// ### DOCASNE ################################################################## + + +// ### DOCASNE ################################################################## +int counter = 0; + +void +sendCallBack(const ORTESendInfo *info,void *vinstance, void *sendCallBackParam) { + char *instance=(char*)vinstance; + + printf(":c: zacatek sendCallBack()..\n"); + + switch (info->status) { + case NEED_DATA: + printf(":c:PUB: Sampling publication, count %d\n", counter); + printf(":c:PUB: !! DOCASNE - ZRUSIT!! - callback() u Publishera \n"); + sprintf(instance,"Hello Universe! (%d)",counter++); + break; + case CQL: //criticalQueueLevel + break; + } +} + +// ### DOCASNE ################################################################## + +// ### DOCASNE ################################################################## + + +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Publication_jORTEPublicationCreate +(JNIEnv *env , jobject obj, jint dom_handle, jstring j_topic, + jstring j_type_name, jobject j_instance, jobject j_persistence, + jint j_strength /*, callback not used */) +{ + ORTEPublication *p; + ORTEDomain *d; + const char *topic; + const char *typename; + char *buffer; // dynamicky naalokovat pole instance2send @!!!!!!!!!!!! + NtpTime persistence; + int strength; + jclass cls; + jmethodID mid; + jint buff_length; + + printf(":c: chystam se vytvorit publikaci\n"); + d = (ORTEDomain *) dom_handle; + if (!d) { + printf(":!c: jORTEPublicationCreate() fault - bad domain handle! \n "); + return 0; + } + + topic = (*env)->GetStringUTFChars(env, j_topic, 0); + typename = (*env)->GetStringUTFChars(env, j_type_name, 0); + + + + persistence = getNtpTime(env, j_persistence); + strength = (int) j_strength; + + + printf(":c: jORTEPublicationCreate() - nacteny parametry z javy..\n"); + + + // create buffer + + // get object's class + cls = (*env)->GetObjectClass(env, j_instance); + if(!cls) + { + printf(":!c: Class of 'instance' not found! \n"); + return 0; + } + // get method ID + mid = (*env)->GetMethodID(env, cls, "getMaxSerializeLength", "()I"); + if(!mid) + { + printf(":!c: Method getMaxSerializeLength() not found! \n"); + return 0; // ma se pri selhani RecvInfa davat tvrdy return? + } + +/* + // get fieldID + if((fieldID = (*env)->GetFieldID(env,cls_instance,"seconds","I")) == NULL) + return((*env)->NewStringUTF(env, "error when reading Java-ntpTime")); + // get objects value + time.seconds = (int32_t) (*env)->GetIntField(env,j_ntpTime,fieldID); +*/ + + + + + // get class MessageData + cls = (*env)->GetObjectClass(env, j_instance); + if(cls == 0) + { + printf(":!c: cannot find MessageData class! \n"); + return 0; + } + // get class's method ID + mid = (*env)->GetMethodID(env, + cls, + "getMaxSerializeLength", + "()I"); + if(mid == 0) + { + printf(":!c: method getMaxSerializeLength failed! \n"); + return 0; + } + // calling method + buff_length = (*env)->CallIntMethod(env, + j_instance, + mid); + + buffer = (char*) malloc((int) buff_length); // 64 !!! provizorne - upravit!! + + + /* call original ORTE function */ + p = ORTEPublicationCreate(d, + topic, + typename, + (void *) buffer, + &persistence, + strength, + sendCallBack, /* BUDE NULL !!!*/ + j_instance, + NULL); + + printf(":c: provedeno volani ORTEPublicationCreate() \n"); + + if (!p) { + printf(":!c: jORTEPublicationCreate() fault! (bad publication handle).. \n "); + return 0; + } + + + /* free the memory */ + (*env)->ReleaseStringUTFChars(env, j_topic, topic); + (*env)->ReleaseStringUTFChars(env, j_type_name, typename); + /* free the alocated memory - buffer !!!!*/ + + return ((jint) p); +} + diff --git a/orte/libjorte/JORTEPublicationDestroy.c b/orte/libjorte/JORTEPublicationDestroy.c new file mode 100644 index 0000000..77863bf --- /dev/null +++ b/orte/libjorte/JORTEPublicationDestroy.c @@ -0,0 +1,53 @@ +/* JORTEPublicationDestroy.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Publication.h" + + + +JNIEXPORT jboolean JNICALL +Java_org_ocera_orte_Publication_jORTEPublicationDestroy +(JNIEnv *env, jclass cls, jint dhandle) +{ + int8_t b; + + // call the liborte function + b = ORTEPublicationDestroy((ORTEPublication *) dhandle); + if(b == ORTE_OK) + { + //printf(":c: ORTEPublicationDestroy() succesfuly.. \n"); + return 1; + } + if (b == ORTE_BAD_HANDLE) + printf(":!c: ORTEPublicationDestroy failed! (bad publication's handle) \n"); + return 0; +} + diff --git a/orte/libjorte/JORTEPublicationSend.c b/orte/libjorte/JORTEPublicationSend.c new file mode 100644 index 0000000..49d7e07 --- /dev/null +++ b/orte/libjorte/JORTEPublicationSend.c @@ -0,0 +1,60 @@ +/* JORTEPublicationSend.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +// library header file's path +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Publication.h" + + +JNIEXPORT jboolean JNICALL +Java_org_ocera_orte_Publication_jORTEPublicationSend +(JNIEnv *env, jobject obj, jint pub_handle, jobject obj_instance) +{ + int8_t b; + + // nezapomenout udelat free() !!!!!!!!!!! + ORTEPublicationSendParam *psp = (ORTEPublicationSendParam *)malloc(sizeof(ORTEPublicationSendParam)); + + psp->instance = (void *) obj_instance; + psp->data_endian = 0; /* BIG -pak tahat z headeru !!*/ + + // call the liborte function + b = ORTEPublicationSendEx((ORTEPublication *) pub_handle, psp); + if (b == ORTE_BAD_HANDLE) + printf(":!c: ORTEPublicationSend() failed! (bad publication handle).. \n"); + return 0; + if(b == ORTE_OK) + { + //printf(":c: ORTEPublicationSend() succesfuly.. \n"); + } + // free memory + free(psp); + return 1; +} diff --git a/orte/libjorte/JORTESleepMs.c b/orte/libjorte/JORTESleepMs.c new file mode 100644 index 0000000..7d15f2b --- /dev/null +++ b/orte/libjorte/JORTESleepMs.c @@ -0,0 +1,43 @@ +/* JORTESleepMs.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// origin orte headers +#include "orte.h" +/* pregenerated header */ +#include "jorte/org_ocera_orte_JOrte.h" + + + +JNIEXPORT void JNICALL +Java_org_ocera_orte_JOrte_jORTESleepMs +(JNIEnv *env, jclass cls, jlong milisec) +{ + printf(":c: spoustim ORTESleepMs()..\n"); + ORTESleepMs((unsigned int) milisec); +} + diff --git a/orte/libjorte/JORTESubscriptionCreate.c b/orte/libjorte/JORTESubscriptionCreate.c new file mode 100644 index 0000000..09bcba5 --- /dev/null +++ b/orte/libjorte/JORTESubscriptionCreate.c @@ -0,0 +1,567 @@ +/* JORTESubscriptionCreate.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +#include "jorte/getNtpTime.h" +// library header file's path +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Subscription.h" +// enable TEST_STAGE run level +#include "jorte/4all.h" + +/* +typedef struct +{ + JavaVM *jvm; + jobject obj; + jobject rinfo; + int value; // !! pro testovani +} JORTECallbackContext_t; + + +typedef struct +{ + jobject obj_recvStatus; + jobject str_topic; + jobject str_type; + jobject obj_guid; + jobject obj_ntpT_loc; + jobject obj_ntpT_rem; + jobject obj_sn; +} RecvInfoVar_t; +*/ +#include "jorte/typedefs_defines_jorte.h" + +// ### recvCallBack() ######################################################### + +void +recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) +{ +// char *instance=(char*)vinstance; + + JavaVM *jvm; + JNIEnv *env = NULL; // local reference - Ok + + jclass cls = 0; //! local reference + + jobject obj = 0; //! local reference + //jobject obj_recvInfo = 0; //! local reference + jobject rinfo = 0; //! local reference + jobject obj_instance = 0; + + jmethodID mid = 0; //! local reference + jmethodID mid_callback = 0; //! local reference + + jfieldID fid = 0; //! local reference + jstring jstr; + //RecvInfoVar_t *recvInfoVar = (RecvInfoVar_t*)malloc(sizeof(RecvInfoVar_t)); + + JORTECallbackContext_t *callback_cont = (JORTECallbackContext_t*)recvCallBackParam; + + int i = callback_cont->value++; // !! JEN PRO TESTOVACI UCELY + + + + + +#ifdef TEST_STAGE + printf("\n\n"); + printf(":c: --------------- spustena recvCallBack.. z Ccka ------------------\n"); +#endif + + if(callback_cont->obj == 0) return; + obj = callback_cont->obj; + + if(callback_cont->jvm == 0) return; + jvm = callback_cont->jvm; + + rinfo = callback_cont->rinfo; + + + + +#ifdef TEST_STAGE + printf(":c: recvCallBack: jvm = %p \n", jvm); + printf(":c: recvCallBack: obj = %p \n", obj); +#endif + + // get env + (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL); + if(!env) + { + printf(":!c: recvCallBack: can't get env..\n"); + return; + } + +#ifdef TEST_STAGE + printf(":c: recvCallBack: env = %p \n", env); +#endif + + // get class + cls = (*env)->GetObjectClass(env,obj); + if(cls == 0) + { + printf(":!c: cannot find callbackObj class..\n"); + return; + } + // create global reference + +#ifdef TEST_STAGE + printf(":c: recvCallBack: volana fce GetMethodID().. \n"); +#endif + + // get method ID + mid = (*env)->GetMethodID(env, + cls, + "callback", + "(Lorg/ocera/orte/types/RecvInfo;Ljava/lang/Object;)V"); + // "(Lorg/ocera/orte/types/RecvInfo;Ljava/lang/Object;)V"); + // create global reference to callback method + if(mid == 0) + { + printf(":!c: can not find callback() method...\n"); + return; + } + mid_callback = mid; + +#ifdef TEST_STAGE + printf(":c: recvCallBack: obj = %p \n", obj); + printf(":c: recvCallBack: cls = %p \n", cls); + printf(":c: recvCallBack: mid = %p \n", mid); + // +#endif + + +// -- vytvoreni parametru callback funkce --------------------------------------------- +// vytvorit objekt RecvInfo - global ref + + + // get object RecvInfo class + cls = (*env)->FindClass(env, "org/ocera/orte/types/RecvInfo"); + if(!cls) + { + printf(":!c: cls RecvInfo class not found..\n"); + return; // ma se pri selhani RecvInfa davat tvrdy return? + } + + // create RecvInfo object + if (rinfo == 0) + { + // call object constructor + mid = (*env)->GetMethodID(env, cls, "", "()V"); + if(!mid) + { + printf(":!c: constructor RecvInfo() not found..\n"); + return; // ma se pri selhani RecvInfa davat tvrdy return? + } + // new object + rinfo = (*env)->NewObject(env, cls, mid); + if(!rinfo) + { + printf(":!c: obj_recvInfo not created..\n"); + return; + } + #ifdef TEST_STAGE + printf(":c: object RecvInfo created..\n"); + #endif + // create global reference + callback_cont->rinfo = (*env)->NewGlobalRef(env, rinfo); + if (callback_cont->rinfo == 0) + { + printf(":!c: cannot create global reference callback_cont->rinfo ..\n"); + return; + } + #ifdef TEST_STAGE + printf(":c: global reference to object RecvInfo created..\n"); + #endif + } + + + +//-------------------------------------------------------------------- +// set RecvInfo fields + +#ifdef TEST_STAGE +//*** int i - testovaci + // get field ID + fid = (*env)->GetFieldID(env,cls,"i","I"); + if(fid == NULL) + { + printf(":!c: cannot get ReccvInfo.i fieldID..\n"); + return; // je toto nutne?? + } + printf(":c: fid of ReccvInfo.i found..\n"); + // set new value '1234' + (*env)->SetIntField(env,callback_cont->rinfo,fid,i++); + printf(":c: kontrola prirazeni %d \n", + (*env)->GetIntField(env,callback_cont->rinfo,fid)); + printf(":c: new value of RecvInfo.i set..\n"); +#endif + + + +//*** RecvStatus + #ifdef TEST_STAGE + printf("\n"); + printf(":c: ---- RecvInfo [odesilane]:\n"); + #endif + + // get method ID + mid = (*env)->GetMethodID(env, + cls, + "setRecvStatus", + "(I)V"); + if(mid == 0) + { + printf(":!c: can not find setRecvStatus() method...\n"); + return; + } + // call method + (*env)->CallVoidMethod(env, + callback_cont->rinfo, + mid, + (jint)info->status); + +//*** topic + // Look for the instance field s in cls + fid = (*env)->GetFieldID(env, + cls, + "topic", + "Ljava/lang/String;"); + if (fid == NULL) + { + printf(":!c: can not find 'topic' field ID...\n"); + return; // failed to find the field + } + // Read the instance field s + jstr = (*env)->GetObjectField(env, obj, fid); + // Create a new string and overwrite the instance field + jstr = (*env)->NewStringUTF(env, info->topic); + if (jstr == NULL) + { + return; + /* out of memory */ + } + (*env)->SetObjectField(env, callback_cont->rinfo, fid, jstr); + + + +//*** type + // Look for the instance field s in cls + fid = (*env)->GetFieldID(env, + cls, + "type", + "Ljava/lang/String;"); + if (fid == NULL) + { + printf(":!c: can not find 'type' field ID...\n"); + return; // failed to find the field + } + // Read the instance field s + jstr = (*env)->GetObjectField(env, obj, fid); + // Create a new string and overwrite the instance field + jstr = (*env)->NewStringUTF(env, info->type); + if (jstr == NULL) + { + printf(":!c: can not set new value 'type'..\n"); + return; + /* out of memory*/ + } + (*env)->SetObjectField(env, callback_cont->rinfo, fid, jstr); + + + +//*** GUID_RTPS + mid = (*env)->GetMethodID(env, + cls, + "setSenderGuid", + "(JJJ)V"); + if(mid == 0) + { + printf(":!c: can not find setSenderGuid() method...\n"); + return; + } + // call method + (*env)->CallVoidMethod(env, + callback_cont->rinfo, + mid, + (jlong)info->senderGUID.hid, + (jlong)info->senderGUID.aid, + (jlong)info->senderGUID.oid); + + +//*** localTimeRecv + // get method ID + mid = (*env)->GetMethodID(env, + cls, + "setLocalTimeRecv", + "(IJ)V"); + if(mid == 0) + { + printf(":!c: can not find setLocalTimeRecv() method...\n"); + return; + } + // call method + (*env)->CallVoidMethod(env, + callback_cont->rinfo, + mid, + (jint) info->localTimeReceived.seconds, + (jlong)info->localTimeReceived.fraction); + + + +//*** remoteTimePublished + // get method ID + mid = (*env)->GetMethodID(env, + cls, + "setRemoteTimePub", + "(IJ)V"); + if(mid == 0) + { + printf(":!c: can not find setRemoteTimePub() method...\n"); + return; + } + // call method + (*env)->CallVoidMethod(env, + callback_cont->rinfo, + mid, + (jint) info->remoteTimePublished.seconds, + (jlong)info->remoteTimePublished.fraction); + + +//*** Sequence number + // get method ID + mid = (*env)->GetMethodID(env, + cls, + "setSeqNumber", + "(II)V"); + if(mid == 0) + { + printf(":!c: can not find setSeqNumber() method...\n"); + return; + } + // call method + (*env)->CallVoidMethod(env, + callback_cont->rinfo, + mid, + info->sn.high, + info->sn.low); + + #ifdef TEST_STAGE + printf(":c: recvStatus: %d \n", info->status); + printf(":c: senderGuid: hid = %d, aid = %d, oid = %d \n", + info->senderGUID.hid,info->senderGUID.aid,info->senderGUID.oid); + printf(":c: topic: %s \n",info->topic); + printf(":c: type: %s \n",info->type); + printf(":c: localTimeRecv: sec = %d, fract = %d \n", + info->localTimeReceived.seconds,info->localTimeReceived.fraction); + printf(":c: remoteTimePub: sec = %d, fract = %d \n", + info->remoteTimePublished.seconds,info->remoteTimePublished.fraction); + printf(":c: seqNr: high = %d, low = %d \n",info->sn.high,info->sn.low); + printf("\n"); + #endif + + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + obj_instance = (jobject)vinstance; //?? pujde to?? +#ifdef TEST_STAGE + if(!obj_instance) printf(":!c: pretypovani: (jobject)vinstance = NULL..\n"); + else printf(":c: pretypovani: (jobject)vinstance = %p OK ..\n", obj_instance); +#endif + +// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +// -- vytvoreni parametru callback funkce ----------------------------------------end + + // call object's method +#ifdef TEST_STAGE + printf(":c: volam callback metodu.. halo jsi tam?? \n\n"); +#endif + (*env)->CallVoidMethod(env, + callback_cont->obj, /*obj*/ + mid_callback, + callback_cont->rinfo, + obj_instance); + + if((*jvm)->DetachCurrentThread(jvm)!=0) printf("DetachCurrentThread fault\n"); + +#ifdef TEST_STAGE + printf("\n"); + printf("-------------------- opoustim recvCallBack() z Ccka-------------------"); + printf("\n\n\n"); +#endif +// --funkcni 05-01-13 ------------------------------------------------------------ + + +} + +// ### END recvCallBack() ##################################################### + + + + +// ### nativni metoda ######################################################### + +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Subscription_jORTESubscriptionCreate +(JNIEnv *env, jobject obj, jint dhandle, jint jsmode, + jint jstype, jstring jtopic, jstring jtname, jint jbufflength, + jobject jdeadline, jobject jminSeparation, + jobject callbackObj /* recvCallBackparam */, jlong j_multicastIP) +{ + ORTESubscription *s; + ORTEDomain *d; + SubscriptionMode smode; + SubscriptionType stype; + const char *topic; + const char *typename; + char *instance; // dynamicky naalokovat pole instance2send !!!!! + NtpTime deadline; + NtpTime minSeparation; + + JavaVM *jvm; + jfieldID fid; + jclass cls; + // callback_cont + JORTECallbackContext_t *callback_cont = (JORTECallbackContext_t*)malloc(sizeof(JORTECallbackContext_t)); + //RecvInfoVar_t *recvInfoVar = (RecvInfoVar_t*)malloc(sizeof(RecvInfoVar_t)); + + // bad/zero callbackObj + if (callbackObj == 0) + { + printf(":c!: callbackObj can not be null.. \n"); + return 0; + } + + // get jvm + jint b = (*env)->GetJavaVM(env,&jvm); + if (b < 0) + { + printf(":!c: getJavaVM() fault..\n"); + return 0; + } + if (b == 0) + { + #ifdef TEST_STAGE + printf(":c: nativ fce: getJavaVM succesfull.. jvm = %p \n",jvm); + printf(":c: nativ fce: env = %p \n",env); + #endif + } + callback_cont->jvm = jvm; + + // create global reference + callback_cont->obj = (*env)->NewGlobalRef(env, callbackObj); + // global reference not created + if (callback_cont->obj == 0) + { + printf(":!c: cannot create global reference obj_subsCallback ..\n"); + return 0; + } + + // init RecvInfo pointer + callback_cont->rinfo = 0; + callback_cont->value = 0; // !!! JEN PRO TESTOVACI UCELY + +#ifdef TEST_STAGE + printf(":c: global reference obj_subsCallback created [%p] ..\n", callback_cont->obj); + printf(":c: local reference callbackObj [%p] ..\n", callbackObj); + printf(":c: global reference RecvInfo [%p] ..\n", callback_cont->rinfo); +#endif + + +// nastavi handle na stukturu callback_cont + cls = (*env)->GetObjectClass(env, obj); + fid = (*env)->GetFieldID(env, cls, "callbackContextHandle", "I"); + (*env)->SetIntField(env, obj, fid, (int)callback_cont); + +// --------------------------------------------------------------------------------------- +//uz funkcni cast - bez recvCallbacku + + printf(":c: chystam se vytvorit subscribera..\n"); + d = (ORTEDomain *) dhandle; + if (!d) + { + printf(":!c: jORTESubscriptionCreate bad domain handle.. \n "); + return 0; + } //JavaVM *jvm; + + smode = (SubscriptionMode) jsmode; + stype = (SubscriptionType) jstype; + topic = (*env)->GetStringUTFChars(env, jtopic, 0); + typename = (*env)->GetStringUTFChars(env, jtname, 0); + instance = (char *) malloc((int) jbufflength); + deadline = getNtpTime(env, jdeadline);// + minSeparation = getNtpTime(env, jminSeparation);// + /* ... */ + /* ... */ + + printf(":c: jORTESubscriptionreate() - nacteny parametry z javy..\n"); + +/* +ORTESubscriptionCreate(ORTEDomain *d, + SubscriptionMode mode, + SubscriptionType sType, + const char *topic, + const char *typeName, + void *instance, + NtpTime *deadline, + NtpTime *minimumSeparation, + ORTERecvCallBack recvCallBack, + void *recvCallBackParam, + IPAddress multicastIPAddress); + +*/ + // call original liborte function + s = ORTESubscriptionCreate(d, + smode, + stype, + topic, + typename, + &instance, + &deadline, + &minSeparation, + recvCallBack, + (void*)callback_cont, + (uint32_t) j_multicastIP); + + printf(":c: provedeno volani ORTESubscriptionCreate()..\n"); + + if (!s) { + printf(":!c: ORTESubscriptionCreate: bad publication handle.. \n "); + return 0; + } + + // free the memory + (*env)->ReleaseStringUTFChars(env, jtopic, topic); + (*env)->ReleaseStringUTFChars(env, jtname, typename); + + return ((jint) s); +} + diff --git a/orte/libjorte/JORTESubscriptionDestroy.c b/orte/libjorte/JORTESubscriptionDestroy.c new file mode 100644 index 0000000..1de6371 --- /dev/null +++ b/orte/libjorte/JORTESubscriptionDestroy.c @@ -0,0 +1,85 @@ +/* JORTESubscriptionDestroy.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +#include +// library header file's path +#include "orte.h" +// enable TEST_STAGE run level +#include "jorte/4all.h" +// pregenerated header +#include "jorte/org_ocera_orte_Subscription.h" +// +#include "jorte/typedefs_defines_jorte.h" + +JNIEXPORT jboolean JNICALL +Java_org_ocera_orte_Subscription_jORTESubscriptionDestroy +(JNIEnv *env, jobject obj, jint dhandle) +{ + int8_t b; + jint h; + jclass cls; + jfieldID fid; + + printf(":!c: ORTESubscriptionDestroy() called.. \n"); + // free callBack object + cls = (*env)->GetObjectClass(env, obj); + fid = (*env)->GetFieldID(env, cls, "callbackContextHandle", "I"); + h = (*env)->GetIntField(env, obj, fid); + //(*env)->SetIntField(env, obj, fid, 0); + printf(":!c: JORTECallbackContext_t handle: %x\n", h); + if(h) { + //JavaVM *jvm; + //jint ret; + printf(":c: ORTESubscriptionDestroy() destroying JORTECallbackContext_t.. \n"); + JORTECallbackContext_t *ctx = (JORTECallbackContext_t*)h; + if(ctx->obj) { + printf(":!c: deleting ctx->obj\n"); + (*env)->DeleteLocalRef(env, ctx->obj); + } + if(ctx->rinfo) { + printf(":!c: deleting ctx->rinfo\n"); + (*env)->DeleteLocalRef(env, ctx->rinfo); + } + + free((void*)h); + } + // call the liborte destroy function + printf(":!c: ORTESubscription handle: %x\n", dhandle); + if(dhandle) { + b = ORTESubscriptionDestroy((ORTESubscription *) dhandle); + if(b == ORTE_OK) + { + printf(":c: ORTESubscriptionDestroy() succesfuly.. \n"); + return 1; + } + if (b == ORTE_BAD_HANDLE) + printf(":!c: ORTESubscriptionDestroy() failed! (bad subsriber's handle) \n"); + } + return 0; +} + diff --git a/orte/libjorte/JORTETypeRegisterAdd.c b/orte/libjorte/JORTETypeRegisterAdd.c new file mode 100644 index 0000000..eb11d93 --- /dev/null +++ b/orte/libjorte/JORTETypeRegisterAdd.c @@ -0,0 +1,67 @@ +/* JORTETypeRegisterAdd.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// library header file's path +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_Domain.h" + + +JNIEXPORT jint JNICALL +Java_org_ocera_orte_Domain_jORTETypeRegisterAdd +(JNIEnv *env, jclass cls, jint handle, jstring jname, jlong jlength) +{ + const char *name; + int b; + + /* get type name from JAVA env */ + name = (*env)->GetStringUTFChars(env,jname,0); + + /* call original orte function */ + b = ORTETypeRegisterAdd((ORTEDomain *) handle, name, NULL, NULL, NULL,(unsigned int) jlength); + + /* free memmory space */ + (*env)->ReleaseStringUTFChars(env,jname,name); + +/* + if (b == ORTE_OK) return ORTE_TRUE; + + return ORTE_FALSE; +*/ + + printf(":c: jORTETypeRegisterAdd vraci %d [%d = ORTE_OK, %d = ORTE_BAD_HANDLE] \n", + b,ORTE_OK,ORTE_BAD_HANDLE); + + return b; + +/* +ORTETypeRegisterAdd(ORTEDomain *d,const char *typeName,ORTETypeSerialize ts, + ORTETypeDeserialize ds,unsigned int gms); +*/ +} + diff --git a/orte/libjorte/JStringToIPAddress.c b/orte/libjorte/JStringToIPAddress.c new file mode 100644 index 0000000..23083ca --- /dev/null +++ b/orte/libjorte/JStringToIPAddress.c @@ -0,0 +1,51 @@ +/* JStringToIPAddress.c - interface between Java - C */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + + +// library header file's path +#include "orte.h" +// pregenerated header +#include "jorte/org_ocera_orte_tools_Conversions.h" + + +/* native function - prototype declared in pregenerated header */ +JNIEXPORT jlong JNICALL +Java_org_ocera_orte_tools_JORTEConversions_StringToIPAddress +(JNIEnv *env, jclass class, jstring jstrIP) +{ + const char *charIP; + long longIP; + + // get IP from JAVA Enviromnent + charIP = (*env)->GetStringUTFChars(env,jstrIP,0); + // call the original liborte function + longIP = (long)StringToIPAddress(charIP); + // free memory + (*env)->ReleaseStringUTFChars(env, jstrIP, charIP); + return(longIP); +} + diff --git a/orte/libjorte/Makefile b/orte/libjorte/Makefile new file mode 100644 index 0000000..f595272 --- /dev/null +++ b/orte/libjorte/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/orte/libjorte/Makefile.am b/orte/libjorte/Makefile.am new file mode 100644 index 0000000..f4fb263 --- /dev/null +++ b/orte/libjorte/Makefile.am @@ -0,0 +1,41 @@ +# +# Makefile for the Ocera Real-Time Ethernet +# +# $Id: Makefile.am,v 1.0 2003/08/04 +# + +LIBJORTE_FILES = \ +getNtpTime.c \ +JGetORTEConstant.c \ +JIPAddressToString.c \ +JNtpTimeToStringMs.c \ +JNtpTimeToStringUs.c \ +JORTEDomainAppCreate.c \ +JORTEDomainAppDestroy.c \ +JORTEDomainInitEvents.c \ +JORTEDomainMgrCreate.c \ +JORTEDomainMgrDestroy.c \ +JORTEDomainPropDefaultGet.c \ +JORTEDomainStart.c \ +JORTEInit.c \ +JORTEPublicationCreate.c \ +JORTEPublicationDestroy.c \ +JORTEPublicationSend.c \ +JORTESleepMs.c \ +JORTESubscriptionCreate.c \ +JORTESubscriptionDestroy.c \ +JORTETypeRegisterAdd.c \ +JStringToIPAddress.c + +lib_LTLIBRARIES = libjorte.la +libjorte_la_SOURCES = $(LIBJORTE_FILES) +libjorte_la_LDFLAGS = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) \ + -export-dynamic +libjorte_la_CFLAGS = $(AM_CFLAGS) +libjorte_la_LIBADD = $(top_builddir)/orte/liborte/liborte.la + + + + diff --git a/orte/libjorte/Makefile.in b/orte/libjorte/Makefile.in new file mode 100644 index 0000000..b3a7b20 --- /dev/null +++ b/orte/libjorte/Makefile.in @@ -0,0 +1,1101 @@ +# Makefile.in generated by automake 1.8.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Makefile for the Ocera Real-Time Ethernet +# +# $Id: Makefile.am,v 1.0 2003/08/04 +# + +SOURCES = $(libjorte_la_SOURCES) + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +subdir = orte/libjorte +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(libdir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +libjorte_la_DEPENDENCIES = $(top_builddir)/orte/liborte/liborte.la +am__objects_1 = libjorte_la-getNtpTime.lo \ + libjorte_la-JGetORTEConstant.lo \ + libjorte_la-JIPAddressToString.lo \ + libjorte_la-JNtpTimeToStringMs.lo \ + libjorte_la-JNtpTimeToStringUs.lo \ + libjorte_la-JORTEDomainAppCreate.lo \ + libjorte_la-JORTEDomainAppDestroy.lo \ + libjorte_la-JORTEDomainInitEvents.lo \ + libjorte_la-JORTEDomainMgrCreate.lo \ + libjorte_la-JORTEDomainMgrDestroy.lo \ + libjorte_la-JORTEDomainPropDefaultGet.lo \ + libjorte_la-JORTEDomainStart.lo libjorte_la-JORTEInit.lo \ + libjorte_la-JORTEPublicationCreate.lo \ + libjorte_la-JORTEPublicationDestroy.lo \ + libjorte_la-JORTEPublicationSend.lo \ + libjorte_la-JORTESleepMs.lo \ + libjorte_la-JORTESubscriptionCreate.lo \ + libjorte_la-JORTESubscriptionDestroy.lo \ + libjorte_la-JORTETypeRegisterAdd.lo \ + libjorte_la-JStringToIPAddress.lo +am_libjorte_la_OBJECTS = $(am__objects_1) +libjorte_la_OBJECTS = $(am_libjorte_la_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte +depcomp = $(SHELL) $(top_srcdir)/admin/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/libjorte_la-JGetORTEConstant.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JIPAddressToString.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEDomainStart.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEInit.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTEPublicationSend.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTESleepMs.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-JStringToIPAddress.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/libjorte_la-getNtpTime.Plo +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libjorte_la_SOURCES) +DIST_SOURCES = $(libjorte_la_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ +CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ +CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ +CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ +CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ +CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ +CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ +CONFIG_ORTE_MINGW_FALSE = @CONFIG_ORTE_MINGW_FALSE@ +CONFIG_ORTE_MINGW_TRUE = @CONFIG_ORTE_MINGW_TRUE@ +CONFIG_ORTE_RT = @CONFIG_ORTE_RT@ +CONFIG_ORTE_RT_FALSE = @CONFIG_ORTE_RT_FALSE@ +CONFIG_ORTE_RT_TRUE = @CONFIG_ORTE_RT_TRUE@ +CONFIG_ORTE_UNIX_FALSE = @CONFIG_ORTE_UNIX_FALSE@ +CONFIG_ORTE_UNIX_TRUE = @CONFIG_ORTE_UNIX_TRUE@ +CONFIG_ORTE_WIN_FALSE = @CONFIG_ORTE_WIN_FALSE@ +CONFIG_ORTE_WIN_TRUE = @CONFIG_ORTE_WIN_TRUE@ +CONFIG_RTHAL_FALSE = @CONFIG_RTHAL_FALSE@ +CONFIG_RTHAL_TRUE = @CONFIG_RTHAL_TRUE@ +CONFIG_RTLINUX_FALSE = @CONFIG_RTLINUX_FALSE@ +CONFIG_RTLINUX_TRUE = @CONFIG_RTLINUX_TRUE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +INCLUDES = @INCLUDES@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LINUX_AFLAGS = @LINUX_AFLAGS@ +LINUX_ARCH = @LINUX_ARCH@ +LINUX_ARFLAGS = @LINUX_ARFLAGS@ +LINUX_AS = @LINUX_AS@ +LINUX_CC = @LINUX_CC@ +LINUX_CFLAGS = @LINUX_CFLAGS@ +LINUX_CROSS_COMPILE = @LINUX_CROSS_COMPILE@ +LINUX_DIR = @LINUX_DIR@ +LINUX_KERNELRELEASE = @LINUX_KERNELRELEASE@ +LINUX_LD = @LINUX_LD@ +LINUX_LDFLAGS = @LINUX_LDFLAGS@ +LINUX_MODULE_EXT = @LINUX_MODULE_EXT@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +ORTE_BINARY_AGE = @ORTE_BINARY_AGE@ +ORTE_INTERFACE_AGE = @ORTE_INTERFACE_AGE@ +ORTE_MAJOR_VERSION = @ORTE_MAJOR_VERSION@ +ORTE_MICRO_VERSION = @ORTE_MICRO_VERSION@ +ORTE_MINOR_VERSION = @ORTE_MINOR_VERSION@ +ORTE_VERSION = @ORTE_VERSION@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +RTAI_CFLAGS = @RTAI_CFLAGS@ +RTLINUX_CC = @RTLINUX_CC@ +RTLINUX_CFLAGS = @RTLINUX_CFLAGS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_RTAI_FALSE = @USE_RTAI_FALSE@ +USE_RTAI_TRUE = @USE_RTAI_TRUE@ +USE_RTLINUX_FALSE = @USE_RTLINUX_FALSE@ +USE_RTLINUX_TRUE = @USE_RTLINUX_TRUE@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +modulePROGRAMS_INSTALL = @modulePROGRAMS_INSTALL@ +moduledir = @moduledir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +LIBJORTE_FILES = \ +getNtpTime.c \ +JGetORTEConstant.c \ +JIPAddressToString.c \ +JNtpTimeToStringMs.c \ +JNtpTimeToStringUs.c \ +JORTEDomainAppCreate.c \ +JORTEDomainAppDestroy.c \ +JORTEDomainInitEvents.c \ +JORTEDomainMgrCreate.c \ +JORTEDomainMgrDestroy.c \ +JORTEDomainPropDefaultGet.c \ +JORTEDomainStart.c \ +JORTEInit.c \ +JORTEPublicationCreate.c \ +JORTEPublicationDestroy.c \ +JORTEPublicationSend.c \ +JORTESleepMs.c \ +JORTESubscriptionCreate.c \ +JORTESubscriptionDestroy.c \ +JORTETypeRegisterAdd.c \ +JStringToIPAddress.c + +lib_LTLIBRARIES = libjorte.la +libjorte_la_SOURCES = $(LIBJORTE_FILES) +libjorte_la_LDFLAGS = \ + -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ + -release $(LT_RELEASE) \ + -export-dynamic + +libjorte_la_CFLAGS = $(AM_CFLAGS) +libjorte_la_LIBADD = $(top_builddir)/orte/liborte/liborte.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu orte/libjorte/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu orte/libjorte/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p="`echo $$p | sed -e 's|^.*/||'`"; \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" = "$$p" && dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libjorte.la: $(libjorte_la_OBJECTS) $(libjorte_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libjorte_la_LDFLAGS) $(libjorte_la_OBJECTS) $(libjorte_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JGetORTEConstant.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JIPAddressToString.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEDomainStart.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEInit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTEPublicationSend.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTESleepMs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-JStringToIPAddress.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libjorte_la-getNtpTime.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +libjorte_la-getNtpTime.o: getNtpTime.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-getNtpTime.o -MD -MP -MF "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" -c -o libjorte_la-getNtpTime.o `test -f 'getNtpTime.c' || echo '$(srcdir)/'`getNtpTime.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" "$(DEPDIR)/libjorte_la-getNtpTime.Po"; else rm -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getNtpTime.c' object='libjorte_la-getNtpTime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-getNtpTime.Po' tmpdepfile='$(DEPDIR)/libjorte_la-getNtpTime.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-getNtpTime.o `test -f 'getNtpTime.c' || echo '$(srcdir)/'`getNtpTime.c + +libjorte_la-getNtpTime.obj: getNtpTime.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-getNtpTime.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" -c -o libjorte_la-getNtpTime.obj `if test -f 'getNtpTime.c'; then $(CYGPATH_W) 'getNtpTime.c'; else $(CYGPATH_W) '$(srcdir)/getNtpTime.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" "$(DEPDIR)/libjorte_la-getNtpTime.Po"; else rm -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getNtpTime.c' object='libjorte_la-getNtpTime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-getNtpTime.Po' tmpdepfile='$(DEPDIR)/libjorte_la-getNtpTime.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-getNtpTime.obj `if test -f 'getNtpTime.c'; then $(CYGPATH_W) 'getNtpTime.c'; else $(CYGPATH_W) '$(srcdir)/getNtpTime.c'; fi` + +libjorte_la-getNtpTime.lo: getNtpTime.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-getNtpTime.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" -c -o libjorte_la-getNtpTime.lo `test -f 'getNtpTime.c' || echo '$(srcdir)/'`getNtpTime.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo" "$(DEPDIR)/libjorte_la-getNtpTime.Plo"; else rm -f "$(DEPDIR)/libjorte_la-getNtpTime.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='getNtpTime.c' object='libjorte_la-getNtpTime.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-getNtpTime.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-getNtpTime.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-getNtpTime.lo `test -f 'getNtpTime.c' || echo '$(srcdir)/'`getNtpTime.c + +libjorte_la-JGetORTEConstant.o: JGetORTEConstant.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JGetORTEConstant.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" -c -o libjorte_la-JGetORTEConstant.o `test -f 'JGetORTEConstant.c' || echo '$(srcdir)/'`JGetORTEConstant.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" "$(DEPDIR)/libjorte_la-JGetORTEConstant.Po"; else rm -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JGetORTEConstant.c' object='libjorte_la-JGetORTEConstant.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JGetORTEConstant.o `test -f 'JGetORTEConstant.c' || echo '$(srcdir)/'`JGetORTEConstant.c + +libjorte_la-JGetORTEConstant.obj: JGetORTEConstant.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JGetORTEConstant.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" -c -o libjorte_la-JGetORTEConstant.obj `if test -f 'JGetORTEConstant.c'; then $(CYGPATH_W) 'JGetORTEConstant.c'; else $(CYGPATH_W) '$(srcdir)/JGetORTEConstant.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" "$(DEPDIR)/libjorte_la-JGetORTEConstant.Po"; else rm -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JGetORTEConstant.c' object='libjorte_la-JGetORTEConstant.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JGetORTEConstant.obj `if test -f 'JGetORTEConstant.c'; then $(CYGPATH_W) 'JGetORTEConstant.c'; else $(CYGPATH_W) '$(srcdir)/JGetORTEConstant.c'; fi` + +libjorte_la-JGetORTEConstant.lo: JGetORTEConstant.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JGetORTEConstant.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" -c -o libjorte_la-JGetORTEConstant.lo `test -f 'JGetORTEConstant.c' || echo '$(srcdir)/'`JGetORTEConstant.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo" "$(DEPDIR)/libjorte_la-JGetORTEConstant.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JGetORTEConstant.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JGetORTEConstant.c' object='libjorte_la-JGetORTEConstant.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JGetORTEConstant.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JGetORTEConstant.lo `test -f 'JGetORTEConstant.c' || echo '$(srcdir)/'`JGetORTEConstant.c + +libjorte_la-JIPAddressToString.o: JIPAddressToString.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JIPAddressToString.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" -c -o libjorte_la-JIPAddressToString.o `test -f 'JIPAddressToString.c' || echo '$(srcdir)/'`JIPAddressToString.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" "$(DEPDIR)/libjorte_la-JIPAddressToString.Po"; else rm -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JIPAddressToString.c' object='libjorte_la-JIPAddressToString.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JIPAddressToString.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JIPAddressToString.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JIPAddressToString.o `test -f 'JIPAddressToString.c' || echo '$(srcdir)/'`JIPAddressToString.c + +libjorte_la-JIPAddressToString.obj: JIPAddressToString.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JIPAddressToString.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" -c -o libjorte_la-JIPAddressToString.obj `if test -f 'JIPAddressToString.c'; then $(CYGPATH_W) 'JIPAddressToString.c'; else $(CYGPATH_W) '$(srcdir)/JIPAddressToString.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" "$(DEPDIR)/libjorte_la-JIPAddressToString.Po"; else rm -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JIPAddressToString.c' object='libjorte_la-JIPAddressToString.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JIPAddressToString.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JIPAddressToString.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JIPAddressToString.obj `if test -f 'JIPAddressToString.c'; then $(CYGPATH_W) 'JIPAddressToString.c'; else $(CYGPATH_W) '$(srcdir)/JIPAddressToString.c'; fi` + +libjorte_la-JIPAddressToString.lo: JIPAddressToString.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JIPAddressToString.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" -c -o libjorte_la-JIPAddressToString.lo `test -f 'JIPAddressToString.c' || echo '$(srcdir)/'`JIPAddressToString.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo" "$(DEPDIR)/libjorte_la-JIPAddressToString.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JIPAddressToString.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JIPAddressToString.c' object='libjorte_la-JIPAddressToString.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JIPAddressToString.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JIPAddressToString.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JIPAddressToString.lo `test -f 'JIPAddressToString.c' || echo '$(srcdir)/'`JIPAddressToString.c + +libjorte_la-JNtpTimeToStringMs.o: JNtpTimeToStringMs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringMs.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" -c -o libjorte_la-JNtpTimeToStringMs.o `test -f 'JNtpTimeToStringMs.c' || echo '$(srcdir)/'`JNtpTimeToStringMs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringMs.c' object='libjorte_la-JNtpTimeToStringMs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringMs.o `test -f 'JNtpTimeToStringMs.c' || echo '$(srcdir)/'`JNtpTimeToStringMs.c + +libjorte_la-JNtpTimeToStringMs.obj: JNtpTimeToStringMs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringMs.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" -c -o libjorte_la-JNtpTimeToStringMs.obj `if test -f 'JNtpTimeToStringMs.c'; then $(CYGPATH_W) 'JNtpTimeToStringMs.c'; else $(CYGPATH_W) '$(srcdir)/JNtpTimeToStringMs.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringMs.c' object='libjorte_la-JNtpTimeToStringMs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringMs.obj `if test -f 'JNtpTimeToStringMs.c'; then $(CYGPATH_W) 'JNtpTimeToStringMs.c'; else $(CYGPATH_W) '$(srcdir)/JNtpTimeToStringMs.c'; fi` + +libjorte_la-JNtpTimeToStringMs.lo: JNtpTimeToStringMs.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringMs.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" -c -o libjorte_la-JNtpTimeToStringMs.lo `test -f 'JNtpTimeToStringMs.c' || echo '$(srcdir)/'`JNtpTimeToStringMs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringMs.c' object='libjorte_la-JNtpTimeToStringMs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringMs.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringMs.lo `test -f 'JNtpTimeToStringMs.c' || echo '$(srcdir)/'`JNtpTimeToStringMs.c + +libjorte_la-JNtpTimeToStringUs.o: JNtpTimeToStringUs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringUs.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" -c -o libjorte_la-JNtpTimeToStringUs.o `test -f 'JNtpTimeToStringUs.c' || echo '$(srcdir)/'`JNtpTimeToStringUs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringUs.c' object='libjorte_la-JNtpTimeToStringUs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringUs.o `test -f 'JNtpTimeToStringUs.c' || echo '$(srcdir)/'`JNtpTimeToStringUs.c + +libjorte_la-JNtpTimeToStringUs.obj: JNtpTimeToStringUs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringUs.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" -c -o libjorte_la-JNtpTimeToStringUs.obj `if test -f 'JNtpTimeToStringUs.c'; then $(CYGPATH_W) 'JNtpTimeToStringUs.c'; else $(CYGPATH_W) '$(srcdir)/JNtpTimeToStringUs.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringUs.c' object='libjorte_la-JNtpTimeToStringUs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringUs.obj `if test -f 'JNtpTimeToStringUs.c'; then $(CYGPATH_W) 'JNtpTimeToStringUs.c'; else $(CYGPATH_W) '$(srcdir)/JNtpTimeToStringUs.c'; fi` + +libjorte_la-JNtpTimeToStringUs.lo: JNtpTimeToStringUs.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JNtpTimeToStringUs.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" -c -o libjorte_la-JNtpTimeToStringUs.lo `test -f 'JNtpTimeToStringUs.c' || echo '$(srcdir)/'`JNtpTimeToStringUs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo" "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JNtpTimeToStringUs.c' object='libjorte_la-JNtpTimeToStringUs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JNtpTimeToStringUs.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JNtpTimeToStringUs.lo `test -f 'JNtpTimeToStringUs.c' || echo '$(srcdir)/'`JNtpTimeToStringUs.c + +libjorte_la-JORTEDomainAppCreate.o: JORTEDomainAppCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppCreate.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" -c -o libjorte_la-JORTEDomainAppCreate.o `test -f 'JORTEDomainAppCreate.c' || echo '$(srcdir)/'`JORTEDomainAppCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppCreate.c' object='libjorte_la-JORTEDomainAppCreate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppCreate.o `test -f 'JORTEDomainAppCreate.c' || echo '$(srcdir)/'`JORTEDomainAppCreate.c + +libjorte_la-JORTEDomainAppCreate.obj: JORTEDomainAppCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppCreate.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" -c -o libjorte_la-JORTEDomainAppCreate.obj `if test -f 'JORTEDomainAppCreate.c'; then $(CYGPATH_W) 'JORTEDomainAppCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainAppCreate.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppCreate.c' object='libjorte_la-JORTEDomainAppCreate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppCreate.obj `if test -f 'JORTEDomainAppCreate.c'; then $(CYGPATH_W) 'JORTEDomainAppCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainAppCreate.c'; fi` + +libjorte_la-JORTEDomainAppCreate.lo: JORTEDomainAppCreate.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppCreate.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" -c -o libjorte_la-JORTEDomainAppCreate.lo `test -f 'JORTEDomainAppCreate.c' || echo '$(srcdir)/'`JORTEDomainAppCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppCreate.c' object='libjorte_la-JORTEDomainAppCreate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppCreate.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppCreate.lo `test -f 'JORTEDomainAppCreate.c' || echo '$(srcdir)/'`JORTEDomainAppCreate.c + +libjorte_la-JORTEDomainAppDestroy.o: JORTEDomainAppDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppDestroy.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" -c -o libjorte_la-JORTEDomainAppDestroy.o `test -f 'JORTEDomainAppDestroy.c' || echo '$(srcdir)/'`JORTEDomainAppDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppDestroy.c' object='libjorte_la-JORTEDomainAppDestroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppDestroy.o `test -f 'JORTEDomainAppDestroy.c' || echo '$(srcdir)/'`JORTEDomainAppDestroy.c + +libjorte_la-JORTEDomainAppDestroy.obj: JORTEDomainAppDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppDestroy.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" -c -o libjorte_la-JORTEDomainAppDestroy.obj `if test -f 'JORTEDomainAppDestroy.c'; then $(CYGPATH_W) 'JORTEDomainAppDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainAppDestroy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppDestroy.c' object='libjorte_la-JORTEDomainAppDestroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppDestroy.obj `if test -f 'JORTEDomainAppDestroy.c'; then $(CYGPATH_W) 'JORTEDomainAppDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainAppDestroy.c'; fi` + +libjorte_la-JORTEDomainAppDestroy.lo: JORTEDomainAppDestroy.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainAppDestroy.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" -c -o libjorte_la-JORTEDomainAppDestroy.lo `test -f 'JORTEDomainAppDestroy.c' || echo '$(srcdir)/'`JORTEDomainAppDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainAppDestroy.c' object='libjorte_la-JORTEDomainAppDestroy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainAppDestroy.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainAppDestroy.lo `test -f 'JORTEDomainAppDestroy.c' || echo '$(srcdir)/'`JORTEDomainAppDestroy.c + +libjorte_la-JORTEDomainInitEvents.o: JORTEDomainInitEvents.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainInitEvents.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" -c -o libjorte_la-JORTEDomainInitEvents.o `test -f 'JORTEDomainInitEvents.c' || echo '$(srcdir)/'`JORTEDomainInitEvents.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainInitEvents.c' object='libjorte_la-JORTEDomainInitEvents.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainInitEvents.o `test -f 'JORTEDomainInitEvents.c' || echo '$(srcdir)/'`JORTEDomainInitEvents.c + +libjorte_la-JORTEDomainInitEvents.obj: JORTEDomainInitEvents.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainInitEvents.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" -c -o libjorte_la-JORTEDomainInitEvents.obj `if test -f 'JORTEDomainInitEvents.c'; then $(CYGPATH_W) 'JORTEDomainInitEvents.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainInitEvents.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainInitEvents.c' object='libjorte_la-JORTEDomainInitEvents.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainInitEvents.obj `if test -f 'JORTEDomainInitEvents.c'; then $(CYGPATH_W) 'JORTEDomainInitEvents.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainInitEvents.c'; fi` + +libjorte_la-JORTEDomainInitEvents.lo: JORTEDomainInitEvents.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainInitEvents.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" -c -o libjorte_la-JORTEDomainInitEvents.lo `test -f 'JORTEDomainInitEvents.c' || echo '$(srcdir)/'`JORTEDomainInitEvents.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainInitEvents.c' object='libjorte_la-JORTEDomainInitEvents.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainInitEvents.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainInitEvents.lo `test -f 'JORTEDomainInitEvents.c' || echo '$(srcdir)/'`JORTEDomainInitEvents.c + +libjorte_la-JORTEDomainMgrCreate.o: JORTEDomainMgrCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrCreate.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" -c -o libjorte_la-JORTEDomainMgrCreate.o `test -f 'JORTEDomainMgrCreate.c' || echo '$(srcdir)/'`JORTEDomainMgrCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrCreate.c' object='libjorte_la-JORTEDomainMgrCreate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrCreate.o `test -f 'JORTEDomainMgrCreate.c' || echo '$(srcdir)/'`JORTEDomainMgrCreate.c + +libjorte_la-JORTEDomainMgrCreate.obj: JORTEDomainMgrCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrCreate.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" -c -o libjorte_la-JORTEDomainMgrCreate.obj `if test -f 'JORTEDomainMgrCreate.c'; then $(CYGPATH_W) 'JORTEDomainMgrCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainMgrCreate.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrCreate.c' object='libjorte_la-JORTEDomainMgrCreate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrCreate.obj `if test -f 'JORTEDomainMgrCreate.c'; then $(CYGPATH_W) 'JORTEDomainMgrCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainMgrCreate.c'; fi` + +libjorte_la-JORTEDomainMgrCreate.lo: JORTEDomainMgrCreate.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrCreate.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" -c -o libjorte_la-JORTEDomainMgrCreate.lo `test -f 'JORTEDomainMgrCreate.c' || echo '$(srcdir)/'`JORTEDomainMgrCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrCreate.c' object='libjorte_la-JORTEDomainMgrCreate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrCreate.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrCreate.lo `test -f 'JORTEDomainMgrCreate.c' || echo '$(srcdir)/'`JORTEDomainMgrCreate.c + +libjorte_la-JORTEDomainMgrDestroy.o: JORTEDomainMgrDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrDestroy.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" -c -o libjorte_la-JORTEDomainMgrDestroy.o `test -f 'JORTEDomainMgrDestroy.c' || echo '$(srcdir)/'`JORTEDomainMgrDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrDestroy.c' object='libjorte_la-JORTEDomainMgrDestroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrDestroy.o `test -f 'JORTEDomainMgrDestroy.c' || echo '$(srcdir)/'`JORTEDomainMgrDestroy.c + +libjorte_la-JORTEDomainMgrDestroy.obj: JORTEDomainMgrDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrDestroy.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" -c -o libjorte_la-JORTEDomainMgrDestroy.obj `if test -f 'JORTEDomainMgrDestroy.c'; then $(CYGPATH_W) 'JORTEDomainMgrDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainMgrDestroy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrDestroy.c' object='libjorte_la-JORTEDomainMgrDestroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrDestroy.obj `if test -f 'JORTEDomainMgrDestroy.c'; then $(CYGPATH_W) 'JORTEDomainMgrDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainMgrDestroy.c'; fi` + +libjorte_la-JORTEDomainMgrDestroy.lo: JORTEDomainMgrDestroy.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainMgrDestroy.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" -c -o libjorte_la-JORTEDomainMgrDestroy.lo `test -f 'JORTEDomainMgrDestroy.c' || echo '$(srcdir)/'`JORTEDomainMgrDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainMgrDestroy.c' object='libjorte_la-JORTEDomainMgrDestroy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainMgrDestroy.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainMgrDestroy.lo `test -f 'JORTEDomainMgrDestroy.c' || echo '$(srcdir)/'`JORTEDomainMgrDestroy.c + +libjorte_la-JORTEDomainPropDefaultGet.o: JORTEDomainPropDefaultGet.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainPropDefaultGet.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" -c -o libjorte_la-JORTEDomainPropDefaultGet.o `test -f 'JORTEDomainPropDefaultGet.c' || echo '$(srcdir)/'`JORTEDomainPropDefaultGet.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainPropDefaultGet.c' object='libjorte_la-JORTEDomainPropDefaultGet.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainPropDefaultGet.o `test -f 'JORTEDomainPropDefaultGet.c' || echo '$(srcdir)/'`JORTEDomainPropDefaultGet.c + +libjorte_la-JORTEDomainPropDefaultGet.obj: JORTEDomainPropDefaultGet.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainPropDefaultGet.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" -c -o libjorte_la-JORTEDomainPropDefaultGet.obj `if test -f 'JORTEDomainPropDefaultGet.c'; then $(CYGPATH_W) 'JORTEDomainPropDefaultGet.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainPropDefaultGet.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainPropDefaultGet.c' object='libjorte_la-JORTEDomainPropDefaultGet.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainPropDefaultGet.obj `if test -f 'JORTEDomainPropDefaultGet.c'; then $(CYGPATH_W) 'JORTEDomainPropDefaultGet.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainPropDefaultGet.c'; fi` + +libjorte_la-JORTEDomainPropDefaultGet.lo: JORTEDomainPropDefaultGet.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainPropDefaultGet.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" -c -o libjorte_la-JORTEDomainPropDefaultGet.lo `test -f 'JORTEDomainPropDefaultGet.c' || echo '$(srcdir)/'`JORTEDomainPropDefaultGet.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainPropDefaultGet.c' object='libjorte_la-JORTEDomainPropDefaultGet.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainPropDefaultGet.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainPropDefaultGet.lo `test -f 'JORTEDomainPropDefaultGet.c' || echo '$(srcdir)/'`JORTEDomainPropDefaultGet.c + +libjorte_la-JORTEDomainStart.o: JORTEDomainStart.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainStart.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" -c -o libjorte_la-JORTEDomainStart.o `test -f 'JORTEDomainStart.c' || echo '$(srcdir)/'`JORTEDomainStart.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainStart.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainStart.c' object='libjorte_la-JORTEDomainStart.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainStart.o `test -f 'JORTEDomainStart.c' || echo '$(srcdir)/'`JORTEDomainStart.c + +libjorte_la-JORTEDomainStart.obj: JORTEDomainStart.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainStart.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" -c -o libjorte_la-JORTEDomainStart.obj `if test -f 'JORTEDomainStart.c'; then $(CYGPATH_W) 'JORTEDomainStart.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainStart.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainStart.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainStart.c' object='libjorte_la-JORTEDomainStart.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainStart.obj `if test -f 'JORTEDomainStart.c'; then $(CYGPATH_W) 'JORTEDomainStart.c'; else $(CYGPATH_W) '$(srcdir)/JORTEDomainStart.c'; fi` + +libjorte_la-JORTEDomainStart.lo: JORTEDomainStart.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEDomainStart.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" -c -o libjorte_la-JORTEDomainStart.lo `test -f 'JORTEDomainStart.c' || echo '$(srcdir)/'`JORTEDomainStart.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo" "$(DEPDIR)/libjorte_la-JORTEDomainStart.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEDomainStart.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEDomainStart.c' object='libjorte_la-JORTEDomainStart.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEDomainStart.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEDomainStart.lo `test -f 'JORTEDomainStart.c' || echo '$(srcdir)/'`JORTEDomainStart.c + +libjorte_la-JORTEInit.o: JORTEInit.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEInit.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" -c -o libjorte_la-JORTEInit.o `test -f 'JORTEInit.c' || echo '$(srcdir)/'`JORTEInit.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" "$(DEPDIR)/libjorte_la-JORTEInit.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEInit.c' object='libjorte_la-JORTEInit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEInit.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEInit.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEInit.o `test -f 'JORTEInit.c' || echo '$(srcdir)/'`JORTEInit.c + +libjorte_la-JORTEInit.obj: JORTEInit.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEInit.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" -c -o libjorte_la-JORTEInit.obj `if test -f 'JORTEInit.c'; then $(CYGPATH_W) 'JORTEInit.c'; else $(CYGPATH_W) '$(srcdir)/JORTEInit.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" "$(DEPDIR)/libjorte_la-JORTEInit.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEInit.c' object='libjorte_la-JORTEInit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEInit.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEInit.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEInit.obj `if test -f 'JORTEInit.c'; then $(CYGPATH_W) 'JORTEInit.c'; else $(CYGPATH_W) '$(srcdir)/JORTEInit.c'; fi` + +libjorte_la-JORTEInit.lo: JORTEInit.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEInit.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" -c -o libjorte_la-JORTEInit.lo `test -f 'JORTEInit.c' || echo '$(srcdir)/'`JORTEInit.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo" "$(DEPDIR)/libjorte_la-JORTEInit.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEInit.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEInit.c' object='libjorte_la-JORTEInit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEInit.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEInit.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEInit.lo `test -f 'JORTEInit.c' || echo '$(srcdir)/'`JORTEInit.c + +libjorte_la-JORTEPublicationCreate.o: JORTEPublicationCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationCreate.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" -c -o libjorte_la-JORTEPublicationCreate.o `test -f 'JORTEPublicationCreate.c' || echo '$(srcdir)/'`JORTEPublicationCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationCreate.c' object='libjorte_la-JORTEPublicationCreate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationCreate.o `test -f 'JORTEPublicationCreate.c' || echo '$(srcdir)/'`JORTEPublicationCreate.c + +libjorte_la-JORTEPublicationCreate.obj: JORTEPublicationCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationCreate.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" -c -o libjorte_la-JORTEPublicationCreate.obj `if test -f 'JORTEPublicationCreate.c'; then $(CYGPATH_W) 'JORTEPublicationCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationCreate.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationCreate.c' object='libjorte_la-JORTEPublicationCreate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationCreate.obj `if test -f 'JORTEPublicationCreate.c'; then $(CYGPATH_W) 'JORTEPublicationCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationCreate.c'; fi` + +libjorte_la-JORTEPublicationCreate.lo: JORTEPublicationCreate.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationCreate.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" -c -o libjorte_la-JORTEPublicationCreate.lo `test -f 'JORTEPublicationCreate.c' || echo '$(srcdir)/'`JORTEPublicationCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationCreate.c' object='libjorte_la-JORTEPublicationCreate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationCreate.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationCreate.lo `test -f 'JORTEPublicationCreate.c' || echo '$(srcdir)/'`JORTEPublicationCreate.c + +libjorte_la-JORTEPublicationDestroy.o: JORTEPublicationDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationDestroy.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" -c -o libjorte_la-JORTEPublicationDestroy.o `test -f 'JORTEPublicationDestroy.c' || echo '$(srcdir)/'`JORTEPublicationDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationDestroy.c' object='libjorte_la-JORTEPublicationDestroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationDestroy.o `test -f 'JORTEPublicationDestroy.c' || echo '$(srcdir)/'`JORTEPublicationDestroy.c + +libjorte_la-JORTEPublicationDestroy.obj: JORTEPublicationDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationDestroy.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" -c -o libjorte_la-JORTEPublicationDestroy.obj `if test -f 'JORTEPublicationDestroy.c'; then $(CYGPATH_W) 'JORTEPublicationDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationDestroy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationDestroy.c' object='libjorte_la-JORTEPublicationDestroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationDestroy.obj `if test -f 'JORTEPublicationDestroy.c'; then $(CYGPATH_W) 'JORTEPublicationDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationDestroy.c'; fi` + +libjorte_la-JORTEPublicationDestroy.lo: JORTEPublicationDestroy.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationDestroy.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" -c -o libjorte_la-JORTEPublicationDestroy.lo `test -f 'JORTEPublicationDestroy.c' || echo '$(srcdir)/'`JORTEPublicationDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationDestroy.c' object='libjorte_la-JORTEPublicationDestroy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationDestroy.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationDestroy.lo `test -f 'JORTEPublicationDestroy.c' || echo '$(srcdir)/'`JORTEPublicationDestroy.c + +libjorte_la-JORTEPublicationSend.o: JORTEPublicationSend.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationSend.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" -c -o libjorte_la-JORTEPublicationSend.o `test -f 'JORTEPublicationSend.c' || echo '$(srcdir)/'`JORTEPublicationSend.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationSend.c' object='libjorte_la-JORTEPublicationSend.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationSend.o `test -f 'JORTEPublicationSend.c' || echo '$(srcdir)/'`JORTEPublicationSend.c + +libjorte_la-JORTEPublicationSend.obj: JORTEPublicationSend.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationSend.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" -c -o libjorte_la-JORTEPublicationSend.obj `if test -f 'JORTEPublicationSend.c'; then $(CYGPATH_W) 'JORTEPublicationSend.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationSend.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationSend.c' object='libjorte_la-JORTEPublicationSend.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationSend.obj `if test -f 'JORTEPublicationSend.c'; then $(CYGPATH_W) 'JORTEPublicationSend.c'; else $(CYGPATH_W) '$(srcdir)/JORTEPublicationSend.c'; fi` + +libjorte_la-JORTEPublicationSend.lo: JORTEPublicationSend.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTEPublicationSend.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" -c -o libjorte_la-JORTEPublicationSend.lo `test -f 'JORTEPublicationSend.c' || echo '$(srcdir)/'`JORTEPublicationSend.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo" "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTEPublicationSend.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTEPublicationSend.c' object='libjorte_la-JORTEPublicationSend.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTEPublicationSend.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTEPublicationSend.lo `test -f 'JORTEPublicationSend.c' || echo '$(srcdir)/'`JORTEPublicationSend.c + +libjorte_la-JORTESleepMs.o: JORTESleepMs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESleepMs.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" -c -o libjorte_la-JORTESleepMs.o `test -f 'JORTESleepMs.c' || echo '$(srcdir)/'`JORTESleepMs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" "$(DEPDIR)/libjorte_la-JORTESleepMs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESleepMs.c' object='libjorte_la-JORTESleepMs.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESleepMs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESleepMs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESleepMs.o `test -f 'JORTESleepMs.c' || echo '$(srcdir)/'`JORTESleepMs.c + +libjorte_la-JORTESleepMs.obj: JORTESleepMs.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESleepMs.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" -c -o libjorte_la-JORTESleepMs.obj `if test -f 'JORTESleepMs.c'; then $(CYGPATH_W) 'JORTESleepMs.c'; else $(CYGPATH_W) '$(srcdir)/JORTESleepMs.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" "$(DEPDIR)/libjorte_la-JORTESleepMs.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESleepMs.c' object='libjorte_la-JORTESleepMs.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESleepMs.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESleepMs.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESleepMs.obj `if test -f 'JORTESleepMs.c'; then $(CYGPATH_W) 'JORTESleepMs.c'; else $(CYGPATH_W) '$(srcdir)/JORTESleepMs.c'; fi` + +libjorte_la-JORTESleepMs.lo: JORTESleepMs.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESleepMs.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" -c -o libjorte_la-JORTESleepMs.lo `test -f 'JORTESleepMs.c' || echo '$(srcdir)/'`JORTESleepMs.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo" "$(DEPDIR)/libjorte_la-JORTESleepMs.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTESleepMs.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESleepMs.c' object='libjorte_la-JORTESleepMs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESleepMs.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESleepMs.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESleepMs.lo `test -f 'JORTESleepMs.c' || echo '$(srcdir)/'`JORTESleepMs.c + +libjorte_la-JORTESubscriptionCreate.o: JORTESubscriptionCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionCreate.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" -c -o libjorte_la-JORTESubscriptionCreate.o `test -f 'JORTESubscriptionCreate.c' || echo '$(srcdir)/'`JORTESubscriptionCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionCreate.c' object='libjorte_la-JORTESubscriptionCreate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionCreate.o `test -f 'JORTESubscriptionCreate.c' || echo '$(srcdir)/'`JORTESubscriptionCreate.c + +libjorte_la-JORTESubscriptionCreate.obj: JORTESubscriptionCreate.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionCreate.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" -c -o libjorte_la-JORTESubscriptionCreate.obj `if test -f 'JORTESubscriptionCreate.c'; then $(CYGPATH_W) 'JORTESubscriptionCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTESubscriptionCreate.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionCreate.c' object='libjorte_la-JORTESubscriptionCreate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionCreate.obj `if test -f 'JORTESubscriptionCreate.c'; then $(CYGPATH_W) 'JORTESubscriptionCreate.c'; else $(CYGPATH_W) '$(srcdir)/JORTESubscriptionCreate.c'; fi` + +libjorte_la-JORTESubscriptionCreate.lo: JORTESubscriptionCreate.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionCreate.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" -c -o libjorte_la-JORTESubscriptionCreate.lo `test -f 'JORTESubscriptionCreate.c' || echo '$(srcdir)/'`JORTESubscriptionCreate.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionCreate.c' object='libjorte_la-JORTESubscriptionCreate.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionCreate.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionCreate.lo `test -f 'JORTESubscriptionCreate.c' || echo '$(srcdir)/'`JORTESubscriptionCreate.c + +libjorte_la-JORTESubscriptionDestroy.o: JORTESubscriptionDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionDestroy.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" -c -o libjorte_la-JORTESubscriptionDestroy.o `test -f 'JORTESubscriptionDestroy.c' || echo '$(srcdir)/'`JORTESubscriptionDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionDestroy.c' object='libjorte_la-JORTESubscriptionDestroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionDestroy.o `test -f 'JORTESubscriptionDestroy.c' || echo '$(srcdir)/'`JORTESubscriptionDestroy.c + +libjorte_la-JORTESubscriptionDestroy.obj: JORTESubscriptionDestroy.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionDestroy.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" -c -o libjorte_la-JORTESubscriptionDestroy.obj `if test -f 'JORTESubscriptionDestroy.c'; then $(CYGPATH_W) 'JORTESubscriptionDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTESubscriptionDestroy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionDestroy.c' object='libjorte_la-JORTESubscriptionDestroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionDestroy.obj `if test -f 'JORTESubscriptionDestroy.c'; then $(CYGPATH_W) 'JORTESubscriptionDestroy.c'; else $(CYGPATH_W) '$(srcdir)/JORTESubscriptionDestroy.c'; fi` + +libjorte_la-JORTESubscriptionDestroy.lo: JORTESubscriptionDestroy.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTESubscriptionDestroy.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" -c -o libjorte_la-JORTESubscriptionDestroy.lo `test -f 'JORTESubscriptionDestroy.c' || echo '$(srcdir)/'`JORTESubscriptionDestroy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo" "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTESubscriptionDestroy.c' object='libjorte_la-JORTESubscriptionDestroy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTESubscriptionDestroy.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTESubscriptionDestroy.lo `test -f 'JORTESubscriptionDestroy.c' || echo '$(srcdir)/'`JORTESubscriptionDestroy.c + +libjorte_la-JORTETypeRegisterAdd.o: JORTETypeRegisterAdd.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTETypeRegisterAdd.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" -c -o libjorte_la-JORTETypeRegisterAdd.o `test -f 'JORTETypeRegisterAdd.c' || echo '$(srcdir)/'`JORTETypeRegisterAdd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTETypeRegisterAdd.c' object='libjorte_la-JORTETypeRegisterAdd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTETypeRegisterAdd.o `test -f 'JORTETypeRegisterAdd.c' || echo '$(srcdir)/'`JORTETypeRegisterAdd.c + +libjorte_la-JORTETypeRegisterAdd.obj: JORTETypeRegisterAdd.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTETypeRegisterAdd.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" -c -o libjorte_la-JORTETypeRegisterAdd.obj `if test -f 'JORTETypeRegisterAdd.c'; then $(CYGPATH_W) 'JORTETypeRegisterAdd.c'; else $(CYGPATH_W) '$(srcdir)/JORTETypeRegisterAdd.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Po"; else rm -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTETypeRegisterAdd.c' object='libjorte_la-JORTETypeRegisterAdd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTETypeRegisterAdd.obj `if test -f 'JORTETypeRegisterAdd.c'; then $(CYGPATH_W) 'JORTETypeRegisterAdd.c'; else $(CYGPATH_W) '$(srcdir)/JORTETypeRegisterAdd.c'; fi` + +libjorte_la-JORTETypeRegisterAdd.lo: JORTETypeRegisterAdd.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JORTETypeRegisterAdd.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" -c -o libjorte_la-JORTETypeRegisterAdd.lo `test -f 'JORTETypeRegisterAdd.c' || echo '$(srcdir)/'`JORTETypeRegisterAdd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo" "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JORTETypeRegisterAdd.c' object='libjorte_la-JORTETypeRegisterAdd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JORTETypeRegisterAdd.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JORTETypeRegisterAdd.lo `test -f 'JORTETypeRegisterAdd.c' || echo '$(srcdir)/'`JORTETypeRegisterAdd.c + +libjorte_la-JStringToIPAddress.o: JStringToIPAddress.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JStringToIPAddress.o -MD -MP -MF "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" -c -o libjorte_la-JStringToIPAddress.o `test -f 'JStringToIPAddress.c' || echo '$(srcdir)/'`JStringToIPAddress.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" "$(DEPDIR)/libjorte_la-JStringToIPAddress.Po"; else rm -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JStringToIPAddress.c' object='libjorte_la-JStringToIPAddress.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JStringToIPAddress.o `test -f 'JStringToIPAddress.c' || echo '$(srcdir)/'`JStringToIPAddress.c + +libjorte_la-JStringToIPAddress.obj: JStringToIPAddress.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JStringToIPAddress.obj -MD -MP -MF "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" -c -o libjorte_la-JStringToIPAddress.obj `if test -f 'JStringToIPAddress.c'; then $(CYGPATH_W) 'JStringToIPAddress.c'; else $(CYGPATH_W) '$(srcdir)/JStringToIPAddress.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" "$(DEPDIR)/libjorte_la-JStringToIPAddress.Po"; else rm -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JStringToIPAddress.c' object='libjorte_la-JStringToIPAddress.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.Po' tmpdepfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JStringToIPAddress.obj `if test -f 'JStringToIPAddress.c'; then $(CYGPATH_W) 'JStringToIPAddress.c'; else $(CYGPATH_W) '$(srcdir)/JStringToIPAddress.c'; fi` + +libjorte_la-JStringToIPAddress.lo: JStringToIPAddress.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -MT libjorte_la-JStringToIPAddress.lo -MD -MP -MF "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" -c -o libjorte_la-JStringToIPAddress.lo `test -f 'JStringToIPAddress.c' || echo '$(srcdir)/'`JStringToIPAddress.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo" "$(DEPDIR)/libjorte_la-JStringToIPAddress.Plo"; else rm -f "$(DEPDIR)/libjorte_la-JStringToIPAddress.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='JStringToIPAddress.c' object='libjorte_la-JStringToIPAddress.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.Plo' tmpdepfile='$(DEPDIR)/libjorte_la-JStringToIPAddress.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libjorte_la_CFLAGS) $(CFLAGS) -c -o libjorte_la-JStringToIPAddress.lo `test -f 'JStringToIPAddress.c' || echo '$(srcdir)/'`JStringToIPAddress.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-libLTLIBRARIES + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-libLTLIBRARIES + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/orte/libjorte/Makefile.omk b/orte/libjorte/Makefile.omk new file mode 100644 index 0000000..2c5c91f --- /dev/null +++ b/orte/libjorte/Makefile.omk @@ -0,0 +1,41 @@ +default_CONFIG = CONFIG_OC_ETH_JORTE=n + +ifeq ($(CONFIG_OC_ETH_JORTE),y) + +ifndef JAVA_HOME +JAVA_HOME=/opt/java +endif + +export JAVA_HOME + +shared_LIBRARIES = jorte + +lib_LOADLIBES = orte + +INCLUDES = -I $(srcdir)/../include -I $(JAVA_HOME)/include -I $(JAVA_HOME)/include/linux + +jorte_SOURCES = \ +getNtpTime.c \ +JGetORTEConstant.c \ +JIPAddressToString.c \ +JNtpTimeToStringMs.c \ +JNtpTimeToStringUs.c \ +JORTEDomainAppCreate.c \ +JORTEDomainAppDestroy.c \ +JORTEDomainInitEvents.c \ +JORTEDomainMgrCreate.c \ +JORTEDomainMgrDestroy.c \ +JORTEDomainPropDefaultGet.c \ +JORTEDomainStart.c \ +JORTEInit.c \ +JORTEPublicationCreate.c \ +JORTEPublicationDestroy.c \ +JORTEPublicationSend.c \ +JORTESleepMs.c \ +JORTESubscriptionCreate.c \ +JORTESubscriptionDestroy.c \ +JORTETypeRegisterAdd.c \ +JStringToIPAddress.c + +endif #CONFIG_OC_ETH_JORTE + diff --git a/orte/libjorte/getNtpTime.c b/orte/libjorte/getNtpTime.c new file mode 100644 index 0000000..3d4d01f --- /dev/null +++ b/orte/libjorte/getNtpTime.c @@ -0,0 +1,57 @@ +/* getNtpTime.c */ + +/** + * This code provides conversion between JAVA a C environments. + * The C functions are calling here and results are send to JAVA + * native functions. It uses the header pregenerated by JAVA + * (by command 'javah -jni class_with_native_function') + * + * @author Lukas Pokorny (lukas_pokorny@centrum.cz) + * @author CTU FEE Prague - Department of Control Engineering (dce.felk.cvut.cz) + * @author Project ORTE - OCERA Real Time Ethernet (www.ocera.org) + * @author dedication to Kj + * @version 0.1 + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include "jorte/getNtpTime.h" + + +NtpTime getNtpTime(JNIEnv *env, jobject obj) +{ + NtpTime time; + jfieldID fieldID; + jclass ntpTimeClass; + + /* get object's class */ + ntpTimeClass = (*env)->GetObjectClass(env, obj); + + /* get object field ID - NtpTime.seconds */ + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"seconds","I"); +// if(fieldID == NULL) return(NTPTIME_ZERO(time)); // NEFUNGUJE + /* get objects value */ + time.seconds = (int32_t) (*env)->GetIntField(env,obj,fieldID); + + /* reset pointer */ + fieldID = NULL; + + /* get object field ID - NtpTime.fraction */ + fieldID = (*env)->GetFieldID(env,ntpTimeClass,"fraction","J"); +// if(fieldID == NULL) return(NTPTIME_ZERO(time)); // NEFUNGUJE + /* get object's value */ + time.fraction = (uint32_t) (*env)->GetIntField(env,obj,fieldID); + + return(time); + +} diff --git a/orte/liborte/Makefile.am b/orte/liborte/Makefile.am index 34214d8..67f3acd 100644 --- a/orte/liborte/Makefile.am +++ b/orte/liborte/Makefile.am @@ -5,6 +5,7 @@ # LIBORTE_FILES = \ +cdr.c \ conv.c \ debug.c \ event.c \ @@ -13,8 +14,7 @@ htimerNtp.c \ objectEntry.c \ objectEntryTimer.c \ objectUtils.c \ -ORTEAppRecvMetatrafficThread.c \ -ORTEAppRecvUserdataThread.c \ +ORTEAppRecvThread.c \ ORTEAppSendThread.c \ ORTEDomainApp.c \ ORTEPublication.c \ @@ -51,10 +51,12 @@ ul_gavl.c \ ul_gavlprim.c LIBORTE_HDRS1 = \ -../include/orte.h \ -$(top_builddir)/orte/include/orte_config.h +../include/orte.h LIBORTE_HDRS2 = \ +$(top_builddir)/orte/include/orte/orte_config.h \ +../include/orte/cdr.h \ +../include/orte/basic_types.h \ ../include/orte/typedefs_defines_rtps.h \ ../include/orte/defines_api.h \ ../include/orte/typedefs_api.h \ diff --git a/orte/liborte/Makefile.in b/orte/liborte/Makefile.in index 7bb4d4a..9685273 100644 --- a/orte/liborte/Makefile.in +++ b/orte/liborte/Makefile.in @@ -50,23 +50,23 @@ subdir = orte/liborte DIST_COMMON = $(liborte1_HEADERS) $(liborte2_HEADERS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(liborte1dir)" "$(DESTDIR)$(liborte2dir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) liborte_la_LIBADD = -am__liborte_la_SOURCES_DIST = conv.c debug.c event.c fnmatch.c \ +am__liborte_la_SOURCES_DIST = cdr.c conv.c debug.c event.c fnmatch.c \ htimerNtp.c objectEntry.c objectEntryTimer.c objectUtils.c \ - ORTEAppRecvMetatrafficThread.c ORTEAppRecvUserdataThread.c \ - ORTEAppSendThread.c ORTEDomainApp.c ORTEPublication.c \ - ORTEPublicationTimer.c ORTESubscription.c ORTEDomain.c \ - ORTEDomainMgr.c ORTEInit.c ORTEThreadUtils.c \ + ORTEAppRecvThread.c ORTEAppSendThread.c ORTEDomainApp.c \ + ORTEPublication.c ORTEPublicationTimer.c ORTESubscription.c \ + ORTEDomain.c ORTEDomainMgr.c ORTEInit.c ORTEThreadUtils.c \ ORTETypeRegister.c ORTEVerbosity.c ORTEPattern.c ORTEMisc.c \ parameter.c RTPSAck.c RTPSCSTReader.c RTPSCSTReaderTimer.c \ RTPSCSTReaderProc.c RTPSCSTWriter.c RTPSCSTWriterTimer.c \ @@ -74,12 +74,11 @@ am__liborte_la_SOURCES_DIST = conv.c debug.c event.c fnmatch.c \ RTPSInfoREPLY.c RTPSInfoSRC.c RTPSInfoTS.c RTPSPad.c \ RTPSUtils.c RTPSVar.c RTPSIssue.c sock.c ul_gavl.c \ ul_gavlprim.c -am__objects_1 = liborte_la-conv.lo liborte_la-debug.lo \ - liborte_la-event.lo liborte_la-fnmatch.lo \ +am__objects_1 = liborte_la-cdr.lo liborte_la-conv.lo \ + liborte_la-debug.lo liborte_la-event.lo liborte_la-fnmatch.lo \ liborte_la-htimerNtp.lo liborte_la-objectEntry.lo \ liborte_la-objectEntryTimer.lo liborte_la-objectUtils.lo \ - liborte_la-ORTEAppRecvMetatrafficThread.lo \ - liborte_la-ORTEAppRecvUserdataThread.lo \ + liborte_la-ORTEAppRecvThread.lo \ liborte_la-ORTEAppSendThread.lo liborte_la-ORTEDomainApp.lo \ liborte_la-ORTEPublication.lo \ liborte_la-ORTEPublicationTimer.lo \ @@ -102,12 +101,11 @@ am__objects_1 = liborte_la-conv.lo liborte_la-debug.lo \ @CONFIG_ORTE_RT_FALSE@am_liborte_la_OBJECTS = $(am__objects_1) liborte_la_OBJECTS = $(am_liborte_la_OBJECTS) PROGRAMS = $(module_PROGRAMS) -am__orte_rt_ko_SOURCES_DIST = conv.c debug.c event.c fnmatch.c \ +am__orte_rt_ko_SOURCES_DIST = cdr.c conv.c debug.c event.c fnmatch.c \ htimerNtp.c objectEntry.c objectEntryTimer.c objectUtils.c \ - ORTEAppRecvMetatrafficThread.c ORTEAppRecvUserdataThread.c \ - ORTEAppSendThread.c ORTEDomainApp.c ORTEPublication.c \ - ORTEPublicationTimer.c ORTESubscription.c ORTEDomain.c \ - ORTEDomainMgr.c ORTEInit.c ORTEThreadUtils.c \ + ORTEAppRecvThread.c ORTEAppSendThread.c ORTEDomainApp.c \ + ORTEPublication.c ORTEPublicationTimer.c ORTESubscription.c \ + ORTEDomain.c ORTEDomainMgr.c ORTEInit.c ORTEThreadUtils.c \ ORTETypeRegister.c ORTEVerbosity.c ORTEPattern.c ORTEMisc.c \ parameter.c RTPSAck.c RTPSCSTReader.c RTPSCSTReaderTimer.c \ RTPSCSTReaderProc.c RTPSCSTWriter.c RTPSCSTWriterTimer.c \ @@ -115,11 +113,10 @@ am__orte_rt_ko_SOURCES_DIST = conv.c debug.c event.c fnmatch.c \ RTPSInfoREPLY.c RTPSInfoSRC.c RTPSInfoTS.c RTPSPad.c \ RTPSUtils.c RTPSVar.c RTPSIssue.c sock.c ul_gavl.c \ ul_gavlprim.c -am__objects_2 = conv.$(OBJEXT) debug.$(OBJEXT) event.$(OBJEXT) \ - fnmatch.$(OBJEXT) htimerNtp.$(OBJEXT) objectEntry.$(OBJEXT) \ - objectEntryTimer.$(OBJEXT) objectUtils.$(OBJEXT) \ - ORTEAppRecvMetatrafficThread.$(OBJEXT) \ - ORTEAppRecvUserdataThread.$(OBJEXT) \ +am__objects_2 = cdr.$(OBJEXT) conv.$(OBJEXT) debug.$(OBJEXT) \ + event.$(OBJEXT) fnmatch.$(OBJEXT) htimerNtp.$(OBJEXT) \ + objectEntry.$(OBJEXT) objectEntryTimer.$(OBJEXT) \ + objectUtils.$(OBJEXT) ORTEAppRecvThread.$(OBJEXT) \ ORTEAppSendThread.$(OBJEXT) ORTEDomainApp.$(OBJEXT) \ ORTEPublication.$(OBJEXT) ORTEPublicationTimer.$(OBJEXT) \ ORTESubscription.$(OBJEXT) ORTEDomain.$(OBJEXT) \ @@ -138,11 +135,10 @@ am__objects_2 = conv.$(OBJEXT) debug.$(OBJEXT) event.$(OBJEXT) \ @CONFIG_ORTE_RT_TRUE@am_orte_rt_ko_OBJECTS = $(am__objects_2) orte_rt_ko_OBJECTS = $(am_orte_rt_ko_OBJECTS) orte_rt_ko_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles -@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/ORTEAppRecvMetatrafficThread.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/ORTEAppRecvUserdataThread.Po \ +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/ORTEAppRecvThread.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ORTEAppSendThread.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ORTEDomain.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ORTEDomainApp.Po \ @@ -168,11 +164,11 @@ am__depfiles_maybe = depfiles @AMDEP_TRUE@ ./$(DEPDIR)/RTPSInfoSRC.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/RTPSInfoTS.Po ./$(DEPDIR)/RTPSIssue.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/RTPSPad.Po ./$(DEPDIR)/RTPSUtils.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/RTPSVar.Po ./$(DEPDIR)/conv.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/debug.Po ./$(DEPDIR)/event.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/fnmatch.Po ./$(DEPDIR)/htimerNtp.Po \ -@AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Plo \ -@AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/RTPSVar.Po ./$(DEPDIR)/cdr.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/conv.Po ./$(DEPDIR)/debug.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/event.Po ./$(DEPDIR)/fnmatch.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/htimerNtp.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEAppRecvThread.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEAppSendThread.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEDomain.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-ORTEDomainApp.Plo \ @@ -203,6 +199,7 @@ am__depfiles_maybe = depfiles @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-RTPSPad.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-RTPSUtils.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-RTPSVar.Plo \ +@AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-cdr.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-conv.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-debug.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/liborte_la-event.Plo \ @@ -257,8 +254,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -292,6 +295,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -331,6 +336,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ @@ -386,6 +392,7 @@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ LIBORTE_FILES = \ +cdr.c \ conv.c \ debug.c \ event.c \ @@ -394,8 +401,7 @@ htimerNtp.c \ objectEntry.c \ objectEntryTimer.c \ objectUtils.c \ -ORTEAppRecvMetatrafficThread.c \ -ORTEAppRecvUserdataThread.c \ +ORTEAppRecvThread.c \ ORTEAppSendThread.c \ ORTEDomainApp.c \ ORTEPublication.c \ @@ -432,10 +438,12 @@ ul_gavl.c \ ul_gavlprim.c LIBORTE_HDRS1 = \ -../include/orte.h \ -$(top_builddir)/orte/include/orte_config.h +../include/orte.h LIBORTE_HDRS2 = \ +$(top_builddir)/orte/include/orte/orte_config.h \ +../include/orte/cdr.h \ +../include/orte/basic_types.h \ ../include/orte/typedefs_defines_rtps.h \ ../include/orte/defines_api.h \ ../include/orte/typedefs_api.h \ @@ -561,8 +569,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEAppRecvMetatrafficThread.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEAppRecvUserdataThread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEAppRecvThread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEAppSendThread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEDomain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ORTEDomainApp.Po@am__quote@ @@ -593,13 +600,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RTPSPad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RTPSUtils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RTPSVar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htimerNtp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEAppRecvThread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEAppSendThread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEDomain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-ORTEDomainApp.Plo@am__quote@ @@ -630,6 +637,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-RTPSPad.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-RTPSUtils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-RTPSVar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-cdr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-conv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborte_la-event.Plo@am__quote@ @@ -674,6 +682,30 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +liborte_la-cdr.o: cdr.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-cdr.o -MD -MP -MF "$(DEPDIR)/liborte_la-cdr.Tpo" -c -o liborte_la-cdr.o `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-cdr.Tpo" "$(DEPDIR)/liborte_la-cdr.Po"; else rm -f "$(DEPDIR)/liborte_la-cdr.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr.c' object='liborte_la-cdr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-cdr.Po' tmpdepfile='$(DEPDIR)/liborte_la-cdr.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-cdr.o `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c + +liborte_la-cdr.obj: cdr.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-cdr.obj -MD -MP -MF "$(DEPDIR)/liborte_la-cdr.Tpo" -c -o liborte_la-cdr.obj `if test -f 'cdr.c'; then $(CYGPATH_W) 'cdr.c'; else $(CYGPATH_W) '$(srcdir)/cdr.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-cdr.Tpo" "$(DEPDIR)/liborte_la-cdr.Po"; else rm -f "$(DEPDIR)/liborte_la-cdr.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr.c' object='liborte_la-cdr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-cdr.Po' tmpdepfile='$(DEPDIR)/liborte_la-cdr.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-cdr.obj `if test -f 'cdr.c'; then $(CYGPATH_W) 'cdr.c'; else $(CYGPATH_W) '$(srcdir)/cdr.c'; fi` + +liborte_la-cdr.lo: cdr.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-cdr.lo -MD -MP -MF "$(DEPDIR)/liborte_la-cdr.Tpo" -c -o liborte_la-cdr.lo `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-cdr.Tpo" "$(DEPDIR)/liborte_la-cdr.Plo"; else rm -f "$(DEPDIR)/liborte_la-cdr.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cdr.c' object='liborte_la-cdr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-cdr.Plo' tmpdepfile='$(DEPDIR)/liborte_la-cdr.TPlo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-cdr.lo `test -f 'cdr.c' || echo '$(srcdir)/'`cdr.c + liborte_la-conv.o: conv.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-conv.o -MD -MP -MF "$(DEPDIR)/liborte_la-conv.Tpo" -c -o liborte_la-conv.o `test -f 'conv.c' || echo '$(srcdir)/'`conv.c; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-conv.Tpo" "$(DEPDIR)/liborte_la-conv.Po"; else rm -f "$(DEPDIR)/liborte_la-conv.Tpo"; exit 1; fi @@ -866,53 +898,29 @@ liborte_la-objectUtils.lo: objectUtils.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-objectUtils.lo `test -f 'objectUtils.c' || echo '$(srcdir)/'`objectUtils.c -liborte_la-ORTEAppRecvMetatrafficThread.o: ORTEAppRecvMetatrafficThread.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvMetatrafficThread.o -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" -c -o liborte_la-ORTEAppRecvMetatrafficThread.o `test -f 'ORTEAppRecvMetatrafficThread.c' || echo '$(srcdir)/'`ORTEAppRecvMetatrafficThread.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvMetatrafficThread.c' object='liborte_la-ORTEAppRecvMetatrafficThread.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvMetatrafficThread.o `test -f 'ORTEAppRecvMetatrafficThread.c' || echo '$(srcdir)/'`ORTEAppRecvMetatrafficThread.c - -liborte_la-ORTEAppRecvMetatrafficThread.obj: ORTEAppRecvMetatrafficThread.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvMetatrafficThread.obj -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" -c -o liborte_la-ORTEAppRecvMetatrafficThread.obj `if test -f 'ORTEAppRecvMetatrafficThread.c'; then $(CYGPATH_W) 'ORTEAppRecvMetatrafficThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvMetatrafficThread.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvMetatrafficThread.c' object='liborte_la-ORTEAppRecvMetatrafficThread.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.TPo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvMetatrafficThread.obj `if test -f 'ORTEAppRecvMetatrafficThread.c'; then $(CYGPATH_W) 'ORTEAppRecvMetatrafficThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvMetatrafficThread.c'; fi` - -liborte_la-ORTEAppRecvMetatrafficThread.lo: ORTEAppRecvMetatrafficThread.c -@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvMetatrafficThread.lo -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" -c -o liborte_la-ORTEAppRecvMetatrafficThread.lo `test -f 'ORTEAppRecvMetatrafficThread.c' || echo '$(srcdir)/'`ORTEAppRecvMetatrafficThread.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Plo"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvMetatrafficThread.c' object='liborte_la-ORTEAppRecvMetatrafficThread.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.Plo' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvMetatrafficThread.TPlo' @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvMetatrafficThread.lo `test -f 'ORTEAppRecvMetatrafficThread.c' || echo '$(srcdir)/'`ORTEAppRecvMetatrafficThread.c - -liborte_la-ORTEAppRecvUserdataThread.o: ORTEAppRecvUserdataThread.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvUserdataThread.o -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" -c -o liborte_la-ORTEAppRecvUserdataThread.o `test -f 'ORTEAppRecvUserdataThread.c' || echo '$(srcdir)/'`ORTEAppRecvUserdataThread.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvUserdataThread.c' object='liborte_la-ORTEAppRecvUserdataThread.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.TPo' @AMDEPBACKSLASH@ +liborte_la-ORTEAppRecvThread.o: ORTEAppRecvThread.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvThread.o -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" -c -o liborte_la-ORTEAppRecvThread.o `test -f 'ORTEAppRecvThread.c' || echo '$(srcdir)/'`ORTEAppRecvThread.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvThread.c' object='liborte_la-ORTEAppRecvThread.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvUserdataThread.o `test -f 'ORTEAppRecvUserdataThread.c' || echo '$(srcdir)/'`ORTEAppRecvUserdataThread.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvThread.o `test -f 'ORTEAppRecvThread.c' || echo '$(srcdir)/'`ORTEAppRecvThread.c -liborte_la-ORTEAppRecvUserdataThread.obj: ORTEAppRecvUserdataThread.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvUserdataThread.obj -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" -c -o liborte_la-ORTEAppRecvUserdataThread.obj `if test -f 'ORTEAppRecvUserdataThread.c'; then $(CYGPATH_W) 'ORTEAppRecvUserdataThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvUserdataThread.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvUserdataThread.c' object='liborte_la-ORTEAppRecvUserdataThread.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.TPo' @AMDEPBACKSLASH@ +liborte_la-ORTEAppRecvThread.obj: ORTEAppRecvThread.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvThread.obj -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" -c -o liborte_la-ORTEAppRecvThread.obj `if test -f 'ORTEAppRecvThread.c'; then $(CYGPATH_W) 'ORTEAppRecvThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvThread.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Po"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvThread.c' object='liborte_la-ORTEAppRecvThread.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.Po' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvUserdataThread.obj `if test -f 'ORTEAppRecvUserdataThread.c'; then $(CYGPATH_W) 'ORTEAppRecvUserdataThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvUserdataThread.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvThread.obj `if test -f 'ORTEAppRecvThread.c'; then $(CYGPATH_W) 'ORTEAppRecvThread.c'; else $(CYGPATH_W) '$(srcdir)/ORTEAppRecvThread.c'; fi` -liborte_la-ORTEAppRecvUserdataThread.lo: ORTEAppRecvUserdataThread.c -@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvUserdataThread.lo -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" -c -o liborte_la-ORTEAppRecvUserdataThread.lo `test -f 'ORTEAppRecvUserdataThread.c' || echo '$(srcdir)/'`ORTEAppRecvUserdataThread.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Plo"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvUserdataThread.c' object='liborte_la-ORTEAppRecvUserdataThread.lo' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.Plo' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvUserdataThread.TPlo' @AMDEPBACKSLASH@ +liborte_la-ORTEAppRecvThread.lo: ORTEAppRecvThread.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppRecvThread.lo -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" -c -o liborte_la-ORTEAppRecvThread.lo `test -f 'ORTEAppRecvThread.c' || echo '$(srcdir)/'`ORTEAppRecvThread.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo" "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Plo"; else rm -f "$(DEPDIR)/liborte_la-ORTEAppRecvThread.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ORTEAppRecvThread.c' object='liborte_la-ORTEAppRecvThread.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.Plo' tmpdepfile='$(DEPDIR)/liborte_la-ORTEAppRecvThread.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvUserdataThread.lo `test -f 'ORTEAppRecvUserdataThread.c' || echo '$(srcdir)/'`ORTEAppRecvUserdataThread.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -c -o liborte_la-ORTEAppRecvThread.lo `test -f 'ORTEAppRecvThread.c' || echo '$(srcdir)/'`ORTEAppRecvThread.c liborte_la-ORTEAppSendThread.o: ORTEAppSendThread.c @am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liborte_la_CFLAGS) $(CFLAGS) -MT liborte_la-ORTEAppSendThread.o -MD -MP -MF "$(DEPDIR)/liborte_la-ORTEAppSendThread.Tpo" -c -o liborte_la-ORTEAppSendThread.o `test -f 'ORTEAppSendThread.c' || echo '$(srcdir)/'`ORTEAppSendThread.c; \ @@ -1891,7 +1899,7 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/$(top_builddir)/orte/include $(distdir)/../include $(distdir)/../include/orte + $(mkdir_p) $(distdir)/$(top_builddir)/orte/include/orte $(distdir)/../include $(distdir)/../include/orte @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ diff --git a/orte/liborte/Makefile.omk b/orte/liborte/Makefile.omk index f2508fd..a298453 100644 --- a/orte/liborte/Makefile.omk +++ b/orte/liborte/Makefile.omk @@ -1,9 +1,14 @@ default_CONFIG = CONFIG_OC_ETH_ORTE=y +default_CONFIG += CONFIG_OC_ETH_ORTE_SOLIB=n ifeq ($(CONFIG_OC_ETH_ORTE),y) lib_LIBRARIES = orte +ifeq ($(CONFIG_OC_ETH_ORTE_SOLIB),y) +shared_LIBRARIES = orte +endif #CONFIG_OC_ETH_ORTE_LIB + INCLUDES = -I $(srcdir)/../include orte_SOURCES = \ @@ -15,8 +20,7 @@ htimerNtp.c \ objectEntry.c \ objectEntryTimer.c \ objectUtils.c \ -ORTEAppRecvMetatrafficThread.c \ -ORTEAppRecvUserdataThread.c \ +ORTEAppRecvThread.c \ ORTEAppSendThread.c \ ORTEDomainApp.c \ ORTEPublication.c \ @@ -50,7 +54,8 @@ RTPSVar.c \ RTPSIssue.c \ sock.c \ ul_gavl.c \ -ul_gavlprim.c +ul_gavlprim.c \ +cdr.c endif #CONFIG_OC_ETH_ORTE @@ -109,7 +114,8 @@ RTPSVar.c \ RTPSIssue.c \ sock.c \ ul_gavl.c \ -ul_gavlprim.c +ul_gavlprim.c \ +cdr.c rtlinux_MODULES = orte_rt diff --git a/orte/liborte/ORTEAppRecvMetatrafficThread.c b/orte/liborte/ORTEAppRecvMetatrafficThread.c deleted file mode 100644 index d0b2e8c..0000000 --- a/orte/liborte/ORTEAppRecvMetatrafficThread.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * $Id: ORTEAppRecvMetatrafficThread.c,v 0.0.0.1 2003/08/21 - * - * DEBUG: section 22 Receiving thread - * AUTHOR: Petr Smolik petr.smolik@wo.cz - * - * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ - * -------------------------------------------------------------------- - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include "orte_all.h" - -/*****************************************************************************/ -void ORTEAppRecvMetatrafficThread(ORTEDomain *d) { - struct sockaddr_in des; - uint16_t submsg_len; - MessageInterpret mi; - - debug(22,10) ("ORTEAppRecvMetatrafficThread: start\n"); - - while (!d->taskRecvMetatraffic.terminate) { - debug(22,7) ("ORTEAppRecvMetatrafficThread: receiving\n"); - d->mbRecvMetatraffic.cdrStream.length = sock_recvfrom( - &d->taskRecvMetatraffic.sock, //socked handle - d->mbRecvMetatraffic.cdrStream.buffer, //buffer - d->domainProp.recvBuffSize, //max length of message - &des,sizeof(des)); //info from sending host - d->mbRecvMetatraffic.cdrStream.bufferPtr=d->mbRecvMetatraffic.cdrStream.buffer; - debug(22,7) ("ORTEAppRecvMetatrafficThread: fired\n"); - //is it header of valid RTPS packet? - if (RTPSHeaderCheck(d->mbRecvMetatraffic.cdrStream.buffer, - d->mbRecvMetatraffic.cdrStream.length,&mi)==0) { - debug(22,7) ("ORTEAppRecvMetatrafficThread: RTPS Heard OK\n"); - debug(22,7) (" PV: %d.%d VID:%d.%d HID:0x%x AID:0x%x\n", - mi.sourceVersion.major,mi.sourceVersion.minor, - mi.sourceVendorId.major,mi.sourceVendorId.minor, - mi.sourceHostId,mi.sourceAppId); - d->mbRecvMetatraffic.cdrStream.bufferPtr+=16; - do { - // check if length of submessage header is OK - if ((d->mbRecvMetatraffic.cdrStream.bufferPtr- - d->mbRecvMetatraffic.cdrStream.buffer+3)<=d->mbRecvMetatraffic.cdrStream.length) { - char e_bit=d->mbRecvMetatraffic.cdrStream.bufferPtr[1] & 1; - submsg_len=*(uint16_t*)&d->mbRecvMetatraffic.cdrStream.bufferPtr[2]; - conv_u16(&submsg_len,e_bit); - // check if length of submessage OK - if ((submsg_len+d->mbRecvMetatraffic.cdrStream.bufferPtr- - d->mbRecvMetatraffic.cdrStream.buffer+3)<=d->mbRecvMetatraffic.cdrStream.length) { - pthread_rwlock_wrlock(&d->objectEntry.objRootLock); - pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); - switch ((SubmessageId)d->mbRecvMetatraffic.cdrStream.bufferPtr[0]) { - case VAR: - RTPSVar(d,d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi,ntohl(des.sin_addr.s_addr)); - break; - case ACK: - RTPSAck(d,d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi,ntohl(des.sin_addr.s_addr)); - break; - case HEARTBEAT: - RTPSHeardBeat(d,d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - case GAP: - RTPSGap(d,d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi,ntohl(des.sin_addr.s_addr)); - break; - case INFO_TS: - RTPSInfoTS(d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - case INFO_SRC: - RTPSInfoSRC(d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - case INFO_REPLY: - RTPSInfoREPLY(d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - case INFO_DST: - RTPSInfoDST(d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - case PAD: - RTPSPad(d->mbRecvMetatraffic.cdrStream.bufferPtr,&mi); - break; - default: - break; - } - pthread_rwlock_unlock(&d->objectEntry.htimRootLock); - pthread_rwlock_unlock(&d->objectEntry.objRootLock); - d->mbRecvMetatraffic.cdrStream.bufferPtr+=submsg_len+4; - } else break; /* submessage is too big */ - } else break; /* submessage is too big */ - } while ((d->mbRecvMetatraffic.cdrStream.bufferPtr- - d->mbRecvMetatraffic.cdrStream.buffer)mbRecvMetatraffic.cdrStream.length); - debug(22,7) ("ORTEAppRecvMetatrafficThread: processing of message(s) finnished\n"); - } - } - - debug(22,10) ("ORTEAppRecvMetatrafficThread: finished\n"); - pthread_exit(NULL); -} diff --git a/orte/liborte/ORTEAppRecvThread.c b/orte/liborte/ORTEAppRecvThread.c new file mode 100644 index 0000000..1225ef5 --- /dev/null +++ b/orte/liborte/ORTEAppRecvThread.c @@ -0,0 +1,148 @@ +/* + * $Id: ORTEAppRecvThread.c,v 0.0.0.1 2005/01/3 + * + * DEBUG: section 22 Receiving thread + * AUTHOR: Petr Smolik petr.smolik@wo.cz + * + * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ + * -------------------------------------------------------------------- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + + */ + +#include "orte_all.h" + +/* ThreadKind to String */ +char* TK2S(TaskProp *tp) +{ + ORTEDomain *d=tp->d; + + if (tp==&d->taskRecvUnicastMetatraffic) + return "UM"; + + if (tp==&d->taskRecvMulticastMetatraffic) + return "MM"; + + if (tp==&d->taskRecvUnicastUserdata) + return "UU"; + + if (tp==&d->taskRecvMulticastUserdata) + return "MU"; + + return ""; +} + +/*****************************************************************************/ +void ORTEAppRecvThread(TaskProp *tp) { + struct sockaddr_in des; + uint32_t RTPS_Codec_len; + MessageInterpret mi; + CDR_Codec *cdrCodec=&tp->mb.cdrCodec; + ORTEDomain *d=tp->d; + unsigned int rptr; + + debug(22,10) ("ORTEAppRecvThread %s: start\n",TK2S(tp)); + + while (!tp->terminate) { + debug(22,7) ("ORTEAppRecvThread %s: receiving\n",TK2S(tp)); + + //prepare cdrCodec + cdrCodec->wptr=cdrCodec->rptr=0; + RTPS_Codec_len = sock_recvfrom( + &tp->sock, //socked handle + cdrCodec->buffer, //buffer + cdrCodec->buf_len, //max length of message + &des,sizeof(des)); //info from sending host + + debug(22,7) ("ORTEAppRecvThread %s: fired, msg_len: 0x%x\n",TK2S(tp),RTPS_Codec_len); + + //is it header of valid RTPS packet? + if (RTPSHeaderCheck(cdrCodec,RTPS_Codec_len,&mi)<0) { + debug(22,2) ("ORTEAppRecvThread: not valid RTPS header!\n"); + continue; + } + + debug(22,7) ("ORTEAppRecvThread: RTPS Heard OK\n"); + debug(22,7) (" PV: %d.%d VID:%d.%d HID:0x%x AID:0x%x\n", + mi.sourceVersion.major,mi.sourceVersion.minor, + mi.sourceVendorId.major,mi.sourceVendorId.minor, + mi.sourceHostId,mi.sourceAppId); + do { + // check if length of submessage header is OK + if ((cdrCodec->rptr+3)<=RTPS_Codec_len) { + CORBA_char flags,sub_id; + CORBA_unsigned_short sub_len; + + CDR_get_octet(cdrCodec,&sub_id); + CDR_get_octet(cdrCodec,&flags); + if (flags & 0x01) + cdrCodec->data_endian=FLAG_LITTLE_ENDIAN; + else + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + CDR_get_ushort(cdrCodec,&sub_len); + + debug(22,7) ("ORTEAppRecvThread %s: sub_id: 0x%x, sub_len 0x%x: %u\n", + TK2S(tp),sub_id,sub_len); + + // check if length of submessage OK + if ((sub_len+cdrCodec->rptr)<=RTPS_Codec_len) { + pthread_rwlock_wrlock(&d->objectEntry.objRootLock); + pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); + rptr=cdrCodec->rptr; + switch ((SubmessageId)sub_id) { + case VAR: + RTPSVar(d,cdrCodec,&mi,ntohl(des.sin_addr.s_addr)); + break; + case ACK: + RTPSAck(d,cdrCodec,&mi,ntohl(des.sin_addr.s_addr)); + break; + case HEARTBEAT: + RTPSHeartBeat(d,cdrCodec,&mi); + break; + case GAP: + RTPSGap(d,cdrCodec,&mi,ntohl(des.sin_addr.s_addr)); + break; + case INFO_TS: + RTPSInfoTS(cdrCodec,&mi); + break; + case INFO_SRC: + RTPSInfoSRC(cdrCodec,&mi); + break; + case INFO_REPLY: + RTPSInfoREPLY(cdrCodec,&mi); + break; + case INFO_DST: + RTPSInfoDST(cdrCodec,&mi); + break; + case PAD: + RTPSPad(cdrCodec,&mi); + break; + case ISSUE: + RTPSIssue(d,cdrCodec,&mi,ntohl(des.sin_addr.s_addr)); + break; + default: + debug(22,5) ("ORTEAppRecvThread: unknown message :0x%x\n",sub_id); + break; + } + cdrCodec->rptr=rptr+sub_len; + pthread_rwlock_unlock(&d->objectEntry.htimRootLock); + pthread_rwlock_unlock(&d->objectEntry.objRootLock); + } else break; /* submessage is too big */ + } else break; /* submessage is too big */ + } while (cdrCodec->rptrtaskRecvUserdata.terminate) { - debug(23,7) ("ORTEAppRecvUserdataThread: receiving\n"); - d->mbRecvUserdata.cdrStream.length = sock_recvfrom( - &d->taskRecvUserdata.sock, //socked handle - d->mbRecvUserdata.cdrStream.buffer,//buffer - d->domainProp.recvBuffSize, //max length of message - &des,sizeof(des)); //info from sending host - d->mbRecvUserdata.cdrStream.bufferPtr=d->mbRecvUserdata.cdrStream.buffer; - debug(23,7) ("ORTEAppRecvUserdataThread: fired\n"); - //is it header of valid RTPS packet? - if (RTPSHeaderCheck(d->mbRecvUserdata.cdrStream.buffer, - d->mbRecvUserdata.cdrStream.length,&mi)==0) { - debug(23,7) ("ORTEAppRecvUserdataThread: RTPS Heard OK\n"); - debug(23,7) (" PV: %d.%d VID:%d.%d HID:0x%x AID:0x%x\n", - mi.sourceVersion.major,mi.sourceVersion.minor, - mi.sourceVendorId.major,mi.sourceVendorId.minor, - mi.sourceHostId,mi.sourceAppId); - d->mbRecvUserdata.cdrStream.bufferPtr+=16; - do { - // check if length of submessage header is OK - if ((d->mbRecvUserdata.cdrStream.bufferPtr- - d->mbRecvUserdata.cdrStream.buffer+3)<=d->mbRecvUserdata.cdrStream.length) { - char e_bit=d->mbRecvUserdata.cdrStream.bufferPtr[1] & 1; - submsg_len=*(uint16_t*)&d->mbRecvUserdata.cdrStream.bufferPtr[2]; - conv_u16(&submsg_len,e_bit); - // check if length of submessage OK - if ((submsg_len+d->mbRecvUserdata.cdrStream.bufferPtr- - d->mbRecvUserdata.cdrStream.buffer+3)<=d->mbRecvUserdata.cdrStream.length) { - pthread_rwlock_wrlock(&d->objectEntry.objRootLock); - pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); - switch ((SubmessageId)d->mbRecvUserdata.cdrStream.bufferPtr[0]) { - case VAR: - //can't be - break; - case ACK: - RTPSAck(d,d->mbRecvUserdata.cdrStream.bufferPtr,&mi,ntohl(des.sin_addr.s_addr)); - break; - case HEARTBEAT: - RTPSHeardBeat(d,d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case GAP: - //can't be - break; - case INFO_TS: - RTPSInfoTS(d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case INFO_SRC: - RTPSInfoSRC(d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case INFO_REPLY: - RTPSInfoREPLY(d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case INFO_DST: - RTPSInfoDST(d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case PAD: - RTPSPad(d->mbRecvUserdata.cdrStream.bufferPtr,&mi); - break; - case ISSUE: - RTPSIssue(d,d->mbRecvUserdata.cdrStream.bufferPtr,&mi,ntohl(des.sin_addr.s_addr)); - break; - default: - debug(23,5) ("ORTEAppRecvUserdataThread: unknown message :%d\n",d->mbRecvUserdata.cdrStream.bufferPtr[0]); - break; - } - pthread_rwlock_unlock(&d->objectEntry.htimRootLock); - pthread_rwlock_unlock(&d->objectEntry.objRootLock); - d->mbRecvUserdata.cdrStream.bufferPtr+=submsg_len+4; - } else break; /* submessage is too big */ - } else break; /* submessage is too big */ - } while ((d->mbRecvUserdata.cdrStream.bufferPtr- - d->mbRecvUserdata.cdrStream.buffer)mbRecvUserdata.cdrStream.length); - } - } - - debug(23,10) ("ORTEAppRecvUserdataThread: finished\n"); - pthread_exit(NULL); -} diff --git a/orte/liborte/ORTEAppSendThread.c b/orte/liborte/ORTEAppSendThread.c index c8cfb66..eb49292 100644 --- a/orte/liborte/ORTEAppSendThread.c +++ b/orte/liborte/ORTEAppSendThread.c @@ -24,62 +24,82 @@ /*****************************************************************************/ void ORTESendData(ORTEDomain *d,ObjectEntryAID *objectEntryAID,Boolean meta) { struct sockaddr_in des; - ObjectEntryOID *objectEntryOID; + ObjectEntryOID *object; AppParams *appParams; - ObjectId oid=OID_APP; int i; + CDR_Codec *cdrCodec=&d->taskSend.mb.cdrCodec; + Port port; - objectEntryOID=ObjectEntryOID_find(objectEntryAID,&oid); - if (objectEntryOID) { - appParams=(AppParams*)objectEntryOID->attributes; - for(i=0;iunicastIPAddressCount;i++) { - des.sin_family=AF_INET; - des.sin_addr.s_addr = htonl(appParams->unicastIPAddressList[i]); - if (meta) { - des.sin_port = htons((uint16_t)appParams->metatrafficUnicastPort); - sock_sendto ( - &d->taskSend.sock, - d->mbSend.cdrStream.buffer, - d->mbSend.cdrStream.length, - &des, - sizeof(des)); - } else { - des.sin_port = htons((uint16_t)appParams->userdataUnicastPort); - if (d->mbSend.cdrStreamDirect) - sock_sendto ( - &d->taskSend.sock, - d->mbSend.cdrStreamDirect->buffer, - d->mbSend.cdrStreamDirect->length, - &des, - sizeof(des)); - else - sock_sendto ( - &d->taskSend.sock, - d->mbSend.cdrStream.buffer, - d->mbSend.cdrStream.length, - &des, - sizeof(des)); + object=objectEntryAID->aobject; + if (object) { + appParams=(AppParams*)object->attributes; + if (!ObjectEntryMulticast_is_empty(object)) { + for(i=0;imetatrafficMulticastIPAddressCount;i++) { + des.sin_family=AF_INET; + des.sin_addr.s_addr = htonl(appParams->metatrafficMulticastIPAddressList[i]); + des.sin_port = htons(object->multicastPort); + if (d->taskSend.mb.cdrCodecDirect) { + sock_sendto (&d->taskSend.sock, + d->taskSend.mb.cdrCodecDirect->buffer, + d->taskSend.mb.cdrCodecDirect->wptr, + &des, + sizeof(des)); + } else { + sock_sendto (&d->taskSend.sock, + cdrCodec->buffer, + cdrCodec->wptr, + &des, + sizeof(des)); + } + } + } else { + for(i=0;iunicastIPAddressCount;i++) { + des.sin_family=AF_INET; + des.sin_addr.s_addr = htonl(appParams->unicastIPAddressList[i]); + if (meta) { + port=appParams->metatrafficUnicastPort; + } else { + port=appParams->userdataUnicastPort; + } + des.sin_port = htons(port); + if (d->taskSend.mb.cdrCodecDirect) { + sock_sendto (&d->taskSend.sock, + d->taskSend.mb.cdrCodecDirect->buffer, + d->taskSend.mb.cdrCodecDirect->wptr, + &des, + sizeof(des)); + } else { + sock_sendto (&d->taskSend.sock, + cdrCodec->buffer, + cdrCodec->wptr, + &des, + sizeof(des)); + } } } + } else { + debug(24,1) ("ORTEAppSendThread: no aobjectEntryOID connected to objectEntryAID!\n"); } //prepare buffer for next sending - d->mbSend.cdrStream.length=RTPS_HEADER_LENGTH; - d->mbSend.cdrStream.bufferPtr=d->mbSend.cdrStream.buffer+RTPS_HEADER_LENGTH; - d->mbSend.needSend=ORTE_FALSE; - d->mbSend.containsInfoReply=ORTE_FALSE; + cdrCodec->wptr=RTPS_HEADER_LENGTH; + d->taskSend.mb.needSend=ORTE_FALSE; + d->taskSend.mb.containsInfoReply=ORTE_FALSE; + d->taskSend.mb.cdrCodecDirect=NULL; } /*****************************************************************************/ -void ORTEAppSendThread(ORTEDomain *d) { +void ORTEAppSendThread(TaskProp *tp) { struct timespec wtime; NtpTime actTime,nextExpire,whenExpire,sleepingTime; int32_t s,ms; + ORTEDomain *d=tp->d; debug(24,10) ("ORTEAppSendThread: start\n"); d->objectEntry.htimNeedWakeUp=ORTE_TRUE; - while (!d->taskSend.terminate) { + while (!tp->terminate) { actTime=getActualNtpTime(); + pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); if (htimerRoot_next_expire(&d->objectEntry,&nextExpire)==0) { NTPTIME_BUILD(whenExpire,300); //max time for sleeping (no. events) @@ -91,6 +111,7 @@ void ORTEAppSendThread(ORTEDomain *d) { NtpTimeSub(sleepingTime,nextExpire,actTime); NtpTimeDisAssembToMs(s,ms,sleepingTime); if (s<0) s=ms=0; + debug(24,4) ("ORTEAppSendThread: sleeping for %lis %lims\n",s,ms); if (!((wtime.tv_sec==0) && (wtime.tv_nsec==0))) { pthread_mutex_lock(&d->objectEntry.htimSendMutex); @@ -102,12 +123,15 @@ void ORTEAppSendThread(ORTEDomain *d) { d->objectEntry.htimSendCondValue=0; pthread_mutex_unlock(&d->objectEntry.htimSendMutex); } + debug(24,7) ("ORTEAppSendThread: fired\n"); actTime=getActualNtpTime(); pthread_rwlock_wrlock(&d->objectEntry.objRootLock); pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); d->objectEntry.htimNeedWakeUp=ORTE_FALSE; + htimerRoot_run_expired(d,&actTime); + d->objectEntry.htimNeedWakeUp=ORTE_TRUE; pthread_rwlock_unlock(&d->objectEntry.htimRootLock); pthread_rwlock_unlock(&d->objectEntry.objRootLock); diff --git a/orte/liborte/ORTEDomain.c b/orte/liborte/ORTEDomain.c index 8e96bb9..26206db 100644 --- a/orte/liborte/ORTEDomain.c +++ b/orte/liborte/ORTEDomain.c @@ -23,26 +23,80 @@ /*****************************************************************************/ void -ORTEDomainStart(ORTEDomain *d, - Boolean recvMetatrafficThread,Boolean recvUserDataThread,Boolean sendThread) { - if(!d) return; - if ((recvMetatrafficThread) && (d->taskRecvMetatraffic.terminate)) { - d->taskRecvMetatraffic.terminate=ORTE_FALSE; - pthread_create(&d->taskRecvMetatraffic.thread, NULL, - (void*)&ORTEAppRecvMetatrafficThread, (void *)d); +ORTEDomainRecvThreadStart(TaskProp *tp) +{ + if (tp->terminate) { + tp->terminate=ORTE_FALSE; + pthread_create(&(tp->thread), NULL, + (void*)&ORTEAppRecvThread, (void *)tp); } - if ((recvUserDataThread) && (d->taskRecvUserdata.terminate)) { - d->taskRecvUserdata.terminate=ORTE_FALSE; - pthread_create(&d->taskRecvUserdata.thread, NULL, - (void*)&ORTEAppRecvUserdataThread, (void *)d); +} + +/*****************************************************************************/ +void +ORTEDomainSendThreadStart(TaskProp *tp) +{ + if (tp->terminate) { + tp->terminate=ORTE_FALSE; + pthread_create(&(tp->thread), NULL, + (void*)&ORTEAppSendThread, (void *)tp); } - if ((sendThread) && (d->taskSend.terminate)) { - d->taskSend.terminate=ORTE_FALSE; - pthread_create(&d->taskSend.thread, NULL, - (void*)&ORTEAppSendThread, (void *)d); +} + +/*****************************************************************************/ +void +ORTEDomainRecvThreadStop(TaskProp *tp) +{ + ORTEDomain *d=tp->d; + + if (!tp->terminate) { + tp->terminate=ORTE_TRUE; + ORTEDomainWakeUpReceivingThread(d, + &d->taskSend.sock,tp->sock.port); + pthread_join(tp->thread,NULL); } } +/*****************************************************************************/ +void +ORTEDomainSendThreadStop(TaskProp *tp) +{ + ORTEDomain *d=tp->d; + + if (!tp->terminate) { + tp->terminate=ORTE_TRUE; + ORTEDomainWakeUpSendingThread(&d->objectEntry); + pthread_join(tp->thread,NULL); + } +} + +/*****************************************************************************/ +void +ORTEDomainStart(ORTEDomain *d, + Boolean recvUnicastMetatrafficThread, + Boolean recvMulticastMetatrafficThread, + Boolean recvUnicastUserdataThread, + Boolean recvMulticastUserdataThread, + Boolean sendThread) { + + if(!d) return; + + if (recvUnicastMetatrafficThread) + ORTEDomainRecvThreadStart(&d->taskRecvUnicastMetatraffic); + + if (recvMulticastMetatrafficThread) + ORTEDomainRecvThreadStart(&d->taskRecvMulticastMetatraffic); + + if (recvUnicastUserdataThread) + ORTEDomainRecvThreadStart(&d->taskRecvUnicastUserdata); + + if (recvMulticastUserdataThread) + ORTEDomainRecvThreadStart(&d->taskRecvMulticastUserdata); + + if (sendThread) + ORTEDomainSendThreadStart(&d->taskSend); +} + /*****************************************************************************/ Boolean ORTEDomainPropDefaultGet(ORTEDomainProp *prop) { @@ -72,12 +126,16 @@ ORTEDomainPropDefaultGet(ORTEDomainProp *prop) { prop->recvBuffSize=0x4000; prop->sendBuffSize=0x4000; prop->wireProp.metaBytesPerPacket=1500; - prop->wireProp.metaBytesPerFastPacket=1000; - prop->wireProp.metabitsPerACKBitmap=32; - prop->wireProp.userMaxSerDeserSize=0x4000; + prop->wireProp.metaBytesPerFastPacket=1000; //not used + prop->wireProp.metabitsPerACKBitmap=32; //not used + prop->wireProp.userBytesPerPacket=0x3000; //domainBaseProp - NTPTIME_BUILD(prop->baseProp.expirationTime,180); //180s + prop->baseProp.registrationMgrRetries=0; + NTPTIME_BUILD(prop->baseProp.registrationMgrPeriod,0);//0s + prop->baseProp.registrationAppRetries=3; + NtpTimeAssembFromMs(prop->baseProp.registrationAppPeriod,0,500);//500ms + NTPTIME_BUILD(prop->baseProp.expirationTime,180); //180s NTPTIME_BUILD(prop->baseProp.refreshPeriod,72); //72s - refresh self parameters NTPTIME_BUILD(prop->baseProp.purgeTime,60); //60s - purge time of parameters NTPTIME_BUILD(prop->baseProp.repeatAnnounceTime,72);//72s - announcement by HB @@ -100,3 +158,596 @@ ORTEDomainInitEvents(ORTEDomainAppEvents *events) { memset(events,0,sizeof(ORTEDomainAppEvents)); return ORTE_TRUE; } + + +/*****************************************************************************/ +ORTEDomain * +ORTEDomainCreate(int domain, ORTEDomainProp *prop, + ORTEDomainAppEvents *events,Boolean manager) { + ORTEDomain *d; + ObjectEntryOID *objectEntryOID; + AppParams *appParams; + CSTWriterParams cstWriterParams; + CSTReaderParams cstReaderParams; + char iflocal[MAX_INTERFACES*MAX_STRING_IPADDRESS_LENGTH]; + char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; + char sbuff[128]; + int i; + uint16_t port=0; + Boolean error=ORTE_FALSE; + + debug(30,2) ("ORTEDomainCreate: %s compiled: %s,%s\n", + ORTE_PACKAGE_STRING,__DATE__,__TIME__); + + debug(30,10) ("ORTEDomainCreate: start\n"); + //Create domainApplication + d=MALLOC(sizeof(ORTEDomain)); + if (!d) return NULL; //no memory + //initialization local values + d->domain=domain; + d->taskRecvUnicastMetatraffic.d=d; + d->taskRecvUnicastMetatraffic.terminate=ORTE_TRUE; + d->taskRecvMulticastMetatraffic.d=d; + d->taskRecvMulticastMetatraffic.terminate=ORTE_TRUE; + d->taskRecvUnicastUserdata.d=d; + d->taskRecvUnicastUserdata.terminate=ORTE_TRUE; + d->taskRecvMulticastUserdata.d=d; + d->taskRecvMulticastUserdata.terminate=ORTE_TRUE; + d->taskSend.d=d; + d->taskSend.terminate=ORTE_TRUE; + d->taskRecvUnicastMetatraffic.sock.port=0; + d->taskRecvMulticastMetatraffic.sock.port=0; + d->taskRecvUnicastUserdata.sock.port=0; + d->taskRecvMulticastUserdata.sock.port=0; + d->taskSend.sock.port=0; + //init structure objectEntry + ObjectEntryHID_init_root_field(&d->objectEntry); + pthread_rwlock_init(&d->objectEntry.objRootLock,NULL); + htimerRoot_init_queue(&d->objectEntry); + pthread_rwlock_init(&d->objectEntry.htimRootLock,NULL); + pthread_cond_init(&d->objectEntry.htimSendCond,NULL); + pthread_mutex_init(&d->objectEntry.htimSendMutex,NULL); + d->objectEntry.htimSendCondValue=0; + //publication,subscriptions + d->publications.counter=d->subscriptions.counter=0; + CSTWriter_init_root_field(&d->publications); + CSTReader_init_root_field(&d->subscriptions); + pthread_rwlock_init(&d->publications.lock,NULL); + pthread_rwlock_init(&d->subscriptions.lock,NULL); + //publication,subscriptions lists + PublicationList_init_root_field(&d->psEntry); + pthread_rwlock_init(&d->psEntry.publicationsLock,NULL); + SubscriptionList_init_root_field(&d->psEntry); + pthread_rwlock_init(&d->psEntry.subscriptionsLock,NULL); + + //pattern + pthread_rwlock_init(&d->patternEntry.lock,NULL); + ORTEPatternRegister(d,ORTEPatternCheckDefault,ORTEPatternMatchDefault,NULL); + Pattern_init_head(&d->patternEntry); + + //create domainProp + if (prop!=NULL) { + memcpy(&d->domainProp,prop,sizeof(ORTEDomainProp)); + } else { + ORTEDomainPropDefaultGet(&d->domainProp); + } + + //print local IP addresses + iflocal[0]=0; + if (d->domainProp.IFCount) { + for(i=0;idomainProp.IFCount;i++) + strcat(iflocal,IPAddressToString(d->domainProp.IFProp[i].ipAddress,sIPAddress)); + debug(30,2) ("ORTEDomainCreate: localIPAddres(es) %s\n",iflocal); + } else{ + debug(30,2) ("ORTEDomainCreate: no active interface card\n"); + if (d->domainProp.multicast.enabled) { + debug(30,0) ("ORTEDomainCreate: for multicast have to be active an interface\n"); + FREE(d); + return NULL; + } + } + + //DomainEvents + if (events!=NULL) { + memcpy(&d->domainEvents,events,sizeof(ORTEDomainAppEvents)); + } else { + memset(&d->domainEvents,0,sizeof(ORTEDomainAppEvents)); + } + + //local buffers + CDR_codec_init_static(&d->taskRecvUnicastMetatraffic.mb.cdrCodec); + CDR_codec_init_static(&d->taskRecvMulticastMetatraffic.mb.cdrCodec); + CDR_codec_init_static(&d->taskRecvUnicastUserdata.mb.cdrCodec); + CDR_codec_init_static(&d->taskRecvMulticastUserdata.mb.cdrCodec); + CDR_codec_init_static(&d->taskSend.mb.cdrCodec); + CDR_buffer_init(&d->taskRecvUnicastMetatraffic.mb.cdrCodec, + d->domainProp.recvBuffSize); + CDR_buffer_init(&d->taskSend.mb.cdrCodec, + d->domainProp.sendBuffSize); + d->taskSend.mb.cdrCodec.wptr_max=d->domainProp.wireProp.metaBytesPerPacket; + if (!manager) { + CDR_buffer_init(&d->taskRecvUnicastUserdata.mb.cdrCodec, + d->domainProp.recvBuffSize); + if (d->domainProp.multicast.enabled) { + CDR_buffer_init(&d->taskRecvMulticastMetatraffic.mb.cdrCodec, + d->domainProp.recvBuffSize); + CDR_buffer_init(&d->taskRecvMulticastUserdata.mb.cdrCodec, + d->domainProp.recvBuffSize); + } + } + d->taskSend.mb.cdrCodec.data_endian = FLAG_ENDIANNESS; + + //TypeRegister + ORTEType_init_root_field(&d->typeEntry); + pthread_rwlock_init(&d->typeEntry.lock,NULL); + + //Sockets + sock_init_udp(&d->taskRecvUnicastMetatraffic.sock); + sock_init_udp(&d->taskRecvMulticastMetatraffic.sock); + sock_init_udp(&d->taskRecvUnicastUserdata.sock); + sock_init_udp(&d->taskRecvMulticastUserdata.sock); + sock_init_udp(&d->taskSend.sock); + + /************************************************************************/ + /* UnicastMetatraffic */ + Domain2Port(d->domain,port); + if (manager) { + sock_bind(&d->taskRecvUnicastMetatraffic.sock,port); + } else { + /* give me receiving port (metatraffic) */ + sock_bind(&d->taskRecvUnicastMetatraffic.sock,0); + } + debug(30,2) ("ORTEDomainCreate: bind on port(RecvUnicastMetatraffic): %u\n", + d->taskRecvUnicastMetatraffic.sock.port); + + /************************************************************************/ + /* MulticastMetatraffic */ + if (d->domainProp.multicast.enabled && !manager) { + Port mport; + int reuse=1; + + //reuseaddr + sock_setsockopt(&d->taskRecvMulticastMetatraffic.sock, SOL_SOCKET, + SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); + debug(30,2) ("ORTEDomainCreate: set value SO_REUSEADDR: %u\n", + reuse); + + //multicast loop + sock_setsockopt(&d->taskRecvMulticastMetatraffic.sock, IPPROTO_IP, + IP_MULTICAST_LOOP, &d->domainProp.multicast.loopBackEnabled, + sizeof(d->domainProp.multicast.loopBackEnabled)); + debug(30,2) ("ORTEDomainCreate: set value IP_MULTICAST_LOOP: %u\n", + d->domainProp.multicast.loopBackEnabled); + + /* receiving multicast port (metatraffic) */ + Domain2PortMulticastMetatraffic(d->domain,mport); + sock_bind(&d->taskRecvMulticastMetatraffic.sock,mport); + debug(30,2) ("ORTEDomainCreate: bind on port(RecvMulticastMetatraffic): %u\n", + d->taskRecvMulticastMetatraffic.sock.port); + } + + /************************************************************************/ + /* UserData */ + if (!manager) { + /* give me receiving port (userdata) */ + sock_bind(&d->taskRecvUnicastUserdata.sock,0); + debug(30,2) ("ORTEDomainCreate: bind on port(RecvUnicatUserdata): %u\n", + d->taskRecvUnicastUserdata.sock.port); + + if (d->domainProp.multicast.enabled) { + Port mport; + int reuse=1; + + //reuseaddr + sock_setsockopt(&d->taskRecvMulticastUserdata.sock, SOL_SOCKET, + SO_REUSEADDR, (char*)&reuse, sizeof(reuse)); + debug(30,2) ("ORTEDomainCreate: set value SO_REUSEADDR: %u\n", + reuse); + + //multicast loop + sock_setsockopt(&d->taskRecvMulticastUserdata.sock, IPPROTO_IP, + IP_MULTICAST_LOOP, &d->domainProp.multicast.loopBackEnabled, + sizeof(d->domainProp.multicast.loopBackEnabled)); + debug(30,2) ("ORTEDomainCreate: set value IP_MULTICAST_LOOP: %u\n", + d->domainProp.multicast.loopBackEnabled); + + /* receiving multicast port (userdata) */ + Domain2PortMulticastUserdata(d->domain,mport); + sock_bind(&d->taskRecvMulticastUserdata.sock,mport); + debug(30,2) ("ORTEDomainCreate: bind on port(RecvMulticastUserdata): %u\n", + d->taskRecvMulticastUserdata.sock.port); + } + } + + /************************************************************************/ + /* Send */ + /* give me sending port */ + sock_bind(&d->taskSend.sock,0); + debug(30,2) ("ORTEDomainCreate: bind on port(Send): %u\n", + d->taskSend.sock.port); + if (d->domainProp.multicast.enabled) { + //ttl + if(sock_setsockopt(&d->taskSend.sock,IPPROTO_IP,IP_MULTICAST_TTL, + &d->domainProp.multicast.ttl,sizeof(d->domainProp.multicast.ttl))>=0) { + debug(30,2) ("ORTEDomainCreate: ttl set on: %u\n", + d->domainProp.multicast.ttl); + } + } + + /************************************************************************/ + /* tests for valid resources */ + if ((d->taskRecvUnicastMetatraffic.sock.fd<0) || + (d->taskSend.sock.fd<0) || + (d->domainProp.multicast.enabled && + (d->taskRecvUnicastUserdata.sock.fd<0)) || + (d->domainProp.multicast.enabled && + (d->taskRecvMulticastUserdata.sock.fd<0)) || + (d->domainProp.multicast.enabled && + (d->taskRecvMulticastMetatraffic.sock.fd<0))) { + debug(30,0) ("ORTEDomainCreate: Error creating socket(s).\n"); + error=ORTE_TRUE; + } + + if ((!d->taskRecvUnicastMetatraffic.mb.cdrCodec.buffer) || + (!d->taskSend.mb.cdrCodec.buffer) || + (d->domainProp.multicast.enabled && !manager && + !d->taskRecvUnicastUserdata.mb.cdrCodec.buffer) || + (d->domainProp.multicast.enabled && !manager && + !d->taskRecvMulticastUserdata.mb.cdrCodec.buffer) || + (d->domainProp.multicast.enabled && !manager && + !d->taskRecvMulticastMetatraffic.mb.cdrCodec.buffer)) { //no a memory + debug(30,0) ("ORTEDomainCreate: Error creating buffer(s).\n"); + error=ORTE_TRUE; + } + /* a problem occure with resources */ + if (error) { + sock_cleanup(&d->taskRecvUnicastMetatraffic.sock); + sock_cleanup(&d->taskRecvMulticastMetatraffic.sock); + sock_cleanup(&d->taskRecvUnicastUserdata.sock); + sock_cleanup(&d->taskRecvMulticastUserdata.sock); + sock_cleanup(&d->taskSend.sock); + CDR_codec_release_buffer(&d->taskRecvUnicastMetatraffic.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvMulticastMetatraffic.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvUnicastUserdata.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvMulticastUserdata.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskSend.mb.cdrCodec); + FREE(d); + } + + /************************************************************************/ + //Generates local GUID + if (d->domainProp.IFCount>0) + d->guid.hid=d->domainProp.IFProp[0].ipAddress; + else + d->guid.hid=StringToIPAddress("127.0.0.1"); + if (manager) { + d->guid.aid=(d->taskSend.sock.port<<8)+MANAGER; + } else { + d->guid.aid=(d->taskSend.sock.port<<8)+MANAGEDAPPLICATION; + } + d->guid.oid=OID_APP; + debug(30,2) ("ORTEDomainCreate: GUID: %#10.8x,%#10.8x,%#10.8x\n", + GUID_PRINTF(d->guid)); + + //create HEADER of message for sending task + RTPSHeaderCreate(&d->taskSend.mb.cdrCodec,d->guid.hid,d->guid.aid); + d->taskSend.mb.needSend=ORTE_FALSE; + d->taskSend.mb.containsInfoReply=ORTE_FALSE; + d->taskSend.mb.cdrCodecDirect=NULL; + + //Self object data & fellow managers object data + appParams=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(appParams); + appParams->expirationTime=d->domainProp.baseProp.expirationTime; + VENDOR_ID_OCERA(appParams->vendorId); + appParams->hostId=d->guid.hid; + appParams->appId=d->guid.aid; + appParams->metatrafficUnicastPort=d->taskRecvUnicastMetatraffic.sock.port; + appParams->userdataUnicastPort=d->taskRecvUnicastUserdata.sock.port; + //fill unicast/multicast ip addresses + if (d->domainProp.IFCount) { + for(i=0;idomainProp.IFCount;i++) + appParams->unicastIPAddressList[i]=d->domainProp.IFProp[i].ipAddress; + appParams->unicastIPAddressCount=d->domainProp.IFCount; + } + if (d->domainProp.multicast.enabled && + IN_MULTICAST(d->domainProp.multicast.ipAddress)) { + appParams->metatrafficMulticastIPAddressList[appParams->metatrafficMulticastIPAddressCount]= + d->domainProp.multicast.ipAddress; + appParams->metatrafficMulticastIPAddressCount++; + } else { + if (!d->domainProp.IFCount) { + appParams->unicastIPAddressList[appParams->unicastIPAddressCount]= + StringToIPAddress("127.0.0.1"); + appParams->unicastIPAddressCount++; + } + } + //KeyList + if (!d->domainProp.keys) { + appParams->managerKeyList[0]=StringToIPAddress("127.0.0.1"); + for(i=0;idomainProp.IFCount;i++) + appParams->managerKeyList[i+1]=d->domainProp.IFProp[i].ipAddress; + if (d->domainProp.multicast.enabled && + IN_MULTICAST(d->domainProp.multicast.ipAddress)) { + appParams->managerKeyList[i+1]=d->domainProp.multicast.ipAddress; + i++; + } + appParams->managerKeyCount=i+1; + } else { + appParams->managerKeyCount=i=0; + while (getStringPart(d->domainProp.keys,':',&i,sbuff)) { + appParams->managerKeyList[appParams->managerKeyCount++]= + StringToIPAddress(sbuff); + } + } + d->appParams=appParams; + //insert object, doesn't need to be locked + d->objectEntryOID=objectEntryAdd(d,&d->guid,(void*)appParams); + d->objectEntryOID->privateCreated=ORTE_TRUE; + + + /************************************************************************/ + //CST objects + // writerApplicationSelf (WAS) + NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); + cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; + cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; + NTPTIME_ZERO(cstWriterParams.delayResponceTime); + cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; + if (manager) { + cstWriterParams.registrationRetries=d->domainProp.baseProp.registrationMgrRetries; + cstWriterParams.registrationPeriod=d->domainProp.baseProp.registrationMgrPeriod; + cstWriterParams.fullAcknowledge=ORTE_FALSE; + } else { + cstWriterParams.registrationRetries=d->domainProp.baseProp.registrationAppRetries; + cstWriterParams.registrationPeriod=d->domainProp.baseProp.registrationAppPeriod; + cstWriterParams.fullAcknowledge=ORTE_TRUE; + } + CSTWriterInit(d,&d->writerApplicationSelf,d->objectEntryOID, + OID_WRITE_APPSELF,&cstWriterParams,NULL); + if (manager) { + i=0; + while (getStringPart(d->domainProp.mgrs,':',&i,sbuff)>0) { + GUID_RTPS guid; + IPAddress ipAddress=StringToIPAddress(sbuff); + guid.hid=ipAddress; + guid.aid=AID_UNKNOWN; + guid.oid=OID_APP; + if (!objectEntryFind(d,&guid)) { + CSTRemoteReader *cstRemoteReader; + appParams=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(appParams); + appParams->hostId=guid.hid; + appParams->appId=guid.aid; + appParams->metatrafficUnicastPort=d->appParams->metatrafficUnicastPort; + objectEntryOID=objectEntryAdd(d,&guid,(void*)appParams); + if (d->domainProp.multicast.enabled && IN_MULTICAST(ipAddress)) { + appParams->metatrafficMulticastIPAddressList[0]=ipAddress; + appParams->metatrafficMulticastIPAddressCount=1; + objectEntryOID->multicastPort=port; + } else { + appParams->unicastIPAddressList[0]=ipAddress; + appParams->unicastIPAddressCount=1; + objectEntryOID->multicastPort=0; + } + appParams->userdataUnicastPort=0; //Manager support only metatraffic + cstRemoteReader=CSTWriterAddRemoteReader(d, + &d->writerApplicationSelf, + objectEntryOID, + OID_READ_MGR, + objectEntryOID); + debug(29,2) ("ORTEDomainCreate: add fellow manager (%s)\n", + IPAddressToString(ipAddress,sIPAddress)); + } + } + } else { + // add to WAS remote writer(s) + if (d->domainProp.appLocalManager) { + GUID_RTPS guid; + guid.hid=d->domainProp.appLocalManager; + guid.aid=AID_UNKNOWN; + guid.oid=OID_APP; + if (!objectEntryFind(d,&guid)) { + appParams=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(appParams); + appParams->hostId=guid.hid; + appParams->appId=guid.aid; + appParams->metatrafficUnicastPort=port; + appParams->userdataUnicastPort=0; //Manager support only metatraffic + appParams->unicastIPAddressList[0]=d->domainProp.appLocalManager; + appParams->unicastIPAddressCount=1; + objectEntryOID=objectEntryAdd(d,&guid,(void*)appParams); + CSTWriterAddRemoteReader(d, + &d->writerApplicationSelf, + objectEntryOID, + OID_READ_MGR, + objectEntryOID); + debug(30,2) ("ORTEDomainCreate: add manager (%s)\n", + IPAddressToString(d->domainProp.appLocalManager,sIPAddress)); + } + } + } + + // readerManagers + cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; + cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; + cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; + if (manager) { + cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; + cstReaderParams.repeatActiveQueryTime=iNtpTime; //RM cann't repeatly send ACKf + } else { + cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; + cstReaderParams.fullAcknowledge=ORTE_TRUE; + } + CSTReaderInit(d,&d->readerManagers,d->objectEntryOID, + OID_READ_MGR,&cstReaderParams,NULL); + + // readerApplications + cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; + cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; + cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; + cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; + cstReaderParams.fullAcknowledge=ORTE_TRUE; + CSTReaderInit(d,&d->readerApplications,d->objectEntryOID, + OID_READ_APP,&cstReaderParams,NULL); + + if (manager) { + // writerApplications + cstWriterParams.registrationRetries=0; + NTPTIME_ZERO(cstWriterParams.registrationPeriod); + NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); + cstWriterParams.refreshPeriod=iNtpTime; //only WAS,WM can refresh csChange(s) + cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; + NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); + cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; + cstWriterParams.fullAcknowledge=ORTE_FALSE; + CSTWriterInit(d,&d->writerApplications,d->objectEntryOID, + OID_WRITE_APP,&cstWriterParams,NULL); + + // writerManagers + cstWriterParams.registrationRetries=0; + NTPTIME_ZERO(cstWriterParams.registrationPeriod); + NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); + cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; + cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; + NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); + cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; + cstWriterParams.fullAcknowledge=ORTE_TRUE; + CSTWriterInit(d,&d->writerManagers,d->objectEntryOID, + OID_WRITE_MGR,&cstWriterParams,NULL); + } + + if (!manager) { + // writerPublications + cstWriterParams.registrationRetries=0; + NTPTIME_ZERO(cstWriterParams.registrationPeriod); + NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); + cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; + cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; + NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); + cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; + cstWriterParams.fullAcknowledge=ORTE_TRUE; + CSTWriterInit(d,&d->writerPublications,d->objectEntryOID, + OID_WRITE_PUBL,&cstWriterParams,NULL); + // writerSubscriptions + cstWriterParams.registrationRetries=0; + NTPTIME_ZERO(cstWriterParams.registrationPeriod); + NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); + cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; + cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; + NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); + cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; + cstWriterParams.fullAcknowledge=ORTE_TRUE; + CSTWriterInit(d,&d->writerSubscriptions,d->objectEntryOID, + OID_WRITE_SUBS,&cstWriterParams,NULL); + // readerPublications + cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; + cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; + cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; + cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; + cstReaderParams.fullAcknowledge=ORTE_TRUE; + CSTReaderInit(d,&d->readerPublications,d->objectEntryOID, + OID_READ_PUBL,&cstReaderParams,NULL); + // readerSubscriptions + cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; + cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; + cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; + cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; + cstReaderParams.fullAcknowledge=ORTE_TRUE; + CSTReaderInit(d,&d->readerSubscriptions,d->objectEntryOID, + OID_READ_SUBS,&cstReaderParams,NULL); + } + + //add csChange for WAS + appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); + + debug(30,10) ("ORTEDomainCreate: finished\n"); + return d; +} + +/*****************************************************************************/ +Boolean +ORTEDomainDestroy(ORTEDomain *d,Boolean manager) { + CSTWriter *cstWriter; + CSTReader *cstReader; + + debug(30,10) ("ORTEDomainDestroy: start\n"); + if (!d) return ORTE_FALSE; + + pthread_rwlock_wrlock(&d->objectEntry.objRootLock); + pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); + appSelfParamChanged(d,ORTE_TRUE,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE); + pthread_rwlock_unlock(&d->objectEntry.htimRootLock); + pthread_rwlock_unlock(&d->objectEntry.objRootLock); + + //Stoping threads + ORTEDomainRecvThreadStop(&d->taskRecvUnicastMetatraffic); + ORTEDomainRecvThreadStop(&d->taskRecvMulticastMetatraffic); + ORTEDomainRecvThreadStop(&d->taskRecvUnicastUserdata); + ORTEDomainRecvThreadStop(&d->taskRecvMulticastUserdata); + ORTEDomainSendThreadStop(&d->taskSend); + debug(30,3) ("ORTEDomainDestroy: threads stoped\n"); + + //Sockets + sock_cleanup(&d->taskRecvUnicastMetatraffic.sock); + sock_cleanup(&d->taskRecvMulticastMetatraffic.sock); + sock_cleanup(&d->taskRecvUnicastUserdata.sock); + sock_cleanup(&d->taskRecvMulticastUserdata.sock); + sock_cleanup(&d->taskSend.sock); + + //Signals + pthread_cond_destroy(&d->objectEntry.htimSendCond); + pthread_mutex_destroy(&d->objectEntry.htimSendMutex); + + //rwLocks + pthread_rwlock_destroy(&d->objectEntry.objRootLock); + pthread_rwlock_destroy(&d->objectEntry.htimRootLock); + pthread_rwlock_destroy(&d->publications.lock); + pthread_rwlock_destroy(&d->subscriptions.lock); + pthread_rwlock_destroy(&d->psEntry.publicationsLock); + pthread_rwlock_destroy(&d->psEntry.subscriptionsLock); + + //TypeRegister + ORTETypeRegisterDestroyAll(d); + pthread_rwlock_destroy(&d->typeEntry.lock); + + //Pattern + ORTEDomainAppSubscriptionPatternDestroy(d); + pthread_rwlock_unlock(&d->typeEntry.lock); + pthread_rwlock_destroy(&d->patternEntry.lock); + + //CSTReaders and CSTWriters + CSTWriterDelete(d,&d->writerApplicationSelf); + CSTReaderDelete(d,&d->readerManagers); + CSTReaderDelete(d,&d->readerApplications); + if (manager) { + CSTWriterDelete(d,&d->writerManagers); + CSTWriterDelete(d,&d->writerApplications); + } else { + CSTWriterDelete(d,&d->writerPublications); + CSTWriterDelete(d,&d->writerSubscriptions); + CSTReaderDelete(d,&d->readerPublications); + CSTReaderDelete(d,&d->readerSubscriptions); + + while ((cstWriter = CSTWriter_cut_first(&d->publications))) { + CSTWriterDelete(d,cstWriter); + FREE(cstWriter); + } + while ((cstReader = CSTReader_cut_first(&d->subscriptions))) { + CSTReaderDelete(d,cstReader); + FREE(cstReader); + } + } + + //objects in objectsEntry + objectEntryDeleteAll(d,&d->objectEntry); + + CDR_codec_release_buffer(&d->taskRecvUnicastMetatraffic.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvMulticastMetatraffic.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvUnicastUserdata.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskRecvMulticastUserdata.mb.cdrCodec); + CDR_codec_release_buffer(&d->taskSend.mb.cdrCodec); + FREE(d); + debug(30,10) ("ORTEDomainDestroy: finished\n"); + return ORTE_TRUE; +} diff --git a/orte/liborte/ORTEDomainApp.c b/orte/liborte/ORTEDomainApp.c index e6d8ddf..06acc8a 100644 --- a/orte/liborte/ORTEDomainApp.c +++ b/orte/liborte/ORTEDomainApp.c @@ -21,309 +21,26 @@ #include "orte_all.h" - /*****************************************************************************/ ORTEDomain * ORTEDomainAppCreate(int domain, ORTEDomainProp *prop, ORTEDomainAppEvents *events,Boolean suspended) { - ORTEDomain *d; - ObjectEntryOID *objectEntryOID; - AppParams *appParams; - CSTWriterParams cstWriterParams; - CSTReaderParams cstReaderParams; - char iflocal[MAX_INTERFACES*MAX_STRING_IPADDRESS_LENGTH]; - char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; - char sbuff[128]; - int i; - uint16_t port=0; + ORTEDomain *d; debug(21,10) ("ORTEDomainAppCreate: start\n"); - //Create domainApplication - d=MALLOC(sizeof(ORTEDomain)); - if (!d) return NULL; //no memory - //initialization local values - d->domain=domain; - d->taskRecvMetatraffic.terminate=ORTE_TRUE; - d->taskRecvUserdata.terminate=ORTE_TRUE; - d->taskSend.terminate=ORTE_TRUE; - d->taskRecvMetatraffic.sock.port=0; - d->taskRecvUserdata.sock.port=0; - d->taskSend.sock.port=0; - //init structure objectEntry - ObjectEntryHID_init_root_field(&d->objectEntry); - pthread_rwlock_init(&d->objectEntry.objRootLock,NULL); - htimerRoot_init_queue(&d->objectEntry); - pthread_rwlock_init(&d->objectEntry.htimRootLock,NULL); - pthread_cond_init(&d->objectEntry.htimSendCond,NULL); - pthread_mutex_init(&d->objectEntry.htimSendMutex,NULL); - d->objectEntry.htimSendCondValue=0; - //publication,subscriptions - d->publications.counter=d->subscriptions.counter=0; - CSTWriter_init_root_field(&d->publications); - CSTReader_init_root_field(&d->subscriptions); - pthread_rwlock_init(&d->publications.lock,NULL); - pthread_rwlock_init(&d->subscriptions.lock,NULL); - //publication,subscriptions lists - PublicationList_init_root_field(&d->psEntry); - pthread_rwlock_init(&d->psEntry.publicationsLock,NULL); - SubscriptionList_init_root_field(&d->psEntry); - pthread_rwlock_init(&d->psEntry.subscriptionsLock,NULL); - - //pattern - pthread_rwlock_init(&d->patternEntry.lock,NULL); - ORTEPatternRegister(d,ORTEPatternCheckDefault,ORTEPatternMatchDefault,NULL); - Pattern_init_head(&d->patternEntry); - - //create domainProp - if (prop!=NULL) { - memcpy(&d->domainProp,prop,sizeof(ORTEDomainProp)); - } else { - ORTEDomainPropDefaultGet(&d->domainProp); - } - - //print local IP addresses - iflocal[0]=0; - if (d->domainProp.IFCount) { - for(i=0;idomainProp.IFCount;i++) - strcat(iflocal,IPAddressToString(d->domainProp.IFProp[i].ipAddress,sIPAddress)); - debug(21,2) ("ORTEDomainAppCreate: localIPAddres(es) %s\n",iflocal); - } else{ - debug(21,2) ("ORTEDomainAppCreate: no active interface card\n"); - } - //DomainEvents - if (events!=NULL) { - memcpy(&d->domainEvents,events,sizeof(ORTEDomainAppEvents)); - } else { - memset(&d->domainEvents,0,sizeof(ORTEDomainAppEvents)); - } - - //local buffers - d->mbRecvMetatraffic.cdrStream.buffer= - (uint8_t*)MALLOC(d->domainProp.recvBuffSize); - d->mbRecvUserdata.cdrStream.buffer= - (uint8_t*)MALLOC(d->domainProp.recvBuffSize); - d->mbSend.cdrStream.buffer= - (uint8_t*)MALLOC(d->domainProp.sendBuffSize); - if ((!d->mbRecvMetatraffic.cdrStream.buffer) || - (!d->mbRecvUserdata.cdrStream.buffer) || - (!d->mbSend.cdrStream.buffer)) { //no memory - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbRecvUserdata.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); + d=ORTEDomainCreate(domain,prop,events,ORTE_FALSE); + if (!d) return NULL; - } - d->mbRecvMetatraffic.cdrStream.bufferPtr=d->mbRecvMetatraffic.cdrStream.buffer; - d->mbRecvMetatraffic.cdrStream.length=0; - d->mbRecvUserdata.cdrStream.bufferPtr=d->mbRecvUserdata.cdrStream.buffer; - d->mbRecvUserdata.cdrStream.length=0; - d->mbSend.cdrStream.bufferPtr=d->mbSend.cdrStream.buffer; - d->mbSend.cdrStream.length=0; - - //TypeRegister - ORTEType_init_root_field(&d->typeEntry); - pthread_rwlock_init(&d->typeEntry.lock,NULL); - - //Sockets - sock_init_udp(&d->taskRecvMetatraffic.sock); - sock_init_udp(&d->taskRecvUserdata.sock); - sock_init_udp(&d->taskSend.sock); - if (d->domainProp.multicast.enabled) { - Domain2PortMulticastMetatraffic(d->domain,port); - } else { - Domain2Port(d->domain,port); - } - sock_bind(&d->taskRecvMetatraffic.sock,0); //give me receiving port (metatraffic) - debug(21,2) ("ORTEDomainAppCreate: Bind on port(RecvMetatraffic):%u\n", - d->taskRecvMetatraffic.sock.port); - sock_bind(&d->taskRecvUserdata.sock,0); //give me receiving port (userdata) - debug(21,2) ("ORTEDomainAppCreate: Bind on port(RecvUserdata):%u\n", - d->taskRecvUserdata.sock.port); - sock_bind(&d->taskSend.sock,0); //give me sending port - debug(21,2) ("ORTEDomainAppCreate: Bind on port(Send):%u\n", - d->taskSend.sock.port); - if ((d->taskRecvMetatraffic.sock.fd<0) || - (d->taskRecvUserdata.sock.fd<0) || - (d->taskSend.sock.fd<0)) { - debug(21,0) ("Error creating socket(s).\n"); - sock_cleanup(&d->taskRecvMetatraffic.sock); - sock_cleanup(&d->taskRecvUserdata.sock); - sock_cleanup(&d->taskSend.sock); - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbRecvUserdata.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); - return NULL; - } - if (d->domainProp.multicast.enabled) { - struct ip_mreq mreq; - //ttl - if(sock_setsockopt(&d->taskSend.sock,IP_MULTICAST_TTL, - &d->domainProp.multicast.ttl,sizeof(d->domainProp.multicast.ttl))>=0) { - debug(21,2) ("ORTEDomainAppCreate: ttl set on: %u\n", - d->domainProp.multicast.ttl); - } - // join multicast group - mreq.imr_multiaddr.s_addr=htonl(d->domainProp.multicast.ipAddress); - mreq.imr_interface.s_addr=htonl(INADDR_ANY); - if(sock_setsockopt(&d->taskRecvUserdata.sock,IP_ADD_MEMBERSHIP, - (void *) &mreq, sizeof(mreq))>=0) { - debug(21,2) ("ORTEDomainAppCreate: listening to mgroup %s\n", - IPAddressToString(d->domainProp.multicast.ipAddress,sIPAddress)); - } - } - - //Generates local GUID - if (d->domainProp.IFCount>0) - d->guid.hid=d->domainProp.IFProp[0].ipAddress; - else - d->guid.hid=StringToIPAddress("127.0.0.1"); - d->guid.aid=(d->taskSend.sock.port<<8)+MANAGEDAPPLICATION; - d->guid.oid=OID_APP; - debug(29,2) ("ORTEDomainAppCreate: GUID: %#10.8x,%#10.8x,%#10.8x\n", - d->guid.hid,d->guid.aid,d->guid.oid); - - //create HEADER of message for sending task - RTPSHeaderCreate(d->mbSend.cdrStream.buffer,d->guid.hid,d->guid.aid); - d->mbSend.cdrStream.bufferPtr= - d->mbSend.cdrStream.buffer+RTPS_HEADER_LENGTH; - d->mbSend.cdrStream.length=RTPS_HEADER_LENGTH; - d->mbSend.needSend=ORTE_FALSE; - d->mbSend.containsInfoReply=ORTE_FALSE; - - //Self object data & fellow managers object data - appParams=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(appParams); - appParams->expirationTime=d->domainProp.baseProp.expirationTime; - VENDOR_ID_OCERA(appParams->vendorId); - appParams->hostId=d->guid.hid; - appParams->appId=d->guid.aid; - appParams->metatrafficUnicastPort=d->taskRecvMetatraffic.sock.port; - appParams->userdataUnicastPort=d->taskRecvUserdata.sock.port; - if (d->domainProp.multicast.enabled) { - //multicast - for(i=0;idomainProp.IFCount;i++) - appParams->metatrafficMulticastIPAddressList[i]=d->domainProp.IFProp[i].ipAddress; - appParams->metatrafficMulticastIPAddressCount=d->domainProp.IFCount; - } else { - //unicast - if (d->domainProp.IFCount) { - for(i=0;idomainProp.IFCount;i++) - appParams->unicastIPAddressList[i]=d->domainProp.IFProp[i].ipAddress; - appParams->unicastIPAddressCount=d->domainProp.IFCount; - } else { - appParams->unicastIPAddressList[0]=StringToIPAddress("127.0.0.1"); - appParams->unicastIPAddressCount=1; - } - } - //ApplicatonKeyList - if (!d->domainProp.keys) { - appParams->managerKeyList[0]=StringToIPAddress("127.0.0.1"); - for(i=0;idomainProp.IFCount;i++) - appParams->managerKeyList[i+1]=d->domainProp.IFProp[i].ipAddress; - appParams->managerKeyCount=d->domainProp.IFCount+1; - } else { - appParams->managerKeyCount=i=0; - while (getStringPart(d->domainProp.keys,':',&i,sbuff)) { - appParams->managerKeyList[appParams->managerKeyCount++]= - StringToIPAddress(sbuff); - } - } - d->appParams=appParams; - //insert object, doesn't need to be locked - d->objectEntryOID=objectEntryAdd(d,&d->guid,(void*)appParams); - d->objectEntryOID->privateCreated=ORTE_TRUE; - - //CST objects - // writerApplicationSelf (WAS) - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NTPTIME_ZERO(cstWriterParams.delayResponceTime); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_TRUE; - CSTWriterInit(d,&d->writerApplicationSelf,d->objectEntryOID, - OID_WRITE_APPSELF,&cstWriterParams,NULL); - // add to WAS remote writer(s) - if (d->domainProp.appLocalManager) { - GUID_RTPS guid; - guid.hid=d->domainProp.appLocalManager; - guid.aid=AID_UNKNOWN; - guid.oid=OID_APP; - if (!objectEntryFind(d,&guid)) { - appParams=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(appParams); - appParams->hostId=guid.hid; - appParams->appId=guid.aid; - appParams->metatrafficUnicastPort=port; - appParams->userdataUnicastPort=0; //Manager support only metatraffic - appParams->unicastIPAddressList[0]=d->domainProp.appLocalManager; - appParams->unicastIPAddressCount=1; - objectEntryOID=objectEntryAdd(d,&guid,(void*)appParams); - CSTWriterAddRemoteReader(d,&d->writerApplicationSelf,objectEntryOID, - OID_READ_MGR); - debug(21,2) ("ORTEDomainAppCreate: add fellow manager (%s)\n", - IPAddressToString(d->domainProp.appLocalManager,sIPAddress)); - } - } - // readerManagers - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; - cstReaderParams.fullAcknowledge=ORTE_TRUE; - CSTReaderInit(d,&d->readerManagers,d->objectEntryOID, - OID_READ_MGR,&cstReaderParams,NULL); - // readerApplications - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; - cstReaderParams.fullAcknowledge=ORTE_TRUE; - CSTReaderInit(d,&d->readerApplications,d->objectEntryOID, - OID_READ_APP,&cstReaderParams,NULL); - // writerPublications - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_TRUE; - CSTWriterInit(d,&d->writerPublications,d->objectEntryOID, - OID_WRITE_PUBL,&cstWriterParams,NULL); - // writerSubscriptions - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_TRUE; - CSTWriterInit(d,&d->writerSubscriptions,d->objectEntryOID, - OID_WRITE_SUBS,&cstWriterParams,NULL); - // readerPublications - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; - cstReaderParams.fullAcknowledge=ORTE_TRUE; - CSTReaderInit(d,&d->readerPublications,d->objectEntryOID, - OID_READ_PUBL,&cstReaderParams,NULL); - // readerSubscriptions - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; - cstReaderParams.fullAcknowledge=ORTE_TRUE; - CSTReaderInit(d,&d->readerSubscriptions,d->objectEntryOID, - OID_READ_SUBS,&cstReaderParams,NULL); - - //add csChange for WAS - appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); //Start threads if (!suspended) { - ORTEDomainStart(d,ORTE_TRUE,ORTE_TRUE,ORTE_TRUE); + ORTEDomainStart(d, /* domain */ + ORTE_TRUE, /* recvUnicastMetarafficThread */ + d->domainProp.multicast.enabled, /* recvMulticastMetarafficThread */ + ORTE_TRUE, /* recvUnicastUserdataThread */ + d->domainProp.multicast.enabled, /* recvMulticastUserdataThread */ + ORTE_TRUE); /* sendThread */ } debug(21,10) ("ORTEDomainAppCreate: finished\n"); return d; @@ -332,89 +49,14 @@ ORTEDomainAppCreate(int domain, ORTEDomainProp *prop, /*****************************************************************************/ Boolean ORTEDomainAppDestroy(ORTEDomain *d) { - CSTWriter *cstWriter; - CSTReader *cstReader; + Boolean ret; debug(21,10) ("ORTEDomainAppDestroy: start\n"); - if (!d) return ORTE_FALSE; - pthread_rwlock_wrlock(&d->objectEntry.objRootLock); - pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); - appSelfParamChanged(d,ORTE_TRUE,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE); - pthread_rwlock_unlock(&d->objectEntry.htimRootLock); - pthread_rwlock_unlock(&d->objectEntry.objRootLock); - //Stoping threads - if (!d->taskRecvMetatraffic.terminate) { - d->taskRecvMetatraffic.terminate=ORTE_TRUE; - ORTEDomainWakeUpReceivingThread(d, - &d->taskSend.sock,d->taskRecvMetatraffic.sock.port); - pthread_join(d->taskRecvMetatraffic.thread,NULL); - } - if (!d->taskRecvUserdata.terminate) { - d->taskRecvUserdata.terminate=ORTE_TRUE; - ORTEDomainWakeUpReceivingThread(d, - &d->taskSend.sock,d->taskRecvUserdata.sock.port); - pthread_join(d->taskRecvUserdata.thread,NULL); - } - if (!d->taskSend.terminate) { - d->taskSend.terminate=ORTE_TRUE; - ORTEDomainWakeUpSendingThread(&d->objectEntry); - pthread_join(d->taskSend.thread,NULL); - } - debug(21,3) ("ORTEDomainAppDestroy: threads stoped\n"); - - //Sockets - sock_cleanup(&d->taskRecvMetatraffic.sock); - sock_cleanup(&d->taskRecvUserdata.sock); - sock_cleanup(&d->taskSend.sock); - //Signals - pthread_cond_destroy(&d->objectEntry.htimSendCond); - pthread_mutex_destroy(&d->objectEntry.htimSendMutex); + ret=ORTEDomainDestroy(d,ORTE_FALSE); - //rwLocks - pthread_rwlock_destroy(&d->objectEntry.objRootLock); - pthread_rwlock_destroy(&d->objectEntry.htimRootLock); - pthread_rwlock_destroy(&d->publications.lock); - pthread_rwlock_destroy(&d->subscriptions.lock); - pthread_rwlock_destroy(&d->psEntry.publicationsLock); - pthread_rwlock_destroy(&d->psEntry.subscriptionsLock); - - //TypeRegister - ORTETypeRegisterDestroyAll(d); - pthread_rwlock_destroy(&d->typeEntry.lock); - - //Pattern - ORTEDomainAppSubscriptionPatternDestroy(d); - pthread_rwlock_unlock(&d->typeEntry.lock); - pthread_rwlock_destroy(&d->patternEntry.lock); - - //CSTReaders and CSTWriters - CSTWriterDelete(d,&d->writerApplicationSelf); - CSTReaderDelete(d,&d->readerManagers); - CSTReaderDelete(d,&d->readerApplications); - CSTWriterDelete(d,&d->writerPublications); - CSTWriterDelete(d,&d->writerSubscriptions); - CSTReaderDelete(d,&d->readerPublications); - CSTReaderDelete(d,&d->readerSubscriptions); - - while ((cstWriter = CSTWriter_cut_first(&d->publications))) { - CSTWriterDelete(d,cstWriter); - FREE(cstWriter); - } - while ((cstReader = CSTReader_cut_first(&d->subscriptions))) { - CSTReaderDelete(d,cstReader); - FREE(cstReader); - } - - //objects in objectsEntry - objectEntryDeleteAll(d,&d->objectEntry); - - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbRecvUserdata.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); debug(21,10) ("ORTEDomainAppDestroy: finished\n"); - return ORTE_TRUE; + return ret; } /*****************************************************************************/ diff --git a/orte/liborte/ORTEDomainMgr.c b/orte/liborte/ORTEDomainMgr.c index fb01180..d42ebc2 100644 --- a/orte/liborte/ORTEDomainMgr.c +++ b/orte/liborte/ORTEDomainMgr.c @@ -26,260 +26,21 @@ ORTEDomain * ORTEDomainMgrCreate(int domain, ORTEDomainProp *prop, ORTEDomainAppEvents *events,Boolean suspended) { ORTEDomain *d; - ObjectEntryOID *objectEntryOID; - AppParams *appParams; - CSTWriterParams cstWriterParams; - CSTReaderParams cstReaderParams; - char iflocal[MAX_INTERFACES*MAX_STRING_IPADDRESS_LENGTH]; - char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; - char sbuff[128]; - int i; - uint16_t port=0; debug(29,10) ("ORTEDomainMgrCreate: start\n"); - //Create domainApplication - d=MALLOC(sizeof(ORTEDomain)); - if (!d) return NULL; //no memory - //initialization local values - d->domain=domain; - d->taskRecvMetatraffic.terminate=ORTE_TRUE; - d->taskSend.terminate=ORTE_TRUE; - d->taskRecvMetatraffic.sock.port=0; - d->taskSend.sock.port=0; - //init structure objectEntry - ObjectEntryHID_init_root_field(&d->objectEntry); - pthread_rwlock_init(&d->objectEntry.objRootLock,NULL); - htimerRoot_init_queue(&d->objectEntry); - pthread_rwlock_init(&d->objectEntry.htimRootLock,NULL); - pthread_cond_init(&d->objectEntry.htimSendCond,NULL); - pthread_mutex_init(&d->objectEntry.htimSendMutex,NULL); - d->objectEntry.htimSendCondValue=0; - - //create domainProp - if (prop!=NULL) { - memcpy(&d->domainProp,prop,sizeof(ORTEDomainProp)); - } else { - ORTEDomainPropDefaultGet(&d->domainProp); - } - - //print local IP addresses - iflocal[0]=0; - if (d->domainProp.IFCount) { - for(i=0;idomainProp.IFCount;i++) - strcat(iflocal,IPAddressToString(d->domainProp.IFProp[i].ipAddress,sIPAddress)); - debug(29,2) ("ORTEDomainMgrCreate: localIPAddres(es) %s\n",iflocal); - } else{ - debug(29,2) ("ORTEDomainMgrCreate: no active interface card\n"); - } - //DomainEvents - if (events!=NULL) { - memcpy(&d->domainEvents,events,sizeof(ORTEDomainAppEvents)); - } else { - memset(&d->domainEvents,0,sizeof(ORTEDomainAppEvents)); - } - - //local buffers - d->mbRecvMetatraffic.cdrStream.buffer= - (uint8_t*)MALLOC(d->domainProp.recvBuffSize); - d->mbRecvUserdata.cdrStream.buffer=NULL; - d->mbSend.cdrStream.buffer= - (uint8_t*)MALLOC(d->domainProp.sendBuffSize); - if ((!d->mbRecvMetatraffic.cdrStream.buffer) || - (!d->mbSend.cdrStream.buffer)) { //no memory - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); + d=ORTEDomainCreate(domain,prop,events,ORTE_TRUE); + if (!d) return NULL; - } - d->mbRecvMetatraffic.cdrStream.bufferPtr=d->mbRecvMetatraffic.cdrStream.buffer; - d->mbRecvMetatraffic.cdrStream.length=0; - d->mbRecvUserdata.cdrStream.bufferPtr=d->mbRecvUserdata.cdrStream.buffer; - d->mbRecvUserdata.cdrStream.length=0; - d->mbSend.cdrStream.bufferPtr=d->mbSend.cdrStream.buffer; - d->mbSend.cdrStream.length=0; - - //Sockets - sock_init_udp(&d->taskRecvMetatraffic.sock); - sock_init_udp(&d->taskSend.sock); - if (d->domainProp.multicast.enabled) { - Domain2PortMulticastMetatraffic(d->domain,port); - } else { - Domain2Port(d->domain,port); - } - sock_bind(&d->taskRecvMetatraffic.sock,port); //receiving port - debug(29,2) ("ORTEDomainMgrCreate: bind on port(Recv): %u\n", - d->taskRecvMetatraffic.sock.port); - sock_bind(&d->taskSend.sock,0); //give me sending port - debug(29,2) ("ORTEDomainAppCreate: bind on port(Send): %u\n", - d->taskSend.sock.port); - if (d->domainProp.multicast.enabled) { - struct ip_mreq mreq; - //ttl - if(sock_setsockopt(&d->taskSend.sock,IP_MULTICAST_TTL, - &d->domainProp.multicast.ttl,sizeof(d->domainProp.multicast.ttl))>=0) { - debug(29,2) ("ORTEDomainAppCreate: ttl set on: %u\n", - d->domainProp.multicast.ttl); - } - // join multicast group - mreq.imr_multiaddr.s_addr=htonl(d->domainProp.multicast.ipAddress); - mreq.imr_interface.s_addr=htonl(INADDR_ANY); - if(sock_setsockopt(&d->taskRecvUserdata.sock,IP_ADD_MEMBERSHIP, - (void *) &mreq, sizeof(mreq))>=0) { - debug(29,2) ("ORTEDomainAppCreate: listening to mgroup %s\n", - IPAddressToString(d->domainProp.multicast.ipAddress,sIPAddress)); - } - } - if ((d->taskRecvMetatraffic.sock.fd<0) || (d->taskSend.sock.fd<0) || - (port!=d->taskRecvMetatraffic.sock.port)) { - printf("Error creating socket(s).\n"); - sock_cleanup(&d->taskRecvMetatraffic.sock); - sock_cleanup(&d->taskSend.sock); - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); - return NULL; - } - - //Generates local GUID - if (d->domainProp.IFCount>0) - d->guid.hid=d->domainProp.IFProp[0].ipAddress; - else - d->guid.hid=StringToIPAddress("127.0.0.1"); - d->guid.aid=(d->taskSend.sock.port<<8)+MANAGER; - d->guid.oid=OID_APP; - debug(29,2) ("ORTEDomainMgrCreate: GUID: %#10.8x,%#10.8x,%#10.8x\n", - d->guid.hid,d->guid.aid,d->guid.oid); - - //create HEADER of message for sending task - RTPSHeaderCreate(d->mbSend.cdrStream.buffer,d->guid.hid,d->guid.aid); - d->mbSend.cdrStream.bufferPtr= - d->mbSend.cdrStream.buffer+RTPS_HEADER_LENGTH; - d->mbSend.cdrStream.length=RTPS_HEADER_LENGTH; - d->mbSend.needSend=ORTE_FALSE; - d->mbSend.containsInfoReply=ORTE_FALSE; - - //Self object data & fellow managers object data - appParams=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(appParams); - appParams->expirationTime=d->domainProp.baseProp.expirationTime; - VENDOR_ID_OCERA(appParams->vendorId); - appParams->hostId=d->guid.hid; - appParams->appId=d->guid.aid; - appParams->metatrafficUnicastPort=d->taskRecvMetatraffic.sock.port; - appParams->userdataUnicastPort=0; //Manager support only metatraffic - if (d->domainProp.multicast.enabled) { - //multicast - for(i=0;idomainProp.IFCount;i++) - appParams->metatrafficMulticastIPAddressList[i]=d->domainProp.IFProp[i].ipAddress; - appParams->metatrafficMulticastIPAddressCount=d->domainProp.IFCount; - } else { - //unicast - if (d->domainProp.IFCount) { - for(i=0;idomainProp.IFCount;i++) - appParams->unicastIPAddressList[i]=d->domainProp.IFProp[i].ipAddress; - appParams->unicastIPAddressCount=d->domainProp.IFCount; - } else { - appParams->unicastIPAddressList[0]=StringToIPAddress("127.0.0.1"); - appParams->unicastIPAddressCount=1; - } - } - //managerKeyList - if (!d->domainProp.keys) { - appParams->managerKeyList[0]=StringToIPAddress("127.0.0.1"); - for(i=0;idomainProp.IFCount;i++) - appParams->managerKeyList[i+1]=d->domainProp.IFProp[i].ipAddress; - appParams->managerKeyCount=d->domainProp.IFCount+1; - } else { - appParams->managerKeyCount=i=0; - while (getStringPart(d->domainProp.keys,':',&i,sbuff)) { - printf("a"); - ORTESleepMs(100); - appParams->managerKeyList[appParams->managerKeyCount++]= - StringToIPAddress(sbuff); - } - - } - d->appParams=appParams; - //insert object, doesn't need to be locked - d->objectEntryOID=objectEntryAdd(d,&d->guid,(void*)appParams); - d->objectEntryOID->privateCreated=ORTE_TRUE; - - //CST objects - // writerApplicationSelf (WAS) - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NTPTIME_ZERO(cstWriterParams.delayResponceTime); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_FALSE; - CSTWriterInit(d,&d->writerApplicationSelf,d->objectEntryOID, - OID_WRITE_APPSELF,&cstWriterParams,NULL); - // add to WAS remote writer(s) - i=0; - while (getStringPart(d->domainProp.mgrs,':',&i,sbuff)>0) { - GUID_RTPS guid; - IPAddress ipAddress=StringToIPAddress(sbuff); - guid.hid=ipAddress; - guid.aid=AID_UNKNOWN; - guid.oid=OID_APP; - if (!objectEntryFind(d,&guid)) { - appParams=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(appParams); - appParams->hostId=guid.hid; - appParams->appId=guid.aid; - appParams->metatrafficUnicastPort=d->appParams->metatrafficUnicastPort; - appParams->userdataUnicastPort=0; //Manager support only metatraffic - appParams->unicastIPAddressList[0]=ipAddress; - appParams->unicastIPAddressCount=1; - objectEntryOID=objectEntryAdd(d,&guid,(void*)appParams); - CSTWriterAddRemoteReader(d,&d->writerApplicationSelf,objectEntryOID, - OID_READ_MGR); - debug(29,2) ("ORTEDomainAppCreate: add fellow manager (%s)\n", - IPAddressToString(ipAddress,sIPAddress)); - } - } - // readerManagers - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=iNtpTime; //RM cann't repeatly send ACKf - cstReaderParams.fullAcknowledge=ORTE_FALSE; //never will send ACK - CSTReaderInit(d,&d->readerManagers,d->objectEntryOID, - OID_READ_MGR,&cstReaderParams,NULL); - // readerApplications - cstReaderParams.delayResponceTimeMin=d->domainProp.baseProp.delayResponceTimeACKMin; - cstReaderParams.delayResponceTimeMax=d->domainProp.baseProp.delayResponceTimeACKMax; - cstReaderParams.ACKMaxRetries=d->domainProp.baseProp.ACKMaxRetries; - cstReaderParams.repeatActiveQueryTime=d->domainProp.baseProp.repeatActiveQueryTime; - cstReaderParams.fullAcknowledge=ORTE_TRUE; - CSTReaderInit(d,&d->readerApplications,d->objectEntryOID, - OID_READ_APP,&cstReaderParams,NULL); - // writerApplications - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=iNtpTime; //only WAS,WM can refresh csChange(s) - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_FALSE; - CSTWriterInit(d,&d->writerApplications,d->objectEntryOID, - OID_WRITE_APP,&cstWriterParams,NULL); - // writerManagers - NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); - cstWriterParams.refreshPeriod=d->domainProp.baseProp.refreshPeriod; - cstWriterParams.repeatAnnounceTime=d->domainProp.baseProp.repeatAnnounceTime; - NtpTimeAssembFromMs(cstWriterParams.delayResponceTime,0,20); - cstWriterParams.HBMaxRetries=d->domainProp.baseProp.HBMaxRetries; - cstWriterParams.fullAcknowledge=ORTE_TRUE; - CSTWriterInit(d,&d->writerManagers,d->objectEntryOID, - OID_WRITE_MGR,&cstWriterParams,NULL); - - //add csChange for WAS - appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); //Start threads if (!suspended) { - ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE); + ORTEDomainStart(d, /* domain */ + ORTE_TRUE, /* recvUnicastMetarafficThread */ + ORTE_FALSE, /* recvMulticastMetarafficThread */ + ORTE_FALSE, /* recvUnicastUserdataThread */ + ORTE_FALSE, /* recvMulticastUserdataThread */ + ORTE_TRUE); /* sendThread */ } debug(29,10) ("ORTEDomainMgrCreate: finished\n"); @@ -289,54 +50,12 @@ ORTEDomainMgrCreate(int domain, ORTEDomainProp *prop, /*****************************************************************************/ Boolean ORTEDomainMgrDestroy(ORTEDomain *d) { + Boolean ret; debug(29,10) ("ORTEDomainMgrDestroy: start\n"); - pthread_rwlock_wrlock(&d->objectEntry.objRootLock); - pthread_rwlock_wrlock(&d->objectEntry.htimRootLock); - appSelfParamChanged(d,ORTE_TRUE,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE); - pthread_rwlock_unlock(&d->objectEntry.htimRootLock); - pthread_rwlock_unlock(&d->objectEntry.objRootLock); - //Stoping threads - if(!d->taskRecvMetatraffic.terminate) { - d->taskRecvMetatraffic.terminate=ORTE_TRUE; - ORTEDomainWakeUpReceivingThread(d, - &d->taskSend.sock,d->taskRecvMetatraffic.sock.port); - pthread_join(d->taskRecvMetatraffic.thread,NULL); - } - if (!d->taskSend.terminate) { - d->taskSend.terminate=ORTE_TRUE; - ORTEDomainWakeUpSendingThread(&d->objectEntry); - pthread_join(d->taskSend.thread,NULL); - } - debug(29,8) ("ORTEDomainMgrDestroy: threads stoped and destroyed\n"); - - objectEntryDump(&d->objectEntry); - - //Sockets - sock_cleanup(&d->taskRecvMetatraffic.sock); - sock_cleanup(&d->taskSend.sock); - //Signals - pthread_cond_destroy(&d->objectEntry.htimSendCond); - pthread_mutex_destroy(&d->objectEntry.htimSendMutex); - - //rwLocks - pthread_rwlock_destroy(&d->objectEntry.objRootLock); - pthread_rwlock_destroy(&d->objectEntry.htimRootLock); + ret=ORTEDomainDestroy(d,ORTE_TRUE); - //CSTReaders and CSTWriters - CSTReaderDelete(d,&d->readerManagers); - CSTReaderDelete(d,&d->readerApplications); - CSTWriterDelete(d,&d->writerManagers); - CSTWriterDelete(d,&d->writerApplications); - CSTWriterDelete(d,&d->writerApplicationSelf); - - //objects in objectsEntry - objectEntryDeleteAll(d,&d->objectEntry); - - FREE(d->mbRecvMetatraffic.cdrStream.buffer); - FREE(d->mbSend.cdrStream.buffer); - FREE(d); debug(29,10) ("ORTEDomainMgrDestroy: finished\n"); - return ORTE_TRUE; + return ret; } diff --git a/orte/liborte/ORTEMisc.c b/orte/liborte/ORTEMisc.c index 9b45e49..5f27e65 100644 --- a/orte/liborte/ORTEMisc.c +++ b/orte/liborte/ORTEMisc.c @@ -21,18 +21,17 @@ #include "orte_all.h" -void +inline void ORTESleepMs(unsigned int ms) { #if defined(CONFIG_ORTE_UNIX) && defined (HAVE_UNISTD_H) usleep(ms*1000); - #endif - #ifdef CONFIG_ORTE_RTL + #elif define CONFIG_ORTE_RTL usleep(ms*1000); - #endif - #if defined CONFIG_ORTE_WIN + #elif defined CONFIG_ORTE_WIN Sleep(ms); - #endif - #ifdef CONFIG_ORTE_RTAI + #elif defined CONFIG_ORTE_RTAI rt_sleep(nano2count(ms*1000000)); + #elif + #error "NOT DEFINED SLEEP FUNCTION!" #endif } diff --git a/orte/liborte/ORTEPublication.c b/orte/liborte/ORTEPublication.c index 56fec73..d1ac2ee 100644 --- a/orte/liborte/ORTEPublication.c +++ b/orte/liborte/ORTEPublication.c @@ -88,9 +88,11 @@ ORTEPublicationCreate(ORTEDomain *d,const char *topic,const char *typeName, } } //create writerPublication + cstWriterParams.registrationRetries=0; + NTPTIME_ZERO(cstWriterParams.registrationPeriod); NTPTIME_ZERO(cstWriterParams.waitWhileDataUnderwayTime); NTPTIME_ZERO(cstWriterParams.delayResponceTime); - cstWriterParams.refreshPeriod=iNtpTime; //cann't refresh csChange(s) + cstWriterParams.refreshPeriod=iNtpTime; //can't refresh csChange(s) cstWriterParams.repeatAnnounceTime=pp->HBNornalRate; cstWriterParams.HBMaxRetries=pp->HBMaxRetries; cstWriterParams.fullAcknowledge=ORTE_TRUE; @@ -104,7 +106,7 @@ ORTEPublicationCreate(ORTEDomain *d,const char *topic,const char *typeName, parameterUpdateCSChangeFromPublication(csChange,pp); csChange->guid=guid; csChange->alive=ORTE_TRUE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; debug(31,10) ("ORTEPublicationCreate: add CSChange\n"); CSTWriterAddCSChange(d,&d->writerPublications,csChange); pthread_rwlock_unlock(&d->writerPublications.lock); @@ -134,7 +136,7 @@ ORTEPublicationDestroy(ORTEPublication *cstWriter) { } csChange=(CSChange*)MALLOC(sizeof(CSChange)); CSChangeAttributes_init_head(csChange); - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; csChange->guid=cstWriter->guid; csChange->alive=ORTE_FALSE; CSTWriterAddCSChange(cstWriter->domain, @@ -173,7 +175,7 @@ ORTEPublicationPropertiesSet(ORTEPublication *cstWriter,ORTEPublProp *pp) { parameterUpdateCSChangeFromPublication(csChange,pp); csChange->guid=cstWriter->guid; csChange->alive=ORTE_TRUE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(cstWriter->domain, &cstWriter->domain->writerPublications,csChange); pthread_rwlock_unlock(&cstWriter->lock); @@ -266,45 +268,72 @@ ORTEPublicationPrepareQueue(ORTEPublication *cstWriter) { /*****************************************************************************/ int -ORTEPublicationSendLocked(ORTEPublication *cstWriter) { +ORTEPublicationSendLocked(ORTEPublication *cstWriter, + ORTEPublicationSendParam *psp) { CSChange *csChange; SequenceNumber snNext; + int max_size; if (!cstWriter) return ORTE_BAD_HANDLE; pthread_rwlock_rdlock(&cstWriter->domain->typeEntry.lock); pthread_rwlock_wrlock(&cstWriter->domain->writerPublications.lock); if (!CSTRemoteReader_is_empty(cstWriter)) { + ORTEGetMaxSizeParam gms; + csChange=(CSChange*)MALLOC(sizeof(CSChange)); CSChangeAttributes_init_head(csChange); csChange->guid=cstWriter->guid; csChange->alive=ORTE_FALSE; - csChange->cdrStream.length=RTPS_HEADER_LENGTH+12+ //HEADER+INFO_TS+ISSUE - +20+cstWriter->typeRegister->getMaxSize; - csChange->cdrStream.buffer=(uint8_t*)MALLOC(csChange->cdrStream.length); - csChange->cdrStream.bufferPtr=csChange->cdrStream.buffer+RTPS_HEADER_LENGTH+12+20; + CDR_codec_init_static(&csChange->cdrCodec); + csChange->cdrCodec.data_endian = FLAG_ENDIANNESS; + + if (psp) { + csChange->cdrCodec.data_endian = psp->data_endian; + cstWriter->objectEntryOID->instance=psp->instance; + } + + /* determine maximal size */ + gms.host_endian=csChange->cdrCodec.host_endian; + gms.data_endian=csChange->cdrCodec.data_endian; + gms.data=cstWriter->objectEntryOID->instance; + gms.max_size=cstWriter->typeRegister->maxSize; + gms.recv_size=-1; + gms.csize=0; + if (cstWriter->typeRegister->getMaxSize) + max_size=cstWriter->typeRegister->getMaxSize(&gms); + else + max_size=cstWriter->typeRegister->maxSize; + + /* prepare csChange */ + CDR_buffer_init(&csChange->cdrCodec, + RTPS_HEADER_LENGTH+12+20+max_size); //HEADER+INFO_TS+ISSUE + csChange->cdrCodec.wptr_max= + cstWriter->domain->domainProp.wireProp.userBytesPerPacket; + + /* SN for next issue */ SeqNumberInc(snNext,cstWriter->lastSN); - RTPSHeaderCreate(csChange->cdrStream.buffer, - cstWriter->domain->guid.hid,cstWriter->domain->guid.aid); - RTPSInfoTSCreate(csChange->cdrStream.buffer+RTPS_HEADER_LENGTH, - 12,getActualNtpTime()); - RTPSIssueCreateHeader(csChange->cdrStream.buffer+ - RTPS_HEADER_LENGTH+12,20,16+cstWriter->typeRegister->getMaxSize, + + /* prepare data */ + RTPSHeaderCreate(&csChange->cdrCodec, + cstWriter->domain->guid.hid,cstWriter->domain->guid.aid); + RTPSInfoTSCreate(&csChange->cdrCodec, + getActualNtpTime()); + RTPSIssueCreateHeader(&csChange->cdrCodec,16+max_size, OID_UNKNOWN,cstWriter->guid.oid,snNext); + //serialization routine if (cstWriter->typeRegister->serialize) { cstWriter->typeRegister->serialize( - &csChange->cdrStream, + &csChange->cdrCodec, cstWriter->objectEntryOID->instance); } else { //no deserialization -> memcpy - memcpy(csChange->cdrStream.bufferPtr, - cstWriter->objectEntryOID->instance, - cstWriter->typeRegister->getMaxSize); - csChange->cdrStream.bufferPtr+=cstWriter->typeRegister->getMaxSize; + CDR_buffer_puts(&csChange->cdrCodec, + cstWriter->objectEntryOID->instance,max_size); } - csChange->cdrStream.needByteSwap=ORTE_FALSE; - debug(31,10) ("ORTEPublicationCreate: message length:%d,sn(low):%u\n", - cstWriter->typeRegister->getMaxSize,snNext.low); + + debug(31,10) ("ORTEPublicationCreate: message length:%d, sn(low):%u\n", + max_size,snNext.low); CSTWriterAddCSChange(cstWriter->domain, cstWriter, @@ -317,19 +346,29 @@ ORTEPublicationSendLocked(ORTEPublication *cstWriter) { /*****************************************************************************/ int -ORTEPublicationSend(ORTEPublication *cstWriter) { +ORTEPublicationSendEx(ORTEPublication *cstWriter, + ORTEPublicationSendParam *psp) { int r; if (!cstWriter) return ORTE_BAD_HANDLE; //prepare sending queue - if ((r=ORTEPublicationPrepareQueue(cstWriter))<0) return r; + r=ORTEPublicationPrepareQueue(cstWriter); + if (r<0) + return r; //send pthread_rwlock_wrlock(&cstWriter->domain->objectEntry.objRootLock); pthread_rwlock_wrlock(&cstWriter->domain->objectEntry.htimRootLock); pthread_rwlock_wrlock(&cstWriter->lock); - r=ORTEPublicationSendLocked(cstWriter); + r=ORTEPublicationSendLocked(cstWriter,psp); pthread_rwlock_unlock(&cstWriter->lock); pthread_rwlock_unlock(&cstWriter->domain->objectEntry.htimRootLock); pthread_rwlock_unlock(&cstWriter->domain->objectEntry.objRootLock); return r; } + +/*****************************************************************************/ +inline int +ORTEPublicationSend(ORTEPublication *cstWriter) { + return ORTEPublicationSendEx(cstWriter,NULL); +} + diff --git a/orte/liborte/ORTEPublicationTimer.c b/orte/liborte/ORTEPublicationTimer.c index b135f19..4395ca4 100644 --- a/orte/liborte/ORTEPublicationTimer.c +++ b/orte/liborte/ORTEPublicationTimer.c @@ -38,7 +38,7 @@ PublicationCallBackTimer(ORTEDomain *d,void *vcstWriter) { cstWriter->objectEntryOID->callBackParam); CSTWriterTryDestroyBestEffortIssue(cstWriter); if (cstWriter->csChangesCountersendQueueSize) { - ORTEPublicationSendLocked(cstWriter); + ORTEPublicationSendLocked(cstWriter,NULL); } eventAdd(d, cstWriter->objectEntryOID->objectEntryAID, diff --git a/orte/liborte/ORTESubscription.c b/orte/liborte/ORTESubscription.c index 09b21a2..e211ab3 100644 --- a/orte/liborte/ORTESubscription.c +++ b/orte/liborte/ORTESubscription.c @@ -30,7 +30,7 @@ ORTESubscription * ORTESubscriptionCreate(ORTEDomain *d,SubscriptionMode mode,SubscriptionType sType, const char *topic,const char *typeName,void *instance,NtpTime *deadline, NtpTime *minimumSeparation,ORTERecvCallBack recvCallBack, - void *recvCallBackParam) { + void *recvCallBackParam, IPAddress multicastIPAddress) { GUID_RTPS guid; CSTReader *cstReader; CSTReaderParams cstReaderParams; @@ -63,6 +63,7 @@ ORTESubscriptionCreate(ORTEDomain *d,SubscriptionMode mode,SubscriptionType sTyp strcpy(sp->typeName,typeName); sp->deadline=*deadline; sp->minimumSeparation=*minimumSeparation; + sp->multicast=multicastIPAddress; switch (sType) { case BEST_EFFORTS: sp->reliabilityRequested=PID_VALUE_RELIABILITY_BEST_EFFORTS; @@ -94,13 +95,14 @@ ORTESubscriptionCreate(ORTEDomain *d,SubscriptionMode mode,SubscriptionType sTyp parameterUpdateCSChangeFromSubscription(csChange,sp); csChange->guid=guid; csChange->alive=ORTE_TRUE; - csChange->cdrStream.buffer=NULL; + CDR_codec_init_static(&csChange->cdrCodec); CSTWriterAddCSChange(d,&d->writerSubscriptions,csChange); pthread_rwlock_unlock(&d->writerSubscriptions.lock); pthread_rwlock_unlock(&d->subscriptions.lock); pthread_rwlock_unlock(&d->typeEntry.lock); pthread_rwlock_unlock(&d->objectEntry.objRootLock); pthread_rwlock_unlock(&d->objectEntry.htimRootLock); + return cstReader; } @@ -115,7 +117,7 @@ ORTESubscriptionDestroyLocked(ORTESubscription *cstReader) { CSChangeAttributes_init_head(csChange); csChange->guid=cstReader->guid; csChange->alive=ORTE_FALSE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(cstReader->domain, &cstReader->domain->writerSubscriptions, csChange); @@ -166,7 +168,7 @@ ORTESubscriptionPropertiesSet(ORTESubscription *cstReader,ORTESubsProp *sp) { parameterUpdateCSChangeFromSubscription(csChange,sp); csChange->guid=cstReader->guid; csChange->alive=ORTE_TRUE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(cstReader->domain, &cstReader->domain->writerSubscriptions,csChange); pthread_rwlock_unlock(&cstReader->lock); diff --git a/orte/liborte/ORTEThreadUtils.c b/orte/liborte/ORTEThreadUtils.c index 323e36e..235fa50 100644 --- a/orte/liborte/ORTEThreadUtils.c +++ b/orte/liborte/ORTEThreadUtils.c @@ -40,7 +40,7 @@ ORTEDomainWakeUpReceivingThread(ORTEDomain *d,sock_t *sock,uint16_t port) { } } else { des.sin_addr.s_addr = inet_addr("127.0.0.1"); //local IPAddress - sock_sendto(sock,NULL,0,&des,sizeof(des)); + sock_sendto(sock,&i,1,&des,sizeof(des)); debug(25,2) ("Sent wake up signal to: %s.%d\n", IPAddressToString(ntohl(des.sin_addr.s_addr),sIPAddress), port); diff --git a/orte/liborte/ORTETypeRegister.c b/orte/liborte/ORTETypeRegister.c index d62a087..f1397c7 100644 --- a/orte/liborte/ORTETypeRegister.c +++ b/orte/liborte/ORTETypeRegister.c @@ -30,7 +30,9 @@ Boolean ORTETypeRegisterFind(ORTEDomain *d,const char *typeName) { Boolean result=ORTE_FALSE; - if (!d) return ORTE_FALSE; //bat handle + if (!d) + return ORTE_FALSE; //bat handle + pthread_rwlock_rdlock(&d->typeEntry.lock); if (ORTEType_find(&d->typeEntry,&typeName)) result=ORTE_TRUE; @@ -41,22 +43,34 @@ ORTETypeRegisterFind(ORTEDomain *d,const char *typeName) { /*****************************************************************************/ int ORTETypeRegisterAdd(ORTEDomain *d,const char *typeName,ORTETypeSerialize ts, - ORTETypeDeserialize ds,unsigned int gms) { + ORTETypeDeserialize ds,ORTETypeGetMaxSize gms,unsigned int ms) { TypeNode *tn; - if (!d) return ORTE_BAD_HANDLE; //bat handle - if (gms>d->domainProp.wireProp.userMaxSerDeserSize) return -2; + if (!d) + return ORTE_BAD_HANDLE; //bat handle + + if (gms) { + if (d->domainProp.wireProp.userBytesPerPackettypeEntry.lock); tn=ORTEType_find(&d->typeEntry,&typeName); if (!tn) { tn=(TypeNode*)MALLOC(sizeof(TypeNode)); - tn->typeRegister.typeName=strdup(typeName); + tn->typeRegister.typeName=(char*)MALLOC(strlen(typeName)+1); + if (tn->typeRegister.typeName) { + memcpy((void*)tn->typeRegister.typeName, + typeName, + strlen(typeName) + 1); + } ORTEType_insert(&d->typeEntry,tn); debug(26,3) ("ORTETypeRegisterAdd: created\n"); } tn->typeRegister.serialize=ts; tn->typeRegister.deserialize=ds; tn->typeRegister.getMaxSize=gms; + tn->typeRegister.maxSize=ms; pthread_rwlock_unlock(&d->typeEntry.lock); debug(26,3) ("ORTETypeRegisterAdd: registered type:%s\n",typeName); return ORTE_OK; @@ -67,10 +81,12 @@ int ORTETypeRegisterDestroyAll(ORTEDomain *d) { TypeNode *tn; - if (!d) return ORTE_BAD_HANDLE; //bat handle + if (!d) + return ORTE_BAD_HANDLE; //bat handle + pthread_rwlock_wrlock(&d->typeEntry.lock); while((tn=ORTEType_cut_first(&d->typeEntry))) { - free((char*)tn->typeRegister.typeName); + FREE((char*)tn->typeRegister.typeName); FREE(tn); } pthread_rwlock_unlock(&d->typeEntry.lock); diff --git a/orte/liborte/ORTEVerbosity.c b/orte/liborte/ORTEVerbosity.c index 4027548..2be7eec 100644 --- a/orte/liborte/ORTEVerbosity.c +++ b/orte/liborte/ORTEVerbosity.c @@ -22,13 +22,13 @@ #include "orte_all.h" /*****************************************************************************/ -void +inline void ORTEVerbositySetOptions(const char *options) { debug_options(options); } /*****************************************************************************/ -void +inline void ORTEVerbositySetLogFile(const char *logfile) { debug_open_log(logfile); } diff --git a/orte/liborte/RTPSAck.c b/orte/liborte/RTPSAck.c index 5422a84..8682733 100644 --- a/orte/liborte/RTPSAck.c +++ b/orte/liborte/RTPSAck.c @@ -22,49 +22,94 @@ #include "orte_all.h" /**********************************************************************************/ -int32_t -RTPSAckCreate(uint8_t *rtps_msg,uint32_t max_msg_len, +int +RTPSAckCreate(CDR_Codec *cdrCodec, SequenceNumber *seqNumber, - ObjectId roid,ObjectId woid,Boolean f_bit) { - SequenceNumber sn_tmp; - - if (max_msg_len<28) return -1; - rtps_msg[0]=(uint8_t)ACK; - rtps_msg[1]=ORTE_MY_MBO; - if (f_bit) rtps_msg[1]|=2; - *((ParameterLength*)(rtps_msg+2))=24; - conv_u32(&roid,0); - *((ObjectId*)(rtps_msg+4))=roid; - conv_u32(&woid,0); - *((ObjectId*)(rtps_msg+8))=woid; + ObjectId roid,ObjectId woid,Boolean f_bit) +{ + SequenceNumber sn_tmp; + CDR_Endianness data_endian; + CORBA_octet flags; + + if (cdrCodec->buf_lenwptr+28) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,ACK); + + /* flags */ + flags=cdrCodec->data_endian; + if (f_bit) flags|=2; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,24); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_put_ulong(cdrCodec,roid); + + /* writerObjectId */ + CDR_put_ulong(cdrCodec,woid); + + cdrCodec->data_endian=data_endian; + SeqNumberInc(sn_tmp,*seqNumber); - *((SequenceNumber*)(rtps_msg+12))=sn_tmp; - *((uint32_t*)(rtps_msg+20))=32; - *((uint32_t*)(rtps_msg+24))=0; + + /* SeqNumber */ + CDR_put_ulong(cdrCodec,sn_tmp.high); + CDR_put_ulong(cdrCodec,sn_tmp.low); + + /* bitmap - bits */ + CDR_put_ulong(cdrCodec,32); + CDR_put_ulong(cdrCodec,0); + return 28; } /**********************************************************************************/ void -RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress) { +RTPSAck(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress) { GUID_RTPS readerGUID; CSTWriter *cstWriter=NULL; CSTRemoteReader *cstRemoteReader; CSChangeForReader *csChangeForReader; StateMachineSend stateMachineSendNew; - ObjectId roid,woid; + ObjectId roid,woid; SequenceNumber sn; - char e_bit,f_bit; char queue=1; + CDR_Endianness data_endian; + CORBA_octet flags; + char f_bit; + + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + f_bit=flags & 2; + + /* move reading possition to begin of submessage */ + cdrCodec->rptr+=2; + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_get_ulong(cdrCodec,&roid); + + /* writerObjectId */ + CDR_get_ulong(cdrCodec,&woid); + + cdrCodec->data_endian=data_endian; + + /* SeqNumber */ + CDR_get_ulong(cdrCodec,&sn.high); + CDR_get_ulong(cdrCodec,&sn.low); - e_bit=rtps_msg[1] & 0x01; - f_bit=(rtps_msg[1] & 0x02)>>1; - roid=*((ObjectId*)(rtps_msg+4)); /* readerObjectId */ - conv_u32(&roid,0); - woid=*((ObjectId*)(rtps_msg+8)); /* writerObjectId */ - conv_u32(&woid,0); - sn=*((SequenceNumber*)(rtps_msg+12)); /* Bitmap - SN */ - conv_sn(&sn,e_bit); readerGUID.hid=mi->sourceHostId; readerGUID.aid=mi->sourceAppId; readerGUID.oid=roid; @@ -73,7 +118,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA f_bit ? 'F':'f', woid,mi->sourceHostId,mi->sourceAppId); - //Manager + /* Manager */ if ((d->guid.aid & 0x03)==MANAGER) { switch (woid) { case OID_WRITE_APPSELF: @@ -82,6 +127,10 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA readerGUID.hid=senderIPAddress; readerGUID.aid=AID_UNKNOWN; readerGUID.oid=roid; + eventDetach(d, + cstWriter->objectEntryOID->objectEntryAID, + &cstWriter->registrationTimer, + 0); //common timer break; case OID_WRITE_MGR: pthread_rwlock_wrlock(&d->writerManagers.lock); @@ -93,13 +142,18 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA break; } } - //Application + + /* Application */ if ((d->guid.aid & 0x03)==MANAGEDAPPLICATION) { switch (roid) { case OID_READ_APP: case OID_READ_APPSELF: pthread_rwlock_wrlock(&d->writerApplicationSelf.lock); cstWriter=&d->writerApplicationSelf; + eventDetach(d, + cstWriter->objectEntryOID->objectEntryAID, + &cstWriter->registrationTimer, + 0); //common timer break; case OID_READ_PUBL: pthread_rwlock_wrlock(&d->writerPublications.lock); @@ -121,6 +175,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA break; } } + if (!cstWriter) { if ((woid & 0x07) == OID_PUBLICATION) pthread_rwlock_unlock(&d->publications.lock); @@ -133,6 +188,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA pthread_rwlock_unlock(&d->publications.lock); return; } + stateMachineSendNew=NOTHNIGTOSEND; csChangeForReader=CSChangeForReader_first(cstRemoteReader); while(csChangeForReader) { @@ -144,7 +200,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA csChangeForReader= CSChangeForReader_next(cstRemoteReader,csChangeForReader); if ((woid & 0x07) == OID_PUBLICATION) { - CSTWriterDestroyCSChangeForReader(cstRemoteReader, + CSTWriterDestroyCSChangeForReader( csChangeForReaderDestroyed,ORTE_TRUE); } } else { @@ -152,22 +208,26 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA CSChangeForReader_next(cstRemoteReader,csChangeForReader); } } else { //NACK - csChangeForReader->commStateChFReader=TOSEND; + if (csChangeForReader->commStateChFReader!=TOSEND) { + csChangeForReader->commStateChFReader=TOSEND; + cstRemoteReader->commStateToSentCounter++; + } stateMachineSendNew=MUSTSENDDATA; csChangeForReader= CSChangeForReader_next(cstRemoteReader,csChangeForReader); } } + if ((cstRemoteReader->commStateSend==NOTHNIGTOSEND) && (stateMachineSendNew==MUSTSENDDATA)) { cstRemoteReader->commStateSend=stateMachineSendNew; eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue); if (queue==1) { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue, //metatraffic timer "CSTWriterSendTimer", @@ -177,7 +237,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA &cstRemoteReader->cstWriter->params.delayResponceTime); } else { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue, //userdata timer "CSTWriterSendStrictTimer", @@ -187,29 +247,31 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA &cstRemoteReader->cstWriter->params.delayResponceTime); } } + if (stateMachineSendNew==NOTHNIGTOSEND) { cstRemoteReader->commStateSend=NOTHNIGTOSEND; if (queue==1) { eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue); } else { eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, queue); } } + if ((!f_bit) && (cstRemoteReader->commStateSend==NOTHNIGTOSEND)) { cstRemoteReader->commStateHB=MUSTSENDHB; eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue); if (queue==1) { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue, //metatraffic timer "CSTWriterSendTimer", @@ -219,7 +281,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA &cstRemoteReader->cstWriter->params.delayResponceTime); } else { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, queue, //userdata timer "CSTWriterSendStrictTimer", @@ -229,6 +291,7 @@ RTPSAck(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA &cstRemoteReader->cstWriter->params.delayResponceTime); } } + pthread_rwlock_unlock(&cstWriter->lock); if ((woid & 0x07) == OID_PUBLICATION) pthread_rwlock_unlock(&d->publications.lock); diff --git a/orte/liborte/RTPSCSTReader.c b/orte/liborte/RTPSCSTReader.c index 752f883..be974bd 100644 --- a/orte/liborte/RTPSCSTReader.c +++ b/orte/liborte/RTPSCSTReader.c @@ -123,7 +123,7 @@ CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *obje cstRemoteWriter->guid.hid=object->objectEntryHID->hid; cstRemoteWriter->guid.aid=object->objectEntryAID->aid; cstRemoteWriter->guid.oid=oid; - cstRemoteWriter->objectEntryOID=object; + cstRemoteWriter->spobject=object; cstRemoteWriter->cstReader=cstReader; cstRemoteWriter->csChangesCounter=0; cstRemoteWriter->ACKRetriesCounter=0; @@ -138,7 +138,7 @@ CSTReaderAddRemoteWriter(ORTEDomain *d,CSTReader *cstReader,ObjectEntryOID *obje //add event for repeatActiveTime if (NtpTimeCmp(cstReader->params.repeatActiveQueryTime,iNtpTime)!=0) { eventAdd(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1, //metatraffic timer "CSTReaderQueryTimer", @@ -176,7 +176,7 @@ CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter) { cstRemoteWriter->guid.oid); if ((cstRemoteWriter->cstReader->guid.oid & 0x07)==OID_SUBSCRIPTION) { ORTEPublProp *pp; - pp=(ORTEPublProp*)cstRemoteWriter->objectEntryOID->attributes; + pp=(ORTEPublProp*)cstRemoteWriter->spobject->attributes; if ((pp->reliabilityOffered & PID_VALUE_RELIABILITY_STRICT)!=0) cstRemoteWriter->cstReader->strictReliableCounter++; else { @@ -191,11 +191,11 @@ CSTReaderDestroyRemoteWriter(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter) { csChangeFromWriter,ORTE_FALSE); } eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1); //metatraffic timer eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1); //metatraffic timer CSTRemoteWriter_delete(cstRemoteWriter->cstReader,cstRemoteWriter); @@ -225,8 +225,8 @@ CSTReaderDestroyCSChangeFromWriter(CSTRemoteWriter *cstRemoteWriter, CSTReaderCSChange_delete(cstRemoteWriter->cstReader, csChangeFromWriter->csChange); if (!keepCSChange) { - if (csChangeFromWriter->csChange->cdrStream.buffer) - FREE(csChangeFromWriter->csChange->cdrStream.buffer); + if (csChangeFromWriter->csChange->cdrCodec.buffer) + FREE(csChangeFromWriter->csChange->cdrCodec.buffer); parameterDelete(csChangeFromWriter->csChange); FREE(csChangeFromWriter->csChange); } @@ -258,15 +258,15 @@ CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter) { cstRemoteWriter->commStateACK=PULLING; cstRemoteWriter->ACKRetriesCounter=0; eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1); //metatraffic timer eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1); //metatraffic timer eventAdd(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1, //metatraffic timer "CSTReaderResponceTimer", @@ -280,17 +280,17 @@ CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter) { cstRemoteWriter->commStateACK=WAITING; cstRemoteWriter->ACKRetriesCounter=0; eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1); //metatraffic timer if (NtpTimeCmp(cstRemoteWriter->cstReader->params.repeatActiveQueryTime, iNtpTime)!=0) { eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1); //metatraffic timer eventAdd(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1, //metatraffic timer "CSTReaderQueryTimer", @@ -306,15 +306,15 @@ CSTReaderSetupState(CSTRemoteWriter *cstRemoteWriter) { cstRemoteWriter->commStateACK=PULLING; cstRemoteWriter->ACKRetriesCounter=0; eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, 1); //metatraffic timer eventDetach(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1); //metatraffic timer eventAdd(cstRemoteWriter->cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, 1, //metatraffic timer "CSTReaderResponceTimer", diff --git a/orte/liborte/RTPSCSTReaderProc.c b/orte/liborte/RTPSCSTReaderProc.c index abb3760..7cd8ae4 100644 --- a/orte/liborte/RTPSCSTReaderProc.c +++ b/orte/liborte/RTPSCSTReaderProc.c @@ -64,7 +64,7 @@ CSTReaderProcCSChangesManager(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter, //update parameters of object parameterUpdateApplication(csChange,(AppParams*)objectEntryOID->attributes); //changes can make only local Apps - if (cstRemoteWriter->objectEntryOID->appMOM) { + if (cstRemoteWriter->spobject->appMOM) { CSTReaderDestroyCSChangeFromWriter(cstRemoteWriter, csChangeFromWriter, ORTE_TRUE); @@ -165,10 +165,11 @@ CSTReaderProcCSChanges(ORTEDomain *d,CSTRemoteWriter *cstRemoteWriter) { void CSTReaderNewData(CSTRemoteWriter *cstRemoteWriter, CSChangeFromWriter *csChangeFromWriter) { + CSChange *csChange=csChangeFromWriter->csChange; ORTERecvInfo info; ORTESubsProp *sp; ObjectEntryOID *objectEntryOID; - unsigned int length; + int max_size; if (cstRemoteWriter==NULL) return; objectEntryOID=cstRemoteWriter->cstReader->objectEntryOID; @@ -177,24 +178,36 @@ CSTReaderNewData(CSTRemoteWriter *cstRemoteWriter, //deserialization routine if (cstRemoteWriter->cstReader->typeRegister->deserialize) { cstRemoteWriter->cstReader->typeRegister->deserialize( - &csChangeFromWriter->csChange->cdrStream, + &csChange->cdrCodec, objectEntryOID->instance); } else { - length=csChangeFromWriter->csChange->cdrStream.length; - if (cstRemoteWriter->cstReader->typeRegister->getMaxSizecstReader->typeRegister->getMaxSize; //no deserialization -> memcpy + ORTEGetMaxSizeParam gms; + + /* determine maximal size */ + gms.host_endian=csChange->cdrCodec.host_endian; + gms.data_endian=csChange->cdrCodec.data_endian; + gms.data=csChange->cdrCodec.buffer; + gms.max_size=cstRemoteWriter->cstReader->typeRegister->maxSize; + gms.recv_size=csChange->cdrCodec.buf_len; + gms.csize=0; + if (cstRemoteWriter->cstReader->typeRegister->getMaxSize) + max_size=cstRemoteWriter->cstReader->typeRegister->getMaxSize(&gms); + else + max_size=cstRemoteWriter->cstReader->typeRegister->maxSize; + if (max_size>csChange->cdrCodec.buf_len) + max_size=csChange->cdrCodec.buf_len; memcpy(objectEntryOID->instance, - csChangeFromWriter->csChange->cdrStream.buffer, - length); + csChange->cdrCodec.buffer, + max_size); } info.status=NEW_DATA; info.topic=sp->topic; info.type=sp->typeName; - info.senderGUID=csChangeFromWriter->csChange->guid; - info.localTimeReceived=csChangeFromWriter->csChange->localTimeReceived; - info.remoteTimePublished=csChangeFromWriter->csChange->remoteTimePublished; - info.sn=csChangeFromWriter->csChange->sn; + info.senderGUID=csChange->guid; + info.localTimeReceived=csChange->localTimeReceived; + info.remoteTimePublished=csChange->remoteTimePublished; + info.sn=csChange->sn; objectEntryOID->recvCallBack(&info, objectEntryOID->instance, objectEntryOID->callBackParam); @@ -244,8 +257,6 @@ CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled) if (SeqNumberCmp(csChangeFromWriter->csChange->sn, cstRemoteWriter->firstSN)>=0) { SeqNumberInc(snNext,cstRemoteWriter->sn); - debug(54,10) ("CSTReaderProcChangesIssue: processing sn:%u,Change sn:%u\n",snNext.low, - csChangeFromWriter->csChange->sn.low); if ((SeqNumberCmp(csChangeFromWriter->csChange->sn,snNext)==0) && (csChangeFromWriter->commStateChFWriter==RECEIVED)) { if (SeqNumberCmp(csChangeFromWriter->csChange->gapSN,noneSN)==0) { @@ -262,6 +273,7 @@ CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled) cstRemoteWriter->sn, csChangeFromWriter->csChange->gapSN); } + CSTReaderDestroyCSChange(cstRemoteWriter, &snNext,ORTE_FALSE); } else @@ -282,6 +294,9 @@ CSTReaderProcCSChangesIssue(CSTRemoteWriter *cstRemoteWriter,Boolean pullCalled) while((csChangeFromWriter=CSChangeFromWriter_first(cstRemoteWriter))) { //NewData CSTReaderNewData(cstRemoteWriter,csChangeFromWriter); + + cstRemoteWriter->sn=csChangeFromWriter->csChange->sn; + CSTReaderDestroyCSChangeFromWriter( cstRemoteWriter, csChangeFromWriter, diff --git a/orte/liborte/RTPSCSTReaderTimer.c b/orte/liborte/RTPSCSTReaderTimer.c index 01e8039..2a607c2 100644 --- a/orte/liborte/RTPSCSTReaderTimer.c +++ b/orte/liborte/RTPSCSTReaderTimer.c @@ -30,60 +30,53 @@ CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter) { if ((cstRemoteWriter->guid.oid & 0x07) == OID_PUBLICATION) queue=2; - if (!d->mbSend.containsInfoReply) { + if (!d->taskSend.mb.containsInfoReply) { if (queue==1) { len=RTPSInfoREPLYCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, IPADDRESS_INVALID, ((AppParams*)cstRemoteWriter->cstReader->objectEntryOID->attributes)->metatrafficUnicastPort); } else { len=RTPSInfoREPLYCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, IPADDRESS_INVALID, ((AppParams*)cstRemoteWriter->cstReader->objectEntryOID->attributes)->userdataUnicastPort); } if (len<0) { - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.containsInfoReply=ORTE_TRUE; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; + d->taskSend.mb.containsInfoReply=ORTE_TRUE; debug(55,3) ("sent: RTPS_InfoREPLY(0x%x) to 0x%x-0x%x\n", cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.hid, cstRemoteWriter->guid.aid); } len=RTPSAckCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, &cstRemoteWriter->sn, cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.oid, ORTE_TRUE); if (len<0) { //not enought space in sending buffer - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; debug(55,3) ("sent: RTPS_ACKF(0x%x) to 0x%x-0x%x\n", cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.hid, cstRemoteWriter->guid.aid); if (cstRemoteWriter->commStateACK==PULLING) { eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, queue); if (cstRemoteWriter->ACKRetriesCounter< cstRemoteWriter->cstReader->params.ACKMaxRetries) { cstRemoteWriter->ACKRetriesCounter++; eventAdd(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, queue, "CSTReaderResponceTimer", @@ -99,13 +92,13 @@ CSTReaderResponceTimer(ORTEDomain *d,void *vcstRemoteWriter) { if (cstRemoteWriter->commStateACK==ACKPENDING) { cstRemoteWriter->commStateACK=WAITING; eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, queue); if (NtpTimeCmp(cstRemoteWriter->cstReader-> params.repeatActiveQueryTime,iNtpTime)!=0) { eventAdd(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, queue, "CSTReaderQueryTimer", @@ -127,57 +120,50 @@ CSTReaderQueryTimer(ORTEDomain *d,void *vcstRemoteWriter) { if ((cstRemoteWriter->guid.oid & 0x07) == OID_PUBLICATION) queue=2; - if (!d->mbSend.containsInfoReply) { + if (!d->taskSend.mb.containsInfoReply) { if (queue==1) { len=RTPSInfoREPLYCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, IPADDRESS_INVALID, ((AppParams*)cstRemoteWriter->cstReader->objectEntryOID->attributes)->metatrafficUnicastPort); } else { len=RTPSInfoREPLYCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, IPADDRESS_INVALID, ((AppParams*)cstRemoteWriter->cstReader->objectEntryOID->attributes)->userdataUnicastPort); } if (len<0) { - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.containsInfoReply=ORTE_TRUE; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; + d->taskSend.mb.containsInfoReply=ORTE_TRUE; debug(55,3) ("sent: RTPS_InfoREPLY(0x%x) to 0x%x-0x%x\n", cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.hid, cstRemoteWriter->guid.aid); } len=RTPSAckCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + &d->taskSend.mb.cdrCodec, &cstRemoteWriter->sn, cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.oid, ORTE_FALSE); if (len<0) { - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } debug(55,3) ("sent: RTPS_ACKf(0x%x) to 0x%x-0x%x\n", cstRemoteWriter->cstReader->guid.oid, cstRemoteWriter->guid.hid, cstRemoteWriter->guid.aid); - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, queue); if (NtpTimeCmp(cstRemoteWriter->cstReader-> params.repeatActiveQueryTime,iNtpTime)!=0) { eventAdd(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, queue, "CSTReaderQueryTimer", @@ -250,7 +236,7 @@ CSTReaderPersistenceTimer(ORTEDomain *d,void *vcstReader) { sp=(ORTESubsProp*)cstReader->objectEntryOID->attributes; strength=0; gavl_cust_for_each(CSTRemoteWriter,cstReader,cstRemoteWriter) { - pp=(ORTEPublProp*)cstRemoteWriter->objectEntryOID->attributes; + pp=(ORTEPublProp*)cstRemoteWriter->spobject->attributes; csChangeFromWriter=CSChangeFromWriter_last(cstRemoteWriter); if ((pp->strength>strength) && (csChangeFromWriter!=NULL)){ NtpTime persistence,persistenceExpired,actTime; diff --git a/orte/liborte/RTPSCSTWriter.c b/orte/liborte/RTPSCSTWriter.c index eaa1d97..16f189b 100644 --- a/orte/liborte/RTPSCSTWriter.c +++ b/orte/liborte/RTPSCSTWriter.c @@ -43,10 +43,13 @@ CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object, cstWriter->guid.oid=oid; cstWriter->objectEntryOID=object; memcpy(&cstWriter->params,params,sizeof(CSTWriterParams)); + cstWriter->registrationCounter=0; + ul_htim_queue_init_detached(&cstWriter->registrationTimer.htim); cstWriter->strictReliableCounter=0; cstWriter->bestEffortsCounter=0; cstWriter->csChangesCounter=0; cstWriter->cstRemoteReaderCounter=0; + cstWriter->registrationCounter=cstWriter->params.registrationRetries; SEQUENCE_NUMBER_NONE(cstWriter->firstSN); SEQUENCE_NUMBER_NONE(cstWriter->lastSN); CSTWriterCSChange_init_head(cstWriter); @@ -64,10 +67,12 @@ CSTWriterInit(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object, if (NtpTimeCmp(cstWriter->params.refreshPeriod,iNtpTime)!=0) { CSTWriterRefreshTimer(d,(void*)cstWriter); } + //add event for registration + if (NtpTimeCmp(cstWriter->params.registrationPeriod,zNtpTime)!=0) { + CSTWriterRegistrationTimer(d,(void*)cstWriter); + } debug(51,4) ("CSTWriterInit: 0x%x-0x%x-0x%x\n", - cstWriter->guid.hid, - cstWriter->guid.aid, - cstWriter->guid.oid); + GUID_PRINTF(cstWriter->guid)); debug(51,10) ("CSTWriterInit: finished\n"); } @@ -80,9 +85,7 @@ CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter) { debug(51,10) ("CSTWriterDelete: start\n"); debug(51,4) ("CSTWriterDelete: 0x%x-0x%x-0x%x\n", - cstWriter->guid.hid, - cstWriter->guid.aid, - cstWriter->guid.oid); + GUID_PRINTF(cstWriter->guid)); //Destroy all cstRemoteReader connected on cstWriter while((cstRemoteReader=CSTRemoteReader_first(cstWriter))) { CSTWriterDestroyRemoteReader(d,cstRemoteReader); @@ -96,6 +99,10 @@ CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter) { cstWriter->objectEntryOID->objectEntryAID, &cstWriter->refreshPeriodTimer, 0); + eventDetach(d, + cstWriter->objectEntryOID->objectEntryAID, + &cstWriter->registrationTimer, + 0); if ((cstWriter->guid.oid & 0x07)==OID_PUBLICATION) { pthread_cond_destroy(&cstWriter->condCSChangeDestroyed); pthread_mutex_destroy(&cstWriter->mutexCSChangeDestroyed); @@ -105,30 +112,40 @@ CSTWriterDelete(ORTEDomain *d,CSTWriter *cstWriter) { } /*****************************************************************************/ -void -CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *object, - ObjectId oid) { +CSTRemoteReader * +CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *pobject, + ObjectId oid,ObjectEntryOID *sobject) { CSTRemoteReader *cstRemoteReader; CSChangeForReader *csChangeForReader; CSChange *csChange=NULL; cstWriter->cstRemoteReaderCounter++; cstRemoteReader=(CSTRemoteReader*)MALLOC(sizeof(CSTRemoteReader)); - cstRemoteReader->guid.hid=object->objectEntryHID->hid; - cstRemoteReader->guid.aid=object->objectEntryAID->aid; + cstRemoteReader->guid.hid=pobject->guid.hid; + cstRemoteReader->guid.aid=pobject->guid.aid; cstRemoteReader->guid.oid=oid; - cstRemoteReader->objectEntryOID=object; + cstRemoteReader->sobject=sobject; + cstRemoteReader->pobject=pobject; cstRemoteReader->cstWriter=cstWriter; CSChangeForReader_init_root_field(cstRemoteReader); cstRemoteReader->commStateHB=MAYSENDHB; cstRemoteReader->commStateSend=NOTHNIGTOSEND; cstRemoteReader->HBRetriesCounter=0; cstRemoteReader->csChangesCounter=0; + cstRemoteReader->commStateToSentCounter=0; NTPTIME_ZERO(cstRemoteReader->lastSentIssueTime); ul_htim_queue_init_detached(&cstRemoteReader->delayResponceTimer.htim); ul_htim_queue_init_detached(&cstRemoteReader->repeatAnnounceTimer.htim); //insert remote reader CSTRemoteReader_insert(cstWriter,cstRemoteReader); + //multicast case + if (cstRemoteReader->sobject->multicastPort) { + debug(51,9) ("cstRemoteReader 0x%x-0x%x-0x%x added to multicast list on object 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->guid), + GUID_PRINTF(cstRemoteReader->sobject->guid)); + ObjectEntryMulticast_insert(cstRemoteReader->sobject, + cstRemoteReader); + } //copy all csChanges (not for publication) if ((cstWriter->guid.oid & 0x07)!=OID_PUBLICATION) { ul_list_for_each(CSTWriterCSChange,cstWriter,csChange) { @@ -136,14 +153,17 @@ CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *obje cstRemoteReader->csChangesCounter++; csChangeForReader=(CSChangeForReader*)MALLOC(sizeof(CSChangeForReader)); csChangeForReader->commStateChFReader=TOSEND; + cstRemoteReader->commStateToSentCounter++; csChangeForReader->csChange=csChange; + csChangeForReader->cstRemoteReader=cstRemoteReader; ul_htim_queue_init_detached(&csChangeForReader->waitWhileDataUnderwayTimer.htim); + CSChangeParticipant_insert(csChange,csChangeForReader); CSChangeForReader_insert(cstRemoteReader,csChangeForReader); cstRemoteReader->commStateSend=MUSTSENDDATA; } if (cstRemoteReader->commStateSend==MUSTSENDDATA) { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 1, "CSTWriterSendTimer", @@ -154,7 +174,7 @@ CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *obje } } else { //Publication - ORTESubsProp *sp=(ORTESubsProp*)object->attributes; + ORTESubsProp *sp=(ORTESubsProp*)pobject->attributes; if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_STRICT)!=0) cstWriter->strictReliableCounter++; else { @@ -163,9 +183,8 @@ CSTWriterAddRemoteReader(ORTEDomain *d,CSTWriter *cstWriter,ObjectEntryOID *obje } } debug(51,4) ("CSTWriterAddRemoteReader: 0x%x-0x%x-0x%x\n", - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid, - cstRemoteReader->guid.oid); + GUID_PRINTF(cstRemoteReader->guid)); + return cstRemoteReader; } /*****************************************************************************/ @@ -176,12 +195,10 @@ CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader) { if (!cstRemoteReader) return; cstRemoteReader->cstWriter->cstRemoteReaderCounter--; debug(51,4) ("CSTWriterDestroyRemoteReader: 0x%x-0x%x-0x%x\n", - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid, - cstRemoteReader->guid.oid); + GUID_PRINTF(cstRemoteReader->guid)); if ((cstRemoteReader->cstWriter->guid.oid & 0x07)==OID_PUBLICATION) { ORTESubsProp *sp; - sp=(ORTESubsProp*)cstRemoteReader->objectEntryOID->attributes; + sp=(ORTESubsProp*)cstRemoteReader->pobject->attributes; if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_STRICT)!=0) cstRemoteReader->cstWriter->strictReliableCounter--; else { @@ -190,25 +207,40 @@ CSTWriterDestroyRemoteReader(ORTEDomain *d,CSTRemoteReader *cstRemoteReader) { } } while((csChangeForReader=CSChangeForReader_first(cstRemoteReader))) { - CSTWriterDestroyCSChangeForReader(cstRemoteReader, + CSTWriterDestroyCSChangeForReader( csChangeForReader,ORTE_TRUE); } eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 1); //metatraffic timer eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2); //userdata timer eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 1); //metatraffic timer eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 2); //userdata timer + //multicast case + if (cstRemoteReader->sobject->multicastPort) { + ObjectEntryOID *object; + + object=cstRemoteReader->sobject; + + ObjectEntryMulticast_delete(object,cstRemoteReader); + debug(51,9) ("cstRemoteReader 0x%x-0x%x-0x%x deleted from multicast list on object 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->guid), + GUID_PRINTF(object->guid)); + + if (ObjectEntryMulticast_is_empty(object)) { + objectEntryDelete(d,object,ORTE_TRUE); + } + } CSTRemoteReader_delete(cstRemoteReader->cstWriter,cstRemoteReader); FREE(cstRemoteReader); } @@ -257,7 +289,7 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { CSChange *csChangeFSN; debug(51,5) ("CSTWriterAddCSChange: cstWriter:0x%x-0x%x-0x%x\n", - cstWriter->guid.hid,cstWriter->guid.aid,cstWriter->guid.oid); + GUID_PRINTF(cstWriter->guid)); cstWriter->csChangesCounter++; //look for old cschange if ((cstWriter->guid.oid & 0x07)!=OID_PUBLICATION) @@ -269,6 +301,7 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { csChange->remoteReaderCount=cstWriter->cstRemoteReaderCounter; csChange->remoteReaderBest=0; csChange->remoteReaderStrict=0; + CSChangeParticipant_init_head(csChange); CSTWriterCSChange_insert(cstWriter,csChange); debug(51,5) ("CSTWriterAddCSChange: sn:0x%x\n", csChange->sn.low); @@ -283,10 +316,15 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { //insert new cschange for each reader gavl_cust_for_each(CSTRemoteReader,cstWriter,cstRemoteReader) { //csChangeForReader + debug(51,10) ("CSTWriterAddCSChange: sending to cstRemoteReader 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->guid)); csChangeForReader=(CSChangeForReader*)MALLOC(sizeof(CSChangeForReader)); csChangeForReader->commStateChFReader=TOSEND; + cstRemoteReader->commStateToSentCounter++; csChangeForReader->csChange=csChange; + csChangeForReader->cstRemoteReader=cstRemoteReader; ul_htim_queue_init_detached(&csChangeForReader->waitWhileDataUnderwayTimer.htim); + CSChangeParticipant_insert(csChange,csChangeForReader); CSChangeForReader_insert(cstRemoteReader,csChangeForReader); cstRemoteReader->csChangesCounter++; cstRemoteReader->HBRetriesCounter=0; @@ -294,11 +332,11 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { cstRemoteReader->commStateSend=MUSTSENDDATA; if ((cstWriter->guid.oid & 0x07)!=OID_PUBLICATION) { eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 1); eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 1, "CSTWriterSendTimer", @@ -307,17 +345,17 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { cstRemoteReader, NULL); } else { - ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->objectEntryOID->attributes; + ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->pobject->attributes; if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_STRICT)!=0) { //Strict reliable subscription csChange->remoteReaderStrict++; eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2); eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2, "CSTWriterSendStrictTimer", @@ -328,8 +366,9 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { } else { if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_BEST_EFFORTS)!=0) { //best efforts subscription - NtpTime nextIssueTime,nextIssueDelay,actTime=getActualNtpTime(); - + NtpTime nextIssueTime,nextIssueDelay,actTime; + + actTime=getActualNtpTime(); csChange->remoteReaderBest++; NtpTimeAdd(nextIssueTime, cstRemoteReader->lastSentIssueTime, @@ -340,30 +379,24 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { if (NtpTimeCmp(actTime,nextIssueTime)>=0) NTPTIME_ZERO(nextIssueDelay); eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2); - if (NtpTimeCmp(nextIssueDelay,zNtpTime)==0) { - //direct sent issue, for case zero time - CSTWriterSendBestEffortTimer(d,(void*)cstRemoteReader); - } else { - //schedule sent issue (future) - eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, - &cstRemoteReader->delayResponceTimer, - 2, - "CSTWriterSendBestEffortTimer", - CSTWriterSendBestEffortTimer, - &cstRemoteReader->cstWriter->lock, - cstRemoteReader, - &nextIssueDelay); - } + //schedule sent issue + eventAdd(d, + cstRemoteReader->sobject->objectEntryAID, + &cstRemoteReader->delayResponceTimer, + 2, + "CSTWriterSendBestEffortTimer", + CSTWriterSendBestEffortTimer, + &cstRemoteReader->cstWriter->lock, + cstRemoteReader, + &nextIssueDelay); } else { //!Best_Effort & !Strict_Reliable - CSTWriterDestroyCSChangeForReader(cstRemoteReader,csChangeForReader, + CSTWriterDestroyCSChangeForReader(csChangeForReader, ORTE_TRUE); - debug(51,5) ("CSTWriterAddCSChange: destryed\n"); - + debug(51,5) ("CSTWriterAddCSChange: destroyed\n"); } } } @@ -375,18 +408,24 @@ CSTWriterAddCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) { /*****************************************************************************/ void -CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader, - CSChangeForReader *csChangeForReader,Boolean destroyCSChange) { +CSTWriterDestroyCSChangeForReader(CSChangeForReader *csChangeForReader, + Boolean destroyCSChange) { + CSTRemoteReader *cstRemoteReader; CSChange *csChange; + if (!csChangeForReader) return; + cstRemoteReader=csChangeForReader->cstRemoteReader; csChange=csChangeForReader->csChange; csChange->remoteReaderCount--; cstRemoteReader->csChangesCounter--; if (!cstRemoteReader->csChangesCounter) { cstRemoteReader->commStateSend=NOTHNIGTOSEND; } + if (csChangeForReader->commStateChFReader==TOSEND) { + cstRemoteReader->commStateToSentCounter--; + } if ((cstRemoteReader->cstWriter->guid.oid & 0x07)==OID_PUBLICATION) { - ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->objectEntryOID->attributes; + ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->pobject->attributes; if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_STRICT)!=0) { csChange->remoteReaderStrict--; } else { @@ -396,11 +435,13 @@ CSTWriterDestroyCSChangeForReader(CSTRemoteReader *cstRemoteReader, } } eventDetach(cstRemoteReader->cstWriter->domain, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &csChangeForReader->waitWhileDataUnderwayTimer, 0); + CSChangeParticipant_delete(csChange,csChangeForReader); CSChangeForReader_delete(cstRemoteReader,csChangeForReader); FREE(csChangeForReader); + if ((cstRemoteReader->cstWriter->guid.oid & 0x07)==OID_PUBLICATION) { if (!csChange->remoteReaderCount) { if (destroyCSChange) { @@ -425,17 +466,20 @@ CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) CSChange *csChangeFSN; if (!csChange) return; + cstWriter->csChangesCounter--; CSTWriterCSChange_delete(cstWriter,csChange); gavl_cust_for_each(CSTRemoteReader,cstWriter,cstRemoteReader) { csChangeForReader=CSChangeForReader_find(cstRemoteReader,&csChange->sn); - CSTWriterDestroyCSChangeForReader(cstRemoteReader, + CSTWriterDestroyCSChangeForReader( csChangeForReader,ORTE_FALSE); } - if (csChange->cdrStream.buffer) - FREE(csChange->cdrStream.buffer); + + if (csChange->cdrCodec.buffer) + FREE(csChange->cdrCodec.buffer); parameterDelete(csChange); FREE(csChange); + //update first SN csChangeFSN=CSTWriterCSChange_first(cstWriter); if (csChangeFSN) @@ -448,7 +492,9 @@ CSTWriterDestroyCSChange(ORTEDomain *d,CSTWriter *cstWriter,CSChange *csChange) Boolean CSTWriterTryDestroyBestEffortIssue(CSTWriter *cstWriter) { CSChange *csChange; + ul_list_for_each(CSTWriterCSChange,cstWriter,csChange) { + if (!csChange->remoteReaderStrict) { CSTWriterDestroyCSChange(cstWriter->domain,cstWriter,csChange); return ORTE_TRUE; @@ -465,18 +511,25 @@ CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader) { if ((cstRemoteReader->cstWriter->guid.oid & 0x07)==OID_PUBLICATION) timerQueue=2; //userdata timer queue + gavl_cust_for_each(CSChangeForReader,cstRemoteReader,csChangeForReader) { + //refresh only VAR's if (SeqNumberCmp(csChangeForReader->csChange->gapSN,noneSN)==0) { - csChangeForReader->commStateChFReader=TOSEND; + + if (csChangeForReader->commStateChFReader!=TOSEND) { + csChangeForReader->commStateChFReader=TOSEND; + cstRemoteReader->commStateToSentCounter++; + } + if (cstRemoteReader->commStateSend==NOTHNIGTOSEND) { cstRemoteReader->commStateSend=MUSTSENDDATA; eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, timerQueue); eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, timerQueue, "CSTWriterSendTimer", @@ -488,3 +541,86 @@ CSTWriterRefreshAllCSChanges(ORTEDomain *d,CSTRemoteReader *cstRemoteReader) { } } } + +/*****************************************************************************/ +int +CSTWriterCSChangeForReaderNewState(CSChangeForReader *csChangeForReader) +{ + CSTRemoteReader *cstRemoteReader=csChangeForReader->cstRemoteReader; + + //setup new state for csChangeForReader + if (csChangeForReader->commStateChFReader!=TOSEND) return -1; + cstRemoteReader->commStateToSentCounter--; + + if (!cstRemoteReader->commStateToSentCounter) + cstRemoteReader->commStateSend=NOTHNIGTOSEND; + + if (NtpTimeCmp(zNtpTime, + cstRemoteReader->cstWriter->params.waitWhileDataUnderwayTime)==0) { + csChangeForReader->commStateChFReader=UNACKNOWLEDGED; + } else { + csChangeForReader->commStateChFReader=UNDERWAY; + eventDetach(cstRemoteReader->cstWriter->domain, + cstRemoteReader->sobject->objectEntryAID, + &csChangeForReader->waitWhileDataUnderwayTimer, + 0); + eventAdd(cstRemoteReader->cstWriter->domain, + cstRemoteReader->sobject->objectEntryAID, + &csChangeForReader->waitWhileDataUnderwayTimer, + 0, //common timer + "CSChangeForReaderUnderwayTimer", + CSChangeForReaderUnderwayTimer, + &cstRemoteReader->cstWriter->lock, + csChangeForReader, + &cstRemoteReader->cstWriter->params.waitWhileDataUnderwayTime); + } + return 0; +} + +/*****************************************************************************/ +void +CSTWriterMulticast(CSChangeForReader *csChangeForReader) +{ + CSTRemoteReader *cstRemoteReader; + ObjectEntryOID *objectEntryOID; + CSChangeForReader *csChangeForReader1; + char queue=1; + + cstRemoteReader=csChangeForReader->cstRemoteReader; + objectEntryOID=cstRemoteReader->sobject; + + //multicast can do an application with multicast interface + if (!objectEntryOID->multicastPort) + return; + + ul_list_for_each(CSChangeParticipant, + csChangeForReader->csChange, + csChangeForReader1) { + ObjectEntryOID *objectEntryOID1; + CSTRemoteReader *cstRemoteReader1; + + cstRemoteReader1=csChangeForReader1->cstRemoteReader; + objectEntryOID1=cstRemoteReader1->sobject; + + /* are RRs from same host */ + if (cstRemoteReader1->guid.hid!=cstRemoteReader->guid.hid) { + /* is the sending object from same multicast group ? */ + if (objectEntryOID!=objectEntryOID1) + continue; + } + + /* is the csChange in state TOSEND ? If yes, marks like proc. */ + CSTWriterCSChangeForReaderNewState(csChangeForReader1); + + /* if there are no messages, detach sending timer */ + if (!(cstRemoteReader->commStateSend==NOTHNIGTOSEND) && + !(cstRemoteReader->commStateHB==MAYSENDHB)) + continue; + if ((cstRemoteReader->cstWriter->guid.oid & 0x07)==OID_PUBLICATION) + queue=2; + eventDetach(cstRemoteReader->cstWriter->domain, + cstRemoteReader->sobject->objectEntryAID, + &cstRemoteReader->delayResponceTimer, + queue); + } +} diff --git a/orte/liborte/RTPSCSTWriterTimer.c b/orte/liborte/RTPSCSTWriterTimer.c index 6736a37..1f77173 100644 --- a/orte/liborte/RTPSCSTWriterTimer.c +++ b/orte/liborte/RTPSCSTWriterTimer.c @@ -21,6 +21,46 @@ #include "orte_all.h" +/*****************************************************************************/ +int +CSTWriterRegistrationTimer(ORTEDomain *d,void *vcstWriter) { + CSTWriter *cstWriter=(CSTWriter*)vcstWriter; + CSTRemoteReader *cstRemoteReader; + + debug(52,10) ("CSTWriterRegistrationTimer: start\n"); + + debug(52,5) ("CSTWriterRegistrationTimer: OID: 0xx%x - retries = %d\n", + cstWriter->guid.oid,cstWriter->registrationCounter); + eventDetach(d, + cstWriter->objectEntryOID->objectEntryAID, + &cstWriter->registrationTimer, + 0); //common timer + + if (cstWriter->registrationCounter!=0) { + cstWriter->registrationCounter--; + gavl_cust_for_each(CSTRemoteReader,cstWriter,cstRemoteReader) { + CSTWriterRefreshAllCSChanges(d,cstRemoteReader); + } + eventAdd(d, + cstWriter->objectEntryOID->objectEntryAID, + &cstWriter->registrationTimer, + 0, //common timer + "CSTWriterRegistrationTimer", + CSTWriterRegistrationTimer, + &cstWriter->lock, + cstWriter, + &cstWriter->params.registrationPeriod); + } else { + if (d->domainEvents.onRegFail) { + d->domainEvents.onRegFail(d->domainEvents.onRegFailParam); + } + } + + debug(52,10) ("CSTWriterRegistrationTimer: finished\n"); + return 0; +} + + /*****************************************************************************/ int CSTWriterRefreshTimer(ORTEDomain *d,void *vcstWriter) { @@ -59,32 +99,29 @@ CSTWriterAnnounceTimer(ORTEDomain *d,void *vcstRemoteReader) { ((!cstRemoteReader->cstWriter->params.fullAcknowledge))) {// || // (cstRemoteReader->unacknowledgedCounter))) { //create HB - int len=RTPSHeardBeatCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + int len=RTPSHeartBeatCreate( + &d->taskSend.mb.cdrCodec, &cstRemoteReader->cstWriter->firstSN, &cstRemoteReader->cstWriter->lastSN, - cstRemoteReader->cstWriter->guid.oid, OID_UNKNOWN, + cstRemoteReader->cstWriter->guid.oid, ORTE_FALSE); if (len<0) { //not enought space in sending buffer - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; debug(52,3) ("sent: RTPS_HBF(0x%x) to 0x%x-0x%x\n", cstRemoteReader->cstWriter->guid.oid, cstRemoteReader->guid.hid, cstRemoteReader->guid.aid); } eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 1); eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 1, //metatraffic timer "CSTWriterAnnounceTimer", @@ -107,22 +144,19 @@ CSTWriterAnnounceIssueTimer(ORTEDomain *d,void *vcstRemoteReader) { debug(52,10) ("CSTWriterAnnounceIssueTimer: start\n"); pp=(ORTEPublProp*)cstRemoteReader->cstWriter->objectEntryOID->attributes; //create HB - d->mbSend.cdrStreamDirect=NULL; - len=RTPSHeardBeatCreate( - d->mbSend.cdrStream.bufferPtr, - getMaxMessageLength(d), + d->taskSend.mb.cdrCodecDirect=NULL; + len=RTPSHeartBeatCreate( + &d->taskSend.mb.cdrCodec, &cstRemoteReader->cstWriter->firstSN, &cstRemoteReader->cstWriter->lastSN, - cstRemoteReader->cstWriter->guid.oid, OID_UNKNOWN, + cstRemoteReader->cstWriter->guid.oid, ORTE_FALSE); if (len<0) { //not enought space in sending buffer - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; debug(52,3) ("sent: RTPS_HBF(0x%x) to 0x%x-0x%x\n", cstRemoteReader->cstWriter->guid.oid, cstRemoteReader->guid.hid, @@ -135,12 +169,12 @@ CSTWriterAnnounceIssueTimer(ORTEDomain *d,void *vcstRemoteReader) { } cstRemoteReader->HBRetriesCounter++; eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 2); if (cstRemoteReader->HBRetriesCounterHBMaxRetries) { eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->repeatAnnounceTimer, 2, //metatraffic timer "CSTWriterAnnounceIssueTimer", @@ -152,7 +186,7 @@ CSTWriterAnnounceIssueTimer(ORTEDomain *d,void *vcstRemoteReader) { //destroy all csChangesForReader CSChangeForReader *csChangeForReader; while ((csChangeForReader=CSChangeForReader_first(cstRemoteReader))) { - CSTWriterDestroyCSChangeForReader(cstRemoteReader, + CSTWriterDestroyCSChangeForReader( csChangeForReader,ORTE_TRUE); } debug(52,3) ("CSTWriterAnnounceIssueTimer: HB RR(0x%x-0x%x) ritch MaxRetries\n", @@ -174,37 +208,51 @@ CSChangeForReaderUnderwayTimer(ORTEDomain *d,void *vcsChangeForReader) { int CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader) { CSTRemoteReader *cstRemoteReader=(CSTRemoteReader*)vcstRemoteReader; - ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->objectEntryOID->attributes; + ORTESubsProp *sp=(ORTESubsProp*)cstRemoteReader->pobject->attributes; CSChangeForReader *csChangeForReader=NULL; debug(52,10) ("CSTWriterSendBestEffortTimer: start\n"); - d->mbSend.cdrStreamDirect=NULL; + d->taskSend.mb.cdrCodecDirect=NULL; if (cstRemoteReader->commStateSend!=NOTHNIGTOSEND) { gavl_cust_for_each(CSChangeForReader,cstRemoteReader,csChangeForReader) { if (csChangeForReader->commStateChFReader==TOSEND) { CSChange *csChange=csChangeForReader->csChange; + csChangeForReader->commStateChFReader=UNDERWAY; cstRemoteReader->commStateSend=MUSTSENDDATA; cstRemoteReader->lastSentIssueTime=getActualNtpTime(); - d->mbSend.cdrStreamDirect=&csChange->cdrStream; - debug(52,3) ("sent: RTPS_ISSUE_BEST(0x%x) to 0x%x-0x%x\n", - cstRemoteReader->cstWriter->guid.oid, - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid); + d->taskSend.mb.cdrCodecDirect=&csChange->cdrCodec; + + if (cstRemoteReader->sobject) { + debug(52,3) ("sent: RTPS_ISSUE_BEST(0x%x) to 0x%x-0x%x-0x%x\n", + cstRemoteReader->cstWriter->guid.oid, + GUID_PRINTF(cstRemoteReader->sobject->guid)); + } + ORTESendData(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, ORTE_FALSE); - CSTWriterDestroyCSChangeForReader(cstRemoteReader, + + //it's not nessecary to NewState, there is setuped only new state & after is deleted + CSTWriterCSChangeForReaderNewState(csChangeForReader); + + /* mark multicast messages like processed */ + CSTWriterMulticast(csChangeForReader); + + CSTWriterDestroyCSChangeForReader( csChangeForReader,ORTE_TRUE); + eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2); + //when is no csChange -> break processing if (cstRemoteReader->cstWriter->csChangesCounter==0) break; + eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, + cstRemoteReader->sobject->objectEntryAID, &cstRemoteReader->delayResponceTimer, 2, "CSTWriterSendBestEffortTimer", @@ -213,10 +261,10 @@ CSTWriterSendBestEffortTimer(ORTEDomain *d,void *vcstRemoteReader) { cstRemoteReader, &sp->minimumSeparation); return 0; + } } } - cstRemoteReader->commStateSend=NOTHNIGTOSEND; debug(52,10) ("CSTWriterSendBestEffortTimer: finished\n"); return 0; } @@ -226,48 +274,56 @@ int CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader) { CSTRemoteReader *cstRemoteReader=(CSTRemoteReader*)vcstRemoteReader; CSChangeForReader *csChangeForReader=NULL; - int max_msg_len,len; + int len,data_offset,wptr_max; CSChange *csChange; Boolean firstTrace=ORTE_TRUE; debug(52,10) ("CSTWriterSendStrictTimer: start\n"); - max_msg_len=getMaxMessageLength(d); if (cstRemoteReader->commStateSend!=NOTHNIGTOSEND) { gavl_cust_for_each(CSChangeForReader,cstRemoteReader,csChangeForReader) { csChange=csChangeForReader->csChange; if (csChangeForReader->commStateChFReader==TOSEND) { cstRemoteReader->commStateSend=MUSTSENDDATA; + + wptr_max=d->taskSend.mb.cdrCodec.wptr_max; + d->taskSend.mb.cdrCodec.wptr_max=csChange->cdrCodec.wptr_max; + /* infoReply */ if ((firstTrace) && (cstRemoteReader->cstWriter->params.fullAcknowledge) && - !d->mbSend.containsInfoReply) { + !d->taskSend.mb.containsInfoReply) { + AppParams *ap=cstRemoteReader->cstWriter->objectEntryOID->attributes; firstTrace=ORTE_FALSE; - len=RTPSInfoREPLYCreate(d->mbSend.cdrStream.bufferPtr,max_msg_len, + len=RTPSInfoREPLYCreate(&d->taskSend.mb.cdrCodec, IPADDRESS_INVALID, - ((AppParams*)cstRemoteReader->cstWriter->objectEntryOID->attributes)->userdataUnicastPort); + ap->userdataUnicastPort); if (len<0) { - d->mbSend.needSend=ORTE_TRUE; + d->taskSend.mb.needSend=ORTE_TRUE; + d->taskSend.mb.cdrCodec.wptr_max=wptr_max; return 1; } - d->mbSend.containsInfoReply=ORTE_TRUE; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; - max_msg_len-=len; + d->taskSend.mb.containsInfoReply=ORTE_TRUE; debug(52,3) ("sent: RTPS_InfoREPLY(0x%x) to 0x%x-0x%x\n", cstRemoteReader->cstWriter->guid.oid, cstRemoteReader->guid.hid, cstRemoteReader->guid.aid); } - len=20+cstRemoteReader->cstWriter->typeRegister->getMaxSize; - if (max_msg_lenmbSend.needSend=ORTE_TRUE; - return 1; + + data_offset=RTPS_HEADER_LENGTH+12; + if (CDR_buffer_puts(&d->taskSend.mb.cdrCodec, + csChange->cdrCodec.buffer+data_offset, //src + csChange->cdrCodec.wptr-data_offset)==CORBA_FALSE) { + d->taskSend.mb.needSend=ORTE_TRUE; + d->taskSend.mb.cdrCodec.wptr_max=wptr_max; + return 1; } - memcpy(d->mbSend.cdrStream.bufferPtr, //dest -// csChange->cdrStream.bufferPtr-len, //src - csChange->cdrStream.buffer+RTPS_HEADER_LENGTH+12, //src - len); //length - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; - max_msg_len-=len; + + d->taskSend.mb.cdrCodec.wptr_max=wptr_max; + + /* setup new state for csChangeForReader */ + CSTWriterCSChangeForReaderNewState(csChangeForReader); + + /* mark multicast messages like processed */ + CSTWriterMulticast(csChangeForReader); + debug(52,3) ("sent: RTPS_ISSUE_STRICT(0x%x) to 0x%x-0x%x\n", cstRemoteReader->cstWriter->guid.oid, cstRemoteReader->guid.hid, @@ -275,7 +331,6 @@ CSTWriterSendStrictTimer(ORTEDomain *d,void *vcstRemoteReader) { } } } - cstRemoteReader->commStateSend=NOTHNIGTOSEND; debug(52,10) ("CSTWriterSendStrictTimer: finished\n"); //add HeardBeat return CSTWriterAnnounceIssueTimer(d,cstRemoteReader); @@ -286,173 +341,115 @@ int CSTWriterSendTimer(ORTEDomain *d,void *vcstRemoteReader) { CSTRemoteReader *cstRemoteReader=(CSTRemoteReader*)vcstRemoteReader; CSChangeForReader *csChangeForReader=NULL; - unsigned int max_msg_len; - int len,off; Boolean firstTrace=ORTE_TRUE,f_bit=ORTE_TRUE; debug(52,10) ("CSTWriterSendTimer: start\n"); - max_msg_len=getMaxMessageLength(d); - //setup f_bit of object + + /* setup f_bit of object */ if (cstRemoteReader->cstWriter->params.fullAcknowledge) f_bit=ORTE_FALSE; + if (cstRemoteReader->commStateSend!=NOTHNIGTOSEND) { + gavl_cust_for_each(CSChangeForReader,cstRemoteReader,csChangeForReader) { + if (csChangeForReader->commStateChFReader==TOSEND) { cstRemoteReader->commStateSend=MUSTSENDDATA; + + /* infoReply */ if ((firstTrace) && (cstRemoteReader->cstWriter->params.fullAcknowledge) && - !d->mbSend.containsInfoReply) { + !d->taskSend.mb.containsInfoReply) { + AppParams *ap=cstRemoteReader->cstWriter->objectEntryOID->attributes; firstTrace=ORTE_FALSE; - len=RTPSInfoREPLYCreate(d->mbSend.cdrStream.bufferPtr,max_msg_len, - IPADDRESS_INVALID, - ((AppParams*)cstRemoteReader->cstWriter->objectEntryOID->attributes)->metatrafficUnicastPort); - if (len<0) { - d->mbSend.needSend=ORTE_TRUE; + if (RTPSInfoREPLYCreate(&d->taskSend.mb.cdrCodec, + IPADDRESS_INVALID, + ap->metatrafficUnicastPort) < 0) { + d->taskSend.mb.needSend=ORTE_TRUE; return 1; } - d->mbSend.containsInfoReply=ORTE_TRUE; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; - max_msg_len-=len; - debug(52,3) ("sent: RTPS_InfoREPLY(0x%x) to 0x%x-0x%x\n", - cstRemoteReader->cstWriter->guid.oid, - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid); - } - if (max_msg_len<32) { - d->mbSend.needSend=ORTE_TRUE; - return 1; + d->taskSend.mb.containsInfoReply=ORTE_TRUE; + debug(52,3) ("sent: RTPS_InfoREPLY from 0x%x-0x%x-0x%x to 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->cstWriter->guid), + GUID_PRINTF(cstRemoteReader->guid)); } - off=0; - //VAR ??? + + /* VAR */ if (SeqNumberCmp(csChangeForReader->csChange->gapSN,noneSN)==0) { - debug(52,3) ("sent: RTPS_VAR(0x%x) to 0x%x-0x%x\n", - cstRemoteReader->cstWriter->guid.oid, - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid); - len=32; - d->mbSend.cdrStream.bufferPtr[0]=(uint8_t)VAR; - d->mbSend.cdrStream.bufferPtr[1]=ORTE_MY_MBO; - if (csChangeForReader->csChange->alive) - d->mbSend.cdrStream.bufferPtr[1]|=4; - *((ObjectId*)(d->mbSend.cdrStream.bufferPtr+4))=OID_UNKNOWN; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+4),0); - *((ObjectId*)(d->mbSend.cdrStream.bufferPtr+8))= - cstRemoteReader->cstWriter->guid.oid; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+8),0); - if (csChangeForReader->csChange->guid.oid==OID_APP) { - d->mbSend.cdrStream.bufferPtr[1]|=8; - *((HostId*)(d->mbSend.cdrStream.bufferPtr+12))= - csChangeForReader->csChange->guid.hid; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+12),0); - *((AppId*)(d->mbSend.cdrStream.bufferPtr+16))= - csChangeForReader->csChange->guid.aid; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+16),0); - } else { - len-=8; - off=-8; - } - *((ObjectId*)(d->mbSend.cdrStream.bufferPtr+20+off))= - csChangeForReader->csChange->guid.oid; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+20+off),0); - *((SequenceNumber*)(d->mbSend.cdrStream.bufferPtr+24+off))= - csChangeForReader->csChange->sn; - if (!CSChangeAttributes_is_empty(csChangeForReader->csChange)) { - int plen; - plen=parameterCodeStreamFromCSChange(csChangeForReader->csChange, - d->mbSend.cdrStream.bufferPtr+32+off,max_msg_len-len); - if (plen<0) { - d->mbSend.needSend=ORTE_TRUE; - return 1; - } - d->mbSend.cdrStream.bufferPtr[1]|=2; - len+=plen; + debug(52,3) ("sent: RTPS_VAR from 0x%x-0x%x-0x%x to 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->cstWriter->guid), + GUID_PRINTF(cstRemoteReader->guid)); + + if (RTPSVarCreate(&d->taskSend.mb.cdrCodec, + OID_UNKNOWN, + cstRemoteReader->cstWriter->guid.oid, + csChangeForReader->csChange) < 0) { + d->taskSend.mb.needSend=ORTE_TRUE; + return 1; } - } else { //GAP ??? - debug(52,3) ("sent: RTPS_GAP(0x%x) to 0x%x-0x%x\n", - cstRemoteReader->cstWriter->guid.oid, - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid); - len=32; - d->mbSend.cdrStream.bufferPtr[0]=(uint8_t)GAP; - d->mbSend.cdrStream.bufferPtr[1]=ORTE_MY_MBO; - *((ObjectId*)(d->mbSend.cdrStream.bufferPtr+4))=OID_UNKNOWN; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+4),0); - *((ObjectId*)(d->mbSend.cdrStream.bufferPtr+8))= - cstRemoteReader->cstWriter->guid.oid; - conv_u32((uint32_t*)(d->mbSend.cdrStream.bufferPtr+8),0); - *((SequenceNumber*)(d->mbSend.cdrStream.bufferPtr+12))= - csChangeForReader->csChange->sn; - conv_sn((SequenceNumber*)(d->mbSend.cdrStream.bufferPtr+12),ORTE_MY_MBO); - SeqNumberAdd(*((SequenceNumber*)(d->mbSend.cdrStream.bufferPtr+20)), - csChangeForReader->csChange->sn, - csChangeForReader->csChange->gapSN); - conv_sn((SequenceNumber*)(d->mbSend.cdrStream.bufferPtr+20),ORTE_MY_MBO); - *((uint32_t*)(d->mbSend.cdrStream.bufferPtr+28))=0; //NumBits - } - *((ParameterLength*)(d->mbSend.cdrStream.bufferPtr+2))=len-4; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; - max_msg_len-=len; - //setup new state for csChangeForReader - if (NtpTimeCmp(zNtpTime, - cstRemoteReader->cstWriter->params.waitWhileDataUnderwayTime)==0) { - csChangeForReader->commStateChFReader=UNACKNOWLEDGED; + } else { - csChangeForReader->commStateChFReader=UNDERWAY; - eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, - &csChangeForReader->waitWhileDataUnderwayTimer, - 0); - eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, - &csChangeForReader->waitWhileDataUnderwayTimer, - 0, //common timer - "CSChangeForReaderUnderwayTimer", - CSChangeForReaderUnderwayTimer, - &cstRemoteReader->cstWriter->lock, - csChangeForReader, - &cstRemoteReader->cstWriter->params.waitWhileDataUnderwayTime); + /* GAP */ + debug(52,3) ("sent: RTPS_GAP from 0x%x-0x%x-0x%x to 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->cstWriter->guid), + GUID_PRINTF(cstRemoteReader->guid)); + + if (RTPSGapCreate(&d->taskSend.mb.cdrCodec, + OID_UNKNOWN, + cstRemoteReader->cstWriter->guid.oid, + csChangeForReader->csChange) < 0) { + d->taskSend.mb.needSend=ORTE_TRUE; + return 1; + } } + + /* setup new state for csChangeForReader */ + CSTWriterCSChangeForReaderNewState(csChangeForReader); + + /* mark multicast messages like processed */ + CSTWriterMulticast(csChangeForReader); + } - } - } - //add HeardBeat - len=RTPSHeardBeatCreate( - d->mbSend.cdrStream.bufferPtr,max_msg_len, - &cstRemoteReader->cstWriter->firstSN, - &cstRemoteReader->cstWriter->lastSN, - cstRemoteReader->cstWriter->guid.oid, - OID_UNKNOWN, - f_bit); - if (len<0) { - d->mbSend.needSend=ORTE_TRUE; - return 1; - } else { - //schedule new time for Announce timer - eventDetach(d, - cstRemoteReader->objectEntryOID->objectEntryAID, - &cstRemoteReader->repeatAnnounceTimer, - 1); - eventAdd(d, - cstRemoteReader->objectEntryOID->objectEntryAID, - &cstRemoteReader->repeatAnnounceTimer, - 1, //metatraffic timer - "CSTWriterAnnounceTimer", - CSTWriterAnnounceTimer, - &cstRemoteReader->cstWriter->lock, - cstRemoteReader, - &cstRemoteReader->cstWriter->params.repeatAnnounceTime); + } /* gavl_cust_for_each */ + + cstRemoteReader->commStateHB=MUSTSENDHB; + } - debug(52,3) ("sent: RTPS_HB(0x%x) to 0x%x-0x%x\n", - cstRemoteReader->cstWriter->guid.oid, - cstRemoteReader->guid.hid, - cstRemoteReader->guid.aid); + if (cstRemoteReader->commStateHB==MUSTSENDHB) { + //add HeartBeat + if (RTPSHeartBeatCreate( + &d->taskSend.mb.cdrCodec, + &cstRemoteReader->cstWriter->firstSN, + &cstRemoteReader->cstWriter->lastSN, + OID_UNKNOWN, + cstRemoteReader->cstWriter->guid.oid, + f_bit)<0) { + d->taskSend.mb.needSend=ORTE_TRUE; + return 1; + } else { + //schedule new time for Announce timer + eventDetach(d, + cstRemoteReader->sobject->objectEntryAID, + &cstRemoteReader->repeatAnnounceTimer, + 1); + eventAdd(d, + cstRemoteReader->sobject->objectEntryAID, + &cstRemoteReader->repeatAnnounceTimer, + 1, //metatraffic timer + "CSTWriterAnnounceTimer", + CSTWriterAnnounceTimer, + &cstRemoteReader->cstWriter->lock, + cstRemoteReader, + &cstRemoteReader->cstWriter->params.repeatAnnounceTime); + } + + debug(52,3) ("sent: RTPS_HB from 0x%x-0x%x-0x%x to 0x%x-0x%x-0x%x\n", + GUID_PRINTF(cstRemoteReader->cstWriter->guid), + GUID_PRINTF(cstRemoteReader->guid)); + cstRemoteReader->commStateHB=MAYSENDHB; } - cstRemoteReader->commStateSend=NOTHNIGTOSEND; - d->mbSend.cdrStream.bufferPtr+=len; - d->mbSend.cdrStream.length+=len; + debug(52,10) ("CSTWriterSendTimer: finished\n"); return 0; } diff --git a/orte/liborte/RTPSGap.c b/orte/liborte/RTPSGap.c index 81c4130..3d97444 100644 --- a/orte/liborte/RTPSGap.c +++ b/orte/liborte/RTPSGap.c @@ -21,10 +21,59 @@ #include "orte_all.h" +/**********************************************************************************/ +int +RTPSGapCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange) +{ + CDR_Endianness data_endian; + SequenceNumber bsn; + CORBA_octet flags; + + if (cdrCodec->buf_lenwptr+32) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,GAP); + + /* flags */ + flags=cdrCodec->data_endian; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,28); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_put_ulong(cdrCodec,roid); + + /* writerObjectId */ + CDR_put_ulong(cdrCodec,woid); + + cdrCodec->data_endian=data_endian; + + /* firstSeqNumber */ + CDR_put_ulong(cdrCodec,csChange->sn.high); + CDR_put_ulong(cdrCodec,csChange->sn.low); + + /* bitmap sn */ + SeqNumberAdd(bsn, + csChange->sn, + csChange->gapSN); + CDR_put_ulong(cdrCodec,bsn.high); + CDR_put_ulong(cdrCodec,bsn.low); + + /* numbits */ + CDR_put_ulong(cdrCodec,0); + + return 32; +} + /*****************************************************************************/ void RTPSGapAdd(CSTRemoteWriter *cstRemoteWriter,GUID_RTPS *guid,SequenceNumber *fsn, - SequenceNumber *sn,uint32_t numbits,uint8_t *bitmaps,Boolean e_bit) { + SequenceNumber *sn,uint32_t numbits,CDR_Codec *cdrCodec) { SequenceNumber lsn,ssn; uint32_t i; int8_t bit,bit_last=0; @@ -34,12 +83,13 @@ RTPSGapAdd(CSTRemoteWriter *cstRemoteWriter,GUID_RTPS *guid,SequenceNumber *fsn, if (SeqNumberCmp(*sn,cstRemoteWriter->sn)<0) return;//have to be sn>=writer_sn ! if (SeqNumberCmp(*fsn,*sn)==1) return; //cannot be fsn>sn ! if (numbits>256) return; + //first case of GAP sn if (SeqNumberCmp(*fsn,*sn)<0) { //if fsnsn)>0) { //have to be sn>writer_sn csChange=(CSChange*)MALLOC(sizeof(CSChange)); - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; csChange->sn=*fsn; csChange->guid=*guid; csChange->alive=ORTE_TRUE; @@ -49,18 +99,20 @@ RTPSGapAdd(CSTRemoteWriter *cstRemoteWriter,GUID_RTPS *guid,SequenceNumber *fsn, } } } + //second case of GAP sn lsn=ssn=*sn;bit=0; for(i=0;i0) { if (bit_last && !bit) { //end of GAP 1->0 if (!CSChangeFromWriter_find(cstRemoteWriter,&ssn)) { if (SeqNumberCmp(ssn,cstRemoteWriter->sn)>0) { csChange=(CSChange*)MALLOC(sizeof(CSChange)); - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; csChange->sn=ssn; csChange->guid=*guid; csChange->alive=ORTE_TRUE; @@ -78,11 +130,12 @@ RTPSGapAdd(CSTRemoteWriter *cstRemoteWriter,GUID_RTPS *guid,SequenceNumber *fsn, SeqNumberInc(lsn,lsn); bit_last=bit; } + if (bit) { if (!CSChangeFromWriter_find(cstRemoteWriter,&ssn)) { if (SeqNumberCmp(ssn,cstRemoteWriter->sn)>0) { csChange=(CSChange*)MALLOC(sizeof(CSChange)); - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; csChange->sn=ssn; csChange->guid=*guid; csChange->alive=ORTE_TRUE; @@ -96,26 +149,38 @@ RTPSGapAdd(CSTRemoteWriter *cstRemoteWriter,GUID_RTPS *guid,SequenceNumber *fsn, /**********************************************************************************/ void -RTPSGap(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress) { +RTPSGap(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress) { CSTReader *cstReader=NULL; CSTRemoteWriter *cstRemoteWriter; GUID_RTPS writerGUID; - ObjectId roid,woid; + ObjectId roid,woid; SequenceNumber sn,fsn; uint32_t numbits; - int8_t e_bit; - - e_bit=rtps_msg[1] & 0x01; - roid=*((ObjectId*)(rtps_msg+4)); /* readerObjectId */ - conv_u32(&roid,0); - woid=*((ObjectId*)(rtps_msg+8)); /* writerObjectId */ - conv_u32(&woid,0); - fsn=*((SequenceNumber*)(rtps_msg+12)); /* firstSeqNumber */ - conv_sn(&fsn,e_bit); - sn=*((SequenceNumber*)(rtps_msg+20)); /* Bitmap - SN */ - conv_sn(&sn,e_bit); - numbits=*((uint32_t*)(rtps_msg+28)); /* numbits */ - conv_u32(&numbits,e_bit); + CDR_Endianness data_endian; + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_get_ulong(cdrCodec,&roid); + + /* writerObjectId */ + CDR_get_ulong(cdrCodec,&woid); + + cdrCodec->data_endian=data_endian; + + /* firstSeqNumber */ + CDR_get_ulong(cdrCodec,&fsn.high); + CDR_get_ulong(cdrCodec,&fsn.low); + + /* Bitmap - SN */ + CDR_get_ulong(cdrCodec,&sn.high); + CDR_get_ulong(cdrCodec,&sn.low); + + /* numbits */ + CDR_get_ulong(cdrCodec,&numbits); + writerGUID.hid=mi->sourceHostId; writerGUID.aid=mi->sourceAppId; writerGUID.oid=woid; @@ -123,7 +188,7 @@ RTPSGap(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA debug(49,3) ("recv: RTPS_GAP(0x%x) from 0x%x-0x%x\n", woid,mi->sourceHostId,mi->sourceAppId); - //Manager + /* Manager */ if ((d->guid.aid & 0x03)==MANAGER) { if ((writerGUID.oid==OID_WRITE_APPSELF) && ((writerGUID.aid & 0x03)==MANAGER)) { @@ -138,6 +203,8 @@ RTPSGap(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA cstReader=&d->readerApplications; } } + + /* Application */ if ((d->guid.aid & 3)==MANAGEDAPPLICATION) { switch (writerGUID.oid) { case OID_WRITE_MGR: @@ -158,14 +225,17 @@ RTPSGap(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA break; } } + if (!cstReader) return; cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); if (!cstRemoteWriter) { pthread_rwlock_unlock(&cstReader->lock); return; } + RTPSGapAdd(cstRemoteWriter,&writerGUID,&fsn,&sn,numbits, - rtps_msg+32,e_bit); + cdrCodec); + CSTReaderProcCSChanges(d,cstRemoteWriter); pthread_rwlock_unlock(&cstReader->lock); } diff --git a/orte/liborte/RTPSHeader.c b/orte/liborte/RTPSHeader.c index 72640a3..4bd7127 100644 --- a/orte/liborte/RTPSHeader.c +++ b/orte/liborte/RTPSHeader.c @@ -22,36 +22,78 @@ #include "orte_all.h" /**********************************************************************************/ -int16_t -RTPSHeaderCreate(uint8_t *msg,HostId hid,AppId aid) { - msg[0]='R';msg[1]='T'; msg[2]='P'; msg[3]='S'; - //Protocol version - PROTOCOL_VERSION_1_0((*((ProtocolVersion*)(msg+4)))); +int +RTPSHeaderCreate(CDR_Codec *cdrCodec,HostId hid,AppId aid) { + CDR_Endianness data_endian; + ProtocolVersion pv; + VendorId vid; + + CDR_put_octet(cdrCodec,'R'); + CDR_put_octet(cdrCodec,'T'); + CDR_put_octet(cdrCodec,'P'); + CDR_put_octet(cdrCodec,'S'); + + /* Protocol version */ + PROTOCOL_VERSION_1_0(pv); + CDR_put_octet(cdrCodec,pv.major); + CDR_put_octet(cdrCodec,pv.minor); + //Vendor id - VENDOR_ID_UNKNOWN((*((VendorId*)(msg+6)))); - //HID - conv_u32(&hid,0); - *((HostId*)(msg+8))=hid; - //AID - conv_u32(&aid,0); - *((AppId*)(msg+12))=aid; + VENDOR_ID_UNKNOWN(vid); + CDR_put_octet(cdrCodec,vid.major); + CDR_put_octet(cdrCodec,vid.minor); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* Host Id */ + CDR_put_ulong(cdrCodec,hid); + + /* App Id */ + CDR_put_ulong(cdrCodec,aid); + + cdrCodec->data_endian=data_endian; + return 16; } /**********************************************************************************/ -int16_t -RTPSHeaderCheck(uint8_t *msg,int32_t len,MessageInterpret *mi) { - if (len<16) return -1; /* message is too small */ - if (msg[0]!='R') return -2; /* header is invalid */ - if (msg[1]!='T') return -2; /* header is invalid */ - if (msg[2]!='P') return -2; /* header is invalid */ - if (msg[3]!='S') return -2; /* header is invalid */ - mi->sourceVersion=*((ProtocolVersion*)(msg+4)); /* ProtocolVersion */ - mi->sourceVendorId=*((VendorId*)(msg+6)); /* Vendor Id */ - mi->sourceHostId=*((HostId*)(msg+8)); /* Host Id */ - conv_u32(&mi->sourceHostId,0); - mi->sourceAppId=*((AppId*)(msg+12)); /* App Id */ - conv_u32(&mi->sourceAppId,0); - mi->haveTimestamp=ORTE_FALSE; /* false */ +int +RTPSHeaderCheck(CDR_Codec *cdrCodec,int32_t len,MessageInterpret *mi) { + CDR_Endianness data_endian; + CORBA_octet c; + + if (len<16) return -1; /* message is too small */ + CDR_get_octet(cdrCodec,&c); + if (c!='R') return -2; /* header is invalid */ + CDR_get_octet(cdrCodec,&c); + if (c!='T') return -2; + CDR_get_octet(cdrCodec,&c); + if (c!='P') return -2; + CDR_get_octet(cdrCodec,&c); + if (c!='S') return -2; + + /* Protocol Version */ + CDR_get_octet(cdrCodec,&mi->sourceVersion.major); + CDR_get_octet(cdrCodec,&mi->sourceVersion.minor); + + /* Vendor Id */ + CDR_get_octet(cdrCodec,&mi->sourceVendorId.major); + CDR_get_octet(cdrCodec,&mi->sourceVendorId.minor); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* Host Id */ + CDR_get_ulong(cdrCodec,&mi->sourceHostId); + + /* App Id */ + CDR_get_ulong(cdrCodec,&mi->sourceAppId); + + cdrCodec->data_endian=data_endian; + + mi->haveTimestamp=ORTE_FALSE; /* false */ return 0; } diff --git a/orte/liborte/RTPSHeardBeat.c b/orte/liborte/RTPSHeardBeat.c index 6311783..0e4c052 100644 --- a/orte/liborte/RTPSHeardBeat.c +++ b/orte/liborte/RTPSHeardBeat.c @@ -23,35 +23,63 @@ /**********************************************************************************/ int -RTPSHeardBeatCreate(uint8_t *rtps_msg,uint32_t max_msg_len, - SequenceNumber *firstSeqNumber,SequenceNumber *lastSeqNumber, - ObjectId woid,ObjectId roid,Boolean f_bit) { - if (max_msg_len<28) return -1; - rtps_msg[0]=(uint8_t)HEARTBEAT; - rtps_msg[1]=ORTE_MY_MBO; - if (f_bit) rtps_msg[1]|=2; - *((ParameterLength*)(rtps_msg+2))=24; - conv_u32(&roid,0); - *((ObjectId*)(rtps_msg+4))=roid; - conv_u32(&woid,0); - *((ObjectId*)(rtps_msg+8))=woid; - *((SequenceNumber*)(rtps_msg+12))=*firstSeqNumber; - *((SequenceNumber*)(rtps_msg+20))=*lastSeqNumber; +RTPSHeartBeatCreate(CDR_Codec *cdrCodec, + SequenceNumber *fsn,SequenceNumber *lsn, + ObjectId roid,ObjectId woid,Boolean f_bit) +{ + CDR_Endianness data_endian; + CORBA_octet flags; + + if (cdrCodec->buf_lenwptr+28) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,HEARTBEAT); + + /* flags */ + flags=cdrCodec->data_endian; + if (f_bit) flags|=2; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,24); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_put_ulong(cdrCodec,roid); + + /* writerObjectId */ + CDR_put_ulong(cdrCodec,woid); + + cdrCodec->data_endian=data_endian; + + /* firstSeqNumber */ + CDR_put_ulong(cdrCodec,fsn->high); + CDR_put_ulong(cdrCodec,fsn->low); + + /* lastSeqNumber */ + CDR_put_ulong(cdrCodec,lsn->high); + CDR_put_ulong(cdrCodec,lsn->low); + return 28; } /**********************************************************************************/ void -HeardBeatProc(CSTReader *cstReader,GUID_RTPS *writerGUID, +HeartBeatProc(CSTReader *cstReader,GUID_RTPS *writerGUID, SequenceNumber *fsn,SequenceNumber *lsn,char f_bit) { CSTRemoteWriter *cstRemoteWriter; if (!cstReader) return; cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); if (!cstRemoteWriter) return; + cstRemoteWriter->firstSN=*fsn; cstRemoteWriter->lastSN=*lsn; cstRemoteWriter->ACKRetriesCounter=0; + if (SeqNumberCmp(cstRemoteWriter->sn,*lsn)>0) cstRemoteWriter->sn=*lsn; if (SeqNumberCmp(cstRemoteWriter->sn,*fsn)<0) { @@ -59,26 +87,28 @@ HeardBeatProc(CSTReader *cstReader,GUID_RTPS *writerGUID, SeqNumberDec(cstRemoteWriter->sn,*fsn); } } + if ((writerGUID->oid & 0x07) == OID_PUBLICATION) { CSTReaderProcCSChangesIssue(cstRemoteWriter,ORTE_FALSE); } else { CSTReaderProcCSChanges(cstReader->domain,cstRemoteWriter); } + if ((!f_bit) && (cstRemoteWriter->commStateACK==WAITING)) { char queue=1; cstRemoteWriter->commStateACK=ACKPENDING; if ((cstRemoteWriter->guid.oid & 0x07) == OID_PUBLICATION) queue=2; eventDetach(cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->repeatActiveQueryTimer, queue); eventDetach(cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, queue); //metatraffic timer eventAdd(cstReader->domain, - cstRemoteWriter->objectEntryOID->objectEntryAID, + cstRemoteWriter->spobject->objectEntryAID, &cstRemoteWriter->delayResponceTimer, queue, //metatraffic timer "CSTReaderResponceTimer", @@ -91,23 +121,45 @@ HeardBeatProc(CSTReader *cstReader,GUID_RTPS *writerGUID, /**********************************************************************************/ void -RTPSHeardBeat(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi) { +RTPSHeartBeat(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi) { GUID_RTPS writerGUID; - ObjectId roid,woid; + ObjectId roid,woid; SequenceNumber fsn,lsn; - char e_bit,f_bit; CSTReader *cstReader=NULL; + CDR_Endianness data_endian; + CORBA_octet flags; + char f_bit; + + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + f_bit=flags & 2; + + /* move reading possition to begin of submessage */ + cdrCodec->rptr+=2; + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_get_ulong(cdrCodec,&roid); + + /* writerObjectId */ + CDR_get_ulong(cdrCodec,&woid); + + cdrCodec->data_endian=data_endian; + + /* firstSeqNumber */ + CDR_get_ulong(cdrCodec,&fsn.high); + CDR_get_ulong(cdrCodec,&fsn.low); + + /* lastSeqNumber */ + CDR_get_ulong(cdrCodec,&lsn.high); + CDR_get_ulong(cdrCodec,&lsn.low); - e_bit=rtps_msg[1] & 0x01; - f_bit=(rtps_msg[1] & 0x02)>>1; - roid=*((ObjectId*)(rtps_msg+4)); /* readerObjectId */ - conv_u32(&roid,0); - woid=*((ObjectId*)(rtps_msg+8)); /* writerObjectId */ - conv_u32(&woid,0); - fsn=*((SequenceNumber*)(rtps_msg+12)); /* firstSeqNumber */ - conv_sn(&fsn,e_bit); - lsn=*((SequenceNumber*)(rtps_msg+20)); /* lastSeqNumber */ - conv_sn(&lsn,e_bit); if (SeqNumberCmp(fsn,lsn)==1) return; // lsn break writerGUID.hid=mi->sourceHostId; writerGUID.aid=mi->sourceAppId; @@ -130,6 +182,7 @@ RTPSHeardBeat(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi) { cstReader=&d->readerApplications; } } + if ((d->guid.aid & 3)==MANAGEDAPPLICATION) { switch (writerGUID.oid) { case OID_WRITE_MGR: @@ -149,18 +202,21 @@ RTPSHeardBeat(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi) { cstReader=&d->readerSubscriptions; break; } + if ((writerGUID.oid & 0x07) == OID_PUBLICATION) { pthread_rwlock_rdlock(&d->subscriptions.lock); gavl_cust_for_each(CSTReader,&d->subscriptions,cstReader) { pthread_rwlock_wrlock(&cstReader->lock); - HeardBeatProc(cstReader,&writerGUID,&fsn,&lsn,f_bit); + HeartBeatProc(cstReader,&writerGUID,&fsn,&lsn,f_bit); pthread_rwlock_unlock(&cstReader->lock); } pthread_rwlock_unlock(&d->subscriptions.lock); cstReader=NULL; } } - HeardBeatProc(cstReader,&writerGUID,&fsn,&lsn,f_bit); + + HeartBeatProc(cstReader,&writerGUID,&fsn,&lsn,f_bit); + if (cstReader) pthread_rwlock_unlock(&cstReader->lock); } diff --git a/orte/liborte/RTPSInfoDST.c b/orte/liborte/RTPSInfoDST.c index e8c2f94..75fe0a3 100644 --- a/orte/liborte/RTPSInfoDST.c +++ b/orte/liborte/RTPSInfoDST.c @@ -22,15 +22,23 @@ #include "orte_all.h" /**********************************************************************************/ -void RTPSInfoDST(uint8_t *rtps_msg,MessageInterpret *mi) { +void RTPSInfoDST(CDR_Codec *cdrCodec,MessageInterpret *mi) { + CDR_Endianness data_endian; HostId hid; AppId aid; - //parsing - hid=*((HostId*)(rtps_msg+4)); /* HostId */ - conv_u32(&hid,0); - aid=*((uint32_t*)(rtps_msg+8)); /* AppId */ - conv_u32(&aid,0); + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* Host Id */ + CDR_put_ulong(cdrCodec, + *(CORBA_unsigned_long*)&hid); + + /* App Id */ + CDR_put_ulong(cdrCodec, + *(CORBA_unsigned_long*)&aid); + + cdrCodec->data_endian=data_endian; debug(42,3) (" RTPSInfoDST:\n"); debug(42,4) (" hid:0x%x, aid:0x%x\n",hid,aid); diff --git a/orte/liborte/RTPSInfoREPLY.c b/orte/liborte/RTPSInfoREPLY.c index 0802321..6f34b28 100644 --- a/orte/liborte/RTPSInfoREPLY.c +++ b/orte/liborte/RTPSInfoREPLY.c @@ -22,32 +22,53 @@ #include "orte_all.h" /**********************************************************************************/ -int32_t -RTPSInfoREPLYCreate(uint8_t *rtps_msg,uint32_t max_msg_len, - IPAddress ipaddress,Port port) { - - if (max_msg_len<12) return -1; - rtps_msg[0]=(uint8_t)INFO_REPLY; - rtps_msg[1]=ORTE_MY_MBO; - *((ParameterLength*)(rtps_msg+2))=8; - *((ObjectId*)(rtps_msg+4))=ipaddress; - *((ObjectId*)(rtps_msg+8))=port; +int +RTPSInfoREPLYCreate(CDR_Codec *cdrCodec,IPAddress ipaddress,Port port) +{ + CORBA_octet flags; + + if (cdrCodec->buf_lenwptr+12) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,INFO_REPLY); + + /* flags */ + flags=cdrCodec->data_endian; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,8); + + /* ipaddress */ + CDR_put_ulong(cdrCodec,ipaddress); + + /* port */ + CDR_put_ulong(cdrCodec,port); return 12; } /**********************************************************************************/ void -RTPSInfoREPLY(uint8_t *rtps_msg,MessageInterpret *mi) { +RTPSInfoREPLY(CDR_Codec *cdrCodec,MessageInterpret *mi) +{ + CORBA_octet flags; IPAddress ipa; Port port; - int8_t e_bit; - - //Parsing - e_bit=rtps_msg[1] & 0x01; - ipa=*((IPAddress*)(rtps_msg+4)); /* unicastReplyIPAddress */ - conv_u32(&ipa,e_bit); - port=*((Port*)(rtps_msg+8)); /* unicastReplyPort */ - conv_u32(&ipa,e_bit); + + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + + /* move reading possition to begin of submessage */ + cdrCodec->rptr+=2; + + /* unicastReplyIPAddress */ + CDR_get_ulong(cdrCodec,&ipa); + + /* unicastReplyPort */ + CDR_get_ulong(cdrCodec,&port); debug(43,3) ("recv: RTPS InfoREPLY from 0x%x-0x%x\n", mi->sourceHostId,mi->sourceAppId); @@ -56,11 +77,14 @@ RTPSInfoREPLY(uint8_t *rtps_msg,MessageInterpret *mi) { mi->unicastReplyIPAddress=ipa; } mi->unicastReplyPort=port; - if (rtps_msg[1] & 0x02) { - ipa=*((uint32_t*)(rtps_msg+12)); /* multicastReplyIPAddress */ - conv_u32(&ipa,e_bit); - port=*((uint32_t*)(rtps_msg+16)); /* multicastReplyPort */ - conv_u32(&port,e_bit); + + if (flags & 0x02) { + /* multicastReplyIPAddress */ + CDR_get_ulong(cdrCodec,&ipa); + + /* multicastReplyPort */ + CDR_get_ulong(cdrCodec,&port); + mi->multicastReplyIPAddress=ipa; mi->multicastReplyPort=port; } else { diff --git a/orte/liborte/RTPSInfoSRC.c b/orte/liborte/RTPSInfoSRC.c index ee6d1c1..89263ba 100644 --- a/orte/liborte/RTPSInfoSRC.c +++ b/orte/liborte/RTPSInfoSRC.c @@ -22,25 +22,37 @@ #include "orte_all.h" /**********************************************************************************/ -void RTPSInfoSRC(uint8_t *rtps_msg,MessageInterpret *mi) { +void RTPSInfoSRC(CDR_Codec *cdrCodec,MessageInterpret *mi) { IPAddress ipa; ProtocolVersion protocol; VendorId vid; HostId hid; AppId aid; - int8_t e_bit; char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; + CDR_Endianness data_endian; - //Parsing - e_bit=rtps_msg[1] & 0x01; - ipa=*((IPAddress*)(rtps_msg+4)); /* appIPAddress */ - conv_u32(&ipa,e_bit); - protocol=*((ProtocolVersion*)(rtps_msg+8)); /* ProtocolVersion */ - vid=*((VendorId*)(rtps_msg+10)); /* Vendor Id */ - hid=*((HostId*)(rtps_msg+12)); /* HostId */ - conv_u32(&hid,0); - aid=*((AppId*)(rtps_msg+16)); /* AppId */ - conv_u32(&aid,0); + /* appIPAddress */ + CDR_get_ulong(cdrCodec,&ipa); + + /* ProtocolVersion */ + CDR_get_octet(cdrCodec,&protocol.major); + CDR_get_octet(cdrCodec,&protocol.minor); + + /* Vendor Id */ + CDR_get_octet(cdrCodec,&vid.major); + CDR_get_octet(cdrCodec,&vid.minor); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* HostId */ + CDR_get_ulong(cdrCodec,&hid); + + /* AppId */ + CDR_get_ulong(cdrCodec,&aid); + + cdrCodec->data_endian=data_endian; debug(44,3) (" RTPSInfoSRC: \n"); debug(44,4) (" appIPAddress:%s\n",IPAddressToString(ipa,sIPAddress)); diff --git a/orte/liborte/RTPSInfoTS.c b/orte/liborte/RTPSInfoTS.c index fe893ff..058fcef 100644 --- a/orte/liborte/RTPSInfoTS.c +++ b/orte/liborte/RTPSInfoTS.c @@ -22,26 +22,55 @@ #include "orte_all.h" /**********************************************************************************/ -int32_t -RTPSInfoTSCreate(uint8_t *rtps_msg,uint32_t max_msg_len,NtpTime time) { - if (max_msg_len<12) return -1; - rtps_msg[0]=(uint8_t)INFO_TS; - rtps_msg[1]=ORTE_MY_MBO; //I-bit = 0 - *((ParameterLength*)(rtps_msg+2))=8; - *((NtpTime*)(rtps_msg+4))=time; - return 0; +int +RTPSInfoTSCreate(CDR_Codec *cdrCodec,NtpTime time) { + CORBA_octet flags; + + if (cdrCodec->buf_lenwptr+12) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,INFO_TS); + + /* flags - I-bit=0 */ + flags=cdrCodec->data_endian; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,8); + + /* time in seconds */ + CDR_put_long(cdrCodec,time.seconds); + + /* time in seconds / 2^32 */ + CDR_put_ulong(cdrCodec,time.fraction); + + return 12; } /**********************************************************************************/ void -RTPSInfoTS(uint8_t *rtps_msg,MessageInterpret *mi) { - int8_t e_bit=rtps_msg[1] & 0x01; - char buff[MAX_STRING_NTPTIME_LENGTH]; +RTPSInfoTS(CDR_Codec *cdrCodec,MessageInterpret *mi) { + char buff[MAX_STRING_NTPTIME_LENGTH]; + CORBA_octet flags; - if ((rtps_msg[1] & 0x02)==0) { /* I = bit */ + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + + /* move reading possition to begin of submessage */ + cdrCodec->rptr+=2; + + + if ((flags & 0x02)==0) { /* I = bit */ mi->haveTimestamp=ORTE_TRUE; - mi->timestamp=*((NtpTime*)(rtps_msg+4)); - conv_sn((SequenceNumber*)&mi->timestamp,e_bit); + + /* time in seconds */ + CDR_get_long(cdrCodec,&mi->timestamp.seconds); + + /* time in seconds / 2^32 */ + CDR_get_ulong(cdrCodec,&mi->timestamp.fraction); } else { mi->haveTimestamp=ORTE_FALSE; NTPTIME_ZERO(mi->timestamp); diff --git a/orte/liborte/RTPSIssue.c b/orte/liborte/RTPSIssue.c index d798529..a0c0a86 100644 --- a/orte/liborte/RTPSIssue.c +++ b/orte/liborte/RTPSIssue.c @@ -22,45 +22,81 @@ #include "orte_all.h" /**********************************************************************************/ -int32_t -RTPSIssueCreateHeader(uint8_t *rtps_msg,uint32_t max_msg_len,uint32_t length, +int +RTPSIssueCreateHeader(CDR_Codec *cdrCodec,uint32_t length, ObjectId roid,ObjectId woid,SequenceNumber sn) { + CDR_Endianness data_endian; + CORBA_octet flags; - if (max_msg_len<20) return -1; - rtps_msg[0]=(uint8_t)ISSUE; - rtps_msg[1]=ORTE_MY_MBO; - *((ParameterLength*)(rtps_msg+2))=(uint16_t)length; - conv_u32(&roid,0); - *((ObjectId*)(rtps_msg+4))=roid; - conv_u32(&woid,0); - *((ObjectId*)(rtps_msg+8))=woid; - *((SequenceNumber*)(rtps_msg+12))=sn; + if (cdrCodec->buf_lenwptr+20) return -1; + + /* submessage id */ + CDR_put_octet(cdrCodec,ISSUE); + + /* flags */ + flags=cdrCodec->data_endian; + CDR_put_octet(cdrCodec,flags); + + /* length */ + CDR_put_ushort(cdrCodec,length); + + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_put_ulong(cdrCodec,roid); + + /* writerObjectId */ + CDR_put_ulong(cdrCodec,woid); + + cdrCodec->data_endian=data_endian; + + CDR_put_ulong(cdrCodec,sn.high); + CDR_put_ulong(cdrCodec,sn.low); return 0; } /**********************************************************************************/ void -RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress) { +RTPSIssue(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress) { GUID_RTPS guid,writerGUID; ObjectId roid,woid; - SequenceNumber sn,sn_tmp; - int8_t e_bit,p_bit; - uint16_t submsg_len; + SequenceNumber sn,sn_tmp; + CORBA_octet flags; + CORBA_unsigned_short submsg_len; CSTReader *cstReader; CSTRemoteWriter *cstRemoteWriter; CSChange *csChange=NULL; + CDR_Endianness data_endian; + + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + + /* submessage length */ + CDR_get_ushort(cdrCodec,&submsg_len); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_get_ulong(cdrCodec,&roid); + + /* writerObjectId */ + CDR_get_ulong(cdrCodec,&woid); + + cdrCodec->data_endian=data_endian; + + /* sn */ + CDR_get_ulong(cdrCodec,&sn.high); + CDR_get_ulong(cdrCodec,&sn.low); + + /* at this moment is not supported p_bit */ + if (flags & 0x02) return; /* p_bit */ - e_bit=rtps_msg[1] & 0x01; - p_bit=(rtps_msg[1] & 0x02)>>1; - submsg_len=*((uint16_t*)(rtps_msg+2)); - conv_u16(&submsg_len,e_bit); - roid=*((ObjectId*)(rtps_msg+4)); /* readerObjectId */ - conv_u32(&roid,0); - woid=*((ObjectId*)(rtps_msg+8)); /* writerObjectId */ - conv_u32(&woid,0); - sn=*((SequenceNumber*)(rtps_msg+12)); /* sn */ - conv_sn(&sn,e_bit); - if (p_bit) return; /* at this moment is not supported p_bit */ writerGUID.hid=mi->sourceHostId; writerGUID.aid=mi->sourceAppId; writerGUID.oid=woid; @@ -71,6 +107,7 @@ RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderI pthread_rwlock_rdlock(&d->subscriptions.lock); guid=d->guid; guid.oid=roid; + gavl_cust_for_each(CSTReader,&d->subscriptions,cstReader) { if (roid!=OID_UNKNOWN) cstReader=CSTReader_find(&d->subscriptions,&guid); @@ -81,10 +118,10 @@ RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderI cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); if (cstRemoteWriter) { ORTEPublProp *pp,*pps; - pp=(ORTEPublProp*)cstRemoteWriter->objectEntryOID->attributes; + pp=(ORTEPublProp*)cstRemoteWriter->spobject->attributes; if (cstReader->cstRemoteWriterSubscribed!=NULL) { pps=(ORTEPublProp*)cstReader->cstRemoteWriterSubscribed-> - objectEntryOID->attributes; + spobject->attributes; if (pp->strength>pps->strength) { cstReader->cstRemoteWriterSubscribed=cstRemoteWriter; } @@ -106,21 +143,24 @@ RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderI cstReader, &pp->persistence); } + if ((SeqNumberCmp(sn,cstRemoteWriter->sn)>0) && //have to be sn>writer_sn (CSChangeFromWriter_find(cstRemoteWriter,&sn)==NULL)) { + csChange=(CSChange*)MALLOC(sizeof(CSChange)); - csChange->cdrStream.buffer=NULL; csChange->guid=writerGUID; csChange->sn=sn; SEQUENCE_NUMBER_NONE(csChange->gapSN); CSChangeAttributes_init_head(csChange); - csChange->cdrStream.length=submsg_len-16; - csChange->cdrStream.buffer=(int8_t*)MALLOC(submsg_len-16); - csChange->cdrStream.bufferPtr=csChange->cdrStream.buffer; - csChange->cdrStream.needByteSwap=ORTE_FALSE; - if (e_bit ^ ORTE_MY_MBO) - csChange->cdrStream.needByteSwap=ORTE_TRUE; - memcpy(csChange->cdrStream.buffer,rtps_msg+20,submsg_len-16); + + CDR_codec_init_static(&csChange->cdrCodec); + CDR_buffer_init(&csChange->cdrCodec, + submsg_len-16); + csChange->cdrCodec.data_endian=cdrCodec->data_endian; + + memcpy(csChange->cdrCodec.buffer, + &cdrCodec->buffer[cdrCodec->rptr],submsg_len-16); + if (SeqNumberCmp(sn,cstRemoteWriter->firstSN)>=0) { //sn>=firstSN if ((sp->reliabilityRequested & PID_VALUE_RELIABILITY_STRICT)!=0) { if (sp->recvQueueSize>cstRemoteWriter->csChangesCounter) { @@ -157,7 +197,7 @@ RTPSIssue(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderI } } if (csChange) { - FREE(csChange->cdrStream.buffer); + FREE(csChange->cdrCodec.buffer); FREE(csChange); } CSTReaderProcCSChangesIssue(cstRemoteWriter,ORTE_FALSE); diff --git a/orte/liborte/RTPSPad.c b/orte/liborte/RTPSPad.c index 1b50cf4..1b2363a 100644 --- a/orte/liborte/RTPSPad.c +++ b/orte/liborte/RTPSPad.c @@ -22,7 +22,7 @@ #include "orte_all.h" /**********************************************************************************/ -void RTPSPad(uint8_t *rtps_msg,MessageInterpret *mi) { +void RTPSPad(CDR_Codec *cdrCodec,MessageInterpret *mi) { //nothing to do debug(41,3) (" RTPSInfoPAD:\n"); diff --git a/orte/liborte/RTPSUtils.c b/orte/liborte/RTPSUtils.c index bf3b7b9..0d0d8f9 100644 --- a/orte/liborte/RTPSUtils.c +++ b/orte/liborte/RTPSUtils.c @@ -51,10 +51,4 @@ int gavl_cmp_str(const char *const *a,const char *const *b) { return strcmp(*a,*b); } -/**********************************************************************************/ -int -getMaxMessageLength(ORTEDomain *d) { - return d->domainProp.wireProp.metaBytesPerPacket-d->mbSend.cdrStream.length- - RTPS_HEADER_LENGTH-20; -} diff --git a/orte/liborte/RTPSVar.c b/orte/liborte/RTPSVar.c index fed6653..aa497be 100644 --- a/orte/liborte/RTPSVar.c +++ b/orte/liborte/RTPSVar.c @@ -21,369 +21,97 @@ #include "orte_all.h" -void NewPublisher(ORTEDomain *d,ObjectEntryOID *op); -void NewSubscriber(ORTEDomain *d,ObjectEntryOID *os); - /**********************************************************************************/ -void -RTPSVar(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPAddress) { - GUID_RTPS objectGUID,writerGUID; - ObjectId roid,woid; - SequenceNumber sn; - int8_t e_bit,p_bit,a_bit; - uint16_t submsg_len; - CSTReader *cstReader=NULL; - CSTRemoteWriter *cstRemoteWriter=NULL; - CSTRemoteReader *cstRemoteReader=NULL; - CSChange *csChange; - ObjectEntryAID *objectEntryAID; - ObjectEntryOID *objectEntryOID; +int +RTPSVarCreate(CDR_Codec *cdrCodec,ObjectId roid,ObjectId woid,CSChange *csChange) +{ + CDR_Endianness data_endian; + CORBA_octet flags; + int len,swptr; - e_bit=rtps_msg[1] & 0x01; - p_bit=(rtps_msg[1] & 0x02)>>1; - a_bit=(rtps_msg[1] & 0x04)>>2; - submsg_len=*((uint16_t*)(rtps_msg+2)); - conv_u16(&submsg_len,e_bit); - roid=*((ObjectId*)(rtps_msg+4)); /* readerObjectId */ - conv_u32(&roid,0); - woid=*((ObjectId*)(rtps_msg+8)); /* writerObjectId */ - conv_u32(&woid,0); - if (rtps_msg[1] & 0x08) { /* bit H */ - objectGUID.hid=*((HostId*)(rtps_msg+12)); /* HostId */ - conv_u32(&objectGUID.hid,0); - objectGUID.aid=*((AppId*)(rtps_msg+16)); /* AppId */ - conv_u32(&objectGUID.aid,0); - } else { - rtps_msg-=8; - objectGUID.hid=mi->sourceHostId; - objectGUID.aid=mi->sourceAppId; - } - objectGUID.oid=*((ObjectId*)(rtps_msg+20)); /* ObjectId */ - conv_u32(&objectGUID.oid,0); - sn=*((SequenceNumber*)(rtps_msg+24)); /* writerSN */ - conv_sn(&sn,e_bit); - writerGUID.hid=mi->sourceHostId; - writerGUID.aid=mi->sourceAppId; - writerGUID.oid=woid; - debug(46,3) ("recv: RTPS_VAR(0x%x) from 0x%x-0x%x sn:%u\n", - woid,mi->sourceHostId,mi->sourceAppId,sn.low); + swptr=cdrCodec->wptr; + + /* submessage id */ + CDR_put_octet(cdrCodec,VAR); + + /* flags */ + flags=cdrCodec->data_endian; + if (!CSChangeAttributes_is_empty(csChange)) + flags|=2; + if (csChange->alive) + flags|=4; + if (csChange->guid.oid==OID_APP) + flags|=8; + CDR_put_octet(cdrCodec,flags); + + /* length */ + cdrCodec->wptr+=2; + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_put_ulong(cdrCodec,roid); - //prepare csChange - csChange=(CSChange*)MALLOC(sizeof(CSChange)); - csChange->cdrStream.buffer=NULL; - csChange->guid=objectGUID; - if (a_bit) csChange->alive=ORTE_TRUE; - else csChange->alive=ORTE_FALSE; - if (p_bit) - parameterDecodeStreamToCSChange(csChange,rtps_msg+32,submsg_len,e_bit); - else - CSChangeAttributes_init_head(csChange); - csChange->sn=sn; - SEQUENCE_NUMBER_NONE(csChange->gapSN); + /* writerObjectId */ + CDR_put_ulong(cdrCodec,woid); - //Manager - if ((d->guid.aid & 0x03)==MANAGER) { - if ((writerGUID.oid==OID_WRITE_APPSELF) && - ((writerGUID.aid & 0x03)==MANAGER)) { - //readerManagers - pthread_rwlock_wrlock(&d->readerManagers.lock); - pthread_rwlock_wrlock(&d->writerApplicationSelf.lock); - cstReader=&d->readerManagers; - gavl_cust_for_each(CSTRemoteReader, - &d->writerApplicationSelf, - cstRemoteReader) { - if (cstRemoteReader->guid.hid==senderIPAddress) break; - } - if (cstRemoteReader) { - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!objectEntryOID) { - // create new RemoteReader - AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(ap); - parameterUpdateApplication(csChange,ap); - if (generateEvent(d,&objectGUID,(void*)ap,csChange->alive) && - csChange->alive) { - debug(46,2) ("manager 0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid); - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)ap); - CSTWriterRefreshAllCSChanges(d,cstRemoteReader); - CSTReaderAddRemoteWriter(d,cstReader,objectEntryOID,writerGUID.oid); - pthread_rwlock_wrlock(&d->readerApplications.lock); - pthread_rwlock_wrlock(&d->writerApplications.lock); - CSTReaderAddRemoteWriter(d,&d->readerApplications,objectEntryOID,OID_WRITE_APP); - CSTWriterAddRemoteReader(d,&d->writerApplications,objectEntryOID,OID_READ_APP); - pthread_rwlock_unlock(&d->writerApplications.lock); - pthread_rwlock_unlock(&d->readerApplications.lock); - //all applications from manager node set expiration timer - gavl_cust_for_each(ObjectEntryAID, - objectEntryOID->objectEntryHID,objectEntryAID) { - ObjectEntryOID *objectEntryOID1; - objectEntryOID1=ObjectEntryOID_find(objectEntryAID,&objectGUID.oid); - objectEntryRefreshApp(d,objectEntryOID1); - } - } else { - FREE(ap); - } - } - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if (cstRemoteWriter) - objectEntryRefreshApp(d,cstRemoteWriter->objectEntryOID); - } else { - //deny Manager - } - pthread_rwlock_unlock(&d->writerApplicationSelf.lock); - } - if (((writerGUID.oid==OID_WRITE_APPSELF) && - ((writerGUID.aid & 0x03)==MANAGEDAPPLICATION)) || - ((writerGUID.oid==OID_WRITE_APP) && - ((writerGUID.aid & 0x03)==MANAGER))) { - //readerApplication - pthread_rwlock_wrlock(&d->readerApplications.lock); - cstReader=&d->readerApplications; - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!objectEntryOID) { - AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(ap); - parameterUpdateApplication(csChange,ap); - if (generateEvent(d,&objectGUID,(void*)ap,csChange->alive) && - csChange->alive) { - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)ap); - objectEntryOID->appMOM=getTypeApp(d,ap,senderIPAddress); - if (objectEntryOID->appMOM) { - debug(46,2) ("MOM application 0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid); - //increment vargAppsSequenceNumber and make csChange - SeqNumberInc(d->appParams->vargAppsSequenceNumber, - d->appParams->vargAppsSequenceNumber); - //WAS & WM is locked inside next function - appSelfParamChanged(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE,ORTE_TRUE); - CSTReaderAddRemoteWriter(d,cstReader, - objectEntryOID,writerGUID.oid); - CSTWriterAddRemoteReader(d,&d->writerManagers, - objectEntryOID,OID_READ_MGR); - pthread_rwlock_unlock(&d->writerApplicationSelf.lock); - pthread_rwlock_unlock(&d->writerManagers.lock); - } else { - debug(46,2) ("OAM application 0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid); - } - pthread_rwlock_wrlock(&d->writerApplications.lock); - CSTWriterAddRemoteReader(d,&d->writerApplications,objectEntryOID,OID_READ_APP); - pthread_rwlock_unlock(&d->writerApplications.lock); - } else { - FREE(ap); - } - } - if (objectEntryOID) { - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if (objectEntryOID->appMOM) { - objectEntryRefreshApp(d,objectEntryOID); - } else { - //turn off expiration timer - eventDetach(d, - objectEntryOID->objectEntryAID, - &objectEntryOID->expirationPurgeTimer, - 0); - debug(46,3) ("for application 0x%x-0x%x turn off expiration timer\n", - objectEntryOID->guid.hid,objectEntryOID->guid.aid); - } - } - } - } - //ManagedApplication - if ((d->guid.aid & 3)==MANAGEDAPPLICATION) { - switch (writerGUID.oid) { - case OID_WRITE_MGR: - pthread_rwlock_wrlock(&d->readerManagers.lock); - cstReader=&d->readerManagers; - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!objectEntryOID) { - AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(ap); - parameterUpdateApplication(csChange,ap); - if (generateEvent(d,&objectGUID,(void*)ap,csChange->alive) && - csChange->alive) { - debug(46,2) ("new manager 0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid); - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)ap); - objectEntryOID->privateCreated=ORTE_FALSE; - pthread_rwlock_wrlock(&d->readerApplications.lock); - CSTReaderAddRemoteWriter(d,&d->readerApplications, - objectEntryOID,OID_WRITE_APP); - pthread_rwlock_unlock(&d->readerApplications.lock); - //all applications from manager node set expiration timer - gavl_cust_for_each(ObjectEntryAID, - objectEntryOID->objectEntryHID,objectEntryAID) { - ObjectEntryOID *objectEntryOID1; - objectEntryOID1=ObjectEntryOID_find(objectEntryAID,&objectGUID.oid); - objectEntryRefreshApp(d,objectEntryOID1); - } - } else { - FREE(ap); - } - } else { - GUID_RTPS guid_wapp=objectGUID; - guid_wapp.oid=OID_WRITE_APP; - pthread_rwlock_wrlock(&d->readerApplications.lock); - cstRemoteWriter=CSTRemoteWriter_find(&d->readerApplications,&guid_wapp); - //setup state of cstRemoteWriter on send ACK to manager - if (cstRemoteWriter) { - if (cstRemoteWriter->commStateACK==WAITING) { - eventDetach(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, - &cstRemoteWriter->repeatActiveQueryTimer, - 1); //metatraffic timer - eventAdd(d, - cstRemoteWriter->objectEntryOID->objectEntryAID, - &cstRemoteWriter->repeatActiveQueryTimer, - 1, //metatraffic timer - "CSTReaderQueryTimer", - CSTReaderQueryTimer, - &cstRemoteWriter->cstReader->lock, - cstRemoteWriter, - NULL); - } - } - pthread_rwlock_unlock(&d->readerApplications.lock); - } - objectEntryRefreshApp(d,objectEntryOID); - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if ((!cstRemoteWriter) && - (objectGUID.hid==writerGUID.hid) && (objectGUID.aid==writerGUID.aid)) { - cstRemoteWriter= - CSTReaderAddRemoteWriter(d,cstReader,objectEntryOID,writerGUID.oid); - } - break; - case OID_WRITE_APP: - pthread_rwlock_wrlock(&d->readerApplications.lock); - cstReader=&d->readerApplications; - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if (cstRemoteWriter) { - GUID_RTPS guid_tmp=objectGUID; - guid_tmp.oid=OID_WRITE_PUBL; - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!CSTRemoteWriter_find(&d->readerPublications,&guid_tmp)) { - if (!objectEntryOID) { - AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); - AppParamsInit(ap); - parameterUpdateApplication(csChange,ap); - if (generateEvent(d,&objectGUID,(void*)ap,csChange->alive) && - csChange->alive) { - debug(46,2) ("new application 0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid); - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)ap); - objectEntryOID->privateCreated=ORTE_FALSE; - } else { - FREE(ap); - break; - } - } - pthread_rwlock_wrlock(&d->readerPublications.lock); - pthread_rwlock_wrlock(&d->readerSubscriptions.lock); - pthread_rwlock_wrlock(&d->writerPublications.lock); - pthread_rwlock_wrlock(&d->writerSubscriptions.lock); - CSTReaderAddRemoteWriter(d,&d->readerPublications, - objectEntryOID,OID_WRITE_PUBL); - CSTReaderAddRemoteWriter(d,&d->readerSubscriptions, - objectEntryOID,OID_WRITE_SUBS); - CSTWriterAddRemoteReader(d,&d->writerPublications, - objectEntryOID,OID_READ_PUBL); - CSTWriterAddRemoteReader(d,&d->writerSubscriptions, - objectEntryOID,OID_READ_SUBS); - pthread_rwlock_unlock(&d->readerPublications.lock); - pthread_rwlock_unlock(&d->readerSubscriptions.lock); - pthread_rwlock_unlock(&d->writerPublications.lock); - pthread_rwlock_unlock(&d->writerSubscriptions.lock); - } - if (objectEntryOID) { - //turn off expiration timer - eventDetach(d, - objectEntryOID->objectEntryAID, - &objectEntryOID->expirationPurgeTimer, - 0); - debug(46,3) ("for application 0x%x-0x%x turn off expiration timer\n", - objectEntryOID->guid.hid, - objectEntryOID->guid.aid); - } - } - break; - case OID_WRITE_PUBL: - pthread_rwlock_wrlock(&d->readerPublications.lock); - cstReader=&d->readerPublications; - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if (cstRemoteWriter) { - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!objectEntryOID) { - ORTEPublProp *pp=(ORTEPublProp*)MALLOC(sizeof(ORTEPublProp)); - PublParamsInit(pp); - parameterUpdatePublication(csChange,pp); - if (generateEvent(d,&objectGUID,(void*)pp,csChange->alive) && - csChange->alive) { - debug(46,2) ("new publisher 0x%x-0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid,objectGUID.oid); - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)pp); - objectEntryOID->privateCreated=ORTE_FALSE; - pthread_rwlock_wrlock(&d->psEntry.publicationsLock); - PublicationList_insert(&d->psEntry,objectEntryOID); - pthread_rwlock_unlock(&d->psEntry.publicationsLock); - NewPublisher(d,objectEntryOID); - } else - FREE(pp); - } else { - if ((!PublicationList_find(&d->psEntry,&objectGUID)) && - csChange->alive) { - pthread_rwlock_wrlock(&d->psEntry.publicationsLock); - PublicationList_insert(&d->psEntry,objectEntryOID); - pthread_rwlock_unlock(&d->psEntry.publicationsLock); - NewPublisher(d,objectEntryOID); - } - } - } - break; - case OID_WRITE_SUBS: - pthread_rwlock_wrlock(&d->readerSubscriptions.lock); - cstReader=&d->readerSubscriptions; - cstRemoteWriter=CSTRemoteWriter_find(cstReader,&writerGUID); - if (cstRemoteWriter) { - objectEntryOID=objectEntryFind(d,&objectGUID); - if (!objectEntryOID) { - ORTESubsProp *sp=(ORTESubsProp*)MALLOC(sizeof(ORTESubsProp)); - SubsParamsInit(sp); - parameterUpdateSubscription(csChange,sp); - if (generateEvent(d,&objectGUID,(void*)sp,csChange->alive) && - csChange->alive) { - debug(46,2) ("new subscriber 0x%x-0x%x-0x%x accepted\n", - objectGUID.hid,objectGUID.aid,objectGUID.oid); - objectEntryOID=objectEntryAdd(d,&objectGUID,(void*)sp); - objectEntryOID->privateCreated=ORTE_FALSE; - pthread_rwlock_wrlock(&d->psEntry.subscriptionsLock); - SubscriptionList_insert(&d->psEntry,objectEntryOID); - pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); - NewSubscriber(d,objectEntryOID); - } else - FREE(sp); - } else { - if ((!SubscriptionList_find(&d->psEntry,&objectGUID)) && - csChange->alive) { - pthread_rwlock_wrlock(&d->psEntry.subscriptionsLock); - SubscriptionList_insert(&d->psEntry,objectEntryOID); - pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); - NewSubscriber(d,objectEntryOID); - } - } - } - break; + if (csChange->guid.oid==OID_APP) { + /* hid */ + CDR_put_ulong(cdrCodec,csChange->guid.hid); + + /* aid */ + CDR_put_ulong(cdrCodec,csChange->guid.aid); + } + + /* oid */ + CDR_put_ulong(cdrCodec,csChange->guid.oid); + + cdrCodec->data_endian=data_endian; + + /* seqNumber */ + CDR_put_ulong(cdrCodec,csChange->sn.high); + if (CDR_put_ulong(cdrCodec,csChange->sn.low)==CORBA_FALSE) { + cdrCodec->wptr=swptr; + return -1; + } + + /* parameters */ + if (!CSChangeAttributes_is_empty(csChange)) { + if (parameterCodeCodecFromCSChange(csChange,cdrCodec)<0) { + cdrCodec->wptr=swptr; + return -1; } } + + /* count length of message */ + len=cdrCodec->wptr-swptr; + + /* length */ + cdrCodec->wptr=swptr+2; + CDR_put_ushort(cdrCodec,len-4); + + cdrCodec->wptr=swptr+len; + + return len; +} + +/**********************************************************************************/ +void +RTPSVarFinish(CSTReader *cstReader,CSTRemoteWriter *cstRemoteWriter, + CSChange *csChange) { + if (cstReader && cstRemoteWriter) { debug(46,10) ("recv: processing CSChange\n"); - if (SeqNumberCmp(sn,cstRemoteWriter->sn)>0) { //have to be sn>writer_sn + if (SeqNumberCmp(csChange->sn,cstRemoteWriter->sn)>0) { //have to be sn>writer_sn CSTReaderAddCSChange(cstRemoteWriter,csChange); - CSTReaderProcCSChanges(d,cstRemoteWriter); + CSTReaderProcCSChanges(cstReader->domain,cstRemoteWriter); csChange=NULL; } } + if (csChange) { //destroy csChange if any parameterDelete(csChange); @@ -393,8 +121,165 @@ RTPSVar(ORTEDomain *d,uint8_t *rtps_msg,MessageInterpret *mi,IPAddress senderIPA pthread_rwlock_unlock(&cstReader->lock); return; } -} +} + +/**********************************************************************************/ +void +RTPSVarManager(ORTEDomain *d,CSChange *csChange,GUID_RTPS *writerGUID, + IPAddress senderIPAddress) +{ + CSTReader *cstReader=NULL; + CSTRemoteReader *cstRemoteReader=NULL; + CSTRemoteWriter *cstRemoteWriter=NULL; + ObjectEntryAID *objectEntryAID; + ObjectEntryOID *objectEntryOID; + Boolean usedMulticast=ORTE_FALSE; + int i; + if ((d->guid.aid & 0x03)!=MANAGER) return; + + /* readerManagers */ + if ((writerGUID->oid==OID_WRITE_APPSELF) && + ((writerGUID->aid & 0x03)==MANAGER)) { + pthread_rwlock_wrlock(&d->readerManagers.lock); + pthread_rwlock_wrlock(&d->writerApplicationSelf.lock); + cstReader=&d->readerManagers; + gavl_cust_for_each(CSTRemoteReader, + &d->writerApplicationSelf, + cstRemoteReader) { + AppParams *ap=(AppParams*)cstRemoteReader->sobject->attributes; + for (i=0;iunicastIPAddressCount;i++) { + if (ap->unicastIPAddressList[i]==senderIPAddress) { + break; + } + } + if (i!=ap->unicastIPAddressCount) + break; + if (matchMulticastAddresses(cstRemoteReader->sobject, + cstRemoteReader->cstWriter->objectEntryOID)) { + usedMulticast=ORTE_TRUE; + break; + } + } + if (cstRemoteReader) { + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!objectEntryOID) { + // create new RemoteReader + AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(ap); + parameterUpdateApplication(csChange,ap); + if (generateEvent(d,&csChange->guid,(void*)ap,csChange->alive) && + csChange->alive) { + debug(46,2) ("manager 0x%x-0x%x accepted\n", + csChange->guid.hid,csChange->guid.aid); + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)ap); + CSTWriterRefreshAllCSChanges(d,cstRemoteReader); + CSTReaderAddRemoteWriter(d,cstReader,objectEntryOID,writerGUID->oid); + pthread_rwlock_wrlock(&d->readerApplications.lock); + pthread_rwlock_wrlock(&d->writerApplications.lock); + CSTReaderAddRemoteWriter(d,&d->readerApplications,objectEntryOID,OID_WRITE_APP); + if (usedMulticast) { + /* connect to virual objectEntryOID of multicast manager */ + CSTWriterAddRemoteReader(d, + &d->writerApplications, + objectEntryOID, + OID_READ_APP, + cstRemoteReader->sobject); + } else { + CSTWriterAddRemoteReader(d,&d->writerApplications, + objectEntryOID, + OID_READ_APP, + objectEntryOID); + } + pthread_rwlock_unlock(&d->writerApplications.lock); + pthread_rwlock_unlock(&d->readerApplications.lock); + //all applications from manager node set expiration timer + gavl_cust_for_each(ObjectEntryAID, + objectEntryOID->objectEntryHID,objectEntryAID) { + ObjectEntryOID *objectEntryOID1; + objectEntryOID1=ObjectEntryOID_find(objectEntryAID,&csChange->guid.oid); + objectEntryRefreshApp(d,objectEntryOID1); + } + } else { + FREE(ap); + } + } + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if (cstRemoteWriter) + objectEntryRefreshApp(d,cstRemoteWriter->spobject); + } else { + //deny Manager + } + pthread_rwlock_unlock(&d->writerApplicationSelf.lock); + } + + + /* readerApplication */ + if (((writerGUID->oid==OID_WRITE_APPSELF) && + ((writerGUID->aid & 0x03)==MANAGEDAPPLICATION)) || + ((writerGUID->oid==OID_WRITE_APP) && + ((writerGUID->aid & 0x03)==MANAGER))) { + + pthread_rwlock_wrlock(&d->readerApplications.lock); + cstReader=&d->readerApplications; + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!objectEntryOID) { + AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(ap); + parameterUpdateApplication(csChange,ap); + if (generateEvent(d,&csChange->guid,(void*)ap,csChange->alive) && + csChange->alive) { + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)ap); + objectEntryOID->appMOM=getTypeApp(d,ap,senderIPAddress); + if (objectEntryOID->appMOM) { + debug(46,2) ("MOM application 0x%x-0x%x accepted\n", + csChange->guid.hid,csChange->guid.aid); + //increment vargAppsSequenceNumber and make csChange + SeqNumberInc(d->appParams->vargAppsSequenceNumber, + d->appParams->vargAppsSequenceNumber); + //WAS & WM is locked inside next function + appSelfParamChanged(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE,ORTE_TRUE); + CSTReaderAddRemoteWriter(d,cstReader, + objectEntryOID,writerGUID->oid); + CSTWriterAddRemoteReader(d,&d->writerManagers, + objectEntryOID, + OID_READ_MGR, + objectEntryOID); + pthread_rwlock_unlock(&d->writerApplicationSelf.lock); + pthread_rwlock_unlock(&d->writerManagers.lock); + } else { + debug(46,2) ("OAM application 0x%x-0x%x accepted\n", + csChange->guid.hid,csChange->guid.aid); + } + pthread_rwlock_wrlock(&d->writerApplications.lock); + CSTWriterAddRemoteReader(d,&d->writerApplications, + objectEntryOID, + OID_READ_APP, + objectEntryOID); + pthread_rwlock_unlock(&d->writerApplications.lock); + } else { + FREE(ap); + } + } + if (objectEntryOID) { + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if (objectEntryOID->appMOM) { + objectEntryRefreshApp(d,objectEntryOID); + } else { + //turn off expiration timer + eventDetach(d, + objectEntryOID->objectEntryAID, + &objectEntryOID->expirationPurgeTimer, + 0); + debug(46,3) ("for application 0x%x-0x%x turn off expiration timer\n", + objectEntryOID->guid.hid,objectEntryOID->guid.aid); + } + } + } + + /* try to proc csChange */ + RTPSVarFinish(cstReader,cstRemoteWriter,csChange); +} /**********************************************************************************/ void @@ -460,7 +345,11 @@ NewPublisher(ORTEDomain *d,ObjectEntryOID *op) { if ((cstWriter=CSTWriter_find(&d->publications,&op->guid))) { pthread_rwlock_wrlock(&cstWriter->lock); if (!CSTRemoteReader_find(cstWriter,&o->guid)) { - CSTWriterAddRemoteReader(d,cstWriter,o,o->oid); + ObjectEntryOID *so; + + so=getSubsO2SRemoteReader(d,o,sp); + CSTWriterAddRemoteReader(d,cstWriter,o, + o->oid,so); debug(46,2) ("0x%x-0x%x-0x%x accepted 0x%x-0x%x-0x%x\n", op->guid.hid,op->guid.aid,op->guid.oid, o->guid.hid,o->guid.aid,o->guid.oid); @@ -526,10 +415,14 @@ NewSubscriber(ORTEDomain *d,ObjectEntryOID *os) { if ((cstWriter=CSTWriter_find(&d->publications,&o->guid))) { pthread_rwlock_wrlock(&cstWriter->lock); if (!CSTRemoteReader_find(cstWriter,&os->guid)) { - CSTWriterAddRemoteReader(d,cstWriter,os,os->oid); + ObjectEntryOID *sos; + + sos=getSubsO2SRemoteReader(d,os,sp); + CSTWriterAddRemoteReader(d,cstWriter,os, + os->oid,sos); debug(46,2) ("0x%x-0x%x-0x%x accepted 0x%x-0x%x-0x%x\n", - o->guid.hid,o->guid.aid,o->guid.oid, - os->guid.hid,os->guid.aid,os->guid.oid); + GUID_PRINTF(o->guid), + GUID_PRINTF(os->guid)); } pthread_rwlock_unlock(&cstWriter->lock); } @@ -539,3 +432,295 @@ NewSubscriber(ORTEDomain *d,ObjectEntryOID *os) { } pthread_rwlock_unlock(&d->psEntry.publicationsLock); } + +/**********************************************************************************/ +void +RTPSVarApp(ORTEDomain *d,CSChange *csChange,GUID_RTPS *writerGUID) +{ + CSTReader *cstReader=NULL; + CSTRemoteWriter *cstRemoteWriter=NULL; + ObjectEntryAID *objectEntryAID; + ObjectEntryOID *objectEntryOID,*sobjectEntryOID; + + if ((d->guid.aid & 3)!=MANAGEDAPPLICATION) return; + + switch (writerGUID->oid) { + case OID_WRITE_MGR: + pthread_rwlock_wrlock(&d->readerManagers.lock); + cstReader=&d->readerManagers; + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!objectEntryOID) { + AppParams *ap=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(ap); + parameterUpdateApplication(csChange,ap); + if (generateEvent(d,&csChange->guid,(void*)ap,csChange->alive) && + csChange->alive) { + debug(46,2) ("new manager 0x%x-0x%x accepted\n", + csChange->guid.hid,csChange->guid.aid); + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)ap); + objectEntryOID->privateCreated=ORTE_FALSE; + pthread_rwlock_wrlock(&d->readerApplications.lock); + CSTReaderAddRemoteWriter(d,&d->readerApplications, + objectEntryOID,OID_WRITE_APP); + pthread_rwlock_unlock(&d->readerApplications.lock); + //all applications from manager node set expiration timer + gavl_cust_for_each(ObjectEntryAID, + objectEntryOID->objectEntryHID,objectEntryAID) { + ObjectEntryOID *objectEntryOID1; + objectEntryOID1=ObjectEntryOID_find(objectEntryAID,&csChange->guid.oid); + objectEntryRefreshApp(d,objectEntryOID1); + } + } else { + FREE(ap); + } + } else { + GUID_RTPS guid_wapp=csChange->guid; + guid_wapp.oid=OID_WRITE_APP; + pthread_rwlock_wrlock(&d->readerApplications.lock); + cstRemoteWriter=CSTRemoteWriter_find(&d->readerApplications,&guid_wapp); + //setup state of cstRemoteWriter on send ACK to manager + if (cstRemoteWriter) { + if (cstRemoteWriter->commStateACK==WAITING) { + eventDetach(d, + cstRemoteWriter->spobject->objectEntryAID, + &cstRemoteWriter->repeatActiveQueryTimer, + 1); //metatraffic timer + eventAdd(d, + cstRemoteWriter->spobject->objectEntryAID, + &cstRemoteWriter->repeatActiveQueryTimer, + 1, //metatraffic timer + "CSTReaderQueryTimer", + CSTReaderQueryTimer, + &cstRemoteWriter->cstReader->lock, + cstRemoteWriter, + NULL); + } + } + pthread_rwlock_unlock(&d->readerApplications.lock); + } + objectEntryRefreshApp(d,objectEntryOID); + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if ((!cstRemoteWriter) && + (csChange->guid.hid==writerGUID->hid) && + (csChange->guid.aid==writerGUID->aid)) { + cstRemoteWriter= + CSTReaderAddRemoteWriter(d,cstReader,objectEntryOID,writerGUID->oid); + } + break; + case OID_WRITE_APP: + pthread_rwlock_wrlock(&d->readerApplications.lock); + cstReader=&d->readerApplications; + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if (cstRemoteWriter) { + AppParams *ap; + GUID_RTPS guid_tmp=csChange->guid; + guid_tmp.oid=OID_WRITE_PUBL; + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!CSTRemoteWriter_find(&d->readerPublications,&guid_tmp)) { + if (!objectEntryOID) { + ap=(AppParams*)MALLOC(sizeof(AppParams)); + AppParamsInit(ap); + parameterUpdateApplication(csChange,ap); + if (generateEvent(d,&csChange->guid,(void*)ap,csChange->alive) && + csChange->alive) { + debug(46,2) ("new application 0x%x-0x%x accepted\n", + csChange->guid.hid,csChange->guid.aid); + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)ap); + objectEntryOID->privateCreated=ORTE_FALSE; + } else { + FREE(ap); + break; + } + } + + ap=(AppParams*)objectEntryOID->attributes; + sobjectEntryOID=getAppO2SRemoteReader(d,objectEntryOID,ap); + + pthread_rwlock_wrlock(&d->readerPublications.lock); + pthread_rwlock_wrlock(&d->readerSubscriptions.lock); + pthread_rwlock_wrlock(&d->writerPublications.lock); + pthread_rwlock_wrlock(&d->writerSubscriptions.lock); + CSTReaderAddRemoteWriter(d,&d->readerPublications, + objectEntryOID,OID_WRITE_PUBL); + CSTReaderAddRemoteWriter(d,&d->readerSubscriptions, + objectEntryOID,OID_WRITE_SUBS); + CSTWriterAddRemoteReader(d,&d->writerPublications, + objectEntryOID, + OID_READ_PUBL, + sobjectEntryOID); + CSTWriterAddRemoteReader(d,&d->writerSubscriptions, + objectEntryOID, + OID_READ_SUBS, + sobjectEntryOID); + pthread_rwlock_unlock(&d->readerPublications.lock); + pthread_rwlock_unlock(&d->readerSubscriptions.lock); + pthread_rwlock_unlock(&d->writerPublications.lock); + pthread_rwlock_unlock(&d->writerSubscriptions.lock); + } + if (objectEntryOID) { + //turn off expiration timer + eventDetach(d, + objectEntryOID->objectEntryAID, + &objectEntryOID->expirationPurgeTimer, + 0); + debug(46,3) ("for application 0x%x-0x%x turn off expiration timer\n", + objectEntryOID->guid.hid, + objectEntryOID->guid.aid); + } + } + break; + case OID_WRITE_PUBL: + pthread_rwlock_wrlock(&d->readerPublications.lock); + cstReader=&d->readerPublications; + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if (cstRemoteWriter) { + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!objectEntryOID) { + ORTEPublProp *pp=(ORTEPublProp*)MALLOC(sizeof(ORTEPublProp)); + PublParamsInit(pp); + parameterUpdatePublication(csChange,pp); + if (generateEvent(d,&csChange->guid,(void*)pp,csChange->alive) && + csChange->alive) { + debug(46,2) ("new publisher 0x%x-0x%x-0x%x accepted\n", + GUID_PRINTF(csChange->guid)); + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)pp); + objectEntryOID->privateCreated=ORTE_FALSE; + pthread_rwlock_wrlock(&d->psEntry.publicationsLock); + PublicationList_insert(&d->psEntry,objectEntryOID); + pthread_rwlock_unlock(&d->psEntry.publicationsLock); + NewPublisher(d,objectEntryOID); + } else + FREE(pp); + } else { + if ((!PublicationList_find(&d->psEntry,&csChange->guid)) && + csChange->alive) { + pthread_rwlock_wrlock(&d->psEntry.publicationsLock); + PublicationList_insert(&d->psEntry,objectEntryOID); + pthread_rwlock_unlock(&d->psEntry.publicationsLock); + NewPublisher(d,objectEntryOID); + } + } + } + break; + case OID_WRITE_SUBS: + pthread_rwlock_wrlock(&d->readerSubscriptions.lock); + cstReader=&d->readerSubscriptions; + cstRemoteWriter=CSTRemoteWriter_find(cstReader,writerGUID); + if (cstRemoteWriter) { + objectEntryOID=objectEntryFind(d,&csChange->guid); + if (!objectEntryOID) { + ORTESubsProp *sp=(ORTESubsProp*)MALLOC(sizeof(ORTESubsProp)); + SubsParamsInit(sp); + parameterUpdateSubscription(csChange,sp); + if (generateEvent(d,&csChange->guid,(void*)sp,csChange->alive) && + csChange->alive) { + debug(46,2) ("new subscriber 0x%x-0x%x-0x%x accepted\n", + GUID_PRINTF(csChange->guid)); + objectEntryOID=objectEntryAdd(d,&csChange->guid,(void*)sp); + objectEntryOID->privateCreated=ORTE_FALSE; + pthread_rwlock_wrlock(&d->psEntry.subscriptionsLock); + SubscriptionList_insert(&d->psEntry,objectEntryOID); + pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); + NewSubscriber(d,objectEntryOID); + } else + FREE(sp); + } else { + if ((!SubscriptionList_find(&d->psEntry,&csChange->guid)) && + csChange->alive) { + pthread_rwlock_wrlock(&d->psEntry.subscriptionsLock); + SubscriptionList_insert(&d->psEntry,objectEntryOID); + pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); + NewSubscriber(d,objectEntryOID); + } + } + } + break; + } + + /* try to proc csChange */ + RTPSVarFinish(cstReader,cstRemoteWriter,csChange); +} + + +/**********************************************************************************/ +void +RTPSVar(ORTEDomain *d,CDR_Codec *cdrCodec,MessageInterpret *mi,IPAddress senderIPAddress) { + GUID_RTPS objectGUID,writerGUID; + ObjectId roid,woid; + SequenceNumber sn; + char p_bit,a_bit,h_bit; + CORBA_unsigned_short submsg_len; + CSChange *csChange; + CDR_Endianness data_endian; + CORBA_octet flags; + + /* restore flag possition in submessage */ + cdrCodec->rptr-=3; + + /* flags */ + CDR_get_octet(cdrCodec,&flags); + p_bit=flags & 2; + a_bit=flags & 4; + h_bit=flags & 8; + + /* submessage length */ + CDR_get_ushort(cdrCodec,&submsg_len); + + /* next data are sent in big endianing */ + data_endian=cdrCodec->data_endian; + cdrCodec->data_endian=FLAG_BIG_ENDIAN; + + /* readerObjectId */ + CDR_get_ulong(cdrCodec,&roid); + + /* writerObjectId */ + CDR_get_ulong(cdrCodec,&woid); + + if (h_bit) { + /* HostId */ + CDR_get_ulong(cdrCodec,&objectGUID.hid); + + /* AppId */ + CDR_get_ulong(cdrCodec,&objectGUID.aid); + + } else { + objectGUID.hid=mi->sourceHostId; + objectGUID.aid=mi->sourceAppId; + } + + /* ObjectId */ + CDR_get_ulong(cdrCodec,&objectGUID.oid); + + cdrCodec->data_endian=data_endian; + + /* writerSN */ + CDR_get_ulong(cdrCodec,&sn.high); + CDR_get_ulong(cdrCodec,&sn.low); + + writerGUID.hid=mi->sourceHostId; + writerGUID.aid=mi->sourceAppId; + writerGUID.oid=woid; + + debug(46,3) ("recv: RTPS_VAR(0x%x) from 0x%x-0x%x sn:%u\n", + woid,mi->sourceHostId,mi->sourceAppId,sn.low); + + //prepare csChange + csChange=(CSChange*)MALLOC(sizeof(CSChange)); + csChange->cdrCodec.buffer=NULL; + csChange->guid=objectGUID; + if (a_bit) csChange->alive=ORTE_TRUE; + else csChange->alive=ORTE_FALSE; + if (p_bit) + parameterDecodeCodecToCSChange(csChange,cdrCodec); + else + CSChangeAttributes_init_head(csChange); + csChange->sn=sn; + SEQUENCE_NUMBER_NONE(csChange->gapSN); + + /* Manager */ + RTPSVarManager(d,csChange,&writerGUID,senderIPAddress); + + /* Application */ + RTPSVarApp(d,csChange,&writerGUID); +} + diff --git a/orte/liborte/cdr.c b/orte/liborte/cdr.c new file mode 100644 index 0000000..243adb9 --- /dev/null +++ b/orte/liborte/cdr.c @@ -0,0 +1,418 @@ +/* + * $Id: cdr.c,v 0.0.0.1 2004/11/26 + * + * DEBUG: section 5 CDR codeing + * AUTHOR: Petr Smolik petr.smolik@wo.cz + * + * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/ + * -------------------------------------------------------------------- + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This module maintains a hash table of key/value pairs. + * Keys can be strings of any size, or numbers up to size + * unsigned long (HASHKEYTYPE). + * Values should be a pointer to some data you wish to store. + * + * Original of source was from ORBit: A CORBA v2.2 ORB + * + */ + +#include "orte_all.h" + +#define CDR_GROW_AMOUNT 128 + +CORBA_boolean +CDR_buffer_init(CDR_Codec *codec, const unsigned int size) +{ + + if(codec->release_buffer) { + FREE(codec->buffer); + } + + codec->buffer=(CORBA_octet *)MALLOC(size); + codec->buf_len=size; + codec->wptr_max=size; + codec->rptr=codec->wptr=0; + codec->release_buffer=CORBA_TRUE; + + return CORBA_TRUE; +} + + +CORBA_boolean +CDR_buffer_grow(CDR_Codec *codec, const unsigned int growth) +{ + unsigned int real_growth,quot; + + if(codec->release_buffer) { + quot = growth / CDR_GROW_AMOUNT; + real_growth=CDR_GROW_AMOUNT * (quot+1); + + codec->buffer=(CORBA_octet *)REALLOC(codec->buffer, + codec->buf_len + +real_growth); + } + + return CORBA_TRUE; +} + +CORBA_boolean +CDR_buffer_puts(CDR_Codec *codec, const void *data, const unsigned int len) +{ + if(codec->wptr+len > codec->wptr_max) { + return CORBA_FALSE; + } + + memcpy(&codec->buffer[codec->wptr], data, len); + codec->wptr+=len; + + return CORBA_TRUE; +} + +CORBA_boolean +CDR_buffer_gets(CDR_Codec *codec, void *dest, const unsigned int len) +{ + if(codec->rptr+len > codec->buf_len) { + return CORBA_FALSE; + } + + memcpy(dest, &codec->buffer[codec->rptr], len); + codec->rptr+=len; + + return CORBA_TRUE; +} + +CORBA_boolean +CDR_buffer_put(CDR_Codec *codec, void *datum) +{ + if(codec->wptr+1 > codec->wptr_max) { + return(CORBA_FALSE); + } + + codec->buffer[codec->wptr++]=*(unsigned char *)datum; + return CORBA_TRUE; +} + +CORBA_boolean +CDR_buffer_get(CDR_Codec *codec, void *dest) +{ + if(codec->rptr+1 > codec->buf_len) { + return(CORBA_FALSE); + } + + *(CORBA_octet *)dest=codec->buffer[codec->rptr++]; + return CORBA_TRUE; +} + +#define CDR_buffer_put2(codec, datum) CDR_buffer_putn(codec, datum, 2) +#define CDR_buffer_put4(codec, datum) CDR_buffer_putn(codec, datum, 4) +#define CDR_buffer_put8(codec, datum) CDR_buffer_putn(codec, datum, 8) +#define CDR_buffer_put16(codec, datum) CDR_buffer_putn(codec, datum, 16) +#define CDR_buffer_get2(codec, dest) CDR_buffer_getn(codec, dest, 2) +#define CDR_buffer_get4(codec, dest) CDR_buffer_getn(codec, dest, 4) +#define CDR_buffer_get8(codec, dest) CDR_buffer_getn(codec, dest, 8) +#define CDR_buffer_get16(codec, dest) CDR_buffer_getn(codec, dest, 16) + +static CORBA_boolean +CDR_buffer_getn(CDR_Codec *codec, void *dest, int bsize) +{ + codec->rptr = (unsigned long)ALIGN_ADDRESS(codec->rptr, bsize); + if(codec->host_endian==codec->data_endian) + memcpy(dest, codec->buffer + codec->rptr, bsize); + else + rtps_byteswap(dest, codec->buffer + codec->rptr, bsize); + codec->rptr += bsize; + + return CORBA_TRUE; +} + +static CORBA_boolean +CDR_buffer_putn(CDR_Codec *codec, void *datum, int bsize) +{ + unsigned long forward,i; + + forward = (unsigned long)ALIGN_ADDRESS(codec->wptr, bsize); + if (forward+bsize > codec->wptr_max) { + return CORBA_FALSE; + } + + i = codec->wptr; + while(forward > i) + codec->buffer[i++] = '\0'; + + codec->wptr = forward; + if(codec->host_endian==codec->data_endian) + memcpy(codec->buffer + codec->wptr, datum, bsize); + else + rtps_byteswap(codec->buffer + codec->wptr, datum, bsize); + codec->wptr += bsize; + + return CORBA_TRUE; +} + +#define CDR_swap2(d,s) rtps_byteswap((d), (s), 2) +#define CDR_swap4(d,s) rtps_byteswap((d), (s), 4) +#define CDR_swap8(d,s) rtps_byteswap((d), (s), 8) +#define CDR_swap16(d,s) rtps_byteswap((d), (s), 16) + +inline CORBA_boolean +CDR_put_short(CDR_Codec *codec, CORBA_short s) +{ + return CDR_buffer_put2(codec, &s); +} + +inline CORBA_boolean +CDR_get_short(CDR_Codec *codec, CORBA_short *s) +{ + return CDR_buffer_get2(codec, s); +} + +inline CORBA_boolean +CDR_put_ushort(CDR_Codec *codec, CORBA_unsigned_short us) +{ + return CDR_buffer_put2(codec, &us); +} + +inline CORBA_boolean +CDR_get_ushort(CDR_Codec *codec, CORBA_unsigned_short *us) +{ + return CDR_buffer_get2(codec, us); +} + +inline CORBA_boolean +CDR_put_long(CDR_Codec *codec, CORBA_long l) +{ + return CDR_buffer_put4(codec, &l); +} + +inline CORBA_boolean +CDR_get_long(CDR_Codec *codec, CORBA_long *l) +{ + return CDR_buffer_get4(codec, l); +} + +inline CORBA_boolean +CDR_put_ulong(CDR_Codec *codec, CORBA_unsigned_long ul) +{ + return CDR_buffer_put4(codec, &ul); +} + +inline CORBA_boolean +CDR_get_ulong(CDR_Codec *codec, CORBA_unsigned_long *ul) +{ + return CDR_buffer_get4(codec, ul); +} + +#ifdef HAVE_CORBA_LONG_LONG +inline CORBA_boolean +CDR_get_long_long(CDR_Codec *codec, CORBA_long_long *ul) +{ + return CDR_buffer_get8(codec, ul); +} + +inline CORBA_boolean +CDR_put_long_long(CDR_Codec *codec, CORBA_long_long ll) +{ + return CDR_buffer_put8(codec, &ll); +} + +inline CORBA_boolean +CDR_put_ulong_long(CDR_Codec *codec, CORBA_unsigned_long_long ll) +{ + return CDR_buffer_put8(codec, &ll); +} + +inline CORBA_boolean +CDR_get_ulong_long(CDR_Codec *codec, CORBA_unsigned_long_long *ull) +{ + return CDR_buffer_get8(codec, ull); +} +#endif + +inline CORBA_boolean +CDR_put_float(CDR_Codec *codec, CORBA_float f) +{ + return CDR_buffer_put4(codec, &f); +} + +inline CORBA_boolean +CDR_put_double(CDR_Codec *codec, CORBA_double d) +{ + return CDR_buffer_put8(codec, &d); +} + +inline CORBA_boolean +CDR_put_long_double(CDR_Codec *codec, CORBA_long_double ld) +{ + return CDR_buffer_put16(codec, &ld); +} + +inline CORBA_boolean +CDR_put_octet(CDR_Codec *codec, CORBA_octet datum) +{ + return CDR_buffer_put(codec, &datum); +} + +inline CORBA_boolean +CDR_get_octet(CDR_Codec *codec, CORBA_octet *datum) +{ + return(CDR_buffer_get(codec, datum)); +} + +inline CORBA_boolean +CDR_put_octets(CDR_Codec *codec, void *data, unsigned long len) +{ + return CDR_buffer_puts(codec, data, len); +} + +inline CORBA_boolean +CDR_put_char(CDR_Codec *codec, CORBA_char c) +{ + return CDR_buffer_put(codec, &c); +} + +inline CORBA_boolean +CDR_get_char(CDR_Codec *codec, CORBA_char *c) +{ + return CDR_buffer_get(codec, c); +} + +inline CORBA_boolean +CDR_put_boolean(CDR_Codec *codec, CORBA_boolean datum) +{ + datum = datum&&1; + return CDR_buffer_put(codec, &datum); +} + +inline CORBA_boolean +CDR_get_boolean(CDR_Codec *codec, CORBA_boolean *b) +{ + return CDR_buffer_get(codec, b); +} + +CORBA_boolean +CDR_put_string(CDR_Codec *codec, const char *str) +{ + unsigned int len; + + len=strlen(str)+1; + + if (CDR_put_ulong(codec, len)==CORBA_FALSE) return -1; + return CDR_buffer_puts(codec, str, len); +} + +CORBA_boolean +CDR_get_string_static(CDR_Codec *codec,CORBA_char **str) +{ + CORBA_unsigned_long len; + + if(CDR_get_ulong(codec, &len)==CORBA_FALSE) + return CORBA_FALSE; + + if((codec->rptr + len) > codec->buf_len) + return CORBA_FALSE; + + *str = ((CORBA_char *)codec->buffer) + codec->rptr; + + codec->rptr += len; + + return CORBA_TRUE; +} + +CORBA_boolean +CDR_get_string(CDR_Codec *codec, CORBA_char **str) +{ + CORBA_unsigned_long len; + + if(CDR_get_ulong(codec, &len)==CORBA_FALSE) + return(CORBA_FALSE); + + if(len==0) + return(CORBA_FALSE); + + *str=MALLOC(len); + + if(CDR_buffer_gets(codec, *str, len)==CORBA_FALSE) { + FREE(*str); + return(CORBA_FALSE); + } + + if((*str)[len-1]!='\0') { + (*str)[len-1]='\0'; + } + + return(CORBA_TRUE); +} + +CORBA_boolean +CDR_get_string_buff(CDR_Codec *codec, CORBA_char *str) +{ + CORBA_unsigned_long len; + + if(CDR_get_ulong(codec, &len)==CORBA_FALSE) + return(CORBA_FALSE); + + if(len==0) + return(CORBA_FALSE); + + if(CDR_buffer_gets(codec, str, len)==CORBA_FALSE) { + return(CORBA_FALSE); + } + + if(str[len-1]!='\0') { + str[len-1]='\0'; + } + + return(CORBA_TRUE); +} + +CORBA_boolean +CDR_get_seq_begin(CDR_Codec *codec, CORBA_unsigned_long *ul) +{ + return(CDR_get_ulong(codec, ul)); +} + +CDR_Codec * +CDR_codec_init_static(CDR_Codec *codec) +{ + memset(codec, 0, sizeof(CDR_Codec)); + + codec->host_endian = FLAG_ENDIANNESS; + + return codec; +} + +CDR_Codec * +CDR_codec_init(void) +{ + CDR_Codec *c; + + c=MALLOC(sizeof(CDR_Codec)); + CDR_codec_init_static(c); + + return(c); +} + +void +CDR_codec_release_buffer(CDR_Codec *codec) +{ + if(codec->release_buffer) + FREE(codec->buffer); +} + + +void +CDR_codec_free(CDR_Codec *codec) +{ + CDR_codec_release_buffer(codec); + FREE(codec); +} diff --git a/orte/liborte/conv.c b/orte/liborte/conv.c index e0500e1..e79aa70 100644 --- a/orte/liborte/conv.c +++ b/orte/liborte/conv.c @@ -26,54 +26,6 @@ #include "orte_all.h" -/**********************************************************************************/ -void conv_u16(uint16_t *x,char ef) { - #if WORDS_BIGENDIAN - if(ef) *x=bswap_16(*x); - #else - if(!ef) *x=bswap_16(*x); - #endif -} - -/**********************************************************************************/ -void conv_u32(uint32_t *x,char ef) { - #if WORDS_BIGENDIAN - if(ef) *x=bswap_32(*x); - #else - if(!ef) *x=bswap_32(*x); - #endif -} - -/**********************************************************************************/ -void conv_sn(SequenceNumber *sn,char ef) { - #if WORDS_BIGENDIAN - if(ef) { - sn->high=bswap_32(sn->high); - sn->low=bswap_32(sn->low); - } - #else - if(!ef) { - sn->high=bswap_32(sn->high); - sn->low=bswap_32(sn->low); - } - #endif -} - -/**********************************************************************************/ -void conv_ntp(NtpTime *ntp,char ef) { - #if WORDS_BIGENDIAN - if(ef) { - ntp->seconds=bswap_32(ntp->seconds); - ntp->fraction=bswap_32(ntp->fraction); - } - #else - if(!ef) { - ntp->seconds=bswap_32(ntp->seconds); - ntp->fraction=bswap_32(ntp->fraction); - } - #endif -} - /**********************************************************************************/ //get part of string, div. by semi. int diff --git a/orte/liborte/debug.c b/orte/liborte/debug.c index aef8abc..eebfccf 100644 --- a/orte/liborte/debug.c +++ b/orte/liborte/debug.c @@ -116,10 +116,13 @@ debug_options(const char *options) { char *s = NULL; if (options) { - p = strdup((char *)options); + p=(char*)MALLOC(strlen(options)+1); + if (p) { + memcpy(p, options, strlen(options) + 1); + } for (s = strtok(p, ":"); s; s = strtok(NULL, ":")) debug_arg(s); - free(p); + FREE(p); } } @@ -164,6 +167,16 @@ void *mem_check_malloc(size_t size) { return ptr; } +void *mem_check_realloc(void *ptr,size_t size) { + void *nptr; + + if (!ptr) { + mem_check_counter++; + debug(1,9) ("mem check: inc %d\n",mem_check_counter); + } + return nptr=realloc(ptr,size); +} + void mem_check_free(void *ptr) { if(!ptr) { // LOG_FATAL(KERN_CRIT "ul_mem_check_free : triing to free NULL ptr\n"); diff --git a/orte/liborte/htimerNtp.c b/orte/liborte/htimerNtp.c index 8ef0ba5..ba850b9 100644 --- a/orte/liborte/htimerNtp.c +++ b/orte/liborte/htimerNtp.c @@ -155,7 +155,7 @@ htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d, debug(2,10) ("htimerUnicastMetatraffic: %s\n", timer->name); retValue=timer->func(d,timer->arg1); - while (d->mbSend.needSend) { + while (d->taskSend.mb.needSend) { ORTESendData(d,objectEntryAID,ORTE_TRUE); timer->func(d,timer->arg1); } @@ -163,7 +163,7 @@ htimerUnicastSendMetatraffic_run_expired(ORTEDomain *d, pthread_rwlock_unlock(timer->lock); } htimerUnicastSendMetatraffic_update_root_timer(&d->objectEntry,objectEntryAID); - if (d->mbSend.cdrStream.length>RTPS_HEADER_LENGTH) { + if (d->taskSend.mb.cdrCodec.wptr>RTPS_HEADER_LENGTH) { ORTESendData(d,objectEntryAID,ORTE_TRUE); } } @@ -215,7 +215,7 @@ htimerUnicastSendUserData_run_expired(ORTEDomain *d, if (timer->lock) pthread_rwlock_wrlock(timer->lock); retValue=timer->func(d,timer->arg1); - while (d->mbSend.needSend) { + while (d->taskSend.mb.needSend) { ORTESendData(d,objectEntryAID,ORTE_FALSE); timer->func(d,timer->arg1); } @@ -223,7 +223,7 @@ htimerUnicastSendUserData_run_expired(ORTEDomain *d, pthread_rwlock_unlock(timer->lock); } htimerUnicastSendUserData_update_root_timer(&d->objectEntry,objectEntryAID); - if (d->mbSend.cdrStream.length>RTPS_HEADER_LENGTH) { + if (d->taskSend.mb.cdrCodec.wptr>RTPS_HEADER_LENGTH) { ORTESendData(d,objectEntryAID,ORTE_FALSE); } } diff --git a/orte/liborte/objectEntry.c b/orte/liborte/objectEntry.c index a745528..651af5a 100644 --- a/orte/liborte/objectEntry.c +++ b/orte/liborte/objectEntry.c @@ -97,6 +97,7 @@ objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params) { //not exists Application -> create if (objectEntryAID==NULL) { objectEntryAID=(ObjectEntryAID*)MALLOC(sizeof(ObjectEntryAID)); + objectEntryAID->aobject=NULL; //init items of structure objectEntryAID objectEntryAID->aid=guid->aid; ObjectEntryOID_init_root_field(objectEntryAID); @@ -123,6 +124,12 @@ objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params) { objectEntryOID->attributes=params; ul_htim_queue_init_detached(&objectEntryOID->expirationPurgeTimer.htim); ul_htim_queue_init_detached(&objectEntryOID->sendCallBackDelayTimer.htim); + ObjectEntryMulticast_init_head(objectEntryOID); + objectEntryOID->multicastPort=0; + if (guid->oid==OID_APP) { + objectEntryAID->aobject=objectEntryOID; + debug(8,5) ("objectEntry: Object: %#10.8x connected to AID\n",guid->oid); + } //insert ObjectEntryOID_insert(objectEntryAID,objectEntryOID); debug(8,5) ("objectEntry: Object: %#10.8x created\n",guid->oid); @@ -132,7 +139,7 @@ objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params) { } /* - * objectEntryDestroy - Destroy a object from structure objectEntry + * objectEntryDelete - Delete a object from structure objectEntry * @objectEntry: pointer to root structure * @obejctEntryOID: pointer to the deleted objectEntryOID * @@ -140,7 +147,7 @@ objectEntryAdd(ORTEDomain *d,GUID_RTPS *guid,void *params) { * 3-OID,AID,HID was deleted */ int -objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID) { +objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID,Boolean destroy) { ObjectEntryHID *objectEntryHID; ObjectEntryAID *objectEntryAID; int result=0; @@ -159,22 +166,32 @@ objectEntryDelete(ORTEDomain *d,ObjectEntryOID *objectEntryOID) { &objectEntryOID->sendCallBackDelayTimer, 0); FREE(objectEntryOID->attributes); - ObjectEntryOID_delete(objectEntryAID,objectEntryOID); + if (objectEntryAID->aobject==objectEntryOID) { + objectEntryAID->aobject=NULL; + debug(8,5) ("objectEntry: Object: %#10.8x deleted from AID\n",objectEntryOID->oid); + } + if (destroy) { + ObjectEntryOID_delete(objectEntryAID,objectEntryOID); + FREE(objectEntryOID); + } debug(8,5) ("objectEntry: Object: %#10.8x deleted\n",objectEntryOID->oid); - FREE(objectEntryOID); result=1; //Destroy object on level AID if (ObjectEntryOID_is_empty(objectEntryAID)) { - ObjectEntryAID_delete(objectEntryHID,objectEntryAID); debug(8,5) ("objectEntry: App : %#10.8x deleted\n",objectEntryAID->aid); - FREE(objectEntryAID); + if (destroy) { + ObjectEntryAID_delete(objectEntryHID,objectEntryAID); + FREE(objectEntryAID); + } result=2; } //Destroy object on level HID if (ObjectEntryAID_is_empty(objectEntryHID)) { - ObjectEntryHID_delete(&d->objectEntry,objectEntryHID); debug(8,5) ("objectEntry: Host : %#10.8x deleted\n",objectEntryHID->hid); - FREE(objectEntryHID); + if (destroy) { + ObjectEntryHID_delete(&d->objectEntry,objectEntryHID); + FREE(objectEntryHID); + } result=3; } debug(8,10) ("objectEntryDelete: finished\n"); @@ -195,15 +212,7 @@ objectEntryDeleteAll(ORTEDomain *d,ObjectEntry *objectEntry) { while((objectEntryHID=ObjectEntryHID_cut_first(objectEntry))) { while((objectEntryAID=ObjectEntryAID_cut_first(objectEntryHID))) { while((objectEntryOID=ObjectEntryOID_cut_first(objectEntryAID))) { - eventDetach(d, - objectEntryOID->objectEntryAID, - &objectEntryOID->expirationPurgeTimer, - 0); - eventDetach(d, - objectEntryOID->objectEntryAID, - &objectEntryOID->sendCallBackDelayTimer, - 0); - FREE(objectEntryOID->attributes); + objectEntryDelete(d,objectEntryOID,ORTE_FALSE); FREE(objectEntryOID); } FREE(objectEntryAID); diff --git a/orte/liborte/objectEntryTimer.c b/orte/liborte/objectEntryTimer.c index 60ca854..38fb70c 100644 --- a/orte/liborte/objectEntryTimer.c +++ b/orte/liborte/objectEntryTimer.c @@ -61,7 +61,7 @@ objectEntryPurgeTimer(ORTEDomain *d,void *vobjectEntryOID) { objectEntryOID->objectEntryHID->hid, objectEntryOID->objectEntryAID->aid, objectEntryOID->oid); - objectEntryDelete(d,objectEntryOID); + objectEntryDelete(d,objectEntryOID,ORTE_TRUE); objectEntryDump(&d->objectEntry); debug(12,10) ("objectEntryPurgeTimer: finished\n"); @@ -175,7 +175,7 @@ removeApplication(ORTEDomain *d,ObjectEntryOID *robjectEntryOID) { pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); break; } - objectEntryDelete(d,objectEntryOID_delete); + objectEntryDelete(d,objectEntryOID_delete,ORTE_TRUE); } } @@ -222,7 +222,7 @@ removeManager(ORTEDomain *d,ObjectEntryOID *robjectEntryOID) { CSTReaderDestroyRemoteWriter(d,cstRemoteWriter); pthread_rwlock_unlock(&d->readerApplications.lock); pthread_rwlock_unlock(&d->readerManagers.lock); - objectEntryDelete(d,robjectEntryOID); + objectEntryDelete(d,robjectEntryOID,ORTE_TRUE); } @@ -267,7 +267,7 @@ objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID) { CSChangeAttributes_init_head(csChange); csChange->guid=guid; csChange->alive=ORTE_FALSE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(d,&d->writerManagers,csChange); gavl_cust_for_each(ObjectEntryAID, objectEntryOID->objectEntryHID,objectEntryAID) { @@ -328,14 +328,14 @@ objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID) { parameterUpdateCSChange(csChange,d->appParams,ORTE_TRUE); csChange->guid=guid; csChange->alive=ORTE_FALSE; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(d,&d->writerApplications,csChange); //increment vargAppsSequenceNumber and make csChange SeqNumberInc(d->appParams->vargAppsSequenceNumber, d->appParams->vargAppsSequenceNumber); appSelfParamChanged(d,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE,ORTE_TRUE); } else { - objectEntryDelete(d,objectEntryOID); + objectEntryDelete(d,objectEntryOID,ORTE_TRUE); objectEntryOID=NULL; } pthread_rwlock_unlock(&d->writerApplicationSelf.lock); @@ -384,7 +384,7 @@ objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID) { PublicationList_delete(&d->psEntry,objectEntryOID); pthread_rwlock_unlock(&d->psEntry.publicationsLock); if (!objectEntryOID->privateCreated) { //not local object cann't be purged - objectEntryDelete(d,objectEntryOID); + objectEntryDelete(d,objectEntryOID,ORTE_TRUE); objectEntryOID=NULL; } break; @@ -407,7 +407,7 @@ objectEntryExpirationTimer(ORTEDomain *d,void *vobjectEntryOID) { SubscriptionList_delete(&d->psEntry,objectEntryOID); pthread_rwlock_unlock(&d->psEntry.subscriptionsLock); if (!objectEntryOID->privateCreated) { //local object cann't be purged immediately - objectEntryDelete(d,objectEntryOID); + objectEntryDelete(d,objectEntryOID,ORTE_TRUE); objectEntryOID=NULL; } break; diff --git a/orte/liborte/objectUtils.c b/orte/liborte/objectUtils.c index 8ecf3a3..2ee14bb 100644 --- a/orte/liborte/objectUtils.c +++ b/orte/liborte/objectUtils.c @@ -215,6 +215,34 @@ getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress) { return result; } +/* + * matchMulticastAddresses - Test if objects contain same a multicast ip address + * @o1: pointer to a object + * @o2: pointer to a object + * + * Return: return ORTE_TRUE if a multicast ip address was match + */ +Boolean +matchMulticastAddresses(ObjectEntryOID *o1,ObjectEntryOID *o2) +{ + AppParams *ap1,*ap2; + uint16_t i,j; + + if ((o1->guid.oid!=OID_APP) || + (o1->guid.oid!=OID_APP)) return ORTE_FALSE; + + ap1=o1->attributes; + ap2=o2->attributes; + for (i=0;imetatrafficMulticastIPAddressCount;i++) { + for (j=0;jmetatrafficMulticastIPAddressCount;j++) { + if (ap1->metatrafficMulticastIPAddressList[i]== + ap2->metatrafficMulticastIPAddressList[j]) + return ORTE_TRUE; + } + } + return ORTE_FALSE; +} + /* * appSelfParamChanged - Self parameters changed * @d: pointer to an domain @@ -237,14 +265,14 @@ appSelfParamChanged(ORTEDomain *d, parameterUpdateCSChange(csChange,d->appParams,ORTE_TRUE); csChange->guid=d->guid; csChange->alive=alive; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(d,&d->writerApplicationSelf,csChange); if (forWM) { csChange=(CSChange*)MALLOC(sizeof(CSChange)); parameterUpdateCSChange(csChange,d->appParams,ORTE_TRUE); csChange->guid=d->guid; csChange->alive=alive; - csChange->cdrStream.buffer=NULL; + csChange->cdrCodec.buffer=NULL; CSTWriterAddCSChange(d,&d->writerManagers,csChange); } if (unlock) { @@ -253,3 +281,92 @@ appSelfParamChanged(ORTEDomain *d, pthread_rwlock_unlock(&d->writerManagers.lock); } } + +/* + * getAppO2SRemoteReader - returns pointer to virtual multicat object in case multicast application + * @d: pointer to an domain + * @objectEntryOID: + * @ap: pointer to an application + * + */ +ObjectEntryOID * +getAppO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID, + AppParams *ap) { + char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; + struct ip_mreq mreq; + GUID_RTPS guid; + AppParams *map; + IPAddress maddr; + + maddr=ap->metatrafficMulticastIPAddressList[0]; + if (ap->metatrafficMulticastIPAddressCount && + IN_MULTICAST(maddr)) { + map=(AppParams*)MALLOC(sizeof(AppParams)); + guid.hid=maddr; + guid.aid=AID_UNKNOWN; + guid.oid=OID_APP; + objectEntryOID=objectEntryFind(d,&guid); + if (!objectEntryOID) { + memcpy(map,ap,sizeof(AppParams)); + objectEntryOID=objectEntryAdd(d,&guid,(void*)map); + Domain2PortMulticastMetatraffic(d->domain, + objectEntryOID->multicastPort); + debug(9,2) ("new multicast application 0x%x-0x%x-0x%x temporary created\n", + GUID_PRINTF(guid)); + + // join multicast group + mreq.imr_multiaddr.s_addr=htonl(maddr); + mreq.imr_interface.s_addr=htonl(INADDR_ANY); + if(sock_setsockopt(&d->taskRecvMulticastUserdata.sock,IPPROTO_IP, + IP_ADD_MEMBERSHIP,(void *) &mreq, sizeof(mreq))>=0) { + debug(9,2) ("getAppO2SRemoteReader: listening to mgroup %s\n", + IPAddressToString(maddr,sIPAddress)); + } + } + } + return objectEntryOID; +} + +/* + * getSubsO2SRemoteReader - returns pointer to virtual multicat object in case multicast subscription + * @d: pointer to an domain + * @objectEntryOID: + * @sp: pointer to a subscription + * + */ +ObjectEntryOID * +getSubsO2SRemoteReader(ORTEDomain *d,ObjectEntryOID *objectEntryOID, + ORTESubsProp *sp) { + char sIPAddress[MAX_STRING_IPADDRESS_LENGTH]; + struct ip_mreq mreq; + AppParams *map; + GUID_RTPS guid; + + if (IN_MULTICAST(sp->multicast)) { + map=(AppParams*)MALLOC(sizeof(AppParams)); + guid.hid=sp->multicast; + guid.aid=AID_UNKNOWN; + guid.oid=OID_APP; + objectEntryOID=objectEntryFind(d,&guid); + if (!objectEntryOID) { + AppParamsInit(map); + map->metatrafficMulticastIPAddressList[0]=sp->multicast; + map->metatrafficMulticastIPAddressCount=1; + objectEntryOID=objectEntryAdd(d,&guid,(void*)map); + Domain2PortMulticastUserdata(d->domain, + objectEntryOID->multicastPort); + debug(9,2) ("new subs. multicast application 0x%x-0x%x-0x%x temporary created\n", + GUID_PRINTF(guid)); + + // join multicast group + mreq.imr_multiaddr.s_addr=htonl(sp->multicast); + mreq.imr_interface.s_addr=htonl(INADDR_ANY); + if(sock_setsockopt(&d->taskRecvMulticastUserdata.sock,IPPROTO_IP, + IP_ADD_MEMBERSHIP,(void *) &mreq, sizeof(mreq))>=0) { + debug(9,2) ("getSubsO2SRemoteReader: listening to mgroup %s\n", + IPAddressToString(sp->multicast,sIPAddress)); + } + } + } + return objectEntryOID; +} diff --git a/orte/liborte/parameter.c b/orte/liborte/parameter.c index 50627a0..9cc3f05 100644 --- a/orte/liborte/parameter.c +++ b/orte/liborte/parameter.c @@ -21,6 +21,25 @@ #include "orte_all.h" +/*****************************************************************************/ +void +parameterPutString(ParameterSequence *ps,int8_t id,int8_t *sstr) +{ + int len; + + len=strlen(sstr)+1; + ps->parameterID=id; + ps->parameterLength=len; + ps->parameter=NULL; + + if (MAX_PARAMETER_LOCAL_LENGTHparameter=(int8_t*)MALLOC(len); + strncpy(ps->parameter,sstr,len); + } else { + strncpy(ps->parameterLocal,sstr,len); + } +} + /*****************************************************************************/ int parameterDelete(CSChange *csChange) { @@ -42,62 +61,154 @@ parameterDelete(CSChange *csChange) { /*****************************************************************************/ int -parameterCodeStreamFromCSChange(CSChange *csChange, - uint8_t *rtps_msg,uint32_t max_msg_len) { +parameterCodeCodecFromCSChange(CSChange *csChange,CDR_Codec *cdrCodec) +{ ParameterSequence *ps; - int result=0; ul_list_for_each(CSChangeAttributes, csChange, ps) { - if (max_msg_len<(uint32_t)(4+ps->parameterLength)) return -1; //no memory for copy - *((ParameterId*)rtps_msg)=ps->parameterID; - *((ParameterLength*)(rtps_msg+2))=ps->parameterLength; - if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) { - memcpy(rtps_msg+4,ps->parameter,ps->parameterLength); - } else { - memcpy(rtps_msg+4,ps->parameterLocal,ps->parameterLength); + + if (CDR_put_ushort(cdrCodec,ps->parameterID)==CORBA_FALSE) return -1; + if (CDR_put_ushort(cdrCodec,ps->parameterLength)==CORBA_FALSE) return -1; + + debug(11,10) ("parameterCodeCodecToCSChange: parameterID-0x%x, len-%d\n", + ps->parameterID,ps->parameterLength); + + switch (ps->parameterID) { + case PID_SENTINEL: + break; + //NtpTime + case PID_EXPIRATION_TIME: + case PID_PERSISTENCE: + case PID_MINIMUM_SEPARATION: + /* time in seconds */ + if (CDR_put_long(cdrCodec,(((NtpTime*)ps->parameterLocal)->seconds))== + CORBA_FALSE) return -1; + /* time in seconds / 2^32 */ + if (CDR_put_ulong(cdrCodec,(((NtpTime*)ps->parameterLocal)->fraction))== + CORBA_FALSE) return -1; + break; + //CORBA_unsigned_long + case PID_TYPE_CHECKSUM: + case PID_STRENGTH: + case PID_SEND_QUEUE_SIZE: + case PID_RECV_QUEUE_SIZE: + case PID_RELIABILITY_OFFERED: + case PID_RELIABILITY_REQUESTED: + case PID_MANAGER_KEY: + case PID_MATATRAFFIC_MULTICAST_IPADDRESS: + case PID_APP_IPADDRESS: + case PID_USERDATA_MULTICAST_IPADDRESS: + case PID_METATRAFFIC_UNICAST_PORT: + case PID_USERDATA_UNICAST_PORT: + if (CDR_put_ulong(cdrCodec,*(CORBA_unsigned_long*)ps->parameterLocal)== + CORBA_FALSE) return -1; + break; + //VendorId + case PID_VENDOR_ID: + if (CDR_put_octet(cdrCodec,((VendorId*)ps->parameterLocal)->major)== + CORBA_FALSE) return -1; + if (CDR_put_octet(cdrCodec,((VendorId*)ps->parameterLocal)->minor)== + CORBA_FALSE) return -1; + break; + //ProtocolVersion + case PID_PROTOCOL_VERSION: + if (CDR_put_octet(cdrCodec,((ProtocolVersion*)ps->parameterLocal)->major)== + CORBA_FALSE) return -1; + if (CDR_put_octet(cdrCodec,((ProtocolVersion*)ps->parameterLocal)->minor)== + CORBA_FALSE) return -1; + break; + //SequenceNumber + case PID_VARGAPPS_SEQUENCE_NUMBER_LAST: + if (CDR_put_ulong(cdrCodec,((SequenceNumber*)ps->parameterLocal)->high)== + CORBA_FALSE) return -1; + if (CDR_put_ulong(cdrCodec,((SequenceNumber*)ps->parameterLocal)->low)== + CORBA_FALSE) return -1; + break; + //Boolean + case PID_EXPECTS_ACK: + if (CDR_put_octet(cdrCodec,*(CORBA_octet*)ps->parameterLocal)== + CORBA_FALSE) return -1; + break; + //PathName,TypeName + case PID_TOPIC: + case PID_TYPE_NAME:{ + int wptr,len; + + wptr=cdrCodec->wptr; + + len=ps->parameterLength; + if (len % 4) { //length alignment to 4 + len&=~3; + len+=4; + } + len+=4; //data size + cdrCodec->wptr-=2; //new alignments value + if (CDR_put_ushort(cdrCodec,len)==CORBA_FALSE) return -1; + + if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) { + if (CDR_put_string(cdrCodec,(char*)ps->parameter)== + CORBA_FALSE) return -1; + } else { + if (CDR_put_string(cdrCodec,(char*)ps->parameterLocal)== + CORBA_FALSE) return -1; + } + + cdrCodec->wptr=wptr+len; + } break; + case PID_PAD: + break; + default: + debug(11,1) ("parameterCodeCodecFromCSChange: undefined parameterID: %d\n", + ps->parameterID); + break; } - rtps_msg=rtps_msg+4+ps->parameterLength; - max_msg_len=max_msg_len-ps->parameterLength-4; - result=result+4+ps->parameterLength; } - return result; + return 0; } /*****************************************************************************/ int -parameterDecodeStreamToCSChange(CSChange *csChange,uint8_t *rtps_msg, - uint16_t submsg_len,uint8_t e_bit) { +parameterDecodeCodecToCSChange(CSChange *csChange,CDR_Codec *cdrCodec) +{ ParameterId parameterId; ParameterLength parameterLength; ParameterSequence *ps; uint16_t counter=0; - uint8_t *rtps_msg_it=rtps_msg; + unsigned int rptr; CSChangeAttributes_init_head(csChange); - //count number of parameters - while (submsg_len) { - parameterId=*((ParameterId*)rtps_msg_it); - conv_u16(¶meterId,e_bit); - parameterLength=*((ParameterId*)(rtps_msg_it+2)); - conv_u16(¶meterLength,e_bit); - if (submsg_len>parameterLength) submsg_len-=parameterLength; - else submsg_len=0; - if (parameterId==PID_SENTINEL) break; + rptr=cdrCodec->rptr; + + //count number of parameters -> we need one memory allocation for ps + while (cdrCodec->rptrbuf_len) { + if (CDR_get_ushort(cdrCodec,¶meterId)==CORBA_FALSE) + break; + if (CDR_get_ushort(cdrCodec,¶meterLength)==CORBA_FALSE) + break; + if (parameterId==PID_SENTINEL) + break; counter++; - rtps_msg_it+=4+parameterLength; + cdrCodec->rptr+=parameterLength; } + ps=(ParameterSequence*)MALLOC(sizeof(ParameterSequence)*(counter+1)); - rtps_msg_it=rtps_msg; + cdrCodec->rptr=rptr; + while (counter) { - parameterId=*((ParameterId*)rtps_msg_it); - conv_u16(¶meterId,e_bit); + CDR_get_ushort(cdrCodec,¶meterId); + CDR_get_ushort(cdrCodec,¶meterLength); + ps->parameterID=parameterId; - parameterLength=*((ParameterId*)(rtps_msg_it+2)); - conv_u16(¶meterLength,e_bit); ps->parameterLength=parameterLength; ps->parameter=NULL; + + /* save start position of parameter */ + rptr=cdrCodec->rptr; + + debug(11,10) ("parameterDecodeCodecToCSChange: parameterID-0x%x, len-%d\n", + parameterId,parameterLength); switch (parameterId) { case PID_SENTINEL: counter=1; @@ -106,10 +217,12 @@ parameterDecodeStreamToCSChange(CSChange *csChange,uint8_t *rtps_msg, case PID_EXPIRATION_TIME: case PID_PERSISTENCE: case PID_MINIMUM_SEPARATION: - *(NtpTime*)ps->parameterLocal=*((NtpTime*)(rtps_msg_it+4)); - conv_ntp((NtpTime*)ps->parameterLocal,e_bit); + /* time in seconds */ + CDR_get_long(cdrCodec,&(((NtpTime*)ps->parameterLocal)->seconds)); + /* time in seconds / 2^32 */ + CDR_get_ulong(cdrCodec,&(((NtpTime*)ps->parameterLocal)->fraction)); break; - //unsigned long + //CORBA_unsigned_long case PID_TYPE_CHECKSUM: case PID_STRENGTH: case PID_SEND_QUEUE_SIZE: @@ -117,56 +230,58 @@ parameterDecodeStreamToCSChange(CSChange *csChange,uint8_t *rtps_msg, case PID_RELIABILITY_OFFERED: case PID_RELIABILITY_REQUESTED: case PID_MANAGER_KEY: - *(uint32_t*)ps->parameterLocal=*((uint32_t*)(rtps_msg_it+4)); - conv_u32((uint32_t*)ps->parameterLocal,e_bit); - break; - //IPAddress case PID_MATATRAFFIC_MULTICAST_IPADDRESS: case PID_APP_IPADDRESS: case PID_USERDATA_MULTICAST_IPADDRESS: - *(IPAddress*)ps->parameterLocal=*((IPAddress*)(rtps_msg_it+4)); - conv_u32((IPAddress*)ps->parameterLocal,e_bit); - break; - //Port case PID_METATRAFFIC_UNICAST_PORT: case PID_USERDATA_UNICAST_PORT: - *(Port*)ps->parameterLocal=*((Port*)(rtps_msg_it+4)); - conv_u32((Port*)ps->parameterLocal,e_bit); + CDR_get_ulong(cdrCodec,(CORBA_unsigned_long*)ps->parameterLocal); break; //VendorId case PID_VENDOR_ID: - *(VendorId*)ps->parameterLocal=*((VendorId*)(rtps_msg_it+4)); + CDR_get_octet(cdrCodec,&((VendorId*)ps->parameterLocal)->major); + CDR_get_octet(cdrCodec,&((VendorId*)ps->parameterLocal)->minor); break; //ProtocolVersion case PID_PROTOCOL_VERSION: - *(ProtocolVersion*)ps->parameterLocal=*((ProtocolVersion*)(rtps_msg_it+4)); + CDR_get_octet(cdrCodec,&((ProtocolVersion*)ps->parameterLocal)->major); + CDR_get_octet(cdrCodec,&((ProtocolVersion*)ps->parameterLocal)->minor); break; //SequenceNumber case PID_VARGAPPS_SEQUENCE_NUMBER_LAST: - *(SequenceNumber*)ps->parameterLocal=*((SequenceNumber*)(rtps_msg_it+4)); - conv_sn((SequenceNumber*)ps->parameterLocal,e_bit); + CDR_get_ulong(cdrCodec,&((SequenceNumber*)ps->parameterLocal)->high); + CDR_get_ulong(cdrCodec,&((SequenceNumber*)ps->parameterLocal)->low); break; //Boolean case PID_EXPECTS_ACK: - *(Boolean*)ps->parameterLocal=*((Boolean*)(rtps_msg_it+4)); + CDR_get_octet(cdrCodec,(CORBA_octet*)ps->parameterLocal); break; //PathName,TypeName case PID_TOPIC: - case PID_TYPE_NAME: + case PID_TYPE_NAME:{ + CORBA_unsigned_long len; + + CDR_get_ulong(cdrCodec,&len); + cdrCodec->rptr-=4; + ps->parameterLength=(uint16_t)len; if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) { - ps->parameter=MALLOC(ps->parameterLength); - memcpy(ps->parameter,rtps_msg_it+4,ps->parameterLength); + CDR_get_string(cdrCodec,(CORBA_char**)&ps->parameter); } else { - memcpy(ps->parameterLocal,rtps_msg_it+4,ps->parameterLength); + CDR_get_string_buff(cdrCodec,(CORBA_char*)ps->parameterLocal); } - break; + } break; case PID_PAD: break; + default: + debug(11,1) ("parameterDecodeCodecToCSChange: undefined parameterID: %d\n", + parameterId); + break; } CSChangeAttributes_insert(csChange,ps); ps++; //next ps counter--; - rtps_msg_it+=4+parameterLength; + + cdrCodec->rptr=rptr+parameterLength; } //SENTINEL ps->parameterID=PID_SENTINEL; @@ -271,7 +386,6 @@ parameterUpdateCSChange( /*****************************************************************************/ int parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp) { - int len; ParameterSequence *ps; CSChangeAttributes_init_head(csChange); @@ -305,13 +419,7 @@ parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp) { CSChangeAttributes_insert(csChange,ps); ps++; /* topic */ - ps->parameterID=PID_TOPIC; - len=strlen(pp->topic); - ps->parameter=(int8_t*)MALLOC(len+8); - *(uint32_t*)ps->parameter=len+1; - strncpy((4+ps->parameter),pp->topic,len); - *(uint32_t*)(ps->parameter+len+4)=0; - ps->parameterLength=len+8; + parameterPutString(ps,PID_TOPIC,pp->topic); CSChangeAttributes_insert(csChange,ps); ps++; /* typeCheckSum */ @@ -322,13 +430,7 @@ parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp) { CSChangeAttributes_insert(csChange,ps); ps++; /* typeName */ - ps->parameterID=PID_TYPE_NAME; - len=strlen(pp->typeName); - ps->parameter=(int8_t*)MALLOC(len+8); - *(uint32_t*)ps->parameter=len+1; - strncpy((4+ps->parameter),pp->typeName,len); - *(uint32_t*)(ps->parameter+len+4)=0; - ps->parameterLength=len+8; + parameterPutString(ps,PID_TYPE_NAME,pp->typeName); CSChangeAttributes_insert(csChange,ps); ps++; /* sentinel -> end */ @@ -342,11 +444,10 @@ parameterUpdateCSChangeFromPublication(CSChange *csChange,ORTEPublProp *pp) { /*****************************************************************************/ int parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp) { - int len; ParameterSequence *ps; CSChangeAttributes_init_head(csChange); - ps=(ParameterSequence*)MALLOC(sizeof(ParameterSequence)*7); + ps=(ParameterSequence*)MALLOC(sizeof(ParameterSequence)*8); //minimum separation ps->parameterID=PID_MINIMUM_SEPARATION; ps->parameterLength=8; @@ -369,13 +470,7 @@ parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp) { CSChangeAttributes_insert(csChange,ps); ps++; /* topic */ - ps->parameterID=PID_TOPIC; - len=strlen(sp->topic); - ps->parameter=(int8_t*)MALLOC(len+8); - *(uint32_t*)ps->parameter=len+1; - strncpy((4+ps->parameter),sp->topic,len); - *(uint32_t*)(ps->parameter+len+4)=0; - ps->parameterLength=len+8; + parameterPutString(ps,PID_TOPIC,sp->topic); CSChangeAttributes_insert(csChange,ps); ps++; /* typeCheckSum */ @@ -386,15 +481,16 @@ parameterUpdateCSChangeFromSubscription(CSChange *csChange,ORTESubsProp *sp) { CSChangeAttributes_insert(csChange,ps); ps++; /* typeName */ - ps->parameterID=PID_TYPE_NAME; - len=strlen(sp->typeName); - ps->parameter=(int8_t*)MALLOC(len+8); - *(uint32_t*)ps->parameter=len+1; - strncpy((4+ps->parameter),sp->typeName,len); - *(uint32_t*)(ps->parameter+len+4)=0; - ps->parameterLength=len+8; + parameterPutString(ps,PID_TYPE_NAME,sp->typeName); CSChangeAttributes_insert(csChange,ps); ps++; + /* userdata multicast ipaddress */ + ps->parameterID=PID_USERDATA_MULTICAST_IPADDRESS; + ps->parameterLength=4; + *(IPAddress*)ps->parameterLocal=sp->multicast; + ps->parameter=NULL; + CSChangeAttributes_insert(csChange,ps); + ps++; /* sentinel -> end */ ps->parameterID=PID_SENTINEL; ps->parameterLength=0; @@ -479,18 +575,18 @@ parameterUpdatePublication(CSChange *csChange,ORTEPublProp *pp) { break; case PID_TOPIC: if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) - strncpy(pp->topic,ps->parameter+4,ps->parameterLength-3); + strncpy(pp->topic,ps->parameter,ps->parameterLength); else - strncpy(pp->topic,ps->parameterLocal+4,ps->parameterLength-3); + strncpy(pp->topic,ps->parameterLocal,ps->parameterLength); break; case PID_TYPE_CHECKSUM: pp->typeChecksum=*(TypeChecksum*)&ps->parameterLocal; break; case PID_TYPE_NAME: if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) - strncpy(pp->typeName,ps->parameter+4,ps->parameterLength-3); + strncpy(pp->typeName,ps->parameter,ps->parameterLength); else - strncpy(pp->typeName,ps->parameterLocal+4,ps->parameterLength-3); + strncpy(pp->typeName,ps->parameterLocal,ps->parameterLength); break; } } @@ -515,18 +611,21 @@ parameterUpdateSubscription(CSChange *csChange,ORTESubsProp *sp) { break; case PID_TOPIC: if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) - strncpy(sp->topic,ps->parameter+4,ps->parameterLength-3); + strncpy(sp->topic,ps->parameter,ps->parameterLength); else - strncpy(sp->topic,ps->parameterLocal+4,ps->parameterLength-3); + strncpy(sp->topic,ps->parameterLocal,ps->parameterLength); break; case PID_TYPE_CHECKSUM: sp->typeChecksum=*(TypeChecksum*)&ps->parameterLocal; break; case PID_TYPE_NAME: if (ps->parameterLength>MAX_PARAMETER_LOCAL_LENGTH) - strncpy(sp->typeName,ps->parameter+4,ps->parameterLength-3); + strncpy(sp->typeName,ps->parameter,ps->parameterLength); else - strncpy(sp->typeName,ps->parameterLocal+4,ps->parameterLength-3); + strncpy(sp->typeName,ps->parameterLocal,ps->parameterLength); + break; + case PID_USERDATA_MULTICAST_IPADDRESS: + sp->multicast=*(IPAddress*)&ps->parameterLocal; break; } } diff --git a/orte/liborte/rtl/Makefile.in b/orte/liborte/rtl/Makefile.in index 409a487..47c2198 100644 --- a/orte/liborte/rtl/Makefile.in +++ b/orte/liborte/rtl/Makefile.in @@ -47,12 +47,13 @@ host_triplet = @host@ subdir = orte/liborte/rtl DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(moduledir)" PROGRAMS = $(module_PROGRAMS) @@ -82,7 +83,7 @@ am__objects_1 = ptw32_rwlock_check_need_init.$(OBJEXT) \ @USE_RTLINUX_TRUE@am_pthread_rwlock_rt_ko_OBJECTS = $(am__objects_1) pthread_rwlock_rt_ko_OBJECTS = $(am_pthread_rwlock_rt_ko_OBJECTS) pthread_rwlock_rt_ko_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/pthread_rwlock_destroy.Po \ @@ -126,8 +127,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -161,6 +168,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -200,6 +209,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ diff --git a/orte/liborte/sock.c b/orte/liborte/sock.c index 3a895e3..5efabaf 100644 --- a/orte/liborte/sock.c +++ b/orte/liborte/sock.c @@ -24,7 +24,7 @@ /*********************************************************************/ int sock_start(void) { -#if defined(SOCK_BSD) || defined (SOCK_RTL) +#if defined(SOCK_BSD) || defined (SOCK_RTLWIP) return 0; #elif defined (SOCK_WIN) WORD wVersionRequested; @@ -55,7 +55,7 @@ inline void sock_cleanup(sock_t *sock) { #if defined(SOCK_BSD) close(sock->fd); -#elif defined(SOCK_RTL) +#elif defined(SOCK_RTLWIP) close_socket_np(sock->fd); #elif defined(SOCK_WIN) closesocket(sock->fd); @@ -63,9 +63,9 @@ sock_cleanup(sock_t *sock) { } /*********************************************************************/ -int -sock_setsockopt(sock_t *sock,int optname,const char *optval, int optlen) { - if (setsockopt(sock->fd, IPPROTO_IP, optname,(void *)&optval, optlen)) { +inline int +sock_setsockopt(sock_t *sock,int level,int optname,const char *optval, int optlen) { + if (setsockopt(sock->fd, level, optname,(void *)optval, optlen)) { sock_cleanup(sock); return -1; } @@ -73,9 +73,9 @@ sock_setsockopt(sock_t *sock,int optname,const char *optval, int optlen) { } /*********************************************************************/ -int -sock_getsockopt(sock_t *sock,int optname,char *optval, int *optlen) { - if (getsockopt(sock->fd, IPPROTO_IP, optname,(void *)&optval, optlen)) { +inline int +sock_getsockopt(sock_t *sock,int level,int optname,char *optval, int *optlen) { + if (getsockopt(sock->fd, level, optname,(void *)optval, optlen)) { sock_cleanup(sock); return -1; } @@ -91,12 +91,26 @@ sock_bind(sock_t *sock,uint16_t port) { name.sin_family = AF_INET; name.sin_port = htons(port); name.sin_addr.s_addr = htonl(INADDR_ANY); - if (bind(sock->fd, (struct sockaddr *)&name, sizeof(name)) < 0) { + if (bind(sock->fd, + #ifndef CONFIG_ORTE_RTL_ONETD + (struct sockaddr *) + #endif + &name, sizeof(name)) < 0) { sock_cleanup(sock); return -1; } size = sizeof(name); - if (getsockname(sock->fd,(struct sockaddr *)&name, &size ) < 0) { + if (getsockname(sock->fd, + #ifndef CONFIG_ORTE_RTL_ONETD + (struct sockaddr *) + #endif + &name, + #ifndef CONFIG_ORTE_RTL_ONETD + &size + #else + size + #endif + ) < 0) { sock_cleanup(sock); return -1; } @@ -107,13 +121,21 @@ sock_bind(sock_t *sock,uint16_t port) { /*********************************************************************/ inline int sock_recvfrom(sock_t *sock, void *buf, int max_len,struct sockaddr_in *des,int des_len) { - return recvfrom(sock->fd, buf, max_len, 0,(struct sockaddr*)des,&des_len); + return recvfrom(sock->fd, buf, max_len, 0, + #ifndef CONFIG_ORTE_RTL_ONETD + (struct sockaddr*) + #endif + des,&des_len); } /*********************************************************************/ inline int sock_sendto(sock_t *sock, void *buf, int len,struct sockaddr_in *des,int des_len) { - return sendto(sock->fd, buf, len, 0,(struct sockaddr*)des,des_len); + return sendto(sock->fd, buf, len, 0, + #ifndef CONFIG_ORTE_RTL_ONETD + (struct sockaddr*) + #endif + des,des_len); } /*********************************************************************/ @@ -147,7 +169,7 @@ sock_get_local_interfaces(sock_t *sock,ORTEIFProp *IFProp,char *IFCount) { } } return 0; -#elif defined(SOCK_RTL) +#elif defined(SOCK_RTLWIP) /* loopback iface is recognized if it has this address */ char ip_address [] = "127.0.0.1"; struct in_addr loopaddr; diff --git a/orte/liborte/usedSections.txt b/orte/liborte/usedSections.txt index 8244e70..951180f 100644 --- a/orte/liborte/usedSections.txt +++ b/orte/liborte/usedSections.txt @@ -2,7 +2,7 @@ 2 - htimerNtp.c 3 - fnmatch.c 4 - globals.c -5 - +5 - cdr.c 6 - sock.c 7 - conv.c 8 - objectEntry.c @@ -19,9 +19,9 @@ 19 - 20 - ORTEInit.c 21 - ORTEDomainApp.c -22 - ORTEAppRecvMetatrafficThread.c -23 - ORTEAppRecvUserdataThread.c -24 - ORTEAppSendMetatrafficThread.c +22 - ORTEAppRecvThread.c +23 - +24 - ORTEAppSendThread.c 25 - ORTEThreadUtils.c 26 - ORTETypeRegister.c 27 - ORTEVerbosity.c @@ -54,7 +54,7 @@ 54 - RTPSCSTReaderProc.c 55 - RTPSCSTReaderTimer.c 56 - RTPSIssue.c -57 - +57 - 58 - 59 - 60 - diff --git a/orte/manager/Makefile.in b/orte/manager/Makefile.in index 9cccf60..10c82ae 100644 --- a/orte/manager/Makefile.in +++ b/orte/manager/Makefile.in @@ -43,12 +43,13 @@ host_triplet = @host@ subdir = orte/manager DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/admin/linux.m4 \ - $(top_srcdir)/configure.in +am__aclocal_m4_deps = $(top_srcdir)/admin/idl.m4 \ + $(top_srcdir)/admin/jorte.m4 $(top_srcdir)/admin/linux.m4 \ + $(top_srcdir)/admin/pkg.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/orte/include/config.h +CONFIG_HEADER = $(top_builddir)/orte/include/orte/orte_config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) @@ -66,7 +67,7 @@ am__ortemanager_rt_ko_SOURCES_DIST = ortemanager.c @CONFIG_ORTE_RT_TRUE@ ortemanager_rt_ko-ortemanager.$(OBJEXT) ortemanager_rt_ko_OBJECTS = $(am_ortemanager_rt_ko_OBJECTS) ortemanager_rt_ko_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/orte/include/orte depcomp = $(SHELL) $(top_srcdir)/admin/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/ortemanager.Po \ @@ -99,8 +100,14 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_ADEOS_FALSE = @CONFIG_ADEOS_FALSE@ CONFIG_ADEOS_TRUE = @CONFIG_ADEOS_TRUE@ +CONFIG_JORTE = @CONFIG_JORTE@ +CONFIG_JORTE_FALSE = @CONFIG_JORTE_FALSE@ +CONFIG_JORTE_TRUE = @CONFIG_JORTE_TRUE@ CONFIG_ORTE_CYGWIN_FALSE = @CONFIG_ORTE_CYGWIN_FALSE@ CONFIG_ORTE_CYGWIN_TRUE = @CONFIG_ORTE_CYGWIN_TRUE@ +CONFIG_ORTE_IDL = @CONFIG_ORTE_IDL@ +CONFIG_ORTE_IDL_FALSE = @CONFIG_ORTE_IDL_FALSE@ +CONFIG_ORTE_IDL_TRUE = @CONFIG_ORTE_IDL_TRUE@ CONFIG_ORTE_KERNEL = @CONFIG_ORTE_KERNEL@ CONFIG_ORTE_KERNEL_FALSE = @CONFIG_ORTE_KERNEL_FALSE@ CONFIG_ORTE_KERNEL_TRUE = @CONFIG_ORTE_KERNEL_TRUE@ @@ -134,6 +141,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ +LIBIDL_CFLAGS = @LIBIDL_CFLAGS@ +LIBIDL_LIBS = @LIBIDL_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -173,6 +182,7 @@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RTAI_CFLAGS = @RTAI_CFLAGS@ RTLINUX_CC = @RTLINUX_CC@ diff --git a/orte/manager/ortemanager.c b/orte/manager/ortemanager.c index 78f65b4..9afac92 100644 --- a/orte/manager/ortemanager.c +++ b/orte/manager/ortemanager.c @@ -121,6 +121,8 @@ static void usage(void) { printf(" ORTEManager -v ALL.7 all sections up to level 7\n"); printf(" -R, --refresh refresh period in second(s)\n"); printf(" -P, --purge purge time in second(s)\n"); + printf(" -I, --metaMulticast use multicast IPAddr for metatraffic comm.\n"); + printf(" -t, --timetolive time-to-live for multicast packets\n"); #ifdef CONFIG_ORTE_UNIX printf(" -D, --daemon start program like daemon\n"); #endif @@ -144,6 +146,8 @@ int main(int argc,char *argv[]) { { "verbosity",1,0, 'v' }, { "refresh",1,0, 'R' }, { "purge",1,0, 'P' }, + { "metaMulticast",1,0, 'I' }, + { "timetolive",1,0, 't' }, #ifdef CONFIG_ORTE_UNIX { "daemon",1,0, 'D' }, #endif @@ -162,16 +166,16 @@ int main(int argc,char *argv[]) { ORTEDomainPropDefaultGet(&dp); #if defined HAVE_GETOPT_LONG || defined HAVE_GETOPT_LONG_ORTE - while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:l:VhDesir",&long_opts[0], NULL)) != EOF) { + while ((opt = getopt_long(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir",&long_opts[0], NULL)) != EOF) { #else - while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:l:VhDesir")) != EOF) { + while ((opt = getopt(argc, argv, "k:p:d:v:R:E:P:I:t:l:VhDesir")) != EOF) { #endif switch (opt) { case 'p': - dp.mgrs=strdup(optarg); + dp.mgrs=optarg; break; case 'k': - dp.keys=strdup(optarg); + dp.keys=optarg; break; case 'd': domain=strtol(optarg,NULL,0); @@ -185,6 +189,13 @@ int main(int argc,char *argv[]) { case 'P': NtpTimeAssembFromMs(dp.baseProp.purgeTime,strtol(optarg,NULL,0),0); break; + case 'I': + dp.multicast.enabled=ORTE_TRUE; + dp.multicast.ipAddress=StringToIPAddress(optarg); + break; + case 't': + dp.multicast.ttl=strtol(optarg,NULL,0); + break; case 'E': NtpTimeAssembFromMs(dp.baseProp.expirationTime,strtol(optarg,NULL,0),0); break; @@ -240,20 +251,16 @@ int main(int argc,char *argv[]) { daemonInit(); #endif - ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE); - #ifndef CONFIG_ORTE_UNIX + ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE); +/* #ifndef CONFIG_ORTE_UNIX d->taskSend.terminate=ORTE_FALSE; ORTEAppSendThread(d); - #endif - ORTEDomainStart(d,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); + #endif*/ + ORTEDomainStart(d,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); #ifdef CONFIG_ORTE_UNIX waitForEndingCommand(); ORTEDomainMgrDestroy(d); - if (dp.mgrs) - free(dp.mgrs); - if (dp.keys) - free(dp.keys); if (events) free(events); #endif @@ -270,10 +277,14 @@ MODULE_PARM_DESC(peer,"possible locations of fellow managers"); MODULE_LICENSE("GPL"); ORTEDomain *d=NULL; pthread_t thread; -ORTEDomainProp dp; void * domainInit(void *arg) { + ORTEDomainProp dp; + + ORTEDomainPropDefaultGet(&dp); + ORTEVerbositySetOptions(verbosity); + dp.mgrs=peer; d=ORTEDomainMgrCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_TRUE); return arg; } @@ -288,13 +299,10 @@ domainDestroy(void *arg) { int init_module(void) { ORTEInit(); - ORTEDomainPropDefaultGet(&dp); - ORTEVerbositySetOptions(verbosity); - dp.mgrs=peer; pthread_create(&thread,NULL,&domainInit,NULL); //allocate resources in RT pthread_join(thread,NULL); if (d) - ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_TRUE); //manager start + ORTEDomainStart(d,ORTE_TRUE,ORTE_FALSE,ORTE_FALSE,ORTE_FALSE,ORTE_TRUE); //manager start return 0; } void diff --git a/readme b/readme index f38c2e7..251e05d 100644 --- a/readme +++ b/readme @@ -13,6 +13,7 @@ UNIX - Linux, Solars, MacOS, FreeBSD Windows - MinGW, CygWin, MSVC RTLinux - with preliminary UDP stack RTAI - with RTNet +JAVA note: was tested on sparc-sun-solaris2.9 @@ -31,8 +32,13 @@ make install after this procedure ortemanager and orteping are placed in /usr/local/bin , library in /usr/local/lib and include headers /usr/local/include -RTLinux compilation: -./configure --with-linux=/patched linux dir/ --with-rtlinux=/rtlinux dir/ +RTLinux compilation with wIP: +./configure --with-linux=/patched linux dir/ --with-rtlinux=/rtlinux dir/ --with-rtlinuxwip=/wip dir/ +make +make install + +RTLinux compilation with onetd: +./configure --with-linux=/patched linux dir/ --with-rtlinux=/rtlinux dir/ --with-rtlinuxonetd=/onetd dir/ make make install @@ -41,6 +47,10 @@ RTAI compilation: make make install +JAVA compilation: +./configure --with-java=/java home dir/ +make +make install How to start? ------------- @@ -48,7 +58,7 @@ run :ortemanager & see :ortemanager -h for usage note:ortemanager have to be running during all communication. For future work can be added into /etc/init.d/... script for starting ortemanager during boot -of machine. This script (redhat and mandrake) is placed in +of machine. This scripts (redhat and mandrake) are located in "orte/manager/rc/ortemanagerd" For developping a RT application, ortemnager can be running in userspace. Start it with parameter "-k 192.168.4.2". This address is IP address of diff --git a/switch2standalone b/switch2standalone index 4996496..4eadb82 100755 --- a/switch2standalone +++ b/switch2standalone @@ -4,11 +4,15 @@ # without OCERA framework if [ ! -e Makefile.rules-ocera ] ; then - mv Makefile.rules Makefile.rules-ocera +# cp Makefile.rules Makefile.rules-ocera +fi + +if [ -e OCERA_TOP_DIR ] ; then + mv -f OCERA_TOP_DIR OCERA_TOP_DIR-ocera fi # Commentout definition of OCERA location -sed -e 's/^OCERA_DIR := /#OCERA_DIR := /' Makefile.rules +#sed -e 's/^OCERA_DIR := /#OCERA_DIR := /' Makefile.rules # Prepare "config.omk-default" file, user overrides should go into "config.omk" make default-config diff --git a/todo b/todo index a950f2f..ed5997e 100644 --- a/todo +++ b/todo @@ -1,5 +1,20 @@ If you are a developper and wants to help, enjoy ! +################################################################ + Release: ORTE0-3-0 Date: 040220 + +1) clean code !!! :))) + +2) improve java interface + +3) implement reference counting into main tree to make thread safe operations + +4) RTerms port + + +... + + ################################################################ Release: ORTE0-2-3 Date: 9/26/2004 -- 2.39.2