size_t ssl_socket::read( void* buffer, size_t size ) { return read_impl(buffer, size); }
std::unique_ptr< typename reader<Size, Difference, String, ForwardIterator, OperatingDistance, Speed, Font>::timetable_type> reader<Size, Difference, String, ForwardIterator, OperatingDistance, Speed, Font>::read( const iterator first, const iterator last, error_type& error) { return read_impl(first, last, error); }
size_t AudioStreamer::read(unsigned char* buffer, size_t size) { size_t done = read_impl(buffer, size); if (done < size) { loops_--; if (loops_ < 0) { return done; } else { seek_impl(0); size_t newdone = read_impl(buffer + done, size - done); return done + newdone; } } return done; }
inline i64_t read_i64( InIt const& start ) { return read_impl( start, type<i64_t>() ); }
inline i32_t read_i32( InIt const& start ) { return read_impl( start, type<i32_t>() ) ; }
inline i16_t read_i16( InIt const& start ) { return read_impl( start, type<i16_t>() ); }
SECURITY_STATUS ssl_socket::client_handshake_loop( PCredHandle phCreds, CtxtHandle* phContext, BOOL fDoInitialRead, SecBuffer* pExtraData ) { SecBufferDesc InBuffer; SecBuffer InBuffers[2]; SecBufferDesc OutBuffer; SecBuffer OutBuffers[1]; DWORD dwSSPIFlags; DWORD dwSSPIOutFlags; TimeStamp tsExpiry; SECURITY_STATUS scRet; DWORD cbData; PUCHAR IoBuffer; DWORD cbIoBuffer; BOOL fDoRead; dwSSPIFlags = ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM; IoBuffer = new BYTE[IO_BUFFER_SIZE]; if (IoBuffer == NULL) { return SEC_E_INTERNAL_ERROR; } cbIoBuffer = 0; fDoRead = fDoInitialRead; scRet = SEC_I_CONTINUE_NEEDED; while (scRet == SEC_I_CONTINUE_NEEDED || scRet == SEC_E_INCOMPLETE_MESSAGE || scRet == SEC_I_INCOMPLETE_CREDENTIALS) { if (cbIoBuffer == 0 || scRet == SEC_E_INCOMPLETE_MESSAGE) { if (fDoRead) { m_bAllowPlainText = TRUE; cbData = static_cast<DWORD>(read_impl(IoBuffer + cbIoBuffer, static_cast<size_t>(IO_BUFFER_SIZE - cbIoBuffer))); m_bAllowPlainText = FALSE; if (cbData == SOCKET_ERROR) { scRet = SEC_E_INTERNAL_ERROR; break; } else if (cbData == 0) { scRet = SEC_E_INTERNAL_ERROR; break; } cbIoBuffer += cbData; } else { fDoRead = TRUE; } } InBuffers[0].pvBuffer = IoBuffer; InBuffers[0].cbBuffer = cbIoBuffer; InBuffers[0].BufferType = SECBUFFER_TOKEN; InBuffers[1].pvBuffer = NULL; InBuffers[1].cbBuffer = 0; InBuffers[1].BufferType = SECBUFFER_EMPTY; InBuffer.cBuffers = 2; InBuffer.pBuffers = InBuffers; InBuffer.ulVersion = SECBUFFER_VERSION; OutBuffers[0].pvBuffer = NULL; OutBuffers[0].BufferType = SECBUFFER_TOKEN; OutBuffers[0].cbBuffer = 0; OutBuffer.cBuffers = 1; OutBuffer.pBuffers = OutBuffers; OutBuffer.ulVersion = SECBUFFER_VERSION; scRet = g_sspi->InitializeSecurityContext(phCreds, phContext, NULL, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, &InBuffer, 0, NULL, &OutBuffer, &dwSSPIOutFlags, &tsExpiry); if (scRet == SEC_E_OK || scRet == SEC_I_CONTINUE_NEEDED || FAILED(scRet) && (dwSSPIOutFlags & ISC_RET_EXTENDED_ERROR)) { if (OutBuffers[0].cbBuffer != 0 && OutBuffers[0].pvBuffer != NULL) { m_bAllowPlainText = TRUE; cbData = static_cast<DWORD>(write_impl(OutBuffers[0].pvBuffer, static_cast<size_t>(OutBuffers[0].cbBuffer))); m_bAllowPlainText = FALSE; if (cbData == SOCKET_ERROR || cbData == 0) { g_sspi->FreeContextBuffer(OutBuffers[0].pvBuffer); g_sspi->DeleteSecurityContext(phContext); return SEC_E_INTERNAL_ERROR; } g_sspi->FreeContextBuffer(OutBuffers[0].pvBuffer); OutBuffers[0].pvBuffer = NULL; } } if (scRet == SEC_E_INCOMPLETE_MESSAGE) { continue; } if (scRet == SEC_E_OK) { if (InBuffers[1].BufferType == SECBUFFER_EXTRA) { pExtraData->pvBuffer = new BYTE[InBuffers[1].cbBuffer]; if (pExtraData->pvBuffer == NULL) { return SEC_E_INTERNAL_ERROR; } MoveMemory(pExtraData->pvBuffer, IoBuffer + (cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); pExtraData->cbBuffer = InBuffers[1].cbBuffer; pExtraData->BufferType = SECBUFFER_TOKEN; } else { pExtraData->pvBuffer = NULL; pExtraData->cbBuffer = 0; pExtraData->BufferType = SECBUFFER_EMPTY; } break; } if (scRet == SEC_E_UNTRUSTED_ROOT) { scRet = SEC_E_OK; } // if (FAILED(scRet) // { // break; // } if (scRet == SEC_I_INCOMPLETE_CREDENTIALS) { break; } if (InBuffers[1].BufferType == SECBUFFER_EXTRA) { MoveMemory(IoBuffer, IoBuffer + (cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); cbIoBuffer = InBuffers[1].cbBuffer; } else { cbIoBuffer = 0; } } if (FAILED(scRet)) { g_sspi->DeleteSecurityContext(phContext); } if (IoBuffer) { delete[] IoBuffer; } return scRet; }
ns_error basis_iostream::read(std::string& vl, size_t cnt, timeouttype tmout) { checkconnect(); if (state_ == connected) { is_timout = false; is_data_ready = false; is_error = false; is_connect = true; error_cod = 0; size_t need_cnt = cnt; if (need_cnt) { if (size_rb() > 0) { if (size_rb() < need_cnt) { need_cnt = need_cnt - size_rb(); get_rb(vl); } else { get_rb(vl, need_cnt); return 0; } } } try { io_service_.reset(); //DEBUG_STR_DVNCI(SET ASYNCWRITE) read_impl(need_cnt); //DEBUG_STR_DVNCI(SET ASYNCTIME) tmout_timer_.expires_from_now(boost::posix_time::milliseconds(tmout ? tmout : timout())); tmout_timer_.async_wait(boost::bind( &basis_iostream::io_handle_timout_expire, shared_from_this(), boost::asio::placeholders::error)); //DEBUG_STR_DVNCI(SET RUN) io_service_.run(); } catch (dvncierror& errd) { if (errd.code() == ERROR_IO_SERVICE_LOCK) throw errd; return (errd.code()); } catch (...) { DEBUG_STR_DVNCI(ERROR RESULT); return NS_ERROR_NODEF; } //DEBUG_STR_DVNCI(SET RESULT) if (is_timout) { error_cod = ERROR_IO_TIMOUT_EXPIRE; return error_cod; } if (is_error) { error_cod = ERROR_FAILNET_CONNECTED; return error_cod; } if (!is_data_ready) return ERROR_NULLRESPONSE; if (size_rb() < need_cnt) return ERROR_NULLRESPONSE; if (need_cnt) get_rb(vl, need_cnt); else get_rb(vl); return 0; } return ERROR_IO_LINK_NOT_CONNECTION; }