bool
Monitor::setSenders()
{
    //std::cerr << "Monitor::setSenders() version=" << version() << std::endl;
    rcss::SerializerMonitor::Creator ser_cre;
    if ( ! rcss::SerializerMonitor::factory().getCreator( ser_cre,
                                                          (int)version() ) )
    {
        std::cout << "Unsupported monitor protocol version. version=" << version()
                  << std::endl;
        return false;
    }

    const rcss::SerializerMonitor::Ptr ser = ser_cre();
    if ( ! ser )
    {
        std::cout << "Could not create monitor serializer. " << std::endl;
        return false;
    }

    //
    // disp sender
    //
    {
        rcss::DispSenderMonitor::Params disp_params( getTransport(),
                                                     *this,
                                                     ser,
                                                     M_stadium );
        rcss::DispSenderMonitor::Creator disp_cre;
        if ( ! rcss::DispSenderMonitor::factory().getCreator( disp_cre,
                                                              (int)version() ) )
        {
            std::cerr << "failed to create DispSenderMonitor v" << version()
                      << std::endl;
            return false;
        }
        M_observer->setDispSender( disp_cre( disp_params ) );
    }

    //
    // init sender
    //
    {
        rcss::InitSenderMonitor::Params init_params( getTransport(),
                                                     *this,
                                                     ser,
                                                     M_stadium );
        rcss::InitSenderMonitor::Creator init_cre;
        if ( ! rcss::InitSenderMonitor::factory().getCreator( init_cre,
                                                              (int)version() ) )
        {
            std::cerr << "failed to create InitSenderMonitor v" << version()
                      << std::endl;
            return false;
        }
        M_init_observer->setInitSender( init_cre( init_params ) );
    }

    return true;
}
void BaseExecutionContext::write(CStrRef s) {
#ifdef TAINTED
  if (!getTransport() && !m_out) {
    // We are running a PHP script and we are about to echo to stdout
    TaintWarning::WarnIfTainted(s, TAINT_BIT_HTML);
  } else if (getTransport() && m_buffers.size() == 2) {
    // We are responding to a request and we are about to echo to stdout
    TaintWarning::WarnIfTainted(s, TAINT_BIT_HTML);
  }
#endif
  write(s.data(), s.size());
}
void
GenericLinkService::checkCongestionLevel(lp::Packet& pkt)
{
  ssize_t sendQueueLength = getTransport()->getSendQueueLength();
  // This operation requires that the transport supports retrieving current send queue length
  if (sendQueueLength < 0) {
    return;
  }

  // To avoid overflowing the queue, set the congestion threshold to at least half of the send
  // queue capacity.
  size_t congestionThreshold = m_options.defaultCongestionThreshold;
  if (getTransport()->getSendQueueCapacity() >= 0) {
    congestionThreshold = std::min(congestionThreshold,
                                   static_cast<size_t>(getTransport()->getSendQueueCapacity()) /
                                                       DEFAULT_CONGESTION_THRESHOLD_DIVISOR);
  }

  if (sendQueueLength > 0) {
    NFD_LOG_FACE_TRACE("txqlen=" << sendQueueLength << " threshold=" << congestionThreshold <<
                       " capacity=" << getTransport()->getSendQueueCapacity());
  }

  if (static_cast<size_t>(sendQueueLength) > congestionThreshold) { // Send queue is congested
    const auto now = time::steady_clock::now();
    if (now >= m_nextMarkTime || now >= m_lastMarkTime + m_options.baseCongestionMarkingInterval) {
      // Mark at most one initial packet per baseCongestionMarkingInterval
      if (m_nMarkedSinceInMarkingState == 0) {
        m_nextMarkTime = now;
      }

      // Time to mark packet
      pkt.set<lp::CongestionMarkField>(1);
      ++nCongestionMarked;
      NFD_LOG_FACE_DEBUG("LpPacket was marked as congested");

      ++m_nMarkedSinceInMarkingState;
      // Decrease the marking interval by the inverse of the square root of the number of packets
      // marked in this incident of congestion
      m_nextMarkTime += time::nanoseconds(static_cast<time::nanoseconds::rep>(
                                            m_options.baseCongestionMarkingInterval.count() /
                                            std::sqrt(m_nMarkedSinceInMarkingState)));
      m_lastMarkTime = now;
    }
  }
  else if (m_nextMarkTime != time::steady_clock::TimePoint::max()) {
    // Congestion incident has ended, so reset
    NFD_LOG_FACE_DEBUG("Send queue length dropped below congestion threshold");
    m_nextMarkTime = time::steady_clock::TimePoint::max();
    m_nMarkedSinceInMarkingState = 0;
  }
}
/**
 * @given transaction field values and sample command values, reference tx
 * @when create transaction with sample command using transaction builder
 * @then transaction is built correctly
 */
TEST(ProtoTransaction, Builder) {
  iroha::protocol::Transaction proto_tx = generateEmptyTransaction();

  std::string account_id = "admin@test", asset_id = "coin#test",
              amount = "10.00";
  auto command =
      proto_tx.mutable_payload()->add_commands()->mutable_add_asset_quantity();

  command->CopyFrom(generateAddAssetQuantity(account_id, asset_id));

  auto keypair =
      shared_model::crypto::CryptoProviderEd25519Sha3::generateKeypair();
  auto signedProto = shared_model::crypto::CryptoSigner<>::sign(
      shared_model::crypto::Blob(proto_tx.payload().SerializeAsString()),
      keypair);

  auto sig = proto_tx.add_signatures();
  sig->set_pubkey(shared_model::crypto::toBinaryString(keypair.publicKey()));
  sig->set_signature(shared_model::crypto::toBinaryString(signedProto));

  auto tx = shared_model::proto::TransactionBuilder()
                .creatorAccountId(creator_account_id)
                .addAssetQuantity(account_id, asset_id, amount)
                .createdTime(created_time)
                .quorum(1)
                .build();

  auto signedTx = tx.signAndAddSignature(keypair).finish();
  auto &proto = signedTx.getTransport();

  ASSERT_EQ(proto_tx.SerializeAsString(), proto.SerializeAsString());
}
Exemple #5
0
    void ClientStub::flushBatch(unsigned int timeoutMs)
    {
        CurrentClientStubSentry sentry(*this);

        if (timeoutMs == 0)
        {
            timeoutMs = getRemoteCallTimeoutMs();
        }

        try
        {
            std::vector<ByteBuffer> buffers;
            buffers.push_back( ByteBuffer(mBatchBufferPtr) );
            int err = getTransport().send(*this, buffers, timeoutMs);
            RCF_UNUSED_VARIABLE(err);

            mBatchBufferPtr->resize(0);

            ++mBatchCount;
            mBatchMessageCount = 0;
        }
        catch(const RemoteException & e)
        {
            RCF_UNUSED_VARIABLE(e);
            mEncodedByteBuffers.resize(0);
            throw;
        }
        catch(...)
        {
            mEncodedByteBuffers.resize(0);
            disconnect();
            throw;
        }
    }
Exemple #6
0
/*  Description: Create a mamaPublisher then destroy it.  
 *
 *  Expected Result: MAMA_STATUS_OK
 */
TEST_F (MamaPublisherTestC, CreateDestroy)
{
    mamaPublisher    publisher = NULL;
    mamaTransport    tport     = NULL;
    const char*      source    = getSource();
   
    pubOnCreateCount = 0;
    pubOnErrorCount = 0;
    pubOnDestroyCount = 0;

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_allocate (&tport));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_create (tport, getTransport(), mBridge));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_create (&publisher, tport, source, NULL, NULL));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_destroy (publisher));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_destroy (tport));
}
Exemple #7
0
void EClientSocket::onSend()
{
	if( !handleSocketError())
		return;

	getTransport()->sendBufferedData();
}
TEST(H2ClientConnectionTest, ServerCloseSocketImmediate) {
  folly::SocketAddress saddr;
  saddr.setFromLocalPort(static_cast<uint16_t>(0));
  proxygen::HTTPServer::IPConfig cfg{saddr,
                                     proxygen::HTTPServer::Protocol::HTTP2};

  auto server =
      proxygen::ScopedHTTPServer::start(cfg, proxygen::HTTPServerOptions{});
  ASSERT_NE(nullptr, server);
  const auto port = server->getPort();
  ASSERT_NE(0, port);

  folly::EventBase evb;
  folly::SocketAddress addr;
  addr.setFromLocalPort(port);
  async::TAsyncSocket::UniquePtr sock(new async::TAsyncSocket(&evb, addr));
  auto conn = H2ClientConnection::newHTTP2Connection(std::move(sock));
  EXPECT_TRUE(conn->good());

  server.reset(); // server closes connection

  evb.loop();
  EXPECT_FALSE(conn->good());
  EXPECT_EQ(nullptr, conn->getTransport());
}
std::unique_ptr<folly::IOBuf>
HeaderServerChannel::removeFrame(IOBufQueue* q, size_t& remaining) {
  // removeHeader will set seqid in header_.
  // For older clients with seqid in the protocol, header_
  // will dig in to the protocol to get the seqid correctly.
  std::unique_ptr<folly::IOBuf> buf;
  try {
    buf = header_->removeHeader(q, remaining);
  } catch (const std::exception& e) {
    LOG(ERROR) << "Received invalid request from client: "
               << folly::exceptionStr(e) << " "
               << getTransportDebugString(getTransport());
    return buf;
  }
  if (!buf) {
    return buf;
  }
  if (!header_->isSupportedClient() &&
      header_->getClientType() != THRIFT_HEADER_SASL_CLIENT_TYPE) {
    LOG(ERROR) << "Server rejecting unsupported client type "
               << header_->getClientType();
    header_->checkSupportedClient();
  }

  // In order to allow negotiation to happen when the client requests
  // sasl but it's not supported, we don't throw an exception in the
  // sasl case.  Instead, we let the message bubble up, and check if
  // the client is supported in handleSecurityMessage called from the
  // messageReceived callback.

  return buf;
}
Exemple #10
0
/*  Description: Create a mamaPublisher and get its transport
 *
 *  Expected Result: MAMA_STATUS_OK
 */
TEST_F (MamaPublisherTestC, GetTransport)
{
    mamaPublisher    publisher = NULL;
    mamaTransport    tport     = NULL;
    const char*      symbol    = "SYM";
    const char*      source    = "SRC";
   
    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_allocate (&tport));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_create (tport, getTransport(), mBridge));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_create (&publisher, tport, symbol, source, NULL));

    ASSERT_EQ(tport, mamaPublisherImpl_getTransportImpl (publisher));

    ASSERT_EQ(tport, mamaPublisherImpl_getTransportImpl (publisher));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_destroy (publisher));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_destroy (tport));

    ASSERT_EQ (0, pubOnCreateCount);
    ASSERT_EQ (0, pubOnErrorCount);
    ASSERT_EQ (0, pubOnDestroyCount);
}
bool BlueCoreDeviceController::Implementation::isTransportReady( uint32 timeout )
{
    //  Are we connected at this instant?
    if ( !mTransportReady )
        mTransportReady = getTransport()->ready(timeout);

    return mTransportReady ;
}
Exemple #12
0
std::string ExecutionContext::getRequestUrl(size_t szLimit) {
  Transport* t = getTransport();
  std::string ret = t ? t->getUrl() : "";
  if (szLimit != std::string::npos) {
    ret = ret.substr(0, szLimit);
  }
  return ret;
}
Exemple #13
0
void
DummyClientFace::construct(const Options& options)
{
  static_pointer_cast<Transport>(getTransport())->onSendBlock.connect([this] (const Block& blockFromDaemon) {
    Block packet(blockFromDaemon);
    packet.encode();
    lp::Packet lpPacket(packet);

    Buffer::const_iterator begin, end;
    std::tie(begin, end) = lpPacket.get<lp::FragmentField>();
    Block block(&*begin, std::distance(begin, end));

    if (block.type() == tlv::Interest) {
      shared_ptr<Interest> interest = make_shared<Interest>(block);
      if (lpPacket.has<lp::NackField>()) {
        shared_ptr<lp::Nack> nack = make_shared<lp::Nack>(std::move(*interest));
        nack->setHeader(lpPacket.get<lp::NackField>());
        if (lpPacket.has<lp::NextHopFaceIdField>()) {
          nack->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
        }
        if (lpPacket.has<lp::CongestionMarkField>()) {
          nack->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
        }
        onSendNack(*nack);
      }
      else {
        if (lpPacket.has<lp::NextHopFaceIdField>()) {
          interest->setTag(make_shared<lp::NextHopFaceIdTag>(lpPacket.get<lp::NextHopFaceIdField>()));
        }
        if (lpPacket.has<lp::CongestionMarkField>()) {
          interest->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
        }
        onSendInterest(*interest);
      }
    }
    else if (block.type() == tlv::Data) {
      shared_ptr<Data> data = make_shared<Data>(block);

      if (lpPacket.has<lp::CachePolicyField>()) {
        data->setTag(make_shared<lp::CachePolicyTag>(lpPacket.get<lp::CachePolicyField>()));
      }
      if (lpPacket.has<lp::CongestionMarkField>()) {
        data->setTag(make_shared<lp::CongestionMarkTag>(lpPacket.get<lp::CongestionMarkField>()));
      }

      onSendData(*data);
    }
  });

  if (options.enablePacketLogging)
    this->enablePacketLogging();

  if (options.enableRegistrationReply)
    this->enableRegistrationReply();

  m_processEventsOverride = options.processEventsOverride;
}
bool HHVM_FUNCTION(fastcgi_finish_request) {
  auto context = g_context.getNoCheck();
  auto transport = context->getTransport();
  context->obFlushAll();
  String content = context->obDetachContents();
  transport->sendRaw((void*)content.data(), content.size());
  transport->onSendEnd();
  return true;
}
Exemple #15
0
void
DummyClientFace::receive(const Data& data)
{
  lp::Packet lpPacket(data.wireEncode());

  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, data);
  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, data);

  static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
}
Exemple #16
0
void
DummyClientFace::receive(const Interest& interest)
{
  lp::Packet lpPacket(interest.wireEncode());

  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, interest);
  addFieldFromTag<lp::NextHopFaceIdField, lp::NextHopFaceIdTag>(lpPacket, interest);
  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, interest);

  static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
}
void SMTPConnection::startTLS()
{
	try
	{
		sendRequest(SMTPCommand::STARTTLS());

		shared_ptr <SMTPResponse> resp = readResponse();

		if (resp->getCode() != 220)
		{
			throw SMTPCommandError("STARTTLS", resp->getText(),
				resp->getCode(), resp->getEnhancedCode());
		}

		shared_ptr <tls::TLSSession> tlsSession = tls::TLSSession::create
			(getTransport()->getCertificateVerifier(),
			 getTransport()->getSession()->getTLSProperties());

		shared_ptr <tls::TLSSocket> tlsSocket =
			tlsSession->getSocket(m_socket);

		tlsSocket->handshake();

		m_socket = tlsSocket;

		m_secured = true;
		m_cntInfos = make_shared <tls::TLSSecuredConnectionInfos>
			(m_cntInfos->getHost(), m_cntInfos->getPort(), tlsSession, tlsSocket);
	}
	catch (const exceptions::command_error&)
	{
		// Non-fatal error
		throw;
	}
	catch (...)
	{
		// Fatal error
		internalDisconnect();
		throw;
	}
}
Exemple #18
0
void
DummyClientFace::receive(const lp::Nack& nack)
{
  lp::Packet lpPacket;
  lpPacket.add<lp::NackField>(nack.getHeader());
  Block interest = nack.getInterest().wireEncode();
  lpPacket.add<lp::FragmentField>(make_pair(interest.begin(), interest.end()));

  addFieldFromTag<lp::IncomingFaceIdField, lp::IncomingFaceIdTag>(lpPacket, nack);
  addFieldFromTag<lp::CongestionMarkField, lp::CongestionMarkTag>(lpPacket, nack);

  static_pointer_cast<Transport>(getTransport())->receive(lpPacket.wireEncode());
}
Exemple #19
0
void MamaPublisherTest::SetUp(void)
{   
       // Save the this pointer in the member variable to get around gtest problems
       m_this = this;

       // Load the bridge
       m_bridge = Mama::loadBridge(getMiddleware());

       // Open mama
       Mama::open();

       // Transport
       transportName = getTransport();
    m_transport = new MamaTransport();
       m_transport->create(transportName, m_bridge);
}
Exemple #20
0
 void ClientStub::setTransportProtocol(TransportProtocol protocol)
 {
     if (mTransportProtocol != protocol)
     {
         mTransportProtocol = protocol;
         RcfSessionWeakPtr sessionWeakPtr = getTransport().getRcfSession();
         bool isRegularConnection = (sessionWeakPtr == RcfSessionWeakPtr());
         if (isRegularConnection)
         {
             disconnect();
             clearTransportFilters();
         }
         else
         {
             mSetTransportProtocol = true;
         }
     }
 }
Exemple #21
0
/*  Description: Create a mamaPublisher and mamaMsg, send the msg using 
 *               mamaPublisher then destroy both.
 *
 *  Expected Result: MAMA_STATUS_OK
 */
TEST_F (MamaPublisherTestC, Send)
{
    mamaPublisher    publisher = NULL;
    mamaTransport    tport     = NULL;
    const char*      symbol    = getSymbol();
    const char*      source    = getSource();
    mamaMsg          msg       = NULL;

    pubOnCreateCount = 0;
    pubOnErrorCount = 0;
    pubOnDestroyCount = 0;

    ASSERT_EQ (MAMA_STATUS_OK, mama_open());

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaMsg_create (&msg));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaMsg_addString (msg, symbol, 101, source));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_allocate (&tport));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_create (tport, getTransport(), mBridge));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_create (&publisher, tport, symbol, source, NULL));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_send (publisher, msg));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_destroy (publisher));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_destroy (tport));

    ASSERT_EQ (MAMA_STATUS_OK, mama_close());

    ASSERT_EQ (0, pubOnCreateCount);
    ASSERT_EQ (0, pubOnErrorCount);
    ASSERT_EQ (0, pubOnDestroyCount);
}
void Connection::negotiateCompleted(const NegotiateResponse* negotiateResponse, SignalException* error)
{
    if(!error)
    {
        if( !(negotiateResponse->protocolVersion == "1.3" || negotiateResponse->protocolVersion == "1.2") )
        {
            onError(SignalException("Invalid protocol version", SignalException::InvalidProtocolVersion));
            stop();
        }
        else
        {
            if(negotiateResponse->keepAliveTimeout > 0)
            {
                _keepAliveData = new KeepAliveData(negotiateResponse->keepAliveTimeout);
            }
            setConnectionState(*negotiateResponse);
            connect(_transport, SIGNAL(transportStarted(SignalException*)), this, SLOT(transportStarted(SignalException*)));
            getTransport()->start("");
        }
    }
    else
    {
        if(_autoReconnect)
bool BlueCoreDeviceController::Implementation::startTransport()
{
    return getTransport()->start();
}
Exemple #24
0
/*  Description: Create a mamaPublisher with event callbacks and mamaMsg, send the msg using 
 *               mamaPublisher then destroy both. A non-entitled source is used to generate
 *               publisher error events. But the callbacks are not set, so no callbacks 
 *               should be received.
 *
 *  Expected Result: MAMA_STATUS_OK
 */
TEST_F (MamaPublisherTestC, EventSendWithCallbacksNoCallbacks)
{
    mamaPublisher    publisher = NULL;
    mamaTransport    tport     = NULL;
    const char*      symbol    = getSymbol();
    const char*      source    = getBadSource();
    mamaMsg          msg       = NULL;
    mamaQueue        queue     = NULL;
    mamaPublisherCallbacks* cb = NULL;
    int              i         = 0;
    int              numErrors = 10;

    pubOnCreateCount = 0;
    pubOnErrorCount = 0;
    pubOnDestroyCount = 0;

    mamaPublisherCallbacks_allocate(&cb);
    cb->onError = NULL;
    cb->onCreate = NULL;
    cb->onDestroy = NULL;

    ASSERT_EQ (MAMA_STATUS_OK, mama_open());

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaMsg_create (&msg));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaMsg_addString (msg, symbol, 101, source));

    ASSERT_EQ (MAMA_STATUS_OK,
               mama_getDefaultEventQueue (mBridge, &queue));
 
    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_allocate (&tport));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_create (tport, getTransport(), mBridge));

    ASSERT_EQ (MAMA_STATUS_OK,
		mamaTransport_setTransportTopicCallback (tport, (mamaTransportTopicCB) transportTopicCb, NULL));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_createWithCallbacks (&publisher, tport, queue, symbol, source, NULL, cb, NULL));

    for (i = 0; i < numErrors; i++)
    {
        ASSERT_EQ (MAMA_STATUS_OK,
                   mamaPublisher_send (publisher, msg));
    }

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaPublisher_destroy (publisher));

    ASSERT_EQ (MAMA_STATUS_OK,
               mamaTransport_destroy (tport));

    ASSERT_EQ (MAMA_STATUS_OK, mama_close());

    ASSERT_EQ (0, pubOnCreateCount);
    ASSERT_EQ (0, pubOnErrorCount);
    ASSERT_EQ (0, pubOnDestroyCount);

    mamaPublisherCallbacks_deallocate(cb);
}
void BlueCoreDeviceController::Implementation::setDataWatch ( DataWatcher * w )
{
    getTransport()->setDataWatch ( w );
}
Exemple #26
0
bool EClientSocket::eConnectImpl(int clientId, bool extraAuth, ConnState* stateOutPt)
{
	// resolve host
	struct hostent* hostEnt = gethostbyname( host().c_str());
	if ( !hostEnt) {
		getWrapper()->error( NO_VALID_ID, CONNECT_FAIL.code(), CONNECT_FAIL.msg());
		return false;
	}

	// create socket
	m_fd = socket(AF_INET, SOCK_STREAM, 0);

	// cannot create socket
	if( m_fd < 0) {
		getWrapper()->error( NO_VALID_ID, FAIL_CREATE_SOCK.code(), FAIL_CREATE_SOCK.msg());
		return false;
	}

	// starting to connect to server
	struct sockaddr_in sa;
	memset( &sa, 0, sizeof(sa));
	sa.sin_family = AF_INET;
	sa.sin_port = htons( port());
	sa.sin_addr.s_addr = ((in_addr*)hostEnt->h_addr)->s_addr;

	// try to connect
	if( (connect( m_fd, (struct sockaddr *) &sa, sizeof( sa))) < 0) {
		// error connecting
		SocketClose( m_fd);
		m_fd = -1;
		getWrapper()->error( NO_VALID_ID, CONNECT_FAIL.code(), CONNECT_FAIL.msg());
		return false;
	}

    getTransport()->fd(m_fd);

	// set client id
	setClientId( clientId);
	setExtraAuth( extraAuth);

    int res = sendConnectRequest();

    if (res < 0 && !handleSocketError())
        return false;

	if( !isConnected()) {
		if( connState() != CS_DISCONNECTED) {
			assert( connState() == CS_REDIRECT);
			if( stateOutPt) {
				*stateOutPt = connState();
			}
			eDisconnect();
		}
		return false;
	}

	// set socket to non-blocking state
	if ( !SetSocketNonBlocking(m_fd)) {
	// error setting socket to non-blocking
		eDisconnect();
		getWrapper()->error( NO_VALID_ID, CONNECT_FAIL.code(), CONNECT_FAIL.msg());
		return false;
	}

	assert( connState() == CS_CONNECTED);
	if( stateOutPt) {
		*stateOutPt = connState();
	}
            
    if (!m_asyncEConnect) {
        EReader reader(this, m_pSignal);

        while (m_pSignal && !m_serverVersion && isSocketOK()) {
            reader.checkClient();
            m_pSignal->waitForSignal();
            reader.processMsgs();
        }
    }

	// successfully connected
	return isSocketOK();
}
Exemple #27
0
 IpClientTransport &ClientStub::getIpTransport()
 {
     return dynamic_cast<IpClientTransport &>(getTransport());
 }
Exemple #28
0
void ExternalUpdateManager::doProfileResync()
{
    getTransport()->sendProfileResync();
}
bool BlueCoreDeviceController_newStyle::Implementation::reconfigure_uart_baudrate(uint32 baudrate)
{
    return getTransport()->reconfigure_uart_baudrate(baudrate);
}
Exemple #30
0
ref <transport> session::getTransport(ref <security::authenticator> auth)
{
	return (getTransport(m_props["transport.protocol"], auth));
}