43#include <netinet/in.h>
70 for (current = Head; current; current = next) {
111 Size = *((
unsigned short *)curbuf);
112 curbuf +=
sizeof(
unsigned short);
114 ID = *((
short *)curbuf);
115 curbuf +=
sizeof(
unsigned short);
123 remaining_size = Size - 4;
129 while (remaining_size > 0)
131 FieldClass *field =
new FieldClass;
143 int size = ntohs(field->Size);
144 field->Data =
new char[size];
145 memcpy(field->Data, curbuf, size);
147 remaining_size -= size;
152 int pad = (4 - (ntohs(field->Size) & 3)) & 3;
154 remaining_size -= pad;
196 for (current = Head; current; current=current->Next)
199 size += current->Size;
200 size += (4 - (size & 3)) & 3;
207 char *retval =
new char[size];
208 char *curbuf = retval;
213 *((
unsigned short *)curbuf) = (
unsigned short)htons(size);
214 curbuf +=
sizeof(
unsigned short);
215 *((
short *)curbuf) = htons(ID);
216 curbuf +=
sizeof(
unsigned short);
222 for (current = Head; current; current = current->Next)
239 memcpy(curbuf, current->Data, ntohs(current->Size));
240 curbuf += ntohs(current->Size);
245 int pad = (4 - (ntohs(current->Size) & 3)) & 3;
266 for (FieldClass *current = Head; current; current = current->Next)
268 if ( strncmp(
id, current->ID, 4) == 0)
278 FieldClass *current = Head;
279 for (; (current && (i < position)); current = current->Next, i++) {
282 if (current)
return current;
291 for (FieldClass *current = Head; current; current = current->Next, i++) {}
316 data = *((
char *)field->Data);
318 return((field) ?
true :
false);
340 data = *((
unsigned char *)field->Data);
342 return((field) ?
true :
false);
364 data = *((
short *)field->Data);
366 return((field) ?
true :
false);
388 data = *((
unsigned short *)field->Data);
390 return((field) ?
true :
false);
412 data = *((
long *)field->Data);
414 return((field) ?
true :
false);
423 data = *((
int *)field->Data);
425 return((field) ?
true :
false);
449 strcpy(data, (
char *)field->Data);
451 return((field) ?
true :
false);
472 data = *((
unsigned long *)field->Data);
474 return((field) ?
true :
false);
481 data = *((
unsigned *)field->Data);
483 return((field) ?
true :
false);
507 memcpy (data, field->Data,
MIN(field->Size, length));
508 length = (int) field->Size;
510 return((field) ?
true :
false);
unsigned short Get_Size(void)
FieldClass * Find_Field(char *id)
void Add_Field(FieldClass *field)
char * Create_Comms_Packet(int &size)
bit8 Get_Field(char *id, int &data)
unsigned short Get_Field_Size(char *id)
FieldClass * Get_Field_At(int position)
#define FIELD_HEADER_SIZE