void AFRA::setGlobalEntry(globalafraentry newEntry, uint32_t no) { int offset = 13 + 12 * getEntryCount() + 4; if (getLongOffsets()) { offset = 13 + 16 * getEntryCount() + 4; } int entrysize = 20; if (getLongIDs()) { entrysize += 4; } if (getLongOffsets()) { entrysize += 8; } setInt64(newEntry.time, offset + entrysize * no); if (getLongIDs()) { setInt32(newEntry.segment, offset + entrysize * no + 8); setInt32(newEntry.fragment, offset + entrysize * no + 12); } else { setInt16(newEntry.segment, offset + entrysize * no + 8); setInt16(newEntry.fragment, offset + entrysize * no + 10); } if (getLongOffsets()) { setInt64(newEntry.afraoffset, offset + entrysize * no + entrysize - 16); setInt64(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 8); } else { setInt32(newEntry.afraoffset, offset + entrysize * no + entrysize - 8); setInt32(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 4); } if (getInt32(offset - 4) < no + 1) { setInt32(no + 1, offset - 4); } }
/// Gets the 16 bits integer at the given index. /// Attempts to resize the data pointer if the index is out of range. /// Returns zero if resizing failed. short Box::getInt16(size_t index) { index += payloadOffset; if (index + 1 >= boxedSize()) { if (!reserve(index, 0, 2)) { return 0; } setInt16(0, index - payloadOffset); } short result; memcpy((char *) &result, data + index, 2); return ntohs(result); }
int handleExFileFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) { int32_t ret = -1; int32_t index = -1; int32_t ramDriveId = -1; int32_t fileNameOffset = -1; int32_t fd = -1; int sendRet = 0; int namelen = 0; short extensionId = -1; MP_FILE_NAME_SEND_DATA fileNameSendData; MP_GET_JOBLIST_RSP_DATA jobListData; switch (type) { case EX_FILE_CTRL_GET_FILE_COUNT: if (msgSize != 10) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetFileCount = %d != 10\n", msgSize); return -1; } extensionId = getInt16(inBuffer, 12); if (extensionId < 1 || extensionId > 2) { fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileCount = %d (must be 1 or 2)\n", extensionId); return -1; } lastExtensionId = -1; ret = mpRefreshFileList(extensionId); if (ret != 0) { setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } return 0; } lastExtensionId = extensionId; ret = mpGetFileCount(); setInt32(outBuffer, 0, 8); setInt32(outBuffer, 4, 0); setInt32(outBuffer, 8, ret); sendRet = sendN(acceptHandle, outBuffer, 12, 0); if (sendRet != 12) { fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet); return -1; } break; case EX_FILE_CTRL_GET_FILE_NAME: extensionId = getInt16(inBuffer, 12); if (extensionId < 1 || extensionId > 2) { fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileName = %d (must be 1 or 2)\n", extensionId); return -1; } if (extensionId != lastExtensionId) { lastExtensionId = -1; ret = mpRefreshFileList(extensionId); if (ret != 0) { setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); lastExtensionId = -1; sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } return 0; } } index = getInt32(inBuffer, 14); ret = mpGetFileName(index, outBuffer + 12); namelen = strlen(outBuffer + 12); setInt32(outBuffer, 0, 8 + namelen + 1); setInt32(outBuffer, 4, 0); setInt32(outBuffer, 8, ret); sendRet = sendN(acceptHandle, outBuffer, 12 + namelen + 1, 0); if (sendRet != 12 + namelen + 1) { fprintf(stderr, "tcpSvr: sendRet = %d != 12+namelen+1\n", sendRet); return -1; } break; case EX_FILE_CTRL_LOAD_FILE: ramDriveId = getInt32(inBuffer, 12); if (ramDriveId < 1 || ramDriveId > 2) { fprintf(stderr, "tcpSvr: invalid ramDriveId for mpLoadFile = %d (must be 1 or 2)\n", ramDriveId); return -1; } fileNameOffset = getInt32(inBuffer, 16); if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) { fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpLoadFile = %d \n", fileNameOffset); return -1; } ret = mpLoadFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case EX_FILE_CTRL_SAVE_FILE: ramDriveId = getInt32(inBuffer, 12); if (ramDriveId < 1 || ramDriveId > 2) { fprintf(stderr, "tcpSvr: invalid ramDriveId for mpSaveFile = %d (must be 1 or 2)\n", ramDriveId); return -1; } fileNameOffset = getInt32(inBuffer, 16); if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) { fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpSaveFile = %d \n", fileNameOffset); return -1; } ret = mpSaveFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case EX_FILE_CTRL_FD_READ_FILE: fd = getInt32(inBuffer, 12); if(fd == -99) { fd = acceptHandle; } if (fd < 1 ) { fprintf(stderr, "tcpSvr: invalid fd for mpFdReadFile = %d\n", ramDriveId); return -1; } memset(&fileNameSendData,0,sizeof(fileNameSendData)); strcpy(fileNameSendData.cFileName,inBuffer+16); ret = mpFdReadFile(fd, &fileNameSendData); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case EX_FILE_CTRL_FD_WRITE_FILE: fd = getInt32(inBuffer, 12); if(fd == -99) { fd = acceptHandle; } if (fd < 1 ) { fprintf(stderr, "tcpSvr: invalid fd for mpFdWriteFile = %d\n", ramDriveId); return -1; } memset(&fileNameSendData,0,sizeof(fileNameSendData)); strcpy(fileNameSendData.cFileName,inBuffer+16); ret = mpFdWriteFile(fd, &fileNameSendData); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case EX_FILE_CTRL_FD_GET_JOB_LIST: fd = getInt32(inBuffer, 12); if(fd == -99) { fd = acceptHandle; } if (fd < 1 ) { fprintf(stderr, "tcpSvr: invalid fd for mpFdGetJobList = %d (must be 1 or 2)\n", ramDriveId); return -1; } memset(&jobListData,0,sizeof(jobListData)); ret = mpFdGetJobList(fd, &jobListData); setInt32(outBuffer, 0, 10); setInt32(outBuffer, 4, ret); setInt16(outBuffer,8,jobListData.err_no); setInt16(outBuffer,10,jobListData.uIsEndFlag); setInt16(outBuffer,12,jobListData.uListDataNum); sendRet = sendN(acceptHandle, outBuffer, 14, 0); if (sendRet != 14) { fprintf(stderr, "tcpSvr: sendRet = %d != 14\n", sendRet); return -1; } break; default: fprintf(stderr, "tcpSvr: invalid file function type = %d\n", type); return -1; } return 0; }
int handleSys1FunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) { int sendRet = 0; int i = 0; MP_VAR_INFO varInfo[25]; MP_VAR_DATA varData[25]; MP_IO_INFO ioInfo[25]; MP_IO_DATA ioData[25]; LONG rData[25]; USHORT iorData[25]; MP_MODE_RSP_DATA modeData; MP_CYCLE_RSP_DATA cycleData; MP_ALARM_STATUS_RSP_DATA alarmStatusData; MP_ALARM_CODE_RSP_DATA alarmCodeData; LONG num; int ret; MP_CTRL_GRP_SEND_DATA ctrlGrpSendData; MP_CART_POS_RSP_DATA cartPosRspData; MP_PULSE_POS_RSP_DATA pulsePosRspData; MP_FB_PULSE_POS_RSP_DATA fbPulsePosRspData; MP_DEG_POS_RSP_DATA_EX degPosRspDataEx; MP_SERVO_POWER_RSP_DATA servoPowerRspData; MP_SERVO_POWER_SEND_DATA servoPowerSendData; MP_STD_RSP_DATA stdRspData; int32_t controlGroup = 0; int nowait = NO_WAIT; int waitforever = WAIT_FOREVER; switch (type) { case SYS1_GET_VAR_DATA: num = getInt32(inBuffer, 12); if (num < 1 || num > 24) { fprintf(stderr, "tcpSvr: invalid num for mpGetVarData num = %ld\n", num); return -1; } if (msgSize != 12 + (4 * num)) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetVarData = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num); return -1; } for (i = 0; i < num; i++) { varInfo[i].usType = getInt16(inBuffer, 16 + (4 * i)); varInfo[i].usIndex = getInt16(inBuffer, 18 + (4 * i)); } ret = mpGetVarData(varInfo, rData, num); setInt32(outBuffer, 0, 4 + num * 4); setInt32(outBuffer, 4, ret); for (i = 0; i < num; i++) { setInt32(outBuffer, 8 + i * 4, rData[i]); } sendRet = sendN(acceptHandle, outBuffer, 8 + num * 4, 0); if (sendRet != 8 + num * 4) { fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet); return -1; } break; case SYS1_PUT_VAR_DATA: num = getInt32(inBuffer, 12); if (num < 1 || num > 24) { fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num); return -1; } if (msgSize != 12 + (num * 8)) { fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num); return -1; } for (i = 0; i < num; i++) { varData[i].usType = getInt16(inBuffer, 16 + (8 * i)); varData[i].usIndex = getInt16(inBuffer, 18 + (8 * i)); varData[i].ulValue = getInt32(inBuffer, 20 + (8 * i)); } ret = mpPutVarData(varData, num); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case SYS1_GET_CURRENT_CART_POS: if (msgSize != 12) { fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize); return -1; } memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData)); memset(&cartPosRspData, 0, sizeof (cartPosRspData)); controlGroup = getInt32(inBuffer, 12); ctrlGrpSendData.sCtrlGrp = controlGroup; ret = mpGetCartPos(&ctrlGrpSendData, &cartPosRspData); setInt32(outBuffer, 0, 54); setInt32(outBuffer, 4, ret); for (i = 0; i < 6; i++) { setInt32(outBuffer, 8 + 4 * i, cartPosRspData.lPos[i]); } setInt16(outBuffer, 56, cartPosRspData.sConfig); sendRet = sendN(acceptHandle, outBuffer, 58, 0); if (sendRet != 58) { fprintf(stderr, "tcpSvr: sendRet = %d != 58\n", sendRet); return -1; } break; case SYS1_GET_CURRENT_PULSE_POS: if (msgSize != 12) { fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize); return -1; } memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData)); memset(&pulsePosRspData, 0, sizeof (pulsePosRspData)); controlGroup = getInt32(inBuffer, 12); ctrlGrpSendData.sCtrlGrp = controlGroup; ret = mpGetPulsePos(&ctrlGrpSendData, &pulsePosRspData); setInt32(outBuffer, 0, 68); setInt32(outBuffer, 4, ret); for (i = 0; i < 8; i++) { setInt32(outBuffer, 8 + 4 * i, pulsePosRspData.lPos[i]); } sendRet = sendN(acceptHandle, outBuffer, 72, 0); if (sendRet != 72) { fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet); return -1; } break; case SYS1_GET_CURRENT_FEEDBACK_PULSE_POS: if (msgSize != 12) { fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize); return -1; } memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData)); memset(&fbPulsePosRspData, 0, sizeof (fbPulsePosRspData)); controlGroup = getInt32(inBuffer, 12); ctrlGrpSendData.sCtrlGrp = controlGroup; ret = mpGetFBPulsePos(&ctrlGrpSendData, &fbPulsePosRspData); setInt32(outBuffer, 0, 68); setInt32(outBuffer, 4, ret); for (i = 0; i < 8; i++) { setInt32(outBuffer, 8 + 4 * i, fbPulsePosRspData.lPos[i]); } sendRet = sendN(acceptHandle, outBuffer, 72, 0); if (sendRet != 72) { fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet); return -1; } break; case SYS1_GET_DEG_POS_EX: if (msgSize != 12) { fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize); return -1; } memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData)); memset(°PosRspDataEx, 0, sizeof (degPosRspDataEx)); controlGroup = getInt32(inBuffer, 12); ctrlGrpSendData.sCtrlGrp = controlGroup; ret = mpGetDegPosEx(&ctrlGrpSendData, °PosRspDataEx); setInt32(outBuffer, 0, 132); setInt32(outBuffer, 4, ret); for (i = 0; i < 8; i++) { setInt32(outBuffer, 8 + 4 * i, degPosRspDataEx.lDegPos[i]); } for (i = 0; i < 8; i++) { setInt32(outBuffer, 72 + 4 * i, degPosRspDataEx.lDegUnit[i]); } sendRet = sendN(acceptHandle, outBuffer, 136, 0); if (sendRet != 136) { fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet); return -1; } break; case SYS1_GET_SERVO_POWER: if (msgSize != 8) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetServoPower = %d != 8\n", msgSize); return -1; } memset(&servoPowerRspData, 0, sizeof (servoPowerRspData)); ret = mpGetServoPower(&servoPowerRspData); setInt32(outBuffer, 0, 6); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, servoPowerRspData.sServoPower); sendRet = sendN(acceptHandle, outBuffer, 10, 0); if (sendRet != 10) { fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet); return -1; } break; case SYS1_SET_SERVO_POWER: if (msgSize != 10) { fprintf(stderr, "tcpSvr: invalid msgSize for mpSetServoPower = %d != 12\n", msgSize); return -1; } memset(&servoPowerSendData, 0, sizeof (servoPowerSendData)); memset(&stdRspData, 0, sizeof (stdRspData)); servoPowerSendData.sServoPower = getInt16(inBuffer, 12); ret = mpSetServoPower(&servoPowerSendData, &stdRspData); setInt32(outBuffer, 0, 6); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, stdRspData.err_no); sendRet = sendN(acceptHandle, outBuffer, 10, 0); if (sendRet != 10) { fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet); return -1; } break; case SYS1_READIO: num = getInt32(inBuffer, 12); if (num < 1 || num > 24) { fprintf(stderr, "tcpSvr: invalid num for mpReadIO num = %ld\n", num); return -1; } if (msgSize != 12 + (4 * num)) { fprintf(stderr, "tcpSvr: invalid msgSize for mpReadIO = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num); return -1; } for (i = 0; i < num; i++) { ioInfo[i].ulAddr = getInt32(inBuffer, 16 + (4 * i)); } memset(iorData, 0, sizeof (iorData)); ret = mpReadIO(ioInfo, iorData, num); setInt32(outBuffer, 0, 4 + num * 2); setInt32(outBuffer, 4, ret); for (i = 0; i < num; i++) { setInt16(outBuffer, 8 + i * 2, iorData[i]); } sendRet = sendN(acceptHandle, outBuffer, 8 + num * 2, 0); if (sendRet != 8 + num * 2) { fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet); return -1; } break; case SYS1_WRITEIO: num = getInt32(inBuffer, 12); if (num < 1 || num > 24) { fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num); return -1; } if (msgSize != 12 + (num * 8)) { fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num); return -1; } for (i = 0; i < num; i++) { ioData[i].ulAddr = getInt32(inBuffer, 16 + (8 * i)); ioData[i].ulValue = getInt32(inBuffer, 20 + (8 * i)); } ret = mpWriteIO(ioData, num); setInt32(outBuffer, 0, 4); setInt32(outBuffer, 4, ret); sendRet = sendN(acceptHandle, outBuffer, 8, 0); if (sendRet != 8) { fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet); return -1; } break; case SYS1_GET_MODE: if (msgSize != 8) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetMode = %d != 8\n", msgSize); return -1; } memset(&modeData, 0, sizeof (modeData)); ret = mpGetMode(&modeData); setInt32(outBuffer, 0, 8); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, modeData.sMode); setInt16(outBuffer, 10, modeData.sRemote); sendRet = sendN(acceptHandle, outBuffer, 12, 0); if (sendRet != 12) { fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet); return -1; } break; case SYS1_GET_CYCLE: if (msgSize != 8) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetCycle = %d != 8\n", msgSize); return -1; } memset(&cycleData, 0, sizeof (cycleData)); ret = mpGetCycle(&cycleData); setInt32(outBuffer, 0, 6); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, cycleData.sCycle); sendRet = sendN(acceptHandle, outBuffer, 10, 0); if (sendRet != 10) { fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet); return -1; } break; case SYS1_GET_ALARM_STATUS: if (msgSize != 8) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmStatus = %d != 8\n", msgSize); return -1; } memset(&alarmStatusData, 0, sizeof (alarmStatusData)); ret = mpGetAlarmStatus(&alarmStatusData); setInt32(outBuffer, 0, 6); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, alarmStatusData.sIsAlarm); sendRet = sendN(acceptHandle, outBuffer, 10, 0); if (sendRet != 10) { fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet); return -1; } break; case SYS1_GET_ALARM_CODE: if (msgSize != 8) { fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmCode = %d != 8\n", msgSize); return -1; } memset(&alarmCodeData, 0, sizeof (alarmCodeData)); ret = mpGetAlarmCode(&alarmCodeData); setInt32(outBuffer, 0, 10 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum)); setInt32(outBuffer, 4, ret); setInt16(outBuffer, 8, alarmCodeData.usErrorNo); setInt16(outBuffer, 10, alarmCodeData.usErrorData); setInt16(outBuffer, 12, alarmCodeData.usAlarmNum); for (i = 0; i < alarmCodeData.usAlarmNum && i < 4; i++) { setInt16(outBuffer, 14 + i * 4, alarmCodeData.AlarmData.usAlarmNo[i]); setInt16(outBuffer, 16 + i * 4, alarmCodeData.AlarmData.usAlarmData[i]); } sendRet = sendN(acceptHandle, outBuffer, 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum), 0); if (sendRet != 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum)) { fprintf(stderr, "tcpSvr: sendRet = %d != 14 +4*((alarmCodeData.usAlarmNum>4)?4:alarmCodeData.usAlarmNum)\n", sendRet); return -1; } break; default: fprintf(stderr, "tcpSvr: invalid sys1 function type = %d\n", type); return -1; } return 0; }
size_t Variant::deserialize(const unsigned char *buffer, size_t size) { if (buffer != NULL && size > 0) { Variant::Type type = static_cast<Variant::Type>(*buffer); ++buffer; switch (type) { case UINT8: { typedef uint8_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setUint8(static_cast<Type>(*buffer)); size = sizeof(Type) + 1; } break; } case INT8: { typedef uint8_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setInt8(static_cast<Type>(*buffer)); size = sizeof(Type) + 1; } break; } case UINT16: { typedef uint16_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setUint16(ntohs(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case INT16: { typedef int16_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setInt16(ntohs(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case UINT32: { typedef uint32_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setUint32(ntohl(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case INT32: { typedef int32_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setInt32(ntohl(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case UINT64: { typedef uint64_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setUint64(ntohll(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case INT64: { typedef int64_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setInt64(ntohll(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case FLOAT: { typedef uint32_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setFloat(ntohf(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case DOUBLE: { typedef uint64_t Type; if ((size - 1) < sizeof(Type)) return 0; else { setDouble(ntohd(*reinterpret_cast<const Type *>(buffer))); size = sizeof(Type) + 1; } break; } case BOOL: { typedef bool Type; if ((size - 1) < sizeof(Type)) return 0; else { setBool(*reinterpret_cast<const Type *>(buffer)); size = sizeof(Type) + 1; } break; } case CHAR: { typedef char Type; if ((size - 1) < sizeof(Type)) return 0; else { setChar(*reinterpret_cast<const Type *>(buffer)); size = sizeof(Type) + 1; } break; } case STRING: { typedef uint32_t Type; if ((size - 1) < sizeof(Type)) return 0; else { Type len = ntohl(*reinterpret_cast<const Type *>(buffer)); if (len > 0 && len <= ((size - 1) - sizeof(Type))) setString(reinterpret_cast<const char *>(buffer + sizeof(Type)), len); size = sizeof(Type) + 1 + len; } break; } case BINARY: { typedef uint32_t Type; if ((size - 1) < sizeof(Type)) return 0; else { Type len = ntohl(*reinterpret_cast<const Type *>(buffer)); if (len > 0 && len <= ((size - 1) - sizeof(Type))) setBinary(reinterpret_cast<const unsigned char *>(buffer + sizeof(Type)), len); size = sizeof(Type) + 1 + len; } break; } } return size; } return 0; }