* $Id: RTPSAck.c,v 0.0.0.1 2003/10/07
*
* DEBUG: section 47 RTPS message ACK
- * AUTHOR: Petr Smolik petr.smolik@wo.cz
*
- * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
+ * -------------------------------------------------------------------
+ * ORTE
+ * Open Real-Time Ethernet
+ *
+ * Copyright (C) 2001-2006
+ * Department of Control Engineering FEE CTU Prague, Czech Republic
+ * http://dce.felk.cvut.cz
+ * http://www.ocera.org
+ *
+ * Author: Petr Smolik petr@smoliku.cz
+ * Advisor: Pavel Pisa
+ * Project Responsible: Zdenek Hanzalek
* --------------------------------------------------------------------
*
* This program is free software; you can redistribute it and/or modify
CSChangeForReader *csChangeForReader;
StateMachineSend stateMachineSendNew;
ObjectId roid,woid;
- SequenceNumber sn;
+ SequenceNumber sn,isn;
char queue=1;
CDR_Endianness data_endian;
CORBA_octet flags;
cdrCodec->rptr-=3;
/* flags */
- CDR_get_octet(cdrCodec,&flags);
+ CDR_get_octet(cdrCodec, (CORBA_octet *)&flags);
f_bit=flags & 2;
/* move reading possition to begin of submessage */
cdrCodec->data_endian=FLAG_BIG_ENDIAN;
/* readerObjectId */
- CDR_get_ulong(cdrCodec,&roid);
+ CDR_get_ulong(cdrCodec, (CORBA_unsigned_long *)&roid);
/* writerObjectId */
- CDR_get_ulong(cdrCodec,&woid);
+ CDR_get_ulong(cdrCodec, (CORBA_unsigned_long *)&woid);
cdrCodec->data_endian=data_endian;
/* SeqNumber */
- CDR_get_ulong(cdrCodec,&sn.high);
- CDR_get_ulong(cdrCodec,&sn.low);
+ CDR_get_ulong(cdrCodec, (CORBA_unsigned_long *)&sn.high);
+ CDR_get_ulong(cdrCodec, (CORBA_unsigned_long *)&sn.low);
readerGUID.hid=mi->sourceHostId;
readerGUID.aid=mi->sourceAppId;
stateMachineSendNew=NOTHNIGTOSEND;
csChangeForReader=CSChangeForReader_first(cstRemoteReader);
while(csChangeForReader) {
- if (SeqNumberCmp(csChangeForReader->csChange->sn,sn)<0) { //ACK
+ isn=csChangeForReader->csChange->sn;
+ if (SeqNumberCmp(csChangeForReader->csChange->gapSN,noneSN)>0) {
+ SeqNumberAdd(isn,csChangeForReader->csChange->sn,csChangeForReader->csChange->gapSN);
+ SeqNumberDec(isn,isn);
+ }
+ if (SeqNumberCmp(isn,sn)<0) { //ACK
if (csChangeForReader->commStateChFReader!=ACKNOWLEDGED) {
CSChangeForReader *csChangeForReaderDestroyed;
csChangeForReaderDestroyed=csChangeForReader;