Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/network/network_protocol.cc @ 5822

Last change on this file since 5822 was 5822, checked in by bensch, 18 years ago

orxonox/trunk: merged branches/network to the trunk
merged with command:
svn merge -r 5505:HEAD branches/network trunk

conflicts resolved in favor of the trunk (as always :))
also fixed a typo in the #include "SDL_tread.h"

File size: 3.7 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Wuest
13   co-programmer: ...
14*/
15
16/* this is for debug output. It just says, that all calls to PRINT() belong to the DEBUG_MODULE_NETWORK module
17   For more information refere to https://www.orxonox.net/cgi-bin/trac.cgi/wiki/DebugOutput
18*/
19#define DEBUG_MODULE_NETWORK
20
21//#include ...
22
23/* include my own header */
24#include "network_protocol.h"
25
26/* include the synchronizeable object */
27#include "synchronizeable.h"
28
29/* include this file for debugging */
30#include "debug.h"
31
32/* using namespace std is default, this needs to be here */
33using namespace std;
34
35
36/**
37  standard constructor
38*/
39NetworkProtocol::NetworkProtocol()
40{
41  /* set the class id for the base object */
42  this->setClassID(CL_NETWORK_PROTOCOL, "NetworkProtocol");
43  this->headerLength = sizeof(Header);
44}
45
46/**
47  standard destructor
48*/
49NetworkProtocol::~NetworkProtocol()
50{}
51
52/**
53    * creates a new packet header from the function arguments
54    *
55    * @arg data: the binary data without header -> return the data in this binary array
56    * @arg length: the data length without header
57    * @arg bufferLength: the length of the internal buffer
58    * @arg source: reference to the source Synchronizeable object
59    * @arg remoteID: id number of the remote Synchronizeable object
60    * @return: the new data length with header (the header data is included into byte* data)
61    *          -1 if there isn't enough space in the buffer for the header
62*/
63int NetworkProtocol::createHeader(byte* data, int length, int bufferLength, const Synchronizeable& source, unsigned int remoteID)
64{
65  printf("NetworkProtocol: create header length = %i, bufferLength = %i\n", length, bufferLength);
66  //If there isn't enough space for the header return -1
67  if (length + this->headerLength > bufferLength)
68    return -1;
69
70//   for(int i = 0; i < length; i++)
71//     printf("send byte[%i]=%u\n", i, data[i]);
72
73
74  //Create space for the header
75  for( int i = length - 1; i >= 0; i--)
76    data[i + this->headerLength] = data[i];
77
78  //Now create the header
79  /* protocol identifier */
80  data[0] = 255;
81  /* version number */
82  data[1] = 0;
83  /* sender ID: FIXME: there will be a better ID (for example unique:D)*/
84  data[2] = (byte)source.getClassID();
85  /* receiver ID */
86  data[3] = remoteID;
87  /* data length*/
88  data[4] = length;
89
90
91  return length + this->headerLength;
92}
93
94/**
95    * extracts the header from the binary data stream
96    * @arg data: the binary data with the header
97    * @arg length: the length of the binary data (including header)
98    * @return: a Header struct with the header information and the binary data
99*/
100Header NetworkProtocol::extractHeader(byte* data, int length)
101{
102  PRINTF(0)("extract Header\n");
103  //Test if received data can contain a header
104  if (length < headerLength)
105  {
106    PRINTF(0)("Received data is to short; it can't contain a header!");
107    Header h;
108    h.protocol = 0;
109    return h;
110  }
111
112  //Extract header
113  Header h;
114  //&h = data;
115
116  h.protocol = data[0];
117  /* version number */
118  h.version = data[1];
119  /* sender ID: FIXME: there will be a better ID (for example unique:D)*/
120  h.senderID = data[2];
121  /* receiver ID */
122  h.receiverID = data[3];
123  /* data length*/
124  h.length = data[4];
125
126
127//   for(int i = 0; i < length; i++)
128//     printf("recS byte[%i]=%u\n", i, data[i]);
129
130  //Remove header
131//   for (int i = headerLength; i < length; i++)
132//     data[i - headerLength] = data[i];
133
134  return h;
135}
Note: See TracBrowser for help on using the repository browser.