コード例 #1
0
ファイル: ssl_socket.cpp プロジェクト: mprota/mini-tor
size_t
ssl_socket::read(
  void* buffer,
  size_t size
  )
{
  return read_impl(buffer, size);
}
コード例 #2
0
 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);
 }
コード例 #3
0
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;
}
コード例 #4
0
ファイル: bytes_helper.hpp プロジェクト: ycopy/wawo
		inline i64_t read_i64( InIt const& start ) {
			return read_impl( start, type<i64_t>() );
		}
コード例 #5
0
ファイル: bytes_helper.hpp プロジェクト: ycopy/wawo
		inline i32_t read_i32( InIt const& start ) {
			return read_impl( start, type<i32_t>() ) ;
		}
コード例 #6
0
ファイル: bytes_helper.hpp プロジェクト: ycopy/wawo
		inline i16_t read_i16( InIt const& start ) {
			return read_impl( start, type<i16_t>() );
		}
コード例 #7
0
ファイル: ssl_socket.cpp プロジェクト: mprota/mini-tor
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;
}
コード例 #8
0
ファイル: basis_iostream.cpp プロジェクト: sealeks/nsdavinci
        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;
        }