コード例 #1
0
igtl_uint64 igtl_export igtl_string_get_crc(igtl_string_header * header, void* string)
{
  igtl_uint64   crc;
  igtl_uint64   string_length;

  /* convert byte order to get string length */
  igtl_string_convert_byte_order(header);
  string_length = (igtl_uint32)(header->length);
  igtl_string_convert_byte_order(header);

  crc = crc64(0, 0, 0);
  crc = crc64((unsigned char*) header, IGTL_STRING_HEADER_SIZE, crc);
  crc = crc64((unsigned char*) string, (int)string_length, crc);

  return crc;
}
コード例 #2
0
int main( int argc, char * argv [] )
{

  struct string_message message;

  /*igtl_uint64 crc;*/
  int r;
  int s;

  // Test structure size
  if (sizeof(message) != IGTL_HEADER_SIZE+IGTL_STRING_HEADER_SIZE+IGTL_STRING_TEST_STRING_LEN)
    {
    fprintf(stdout, "Invalid size of image message structure.\n");
    return EXIT_FAILURE;
    }

  /* Set dummy string header and values */
  message.string_header.encoding = 3;
  message.string_header.length = IGTL_STRING_TEST_STRING_LEN;
  strncpy((char*)message.string, IGTL_STRING_TEST_STRING, IGTL_STRING_TEST_STRING_LEN);
  igtl_string_convert_byte_order(&(message.string_header));

  /* Set header */
  message.header.version = 1;
  strncpy( (char*)&(message.header.name), "STRING", 12 );
  strncpy( (char*)&(message.header.device_name), "DeviceName", 20 );
  message.header.timestamp = 1234567892;
  message.header.body_size = IGTL_STRING_HEADER_SIZE + IGTL_STRING_TEST_STRING_LEN;
  message.header.crc = igtl_string_get_crc(&(message.string_header), (void*) message.string);
  igtl_header_convert_byte_order( &(message.header) );

  /* Dumping data -- for testing */

  /*
  FILE *fp;
  fp = fopen("string.bin", "w");
  fwrite(&(message.header), IGTL_HEADER_SIZE+IGTL_STRING_HEADER_SIZE + IGTL_STRING_TEST_STRING_LEN, 1, fp);
  fclose(fp);
  */

  /* Compare the serialized byte array with the gold standard */ 

  r = memcmp((const void*)&message, (const void*)test_string_message,
                 IGTL_HEADER_SIZE+IGTL_STRING_HEADER_SIZE+IGTL_STRING_TEST_STRING_LEN);

  if (r == 0)
    {
    return EXIT_SUCCESS;
    }
  else
    {
    /* Print first 256 bytes as HEX values in STDERR for debug */
    s = IGTL_HEADER_SIZE+IGTL_STRING_HEADER_SIZE+IGTL_STRING_TEST_STRING_LEN;
    if (s > 256)
      {
      s = 256;
      }

    fprintf(stdout, "\n===== First %d bytes of the test message =====\n", s);
    igtl_message_dump_hex(stdout, (const void*)&message, s);

    return EXIT_FAILURE;
    }

}