54 #include "rnr/rnrconfig.h" 72 byte_t buf[],
size_t bufSize,
NMEndian_T eEndian,
75 size_t uMsgLen,
size_t uCount,
void *pStruct,
93 #define ITVPACK_SIMPLE_HDR(p, buf, n, ctl) \ 94 ((ctl)->m_bNoHdr? 0: nmPackITVHdrSimple(p, buf, n)) 112 buf[0] = (byte_t)(pFieldDef->
m_eFId & 0xff);
113 buf[1] = (byte_t)(pFieldDef->
m_eFType & 0xff);
143 buf[0] = (byte_t)(pFieldDef->
m_eFId & 0xff);
144 buf[1] = (byte_t)(pFieldDef->
m_eFType & 0xff);
145 buf[2] = (byte_t)(uCount & 0xff);
173 buf[0] = (byte_t)(pFieldDef->
m_eFId & 0xff);
174 buf[1] = (byte_t)(pFieldDef->
m_eFType & 0xff);
205 buf[0] = (byte_t)(pFieldDef->
m_eFId & 0xff);
206 buf[1] = (byte_t)(pFieldDef->
m_eFType & 0xff);
207 buf[2] = (byte_t)(uCount & 0xff);
236 if( uCount <= bufSize )
247 "buf_size=%zu < pad_count=%zu", bufSize, uCount);
268 val = *((bool_t *)pVal);
277 else if( (k =
nmPackBool(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
323 else if( (k =
nmPackU8(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
369 else if( (k =
nmPackS8(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
415 else if( (k =
nmPackU16(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
461 else if( (k =
nmPackS16(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0)
507 else if( (k =
nmPackU32(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
553 else if( (k =
nmPackS32(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
599 else if( (k =
nmPackU64(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
645 else if( (k =
nmPackS64(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
691 else if( (k =
nmPackF32(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
737 else if( (k =
nmPackF64(val, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
776 else if( (k =
nmPackP32(pVal, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
815 else if( (k =
nmPackP64(pVal, &buf[n], bufSize-(
size_t)n, eEndian)) < 0 )
853 sVal = (
const char *)pVal;
862 uCount = strlen(sVal);
865 if( uCount > uMaxCount )
868 "char_count=%zu > max_count=%zu.", uCount, uMaxCount);
878 else if( uCount > bufSize-(
size_t)n )
881 "buf_size=%zu < str_len=%zu.", bufSize, uCount);
887 memcpy(&buf[n], sVal, uCount);
928 k =
nmPackITVStream(pStructDef, pVal, &buf[n], bufSize-(
size_t)n, eEndian,
967 pItem = (byte_t *)(pVec) + memberoffset(
NMVec_T, u.
m_buf);
973 "vector_elem_ftype='%c'(0x%02x)",
978 else if( uCount > uMaxCount )
981 "vector_count=%zu > max_count=%zu.", uCount, uMaxCount);
1002 for(i=0; i<uCount; ++i)
1004 k = fnPack(pElemDef, pItem, &buf[n], bufSize-(
size_t)n, eEndian, pCtl);
1052 for(uFieldNum=0, pFieldDef=pMsgDef->
m_pFields;
1053 uFieldNum < pMsgDef->m_uCount;
1054 ++uFieldNum, ++pFieldDef)
1070 if( fnPack == NULL )
1073 "ftype='%c'(0x%02x).",
1077 k = fnPack(pFieldDef, pVal, &buf[n], bufSize-(
size_t)n, eEndian, pCtl);
1088 "buf_size=%zu, msgid=%u", bufSize, pMsgDef->
m_eMsgId);
1121 if( uFLen > bufSize )
1124 "buf_size=%zu < flen=%zu", bufSize, uFLen);
1148 while( (buf[n] ==
NMFVAL_PAD) && (n < bufSize) )
1181 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1192 else if( (k =
nmUnpackBool(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1203 (*((bool_t *)pVal)?
"true":
"false"));
1232 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1243 else if( (k =
nmUnpackU8(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1282 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1293 else if( (k =
nmUnpackS8(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1304 *((
signed char *)pVal));
1333 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1344 else if( (k =
nmUnpackU16(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1383 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1394 else if( (k =
nmUnpackS16(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1433 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1444 else if( (k =
nmUnpackU32(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1483 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1494 else if( (k =
nmUnpackS32(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1533 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1544 else if( (k =
nmUnpackU64(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1555 *((ulonglong_t *)pVal));
1584 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1595 else if( (k =
nmUnpackS64(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1635 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1646 else if( (k =
nmUnpackF32(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1686 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1697 else if( (k =
nmUnpackF64(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1736 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1747 else if( (k =
nmUnpackP32(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1786 "buf_size=%zu < fhdr_size=%u", bufSize, n);
1797 else if( (k =
nmUnpackP64(&buf[n], bufSize-(
size_t)n, pVal, eEndian)) < 0 )
1839 "buf_size=%zu, fhdr_size=%u", bufSize, n);
1843 uCount = (size_t)buf[2];
1847 uFSize = (size_t)n + uCount;
1848 sVal = (
char *)pVal;
1851 if( uCount > uMaxCount )
1854 "string_count=%zu > max_count=%zu.", uCount, uMaxCount);
1858 else if( uFSize > bufSize )
1861 "buf_size=%zu < fsize=%zu", bufSize, uFSize);
1867 memcpy(sVal, buf+n, uCount);
1900 "buf_size=%zu, fhdr_size=%u", bufSize, n);
1904 uCount = (size_t)buf[2];
1915 pVal, eEndian, pCtl);
1919 return k>=0? n+k: k;
1954 "buf_size=%zu, fhdr_size=%u", bufSize, n);
1958 uCount = (size_t)buf[2];
1959 byElemFType = (byte_t)buf[3];
1966 pItem = (byte_t *)(pVec) + memberoffset(
NMVec_T, u.
m_buf);
1970 if( byElemFType != (byte_t)pElemDef->
m_eFType )
1973 "vector_elem_ftype='%c'(0x%02x) != rcv'd ftype='%c'(0x%02x).",
1979 else if( uCount > uMaxCount )
1982 "vector_count=%zu > max_count=%zu.", uCount, uMaxCount);
1986 else if( fnUnpack == NULL )
1989 "vector_elem_ftype='%c'(0x%02x).",
1994 "vector_count=%zu, vector_elem_ftype='%c'(0x%02x)",
2006 for(i=0; i<uCount; ++i)
2008 k = fnUnpack(pElemDef, &buf[n], bufSize-(
size_t)n, pItem, eEndian, pCtl);
2080 "msg_len=%zu, msg_id=%u", uMsgLen, pMsgDef->
m_eMsgId);
2089 NMLIB_WARNING(
"Unknown fid=%u @byte=%d - ignoring.", (uint_t)byFId, n);
2094 "Field definition ftype='%c'(0x%02x) != receive ftype='%c'(0x%02x).",
2104 if( fnUnpack == NULL )
2107 "ftype='%c'(0x%02x).",
2111 k = fnUnpack(pFieldDef, &buf[n], uMsgLen-(
size_t)n, pVal, eEndian, pCtl);
2128 "%s(%u): %u field(s) left unparsed - no more message",
2180 if( (idx !=
NMHashNoIdx) && (idx < arraysize(NMITVLookupTbl)) )
2182 if( NMITVLookupTbl[idx].m_eFType == eFType )
2184 return NMITVLookupTbl[idx].
m_fnPack;
2189 "hashed eFtype='%c'(0x%02x) != tbl[%d].m_eFType='%c'(0x%02x)",
2192 NMITVLookupTbl[idx].m_eFType);
2215 if( (idx !=
NMHashNoIdx) && (idx < arraysize(NMITVLookupTbl)) )
2217 if( NMITVLookupTbl[idx].m_eFType == eFType )
2224 "hashed eFtype='%c'(0x%02x) != tbl[%d].m_eFType='%c'(0x%02x)",
2227 NMITVLookupTbl[idx].m_eFType);
2278 buf[n++] = (byte_t)pMsgDef->
m_uCount;
2281 k =
nmPackITVStream(pMsgDef, pStruct, &buf[n], bufSize-(
size_t)n, eEndian,
2284 return k >= 0? n+k: k;
2325 buf[n++] = (byte_t)pMsgDef->
m_uCount;
2328 fprintf(stderr,
"\n--- Packing ITV Message %s(%u): field_count=%zu\n",
2332 k =
nmPackITVStream(pMsgDef, pStruct, &buf[n], bufSize-(
size_t)n, eEndian,
2343 fprintf(stderr,
"Output Buffer (%zu bytes):\n", (
size_t)n);
2344 nmPrintBuf(stderr, NULL, buf, (
size_t)n, 16, 0);
2345 fprintf(stderr,
"\n");
2384 if( (n =
nmUnpackU16(buf, uMsgLen, &eMsgId, eEndian)) < 0 )
2390 uCount = (size_t)buf[n++];
2393 if( (uint_t)(pMsgDef->
m_eMsgId) != (uint_t)eMsgId )
2401 pStruct, eEndian, &ctl);
2404 return k>=0? n+k: k;
2441 if( (n =
nmUnpackU16(buf, uMsgLen, &eMsgId, eEndian)) < 0 )
2447 uCount = (size_t)buf[n++];
2450 if( (uint_t)(pMsgDef->
m_eMsgId) != (uint_t)eMsgId )
2457 fprintf(stderr,
"\n--- Unpacking ITV Message %s(%u): field_count=%zu\n",
2459 fprintf(stderr,
"Input Buffer (%zu bytes):\n", uMsgLen);
2460 nmPrintBuf(stderr, NULL, buf, uMsgLen, 16, 0);
2461 fprintf(stderr,
"\n");
2465 pStruct, eEndian, &ctl);
2468 return k>=0? n+k: k;
2494 else if( (n =
nmUnpackU16(buf, uMsgLen, &eMsgId, eEndian)) < 0 )
2501 return (uint_t)eMsgId;
int nmPackP64(void *val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 64-bit pointer into the message buffer.
byte_t m_bNoHdr
do [not] include field header in byte stream
static int nmUnpackITVP32(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a 32-bit pointer ITV field from the message buffer.
int nmPackF32(float val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 32-bit float into the message buffer.
#define NMFVAL_LEN_U64
unsigned 64-bit field value length
int nmUnpackU16(byte_t buf[], size_t bufSize, ushort_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 16-bit integer from the message buffer.
64-bit IEEE 754 FPN double
unsigned 8-bit integer unsigned char
static int nmPackITVU16(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack an unsigned 16-bit ITV field into the message buffer.
#define NMFVAL_LEN_S8
signed 8-bit field value length
static NMPackFunc_T nmLookupITVPacker(NMFType_T eFType)
Lookup ITV packer function, given the message field type.
32-bit IEEE 754 FPN float
int nmSetU32(const NMFieldDef_T *pFieldDef, void *pValIn, uint_t *pValOut)
Helper function to set an unsigned 32-bit integer.
unsigned 64-bit integer unsigned long long
#define NMLIB_ERROR(ecode, fmt,...)
Log libnetmsgs error.
byte_t m_uDepth
structured message depth
size_t m_uMaxCount
maximum number of vector elements
static int nmUnpackITVStruct(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack structure ITV field from the message buffer.
#define NMFVAL_LEN_S32
signed 32-bit field value length
#define NMITV_FHDR_SIZE_STRING
static int nmPackITVHdrVector(const NMFieldDef_T *pFieldDef, size_t uCount, byte_t buf[], size_t bufSize)
Pack ITV Vector header.
NMFieldThisVector_T m_vector
vector field specific info
#define NM_ECODE_FTYPE
unknown field type
int nmUnpackF64(byte_t buf[], size_t bufSize, double *pVal, NMEndian_T eEndian)
Unpack a 64-bit float from the message buffer.
const int NMHashNoIdx
hash no index value
INLINE_IN_H int nmUnpackS32(byte_t buf[], size_t bufSize, int *pVal, NMEndian_T eEndian)
Unpack a signed 32-bit integer from the message buffer.
static int nmPackITVS64(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a signed 64-bit ITV field into the message buffer.
static int nmUnpackITVU32(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an unsigned 32-bit ITV field from the message buffer.
NMFieldThisString_T m_string
string field specific info
static int nmUnpackITVS64(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a signed 64-bit ITV field from the message buffer.
#define NMITV_FID_SIZE
1 byte field id size
static int nmUnpackITVU16(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an unsigned 16-bit ITV field from the message buffer.
int nmPackU32(uint_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 32-bit integer into the message buffer.
int nmUnpackS64(byte_t buf[], size_t bufSize, long long *pVal, NMEndian_T eEndian)
Unpack an signed 64-bit integer from the message buffer.
byte_t m_bTrace
do [not] trace packing/unpacking
signed 32-bit integer int
int nmUnpackF32(byte_t buf[], size_t bufSize, float *pVal, NMEndian_T eEndian)
Unpack a 32-bit float from the message buffer.
#define NMFVAL_LEN_F64
64-bit floating-point number field val len
#define NMLIB_TRACE_FIELD(p, buf, n, ctl, fmt,...)
Trace field.
INLINE_IN_H int nmPackBool(bool_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a boolean value into the message buffer.
NMFType_T m_eFType
field type
static int nmUnpackITVStream(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, size_t uCount, void *pStruct, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an ITV byte stream.
#define NM_OK
not an error, success
uint_t m_eMsgId
message id (globally unique)
static int nmPackITVS16(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a signed 16-bit ITV field into the message buffer.
static int nmPackITVHdrSimple(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize)
Pack ITV simple header.
static int nmUnpackITVNoExec(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, size_t uFLen, NMCtl_T *pCtl)
Move parse cursor position past current field in message stream field.
size_t m_uCount
number of message fields
int(* NMUnpackFunc_T)(const NMFieldDef_T *, byte_t[], size_t, void *, NMEndian_T, NMCtl_T *)
NMFieldThisStruct_T m_struct
struct field specific info
#define NM_ECODE_EMSG
bad message
static NMUnpackFunc_T nmLookupITVUnpacker(NMFType_T eFType)
Lookup ITV unpacker function, given the message field type.
#define NMFVAL_LEN_S16
signed 16-bit field value length
#define NMLIB_RAISE_ERROR(ecode, fmt,...)
Raise libnetmsgs error (i.e. return from calling function).
static int nmPackITVP32(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a 32-bit pointer ITV field into the message buffer.
#define NMFVAL_PAD
pad field value same as tr id
int nmSetF64(const NMFieldDef_T *pFieldDef, void *pValIn, double *pValOut)
Helper function to set a 64-bit floating point number.
#define NMFTYPE_IS_SIMPLE(ft)
Returns true if field type is a simple type.
#define NMCTL_INIT_DECL
Default Internal control declartion list.
#define NM_ECODE_MSGID
bad/unknown message id
static int nmPackITVPad(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack pad bytes into the message buffer.
static int nmUnpackITVString(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack variable length string ITV field from the message buffer.
8-bit ASCII characters char
translated pad type for packed stream
static int nmPackITVS8(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a signed 8-bit ITV field into the message buffer.
int nmUnpackU64(byte_t buf[], size_t bufSize, ulonglong_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 64-bit integer from the message buffer.
signed 64-bit integer long long
#define NMLIB_WARNING(fmt,...)
Log libnetmsgs warning.
NMFieldThis_T m_this
specific field information
uint_t nmGetITVMsgId(byte_t buf[], size_t uMsgLen, NMEndian_T eEndian)
Get ITV message id from input buffer.
static int nmPackITVU32(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack an unsigned 32-bit ITV field into the message buffer.
static int nmUnpackITVU8(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an unsigned 8-bit ITV field from the message buffer.
static int nmUnpackITVPad(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack pad byte from the message buffer.
#define NMITV_FHDR_SIZE_STRUCT
int nmSetS8(const NMFieldDef_T *pFieldDef, void *pValIn, signed char *pValOut)
Helper function to set a signed 8-bit integer.
const NMFieldDef_T * nmFindFieldDef(const NMMsgDef_T *pMsgDef, byte_t byFId)
Find the field definition in the message definition, given the field id.
static int nmPackITVU8(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack an unsigned 8-bit ITV field into the message buffer.
int nmPackU8(byte_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 8-bit byte into the message buffer.
INLINE_IN_H int nmUnpackS8(byte_t buf[], size_t bufSize, signed char *pVal, NMEndian_T eEndian)
Unpack a signed 8-bit byte from the message buffer.
int nmSetU8(const NMFieldDef_T *pFieldDef, void *pValIn, byte_t *pValOut)
Helper function to set an unsigned 8-bit integer.
static int nmUnpackITVS16(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a signed 16-bit ITV field from the message buffer.
int nmSetF32(const NMFieldDef_T *pFieldDef, void *pValIn, float *pValOut)
Helper function to set a 32-bit floating point number.
32-bit pointer (overloaded) void*
INLINE_IN_H int nmUnpackBool(byte_t buf[], size_t bufSize, bool_t *pVal, NMEndian_T eEndian)
Unpack a boolean value from the message buffer.
static int nmPackITVP64(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a 64-bit pointer ITV field into the message buffer.
#define NMFVAL_LEN_F32
32-bit floating-point number field val len
static int nmPackITVU64(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack an unsigned 64-bit ITV field into the message buffer.
static int nmPackITVString(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack null-terminated, variable length string ITV field into the message buffer.
size_t m_uMaxCount
maximum number of characters sans null char
static int nmUnpackITVU64(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an unsigned 64-bit ITV field from the message buffer.
static int nmUnpackITVF32(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a 32-bit floating-point number ITV field from the message buffer.
64-bit pointer (overloaded) void*
static int nmPackITVF64(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a 64-bit floating-point number ITV field into the message buffer.
byte_t m_bNoExec
do [not] execute assignment of value
static int nmPackITVHdrString(const NMFieldDef_T *pFieldDef, size_t uCount, byte_t buf[], size_t bufSize)
Pack ITV String header.
#define NMITV_FHDR_SIZE_VECTOR
#define ITVPACK_SIMPLE_HDR(p, buf, n, ctl)
Pack simple field type ITV header.
#define NMITV_FHDR_SIZE_SIMPLE
int nmSetS16(const NMFieldDef_T *pFieldDef, void *pValIn, short *pValOut)
Helper function to set a signed 16-bit integer.
int nmPackS64(long long val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an signed 64-bit integer into the message buffer.
int nmUnpackITVMsgDebug(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a ITV message, tracing unpacking to stderr.
#define NMFVAL_LEN_P32
32-bit pointer field value length
static int nmPackITVVector(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack variable length vector ITV field into the message buffer.
#define NM_ECODE_NOMEM
not enough buffer memory available
int nmPackITVMsgDebug(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an ITV message, tracing message packing to stderr.
size_t m_uCount
number of pad bytes
#define NMFVAL_LEN_U16
unsigned 16-bit field value length
signed 8-bit integer signed char
int(* NMPackFunc_T)(const NMFieldDef_T *, void *, byte_t[], size_t, NMEndian_T, NMCtl_T *)
const char * m_sMsgName
message/struct string name
const char * m_sConst
string constant value (NULL if no const)
int nmPackU16(ushort_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 16-bit integer into the message buffer.
one dimensional array VType[]
INLINE_IN_H int nmPackS32(int val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 32-bit integer into the message buffer.
NMFieldDef_P m_pThisElem
vector element specific info
static int nmPackITVStream(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a ITV message.
const NMFieldDef_T * m_pFields
pointer to array of msg field definitions
static int nmPackITVS32(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a signed 32-bit ITV field into the message buffer.
static int nmUnpackITVF64(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a 64-bit floating-point number ITV field from the message buffer.
int nmSetS32(const NMFieldDef_T *pFieldDef, void *pValIn, int *pValOut)
Helper function to set a signed 32-bit integer.
static int nmUnpackITVS32(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a signed 32-bit ITV field from the message buffer.
#define NMFVAL_LEN_U32
unsigned 32-bit field value length
int nmPackF64(double val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 64-bit float into the message buffer.
static int nmUnpackITVVector(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack variable length vector ITV field from the message buffer.
static int nmPackITVHdrStruct(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize)
Pack ITV Struct header.
size_t m_uElemSize
vector element storage size
#define NM_ECODE_INTERNAL
internal inconsistency or bug
#define NMITV_MSGHDR_SIZE
size_t m_uCount
number of items in vector
int nmUnpackU32(byte_t buf[], size_t bufSize, uint_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 32-bit integer from the message buffer.
static int nmPackITVBool(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a boolean into an 8-bit ITV field into the message buffer.
unsigned 32-bit integer unsigned int
#define NMFVAL_LEN_P64
64-bit pointer field value length
INLINE_IN_H int nmPackS8(signed char val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 8-bit byte into the message buffer.
int nmSetS64(const NMFieldDef_T *pFieldDef, void *pValIn, long long *pValOut)
Helper function to set a signed 64-bit integer.
#define NMLIB_RAISE_FIELD_ERROR(ecode, p, fmt,...)
Raise libnetmsgs field error (i.e. return from calling function).
Internal intra-library declarations.
int nmUnpackP64(byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian)
Unpack a 64-bit pointer from the message buffer.
int nmSetU64(const NMFieldDef_T *pFieldDef, void *pValIn, ulonglong_t *pValOut)
Helper function to set an unsigned 64-bit integer.
void nmPrintBuf(FILE *fp, const char *sPreface, byte_t buf[], size_t uCount, size_t uNLFreq, uint_t uCol)
Pretty print buffer to opened file stream.
#define NMITV_FHDR_SIZE_BASE
INLINE_IN_H int NMHashFType(NMFType_T eFType)
Field Type to Index hash function.
#define NMLIB_ASCII_FTYPE(ftype)
Printable ASCII Field Type.
static int nmPackITVF32(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a 32-bit floating-point number ITV field into the message buffer.
static int nmUnpackITVBool(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack an unsigned 8-bit boolean ITV field from the message buffer.
#define NMFVAL_LEN_U8
unsigned 8-bit field value length
Network Messaging declarations.
#define NMMSG_ID_NONE
no message id (reserved)
NMFieldThisPad_T m_pad
pad field specific info
static int nmUnpackITVP64(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a 64-bit pointer ITV field from the message buffer.
int nmUnpackU8(byte_t buf[], size_t bufSize, byte_t *pVal, NMEndian_T eEndian)
Unpack an unsigned 8-bit byte from the message buffer.
#define NM_ECODE_RANGE
field size or value out-of-range
INLINE_IN_H int nmUnpackS16(byte_t buf[], size_t bufSize, short *pVal, NMEndian_T eEndian)
Unpack a signed 16-bit integer from the message buffer.
#define NMFVAL_LEN_S64
signed 64-bit field value length
static int nmPackITVStruct(const NMFieldDef_T *pFieldDef, void *pVal, byte_t buf[], size_t bufSize, NMEndian_T eEndian, NMCtl_T *pCtl)
Pack a structure ITV field into the message buffer.
int nmUnpackITVMsg(const NMMsgDef_T *pMsgDef, byte_t buf[], size_t uMsgLen, void *pStruct, NMEndian_T eEndian)
Unpack a ITV message.
static NMLookupTblEntry_T NMITVLookupTbl[]
int nmSetU16(const NMFieldDef_T *pFieldDef, void *pValIn, ushort_t *pValOut)
Helper function to set an unsigned 16-bit integer.
size_t m_uOffset
member offset in assoc msg structure
INLINE_IN_H int nmPackS16(short val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a signed 16-bit integer into the message buffer.
static int nmUnpackITVS8(const NMFieldDef_T *pFieldDef, byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian, NMCtl_T *pCtl)
Unpack a signed 8-bit ITV field from the message buffer.
int nmPackITVMsg(const NMMsgDef_T *pMsgDef, void *pStruct, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an ITV message.
Internal Control Structure.
int nmPackU64(ulonglong_t val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack an unsigned 64-bit integer into the message buffer.
NMPackFunc_T m_fnPack
packer
unsigned 16-bit integer unsigned short
NMUnpackFunc_T m_fnUnpack
unpacker
signed 16-bit integer short
uint_t m_eFId
filed id (message/struct unique)
int nmUnpackP32(byte_t buf[], size_t bufSize, void *pVal, NMEndian_T eEndian)
Unpack a 32-bit pointer from the message buffer.
int nmPackP32(void *val, byte_t buf[], size_t bufSize, NMEndian_T eEndian)
Pack a 32-bit pointer into the message buffer.