void PipeReader::run (void) { std::vector<deUint8> tmpBuf (FILEREADER_TMP_BUFFER_SIZE); deInt64 numRead = 0; while (!m_buf->isCanceled()) { deFileResult result = deFile_read(m_file, &tmpBuf[0], (deInt64)tmpBuf.size(), &numRead); if (result == DE_FILERESULT_SUCCESS) { // Write to buffer. try { m_buf->write((int)numRead, &tmpBuf[0]); m_buf->flush(); } catch (const ThreadedByteBuffer::CanceledException&) { // Canceled. break; } } else if (result == DE_FILERESULT_END_OF_FILE || result == DE_FILERESULT_WOULD_BLOCK) { // Wait for more data. deSleep(FILEREADER_IDLE_SLEEP); } else break; // Error. } }
// --------------------------------------------------------------------------------- // CUpnpTmServerDeviceXmlParser::OnStartDocumentL // Called when parser hits the start of the document // --------------------------------------------------------------------------------- // void CUpnpTmServerDeviceXmlParser::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/, TInt aErrorCode ) { OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_ENTRY ); User::LeaveIfError(aErrorCode); TBuf<KMaxBufLength> tmpBuf(iDeviceDir); tmpBuf.Append(KDeviceName()); iDescFilePath.CreateL(tmpBuf); tmpBuf.Zero(); // Create TmAppServer service xml tmpBuf.Copy(iDeviceDir); tmpBuf.Append(KAppServerSrvName()); RFile appServerSrvFile; CleanupClosePushL(appServerSrvFile); TInt err(KErrNone); err = appServerSrvFile.Create(iFs, tmpBuf, EFileWrite); if ( err == KErrAlreadyExists ) { User::LeaveIfError(appServerSrvFile.Open(iFs, tmpBuf, EFileWrite)); } else { User::LeaveIfError(err); } User::LeaveIfError(appServerSrvFile.Write(iAppServerSrvDescription)); CleanupStack::PopAndDestroy( &appServerSrvFile ); iAppServerSrvFilePath.CreateL(tmpBuf); tmpBuf.Zero(); // Create TmClientProfile service xml tmpBuf.Copy(iDeviceDir); tmpBuf.Append(KClientProfSrvName()); RFile clientProfSrvFile; CleanupClosePushL(clientProfSrvFile); err = clientProfSrvFile.Create(iFs, tmpBuf, EFileWrite); if ( err == KErrAlreadyExists ) { User::LeaveIfError(clientProfSrvFile.Open(iFs, tmpBuf, EFileWrite)); } else { User::LeaveIfError(err); } User::LeaveIfError(clientProfSrvFile.Write(iClientProfSrvDescription)); CleanupStack::PopAndDestroy( &clientProfSrvFile ); iClientProfSrvFilePath.CreateL(tmpBuf); iDeviceDescription.Append(KStartLine()); iDescriptionUri.CreateMaxL(UpnpString::KDefaultStringLength); iDescriptionUri.SetLength(KErrNone); iDescriptionUri.Append(KScpdUrl()); iDescriptionUri.Append(KDeviceName()); OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_EXIT ); }
static inline double StrToDSystem(const char* b, const char* e, char** se) { const size_t len = e - b; TTempBuf tmpBuf(len + 1); char* tmp = (char*)tmpBuf.Data(); memcpy(tmp, b, len); tmp[len] = 0; char* ret = 0; const double res = strtod(tmp, &ret); if (se) { *se = (char*)(b + (ret - tmp)); } return res; }
/*=========================================================================== METHOD: EncodeTxData (Internal Method) DESCRIPTION: Encode data for transmission PARAMETERS: pBuffer [ I ] - Data to be encoded bEncoded [ O ] - Do we even encode data? SEQUENCING: None (must be called from protocol server thread) RETURN VALUE: sSharedBuffer * - Encoded data (0 upon error when encoding is indicated) ===========================================================================*/ sSharedBuffer * cQMIProtocolServer::EncodeTxData( sSharedBuffer * pBuffer, bool & bEncoded ) { WORD tid = ++mLastTID; if (tid == (WORD)INVALID_QMI_TRANSACTION_ID) { tid++; } sQMIServiceBuffer tmpBuf( pBuffer ); tmpBuf.SetTransactionID( tid ); // No actual encoding required as we alter the original request bEncoded = false; return 0; };
/*=========================================================================== METHOD: DecodeRxData (Internal Method) DESCRIPTION: Decode incoming data into QMI indications/responses PARAMETERS: bytesReceived [ I ] - Number of bytes to decoded rspIdx [ O ] - Log index of last valid response (not used) bAbortTx [ O ] - Response aborts current transmission? (not used) SEQUENCING: None (must be called from protocol server thread) RETURN VALUE: bool - Was a response received? ===========================================================================*/ bool cQMIProtocolServer::DecodeRxData( ULONG bytesReceived, ULONG & rspIdx, bool & bAbortTx ) { // Assume failure bool bRC = false; rspIdx = INVALID_LOG_INDEX; bAbortTx = false; // Something to decode from? if (bytesReceived == 0) { return bRC; } // Set protocol type (we have to be dealing with a valid QMI service) eProtocolType pt = MapQMIServiceToProtocol( mService, false ); if (pt == ePROTOCOL_ENUM_BEGIN) { return bRC; } sSharedBuffer * pTmp = 0; pTmp = new sSharedBuffer( mpRxBuffer, bytesReceived, pt ); if (pTmp != 0) { sQMIServiceBuffer tmpBuf( pTmp ); if (tmpBuf.IsValid() == true) { rspIdx = mLog.AddBuffer( tmpBuf ); if (IsResponse( tmpBuf ) == true) { bRC = true; } else { rspIdx = INVALID_LOG_INDEX; } } } return bRC; }
void TileMapBufferHolder::updateAttributesIfNeeded() { MC2_ASSERT( m_buf != NULL ); if ( ! m_trustAttributes ) { // crc and empty attributes are not set. // Must have a mapdesc in order to be able to load the tilemap. MC2_ASSERT( m_mapDesc != NULL ); TileMap tmap; BitBuffer tmpBuf( m_buf->getBufferAddress(), m_buf->getBufferSize() ); tmap.load( tmpBuf, *m_mapDesc, m_desc ); m_crc = tmap.getCRC(); TileMapParams param( m_desc ); uint32 emptyImps = tmap.getEmptyImportances(); m_empty = static_cast<bool>(emptyImps & (1 << param.getImportanceNbr())); // Attributes are now trusted! m_trustAttributes = true; } }
void sendReply ( void *state ) { StateStatsdb *st = (StateStatsdb *)state; if ( g_errno ) { g_httpServer.sendErrorReply(st->m_socket, 500,mstrerror(g_errno)); return; } TcpSocket *s = st->m_socket; SafeBuf buf( 1024*32 ); SafeBuf tmpBuf( 1024 ); // // take these out until we need them! // /* // print the top of the page tmpBuf.safePrintf( //"<style type=\"text/css\">" //"@import url(/styles/statsdb.css);</style>\n" "<script type=\"text/javascript\" " "src=\"/scripts/statsdb.js\"></script>\n" "<!-- DHTML Calendar -->" "<style type=\"text/css\">" "@import url(/jsc/calendar-win2k-1.css);" "</style>\n" "<script type=\"text/javascript\" " "src=\"/jsc/calendar.js\"></script>\n" "<script type=\"text/javascript\" " "src=\"/jsc/lang/calendar-en.js\"></script>\n" "<script type=\"text/javascript\" " "src=\"/jsc/calendar-setup.js\"></script>\n" ); */ // make the query string char qs[1024]; sprintf(qs,"&date_period=%li&date_units=%li&samples=%li", st->m_datePeriod, st->m_dateUnits, st->m_samples); // print standard header g_pages.printAdminTop ( &buf , st->m_socket , &st->m_request , qs ); buf.cat ( tmpBuf ); //g_pages.printAdminTop2 ( &buf , st->m_socket , &st->m_request, NULL , // tmpBuf.getBufStart(), tmpBuf.length() ); // write the controls section of the page writeControls( &buf, st ); // Debug print of CGI parameters and errors char startTimeStr[30]; char endTimeStr[30]; strncpy( startTimeStr, ctime( &st->m_startDate ), 30 ); strncpy( endTimeStr, ctime( &st->m_endDate ), 30 ); buf.safePrintf("<center>\n"); if ( ! g_conf.m_useStatsdb ) buf.safePrintf("<font color=red><b>Statsdb disabled. " "Turn on in the master controls.</b>" "</font>\n" ); buf.safePrintf("<table cellpadding=10 border=0>\n"); buf.safePrintf("<tr><td>" "<center>" "<img src=\"/stats%li.gif\" height=%li width=%li " "border=\"0px\">" "</center>" //"class=\"statsdb_image\">" "</td></tr>\n", st->m_hostId, g_statsdb.getImgHeight(), g_statsdb.getImgWidth()); // the map key buf.safePrintf("<tr><td>"); buf.cat ( st->m_sb2 ); buf.safePrintf("</td></tr>\n"); buf.safePrintf( "</table>\n" ); buf.safePrintf("</center>"); // print the bottom of the page g_pages.printAdminBottom2( &buf ); g_errno = 0; mdelete ( st, sizeof(StateStatsdb), "PageStatsdb" ); delete st; g_httpServer.sendDynamicPage ( s, buf.getBufStart(), buf.length() ); }
void newBufTest() { std::cout << "*** Testing AsnBuf ****\n"; try { SNACC::AsnBuf testBufExcept; testBufExcept.GetByte(); } catch (SNACC::SnaccException &e) { std::cout << "Caught buffer exception as expected: " << e.what() << "\n"; } std::fstream fs("test.txt"); unsigned char test[10000]; int j; try { fillTestBuffer(&test[0], 10000); // file test std::filebuf fb; fb.open("test.txt", std::ios_base::out | std::ios_base::binary); fb.sputn((char *)&test[0], 10000); fb.close(); SNACC::AsnBuf fileBuf("test.txt"); if (fileBuf.length() != 10000) { std::cout << "ERROR: AsnBuf() file length check failed!\n"; } else { char fileData[10000]; try { fileBuf.GetSeg(&fileData[0], 10000); if (memcmp(fileData, test, 10000) != 0) { std::cout << "ERROR: AsnBuf() file data check failed!\n"; } } catch(...) { std::cout << "ERROR: AsnBuf() file GetSeg() failed!\n"; } } SNACC::AsnBuf buf2[1000]; for (j = 0; j < 1; j++) { SNACC::AsnBuf tmpBuf((char *)test,4200); #ifdef _DEBUG tmpBuf.status(std::cout); #endif tmpBuf.ResetMode(); char ch = tmpBuf.GetByte(); char ch2 = tmpBuf.GetByte(); std::cout << "ch == " << (int)ch << " ch2 == " << (int)ch2 << "\n"; buf2[j].PutSegRvs((char *)test, 10000); #ifdef _DEBUG buf2[j].status(std::cout); #endif SNACC::AsnBuf buf; buf = buf2[j]; buf.ResetMode(); if (buf.length() != 10000) { std::cout << "length() after PutSegRvs() test FAILED!\n"; } std::stringstream ss, ss2; ss << buf; buf.ResetMode(); ss2 << buf; #ifdef _DEBUG buf.status(std::cout); #endif buf.ResetMode(); const char *ps = ss.str().data(); // buf.GetSeg(10000) checkTestBuffer((unsigned char *) ps, 10000); if ((ss.str().length() == 10000) && (memcmp(test, ps, 10000) == 0)) { std::cout << "ss is good!" << std::endl; } else { std::cout << "[" << j << "] ss is not good!" << std::endl; } const char *ps2 = ss2.str().data(); if (ss2.str().length() == 10000 && memcmp(test, ps2, 10000) == 0){ std::cout << "ss2 is good!" << std::endl; } else{ std::cout << "[" << j << "] ss2 is not good" << std::endl; } } } catch (std::exception &e) { std::cout << "Caught Standard Exception: " << e.what() << std::endl; } catch (...) { std::cout << "Caught un-handled exception!" << std::endl; } std::cout << "*** end of AsnBuf test ***\n"; }
int MVCToXML( mvc_t *VC, mxml_t *VE, enum MVCAttrEnum *SAList, mbool_t FullXML) { const enum MVCAttrEnum DAList[] = { mvcaACL, /* ACL */ mvcaCreateTime, /* time VC was created */ mvcaCreator, /* creator */ mvcaDescription, /* description */ mvcaFlags, /* flags (from MVCFlagEnum) */ mvcaJobs, /* names of jobs in VC */ mvcaMessages, /* VC messages */ mvcaName, /* VC name */ mvcaNodes, /* names of nodes in VC */ mvcaOwner, /* VC owner */ mvcaParentVCs, /* names of parent VCs */ mvcaReqStartTime,/* requested start time for guaranteed start time */ mvcaRsvs, /* names of rsvs in VC */ mvcaVariables, /* VC vars */ mvcaVCs, /* sub-VCs */ mvcaVMs, /* names of VMs in VC */ mvcaThrottlePolicies, /* throttling policies attached to VC via mvcctl */ mvcaNONE }; int aindex; enum MVCAttrEnum *AList; mbool_t PrintACL = FALSE; if ((VC == NULL) || (VE == NULL)) { return(FAILURE); } if (SAList != NULL) AList = SAList; else AList = (enum MVCAttrEnum *)DAList; mstring_t tmpBuf(MMAX_LINE); for (aindex = 0;AList[aindex] != mvcaNONE;aindex++) { if (AList[aindex] == mvcaACL) { PrintACL = TRUE; continue; } if ((FullXML == TRUE) && ((AList[aindex] == mvcaJobs) || (AList[aindex] == mvcaNodes) || (AList[aindex] == mvcaRsvs) || (AList[aindex] == mvcaVMs) || (AList[aindex] == mvcaVCs) || (AList[aindex] == mvcaParentVCs))) continue; if (AList[aindex] == mvcaVariables) { MUAddVarsToXML(VE,&VC->Variables); continue; } else if ((AList[aindex] == mvcaMessages) && (VC->MB != NULL)) { /* Use the already existing MMB to XML functionality */ mxml_t *ME = NULL; MXMLCreateE(&ME,(char *)MVCAttr[mvcaMessages]); MMBPrintMessages(VC->MB,mfmXML,TRUE,-1,(char *)ME,0); MXMLAddE(VE,ME); continue; } MVCAToMString(VC,AList[aindex],&tmpBuf); if (!tmpBuf.empty()) { MXMLSetAttr(VE,(char *)MVCAttr[AList[aindex]],tmpBuf.c_str(),mdfString); } } /* END for (aindex) */ if (FullXML) { /* If you specify FullXML, you get all of the children. Don't check AList */ mln_t *tmpL; mxml_t *CE; if (VC->Jobs != NULL) { mjob_t *J; enum MJobAttrEnum JAList[] = { mjaJobID, mjaAccount, mjaArgs, mjaClass, mjaCmdFile, mjaDescription, mjaFlags, mjaGroup, mjaPAL, mjaQOS, mjaRCL, mjaReqAWDuration, mjaReqHostList, /**< requested hosts */ mjaReqNodes, mjaReqReservation, mjaRM, mjaStatPSDed, mjaSysPrio, mjaTemplateFlags, mjaTrigger, mjaUser, mjaVMUsagePolicy, mjaNONE }; for (tmpL = VC->Jobs;tmpL != NULL;tmpL = tmpL->Next) { CE = NULL; J = (mjob_t *)tmpL->Ptr; MJobToXML(J,&CE,JAList,NULL,NULL,FALSE,FALSE); MXMLAddE(VE,CE); } } /* END if (VC->Jobs != NULL) */ if (VC->Nodes != NULL) { mnode_t *N; enum MNodeAttrEnum NAList[] = { mnaNodeID, mnaArch, mnaAvlGRes, mnaCfgGRes, mnaAvlTime, mnaFeatures, mnaHopCount, mnaLoad, mnaNodeState, mnaOS, mnaOSList, mnaProcSpeed, mnaRADisk, mnaRAMem, mnaRAProc, mnaRASwap, mnaRCDisk, mnaRCMem, mnaRCProc, mnaRCSwap, mnaSpeed, mnaVMOSList, mnaNONE }; for (tmpL = VC->Nodes;tmpL != NULL;tmpL = tmpL->Next) { CE = NULL; N = (mnode_t *)tmpL->Ptr; MXMLCreateE(&CE,(char *)MXO[mxoNode]); MNodeToXML(N,CE,NAList,0,FALSE,FALSE,NULL,NULL); MXMLAddE(VE,CE); } } /* END if (VC->Nodes != NULL) */ if (VC->Rsvs != NULL) { mrsv_t *R; for (tmpL = VC->Rsvs;tmpL != NULL;tmpL = tmpL->Next) { CE = NULL; R = (mrsv_t *)tmpL->Ptr; MRsvToXML(R,&CE,NULL,NULL,FALSE,mcmNONE); MXMLAddE(VE,CE); } } /* END if (VC->Rsvs != NULL) */ if (VC->VMs != NULL) { mvm_t *V; for (tmpL = VC->VMs;tmpL != NULL;tmpL = tmpL->Next) { CE = NULL; V = (mvm_t *)tmpL->Ptr; MXMLCreateE(&CE,(char *)MXO[mxoxVM]); MVMToXML(V,CE,NULL); MXMLAddE(VE,CE); } } /* END if (VC->VMs != NULL) */ if (VC->VCs != NULL) { mvc_t *V; for (tmpL = VC->VCs;tmpL != NULL;tmpL = tmpL->Next) { CE = NULL; V = (mvc_t *)tmpL->Ptr; MXMLCreateE(&CE,(char *)MXO[mxoxVC]); MVCToXML(V,CE,SAList,FullXML); MXMLAddE(VE,CE); } } /* END if (VC->VCs != NULL) */ } /* END if (FullXML) */ if ((PrintACL == TRUE) && (!MACLIsEmpty(VC->ACL))) { macl_t *tACL; mxml_t *AE = NULL; for (tACL = VC->ACL;tACL != NULL;tACL = tACL->Next) { AE = NULL; MACLToXML(tACL,&AE,NULL,FALSE); MXMLAddE(VE,AE); } } /* END if ((PrintACL == TRUE) && (!MACLIsEmpty(VC->ACL))) */ return(SUCCESS); } /* END MVCToXML() */
boost::optional<Codec::SDecodeContext> Codec::Decode( mori::TcpConnBuffer& buf, mori::TcpConnectionSPtr& connPtr, const std::string& rsaPriKey, PreChecker& ftr ) { CodecProtocol::Codec decodeMsg; if ( buf.size() < sizeof(uint32_t) ) { return boost::optional<Codec::SDecodeContext>(); } uint32_t* pSize = reinterpret_cast<uint32_t*>(buf.data()); *pSize = boost::asio::detail::socket_ops::network_to_host_long(*pSize); uint32_t msgSize = *pSize; if ( msgSize > buf.size()-sizeof(uint32_t) ) { return boost::optional<Codec::SDecodeContext>(); } if ( !decodeMsg.ParseFromArray(buf.data()+sizeof(uint32_t), msgSize) ) { return boost::optional<SDecodeContext>(); } std::copy(buf.begin()+sizeof(uint32_t)+msgSize, buf.end(), buf.begin()); buf.resize(buf.size()-sizeof(uint32_t)-msgSize); SDecodeContext ret; ret.MsgName_ = decodeMsg.msgname(); ret.ClientType_ = decodeMsg.clienttype(); if ( decodeMsg.has_userid() ) { ret.UserID_ = decodeMsg.userid(); } if ( decodeMsg.has_verifycode() ) { ret.VerifyCode_ = decodeMsg.verifycode(); } if ( decodeMsg.has_rawsize() ) { auto unCompSize = decodeMsg.rawsize(); if ( 0 == unCompSize ) { buf.resize(0); } else { mori::TcpConnBuffer tmpBuf(unCompSize); auto err = uncompress(reinterpret_cast<Bytef*>(tmpBuf.data()), reinterpret_cast<uLongf*>(&unCompSize), reinterpret_cast<const Bytef*>(buf.data()), buf.size()); if ( Z_OK != err ) { return boost::optional<SDecodeContext>(); } buf.swap(tmpBuf); } } bool useNewKey = false; std::string newKey; if ( ftr ) { newKey = ftr(ret); if ( !newKey.empty() ) { useNewKey = true; } } if ( decodeMsg.rsaencode() ) { if ( !decodeMsg.has_aeskey() || rsaPriKey.empty() ) { return boost::optional<SDecodeContext>(); } auto aesDecode = FastEncrypt::RSA_PriDecrypt(useNewKey?newKey:rsaPriKey, decodeMsg.aeskey()); if ( !aesDecode ) { return boost::optional<SDecodeContext>(); } decodeMsg.mutable_aeskey()->swap(*aesDecode); } if ( decodeMsg.has_aeskey() ) { auto tmpBuf = std::move(FastEncrypt::AES_CBCDecrypt(decodeMsg.aeskey(), buf.data(), buf.size())); buf.resize(tmpBuf.size()); std::copy(tmpBuf.begin(), tmpBuf.end(), buf.begin()); } return ret; }
//---------------------------------------------------------------------- // //---------------------------------------------------------------------- ReferenceBuffer* Encoding::Convert( const void* src, size_t srcByteCount, const Encoding* srcEncoding, const Encoding* targetEncoding, size_t* bytesUsed, size_t* charsUsed, bool* usedDefaultChar) { LN_THROW(src != NULL, ArgumentException); LN_THROW(srcEncoding != NULL, ArgumentException); LN_THROW(targetEncoding != NULL, ArgumentException); LN_THROW(srcByteCount >= srcEncoding->GetMinByteCount(), ArgumentException); // バッファのバイト数は、そのバッファのエンコーディングの最低バイト数以上でなければならない /* 変換後に必要な最大のバイト数を求める 例) pEncoding = UTF32 だったら 変換後最大文字数 = uByteCount / 1文字最低バイト数(4) pEncoding = UTF16 だったら 変換後最大文字数 = uByteCount / 1文字最低バイト数(2) pEncoding = UTF8 だったら 変換後最大文字数 = uByteCount / 1文字最大バイト数(1) これに、pThisEncoding の1文字の最大バイト数を掛ける。 */ int nConvertedMaxCharCount = srcByteCount / srcEncoding->GetMinByteCount(); int nConvertedMaxBytes = nConvertedMaxCharCount * targetEncoding->GetMaxByteCount(); nConvertedMaxBytes += targetEncoding->GetMinByteCount(); // 終端 \0 の分 // 変換の中間フォーマットとして wchar_t を使用する。そのための一時バッファ確保 int nWideMaxBytes = nConvertedMaxCharCount * Encoding::GetWideCharEncoding()->GetMaxByteCount(); RefPtr<ReferenceBuffer> tmpBuf(LN_NEW ReferenceBuffer()); tmpBuf->reserve(nWideMaxBytes + sizeof(wchar_t)); // 終端 \0 考慮 (mbstowcs_s は \0 を書き込もうとする) // 変換先バッファを、最大要素数で確保 RefPtr<ReferenceBuffer> targetBuf(LN_NEW ReferenceBuffer()); targetBuf->reserve(nConvertedMaxBytes/* / targetEncoding->GetMinByteCount()*/); // 変換実行 bool bRes; size_t uBytesUsed; size_t uCharsUsed; bool bUsedDefaultChar; #if defined(LNOTE_WCHAR_16) // ソースフォーマットから中間フォーマットへ bRes = srcEncoding->ConvertToUTF16( (const byte_t*)src, srcByteCount, tmpBuf->getPointer(), nWideMaxBytes, // \0 強制格納に備え、1文字分余裕のあるサイズを指定する &uBytesUsed, &uCharsUsed); LN_THROW(bRes, InvalidFormatException); // 中間フォーマットからターゲットフォーマットへ bRes = targetEncoding->ConvertFromUTF16( (const byte_t*)tmpBuf->getPointer(), uBytesUsed, (byte_t*)targetBuf->getPointer(), targetBuf->getSize(), // \0 強制格納に備え、1文字分余裕のあるサイズを指定する &uBytesUsed, &uCharsUsed, &bUsedDefaultChar); LN_THROW(bRes, InvalidFormatException); #elif defined(LNOTE_WCHAR_32) #else #error "Invalid wchar_t size." #endif *bytesUsed = uBytesUsed; *charsUsed = uCharsUsed; *usedDefaultChar = bUsedDefaultChar; targetBuf->resize(uBytesUsed); targetBuf.safeAddRef(); return targetBuf; }