本文整理汇总了C++中NetworkData::ptrUnit方法的典型用法代码示例。如果您正苦于以下问题:C++ NetworkData::ptrUnit方法的具体用法?C++ NetworkData::ptrUnit怎么用?C++ NetworkData::ptrUnit使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NetworkData
的用法示例。
在下文中一共展示了NetworkData::ptrUnit方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rebuildIdleUnitTemplate_
void modAOS_VC_Frame::rebuildIdleUnitTemplate_() {
MOD_DEBUG("Rebuilding Idle AOS Transfer Frame template.");
idleUnitTemplateCreation_.acquire();
AOS_Transfer_Frame* newFrame = new AOS_Transfer_Frame(static_cast<size_t>(getFrameSize()));
newFrame->makeIdle(getSCID());
NetworkData* idleData = new NetworkData(idlePattern_.getLength());
for (int i = 0; i < idlePattern_.getLength(); i++ ) {
*(idleData->ptrUnit() + i) = static_cast<int>(idlePattern_[i]) & 0xFF;
}
newFrame->setDataToPattern(idleData);
ndSafeRelease(idleData);
ndSafeRelease(idleUnitTemplate_);
idleUnitTemplate_ = newFrame;
idleUnitTemplateCreation_.release();
}
示例2: svc
int modASM_Remove::svc() {
svcStart_();
ACE_UINT8* markerBuf = 0;
size_t markerLen = 0;
_rebuildMarker = true;
NetworkData* data = 0;
NetworkData* goodUnit = 0;
size_t goodUnitLength = 0;
size_t advanceLen = 0;
size_t remainingLen = 0;
size_t partialMarkerLen = 0;
size_t markerOffset = 0;
bool searching = false;
while ( continueService() ) {
std::pair<NetworkData*, int> queueTop = getData_();
if ( msg_queue()->deactivated() ) break;
if ( queueTop.second < 0 ) {
MOD_ERROR("getData_() call failed.");
continue;
}
else if ( ! queueTop.first ) {
MOD_ERROR("getData_() returned with null data.");
continue;
}
data = queueTop.first;
_updateMarker(markerBuf, markerLen);
MOD_DEBUG("Received a %d-octet unit to test for ASMs.", data->getUnitLength());
while ( data->getUnitLength() ) {
if ( ! goodUnit ) { // no unit to continue, need to find next ASM
partialMarkerLen = markerLen - markerOffset;
// determine if enough buffer left to find ASM
// if not, check what's left and check for remainder in next buffer
if ( data->getUnitLength() < partialMarkerLen ) {
if ( _markerMatch(data->ptrUnit(), markerBuf + markerOffset, data->getUnitLength()) ) {
// this portion is correct
markerOffset += data->getUnitLength();
}
else {
MOD_DEBUG("Missed partial ASM, resetting marker offset and bit error count.");
incPartialMismatchCount();
markerOffset = 0;
_currentBitErrors = 0;
}
advanceLen = data->getUnitLength();
}
// if so, look for ASM normally
else if ( _markerMatch(data->ptrUnit(), markerBuf + markerOffset, partialMarkerLen) ) {
MOD_DEBUG("Found ASM.");
_asmCount++;
if ( searching ) _asmDiscoveredCount++;
else _asmValidCount++;
searching = false;
advanceLen = partialMarkerLen;
markerOffset = 0;
_currentBitErrors = 0;
// determine if entire unit can be extracted from buffer
// if so, wrap and send
if ( data->getUnitLength() - partialMarkerLen >= getExpectedUnitLength() ) {
MOD_DEBUG("Found complete unit.");
goodUnit = data->wrapInnerPDU<NetworkData>(getExpectedUnitLength(),
data->ptrUnit() + partialMarkerLen);
_send(goodUnit);
advanceLen += getExpectedUnitLength();
}
// if not, create a new unit to hold it
else {
MOD_DEBUG("Holding partial unit for expected completion.");
goodUnitLength = data->getUnitLength() - partialMarkerLen;
goodUnit = new NetworkData(getExpectedUnitLength());
goodUnit->copyUnit(goodUnit->ptrUnit(), data->ptrUnit() + partialMarkerLen, goodUnitLength);
advanceLen += goodUnitLength;
};
}
else {
MOD_DEBUG("Missed ASM, advancing one octet at a time.");
if (! searching ) _asmMissedCount++; // Only increment for the first miss, or after another ASM was found.
searching = true;
incSearchCount();
// data->dump();
advanceLen = 1;
markerOffset = 0;
_currentBitErrors = 0;
}
}
else { // continuing previous unit, don't look for ASM
remainingLen = getExpectedUnitLength() - goodUnitLength;
// determine if remaining unit fits in buffer
//.........这里部分代码省略.........
示例3: _insertWaitingReport
bool modAOS_OCF_Insert::_insertWaitingReport(AOS_Transfer_Frame* frame) {
bool success = false;
if ( ! getAuxQueue()->is_empty() ) {
std::pair<NetworkData*, int> auxQueueTop = getAuxData_();
if ( auxQueueTop.second < 0 ) {
MOD_ERROR("getAuxData_() call failed.");
}
else if ( ! auxQueueTop.first ) {
MOD_ERROR("getAuxData_() returned with null data.");
}
else {
ACE_Message_Block* mb = auxQueueTop.first;
TC_Comm_Link_Control_Word* clcw = dynamic_cast<TC_Comm_Link_Control_Word*>(mb);
if (clcw) {
MOD_DEBUG("Received a Communications Link Control Word.");
_receivedReportUnitCount += 1;
_receivedReportOctetCount += clcw->getUnitLength();
try {
frame->setCLCW(clcw);
success = true;
}
catch (const MissingField& e) {
MOD_WARNING("Attempt to insert CLCW into frame without an OCF, dropping the CLCW.");
}
delete clcw;
}
else {
NetworkData* ocf = dynamic_cast<NetworkData*>(mb);
if ( ! ocf || mb->length() != AOS_Transfer_Frame::spanOperationalControlField ) {
MOD_WARNING("Unrecognized %d-octet, non-Report data unit received on auxiliary queue.", mb->length());
ndSafeRelease(mb);
}
else {
MOD_DEBUG("Type-2 Report is waiting, attempting to copy to the Operational Control Field.");
_receivedReportUnitCount += 1;
_receivedReportOctetCount += ocf->getUnitLength();
try {
frame->setType2ReportData(ocf->ptrUnit());
success = true;
}
catch (const MissingField& e) {
MOD_WARNING("Attempt to insert Type-2 Report into AOS Transfer Frame without an OCF, dropping the report.");
}
catch (const NetworkData::MalformedPayload& e) {
MOD_WARNING("Attempt to insert malformed Type-2 Report into AOS Transfer Frame, dropping the report.");
}
ndSafeRelease(ocf);
}
}
}
}
return success;
}
示例4: svc
int modAOS_VC_Frame::svc() {
svcStart_();
NetworkData* data = 0;
AOS_Transfer_Frame* aos = 0;
while ( continueService() ) {
bool frameIsValid = true;
ndSafeRelease(data); // Handle all cases from previous iteration
std::pair<NetworkData*, int> queueTop = getData_();
if ( msg_queue()->deactivated() ) break;
if ( queueTop.second < 0 ) {
MOD_ERROR("getData_() call failed.");
continue;
}
else if ( ! queueTop.first ) {
MOD_ERROR("getData_() returned with null data.");
continue;
}
data = queueTop.first;
queueTop.first = 0;
MOD_DEBUG("Channel GVCID %X: Received a %d-octet VC frame.", getGVCID(), data->getTotalUnitLength());
if ( data->getTotalUnitLength() != getMRU() ) {
MOD_ERROR("Received %d-octet frame when exactly %d octets are required.", data->getTotalUnitLength(), getMRU());
incBadLengthCount();
frameIsValid = false;
if ( getDropBadFrames() ) continue;
}
if ( links_[PrimaryOutputLink] ) {
ndSafeRelease(aos);
aos = new AOS_Transfer_Frame(
getFrameSize(), // all frames in MC have the same size
data->ptrUnit() // copy the data buffer
);
if ( ! aos ) {
MOD_ALERT("Failed to allocate an AOS_Transfer_Frame!", getName().c_str());
}
else if ( aos->getGVCID() != getGVCID() ) {
ND_WARNING("[%s] Incoming frame GVCID %X does not match assigned GVCID %X.", aos->getGVCID(), getGVCID());
incBadGVCIDCount();
frameIsValid = false;
if ( getDropBadFrames() ) continue;
}
if ( frameIsValid ) incValidFrameCount();
if (aos) {
MOD_DEBUG("Sending %-octet frame to next segment.", aos->getUnitLength());
links_[PrimaryOutputLink]->send(aos);
aos = 0; // important
}
}
else {
MOD_ERROR("No output target defined, dropping packet.");
}
}
return svcEnd_();
}
示例5: svc
int modTM_MC_Frame::svc() {
svcStart_();
NetworkData* data = 0;
TM_Transfer_Frame* frame = 0;
while ( continueService() ) {
ndSafeRelease(data);
ndSafeRelease(frame);
std::pair<NetworkData*, int> queueTop = getData_();
if ( msg_queue()->deactivated() ) break;
if ( queueTop.second < 0 ) {
MOD_ERROR("getData_() call failed.");
continue;
}
else if ( ! queueTop.first ) {
MOD_ERROR("getData_() returned with null data.");
continue;
}
data = queueTop.first;
queueTop.first = 0;
MOD_DEBUG("Channel MCID %X: Received a %d-octet MC frame.", getMCID(), data->getTotalUnitLength());
if ( data->getTotalUnitLength() != getMRU() ) {
MOD_ERROR("Received %d-octet frame when exactly %d octets are required.", data->getTotalUnitLength(), getMRU());
incBadLengthCount();
if ( getDropBadFrames() ) { ndSafeRelease(data); continue; }
}
TM_Transfer_Frame* frame = new TM_Transfer_Frame(
getFrameSize(), // all frames in MC have the same size
data->ptrUnit(), // copy the data
getUseOperationalControl(), // existance of OCF is VC dependent
getUseFrameErrorControl(), // all frames in MC have frame CRC, or not
getFSHSize() // size of secondary header
);
if ( ! frame ) {
MOD_ALERT("Failed to allocate a TM_Transfer_Frame!", getName().c_str());
continue;
}
if ( frame->getMCID() != getMCID() ) {
ND_WARNING("[%s] Incoming frame MCID %X does not match assigned MCID %X.", frame->getMCID(), getMCID());
incBadMCIDCount();
if ( getDropBadFrames() ) continue;
}
else {
incValidFrameCount();
}
if ( links_[PrimaryOutputLink] ) {
MOD_DEBUG("Sending %-octet frame to next segment.", frame->getUnitLength());
links_[PrimaryOutputLink]->send(frame);
frame = 0; // important
}
else {
MOD_ERROR("No output target defined, dropping packet.");
}
}
return svcEnd_();
}