2 * $Id: objectUtils.c,v 0.0.0.1 2003/09/10
4 * DEBUG: section 9 Functions with objets
5 * AUTHOR: Petr Smolik petr.smolik@wo.cz
7 * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
8 * --------------------------------------------------------------------
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
25 * AppParamsInit - Initalization default values of an application
26 * @ap: pointer to an application
30 AppParamsInit(AppParams *ap) {
31 PROTOCOL_VERSION_1_0(ap->protocolVersion);
32 VENDOR_ID_UNKNOWN(ap->vendorId);
33 NTPTIME_BUILD(ap->expirationTime,180);
34 ap->metatrafficUnicastPort=PORT_INVALID;
35 ap->userdataUnicastPort=PORT_INVALID;
36 ap->unicastIPAddressCount=0;
37 ap->metatrafficMulticastIPAddressCount=0;
38 ap->managerKeyCount=0;
39 SEQUENCE_NUMBER_NONE(ap->vargAppsSequenceNumber);
43 * PublParamsInit - Initalization default values of a publisher
44 * @p: pointer to a publisher
48 PublParamsInit(ORTEPublProp *pp) {
49 pp->expectsAck=ORTE_TRUE;
50 NTPTIME_ZERO(pp->persistence);
51 pp->reliabilityOffered=0;
54 strcpy(pp->topic,"DefaultTopic");
55 strcpy(pp->typeName,"");
58 NTPTIME_BUILD(pp->maxBlockTime,30);
59 pp->criticalQueueLevel=1;
60 NtpTimeAssembFromMs(pp->HBNornalRate,1,0);
61 NtpTimeAssembFromMs(pp->HBCQLRate,0,50);
66 * SubsParamsInit - Initalization default values of a subscription
67 * @s: pointer to a subscription
71 SubsParamsInit(ORTESubsProp *sp) {
72 NTPTIME_ZERO(sp->minimumSeparation);
74 sp->reliabilityRequested=0;
75 strcpy(sp->topic,"DefaultTopic");
76 strcpy(sp->typeName,"");
78 // s->rcvMessageCallBack=NULL;
79 // s->deadline=NTPTIME_ZERO;
84 * @appParams: pointer to a source of data
85 * @appInfo: pointer to a destination of data
89 updateORTEAppInfo(AppParams *appParams,ORTEAppInfo *appInfo) {
94 appInfo->unicastIPAddressList=
95 appParams->unicastIPAddressList;
96 appInfo->unicastIPAddressCount=
97 appParams->unicastIPAddressCount;
98 appInfo->metatrafficMulticastIPAddressList=
99 appParams->metatrafficMulticastIPAddressList;
100 appInfo->metatrafficMulticastIPAddressCount=
101 appParams->metatrafficMulticastIPAddressCount;
102 appInfo->metatrafficUnicastPort=
103 appParams->metatrafficUnicastPort;
104 appInfo->userdataUnicastPort=
105 appParams->userdataUnicastPort;
108 appInfo->protocolVersion=
109 appParams->protocolVersion;
113 * generateEvent - Generate new and delete event up to an application
114 * @objectEntryOID: pointer to a OID structure
115 * @live: ORTE_TRUE if object is live
117 * Return: return ORTE_TRUE if object is acceptable by ORTE (new events)
120 generateEvent(ORTEDomain *d,GUID_RTPS *guid,void *params,Boolean live) {
121 ObjectEntryOID *objectEntryOID;
123 Boolean result=ORTE_TRUE;
126 switch (guid->oid & 0x07) {
127 case OID_APPLICATION:
128 updateORTEAppInfo((AppParams*)params,&d->appInfo);
129 if (((guid->aid & 0x03)==MANAGER) &&
130 (d->domainEvents.onMgrNew) && live)
131 result=d->domainEvents.onMgrNew(&d->appInfo,
132 d->domainEvents.onMgrNewParam);
133 if (((guid->aid & 0x03)==MANAGER) &&
134 (d->domainEvents.onMgrDelete) && (!live))
135 d->domainEvents.onMgrDelete(&d->appInfo,
136 d->domainEvents.onMgrDeleteParam);
137 if (((guid->aid & 0x03)==MANAGEDAPPLICATION) &&
138 (d->domainEvents.onAppRemoteNew) && live)
139 result=d->domainEvents.onAppRemoteNew(&d->appInfo,
140 d->domainEvents.onAppRemoteNewParam);
141 if (((guid->aid & 0x03)==MANAGEDAPPLICATION) &&
142 (d->domainEvents.onAppDelete) && !live)
143 d->domainEvents.onAppDelete(&d->appInfo,
144 d->domainEvents.onAppDeleteParam);
146 case OID_PUBLICATION:
147 guidapp.hid=guid->hid;
148 guidapp.aid=guid->aid;
150 objectEntryOID=objectEntryFind(d,&guidapp);
151 if (!objectEntryOID) return ORTE_FALSE;
152 updateORTEAppInfo((AppParams*)objectEntryOID->attributes,&d->appInfo);
153 d->pubInfo.topic=((ORTEPublProp*)params)->topic;
154 d->pubInfo.type=((ORTEPublProp*)params)->typeName;
155 d->pubInfo.objectId=guid->oid;
156 if ((d->domainEvents.onPubRemoteNew) && live)
157 result=d->domainEvents.onPubRemoteNew(&d->appInfo,&d->pubInfo,
158 d->domainEvents.onPubRemoteNewParam);
159 if ((d->domainEvents.onPubDelete) && !live)
160 d->domainEvents.onPubDelete(&d->appInfo,&d->pubInfo,
161 d->domainEvents.onPubDeleteParam);
164 case OID_SUBSCRIPTION:
165 guidapp.hid=guid->hid;
166 guidapp.aid=guid->aid;
168 objectEntryOID=objectEntryFind(d,&guidapp);
169 if (!objectEntryOID) return ORTE_FALSE;
170 updateORTEAppInfo((AppParams*)objectEntryOID->attributes,&d->appInfo);
171 d->subInfo.topic=((ORTESubsProp*)params)->topic;
172 d->subInfo.type=((ORTESubsProp*)params)->typeName;
173 d->subInfo.objectId=guid->oid;
174 if ((d->domainEvents.onSubRemoteNew) && (live))
175 result=d->domainEvents.onSubRemoteNew(&d->appInfo,&d->subInfo,
176 d->domainEvents.onSubRemoteNewParam);
177 if ((d->domainEvents.onSubDelete) && (!live))
178 d->domainEvents.onSubDelete(&d->appInfo,&d->subInfo,
179 d->domainEvents.onSubDeleteParam);
187 * GetTypeApp - Test if application is MOM or OAM
188 * @d: pointer to a domain
192 * Return: return ORTE_TRUE if application MOM
195 getTypeApp(ORTEDomain *d,AppParams *ap,IPAddress senderIPAddress) {
196 Boolean result=ORTE_FALSE;
199 //test if the app is MOM
200 for (i=0;i<d->appParams->managerKeyCount;i++) {
201 for (j=0;j<ap->managerKeyCount;j++) {
202 if (ap->managerKeyList[j]!=StringToIPAddress("127.0.0.1")) {
203 if (ap->managerKeyList[j]==d->appParams->managerKeyList[i])
206 if (senderIPAddress==StringToIPAddress("127.0.0.1"))
208 for (k=0;k<d->domainProp.IFCount;k++) {
209 if (d->domainProp.IFProp[k].ipAddress==senderIPAddress)
219 * appSelfParamChanged - Self parameters changed
220 * @d: pointer to an domain
221 * @lock: lock CSTWriters at the start of function
222 * @unlock: unlock CSTWriters at the end of function
227 appSelfParamChanged(ORTEDomain *d,
228 Boolean lock,Boolean unlock,Boolean forWM,Boolean alive) {
232 pthread_rwlock_wrlock(&d->writerApplicationSelf.lock);
234 pthread_rwlock_wrlock(&d->writerManagers.lock);
236 csChange=(CSChange*)MALLOC(sizeof(CSChange));
237 parameterUpdateCSChange(csChange,d->appParams,ORTE_TRUE);
238 csChange->guid=d->guid;
239 csChange->alive=alive;
240 csChange->cdrStream.buffer=NULL;
241 CSTWriterAddCSChange(d,&d->writerApplicationSelf,csChange);
243 csChange=(CSChange*)MALLOC(sizeof(CSChange));
244 parameterUpdateCSChange(csChange,d->appParams,ORTE_TRUE);
245 csChange->guid=d->guid;
246 csChange->alive=alive;
247 csChange->cdrStream.buffer=NULL;
248 CSTWriterAddCSChange(d,&d->writerManagers,csChange);
251 pthread_rwlock_unlock(&d->writerApplicationSelf.lock);
253 pthread_rwlock_unlock(&d->writerManagers.lock);