/* * status = ipv6routingioPrepare(stream); * * Sets the record version to the default if it is unspecified, * checks that the record format supports the requested record * version, sets the record length, and sets the pack and unpack * functions for this record format and version. */ int ipv6routingioPrepare( skstream_t *stream) { #define FILE_FORMAT "FT_RWIPV6ROUTING" sk_file_header_t *hdr = stream->silk_hdr; int rv = SKSTREAM_OK; /* return value */ /* Set version if none was selected by caller */ if ((stream->io_mode == SK_IO_WRITE) && (skHeaderGetRecordVersion(hdr) == SK_RECORD_VERSION_ANY)) { skHeaderSetRecordVersion(hdr, DEFAULT_RECORD_VERSION); } /* version check; set values based on version */ switch (skHeaderGetRecordVersion(hdr)) { case 3: stream->rwUnpackFn = &ipv6routingioRecordUnpack_V3; stream->rwPackFn = &ipv6routingioRecordPack_V3; break; case 2: stream->rwUnpackFn = &ipv6routingioRecordUnpack_V2; stream->rwPackFn = &ipv6routingioRecordPack_V1; break; case 1: stream->rwUnpackFn = &ipv6routingioRecordUnpack_V1; stream->rwPackFn = &ipv6routingioRecordPack_V1; break; case 0: default: rv = SKSTREAM_ERR_UNSUPPORT_VERSION; goto END; } stream->recLen = ipv6routingioGetRecLen(skHeaderGetRecordVersion(hdr)); /* verify lengths */ if (stream->recLen == 0) { skAppPrintErr("Record length not set for %s version %u", FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr)); skAbort(); } if (stream->recLen != skHeaderGetRecordLength(hdr)) { if (0 == skHeaderGetRecordLength(hdr)) { skHeaderSetRecordLength(hdr, stream->recLen); } else { skAppPrintErr(("Record length mismatch for %s version %u\n" "\tcode = %" PRIu16 " bytes; header = %lu bytes"), FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr), stream->recLen, (unsigned long)skHeaderGetRecordLength(hdr)); skAbort(); } } END: return rv; }
/* * status = augsnmpoutioPrepare(&stream); * * Sets the record version to the default if it is unspecified, * checks that the record format supports the requested record * version, sets the record length, and sets the pack and unpack * functions for this record format and version. */ int augsnmpoutioPrepare( skstream_t *stream) { #define FILE_FORMAT "FT_RWAUGSNMPOUT" sk_file_header_t *hdr = stream->silk_hdr; int rv = SKSTREAM_OK; /* return value */ assert(skHeaderGetFileFormat(hdr) == FT_RWAUGSNMPOUT); /* Set version if none was selected by caller */ if ((stream->io_mode == SK_IO_WRITE) && (skHeaderGetRecordVersion(hdr) == SK_RECORD_VERSION_ANY)) { skHeaderSetRecordVersion(hdr, DEFAULT_RECORD_VERSION); } /* version check; set values based on version */ switch (skHeaderGetRecordVersion(hdr)) { case 5: stream->rwUnpackFn = &augsnmpoutioRecordUnpack_V5; stream->rwPackFn = &augsnmpoutioRecordPack_V5; break; case 4: stream->rwUnpackFn = &augsnmpoutioRecordUnpack_V4; stream->rwPackFn = &augsnmpoutioRecordPack_V4; break; case 3: case 2: case 1: /* V1 and V2 differ only in the padding of the header */ /* V2 and V3 differ only in that V3 supports compression on * read and write; V2 supports compression only on read */ stream->rwUnpackFn = &augsnmpoutioRecordUnpack_V1; stream->rwPackFn = &augsnmpoutioRecordPack_V1; break; case 0: default: rv = SKSTREAM_ERR_UNSUPPORT_VERSION; goto END; } stream->recLen = augsnmpoutioGetRecLen(skHeaderGetRecordVersion(hdr)); /* verify lengths */ if (stream->recLen == 0) { skAppPrintErr("Record length not set for %s version %u", FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr)); skAbort(); } if (stream->recLen != skHeaderGetRecordLength(hdr)) { if (0 == skHeaderGetRecordLength(hdr)) { skHeaderSetRecordLength(hdr, stream->recLen); } else { skAppPrintErr(("Record length mismatch for %s version %u\n" "\tcode = %" PRIu16 " bytes; header = %lu bytes"), FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr), stream->recLen, (unsigned long)skHeaderGetRecordLength(hdr)); skAbort(); } } END: return rv; }
/* * status = genericioPrepare(&rwIOSPtr); * * Sets the record version to the default if it is unspecified, * checks that the record format supports the requested record * version, sets the record length, and sets the pack and unpack * functions for this record format and version. */ int genericioPrepare( skstream_t *rwIOS) { #define FILE_FORMAT "FT_RWGENERIC" sk_file_header_t *hdr = rwIOS->silk_hdr; int rv = SKSTREAM_OK; /* return value */ assert(skHeaderGetFileFormat(hdr) == FT_RWGENERIC); /* Set version if none was selected by caller */ if ((rwIOS->io_mode == SK_IO_WRITE) && (skHeaderGetRecordVersion(hdr) == SK_RECORD_VERSION_ANY)) { skHeaderSetRecordVersion(hdr, DEFAULT_RECORD_VERSION); } /* version check; set values based on version */ switch (skHeaderGetRecordVersion(hdr)) { case 5: rwIOS->rwUnpackFn = &genericioRecordUnpack_V5; rwIOS->rwPackFn = &genericioRecordPack_V5; break; case 4: case 3: /* V3 and V4 differ only in that V4 supports compression on * read and write; V3 supports compression only on read */ rwIOS->rwUnpackFn = &genericioRecordUnpack_V3; rwIOS->rwPackFn = &genericioRecordPack_V3; break; case 2: rwIOS->rwUnpackFn = &genericioRecordUnpack_V2; rwIOS->rwPackFn = &genericioRecordPack_V2; break; case 1: case 0: /* Version 0 and Version 1 records are nearly the same; the * on-disk Version 0 records included the 3 bytes of in-core * padding; the on-disk Version 1 records do not include these * 3 bytes. */ rwIOS->rwUnpackFn = &genericioRecordUnpack_V1; rwIOS->rwPackFn = &genericioRecordPack_V1; break; default: rv = SKSTREAM_ERR_UNSUPPORT_VERSION; goto END; } rwIOS->recLen = genericioGetRecLen(skHeaderGetRecordVersion(hdr)); /* verify lengths */ if (rwIOS->recLen == 0) { skAppPrintErr("Record length not set for %s version %u", FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr)); skAbort(); } if (rwIOS->recLen != skHeaderGetRecordLength(hdr)) { if (0 == skHeaderGetRecordLength(hdr)) { skHeaderSetRecordLength(hdr, rwIOS->recLen); } else { skAppPrintErr(("Record length mismatch for %s version %u\n" "\tcode = %" PRIu16 " bytes; header = %lu bytes"), FILE_FORMAT, (unsigned)skHeaderGetRecordVersion(hdr), rwIOS->recLen, (unsigned long)skHeaderGetRecordLength(hdr)); skAbort(); } } END: return rv; }