]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/liborte/RTPSHeader.c
New ORTE version 0.3.0 committed
[orte.git] / orte / liborte / RTPSHeader.c
index 72640a34f82d832cb365697cc5c8c99ca0dd62ae..4bd712731fa3e55f2d93c31d2e8b753aa443685b 100644 (file)
 #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;
 }