CJsonNode CReadJsonFromSocket::ReadMessage(CSocket& sock) { try { char read_buffer[READ_BUFFER_SIZE]; size_t bytes_read; do { s_ReadSocket(sock, read_buffer, READ_BUFFER_SIZE, &bytes_read); m_UTTPReader.SetNewBuffer(read_buffer, bytes_read); } while (!m_JSONReader.ReadMessage(m_UTTPReader)); } catch (...) { sock.Close(); throw; } if (m_UTTPReader.GetNextEvent() != CUTTPReader::eEndOfBuffer) { string server_address(sock.GetPeerAddress()); sock.Close(); NCBI_THROW_FMT(CNetStorageException, eIOError, "Extra bytes past message end while reading from " << server_address << " after receiving " << m_JSONReader.GetMessage().Repr() << '.'); } return m_JSONReader.GetMessage(); }
void run_server (Config const &config, Server *server) { grpc_check_init(); string server_address(config.get<string>("donkey.grpc.server.address", "0.0.0.0:50051")); DonkeyServiceImpl service(server); grpc::ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr<grpc::Server> grpc_server(builder.BuildAndStart()); LOG(info) << "Server listening on " << server_address; grpc_server->Wait(); grpc_check_shutdown(); }
int main() { std::string server_address("0.0.0.0:50051"); GreeterServiceImpl service; grpc::ServerBuilder builder; builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); builder.RegisterService(&service); std::unique_ptr<grpc::Server> server(builder.BuildAndStart()); std::cout << "Server listening on " << server_address << std::endl; server->Wait(); return 0; }
/* * Open a connection to the server. */ TCPSocket *ConnectToServer(unsigned short port) { ola::network::IPV4SocketAddress server_address( ola::network::IPV4Address::Loopback(), port); TCPSocket *socket = TCPSocket::Connect(server_address); if (socket) return socket; OLA_INFO << "Attempting to start olad"; pid_t pid = fork(); if (pid < 0) { OLA_WARN << "Could not fork: " << strerror(errno); return NULL; } else if (pid == 0) { // fork again so the parent can call waitpid immediately. pid_t pid = fork(); if (pid < 0) { OLA_WARN << "Could not fork: " << strerror(errno); _exit(1); } else if (pid > 0) { _exit(0); } // Try to start the server, we pass -f (fork into background) and -s (log // to syslog). execlp("olad", "olad", "-f", "-s", NULL); OLA_WARN << "Failed to exec: " << strerror(errno); _exit(1); } if (waitpid(pid, NULL, 0) != pid) OLA_WARN << "waitpid error: " << strerror(errno); // wait a bit here for the server to come up sleep(1); return TCPSocket::Connect(server_address); }
void GRPCServer::setup_port(grpc::ServerBuilder &builder) { std::string server_address("0.0.0.0:50051"); builder.AddListeningPort(server_address, grpc::InsecureServerCredentials()); LogInfo() << "Server set to listen on " << server_address; }
void TestConnection::testConnectSendReceive() { DSTACK("TestConnection::Run"); /* Test some real connections NOTE: This mostly tests the legacy interface. */ u32 proto_id = 0xad26846a; Handler hand_server("server"); Handler hand_client("client"); Address address(0, 0, 0, 0, 30001); Address bind_addr(0, 0, 0, 0, 30001); /* * Try to use the bind_address for servers with no localhost address * For example: FreeBSD jails */ std::string bind_str = g_settings->get("bind_address"); try { bind_addr.Resolve(bind_str.c_str()); if (!bind_addr.isIPv6()) { address = bind_addr; } } catch (ResolveError &e) { } infostream << "** Creating server Connection" << std::endl; con::Connection server(proto_id, 512, 5.0, false, &hand_server); server.Serve(address); infostream << "** Creating client Connection" << std::endl; con::Connection client(proto_id, 512, 5.0, false, &hand_client); UASSERT(hand_server.count == 0); UASSERT(hand_client.count == 0); sleep_ms(50); Address server_address(127, 0, 0, 1, 30001); if (address != Address(0, 0, 0, 0, 30001)) { server_address = bind_addr; } infostream << "** running client.Connect()" << std::endl; client.Connect(server_address); sleep_ms(50); // Client should not have added client yet UASSERT(hand_client.count == 0); try { NetworkPacket pkt; infostream << "** running client.Receive()" << std::endl; client.Receive(&pkt); infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } // Client should have added server now UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); // Server should not have added client yet UASSERT(hand_server.count == 0); sleep_ms(100); try { NetworkPacket pkt; infostream << "** running server.Receive()" << std::endl; server.Receive(&pkt); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { // No actual data received, but the client has // probably been connected } // Client should be the same UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); // Server should have the client UASSERT(hand_server.count == 1); UASSERT(hand_server.last_id == 2); //sleep_ms(50); while (client.Connected() == false) { try { NetworkPacket pkt; infostream << "** running client.Receive()" << std::endl; client.Receive(&pkt); infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } sleep_ms(50); } sleep_ms(50); try { NetworkPacket pkt; infostream << "** running server.Receive()" << std::endl; server.Receive(&pkt); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } /* Simple send-receive test */ { NetworkPacket pkt; pkt.putRawPacket((u8*) "Hello World !", 14, 0); Buffer<u8> sentdata = pkt.oldForgePacket(); infostream<<"** running client.Send()"<<std::endl; client.Send(PEER_ID_SERVER, 0, &pkt, true); sleep_ms(50); NetworkPacket recvpacket; infostream << "** running server.Receive()" << std::endl; server.Receive(&recvpacket); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << ", data=" << (const char*)pkt.getU8Ptr(0) << std::endl; Buffer<u8> recvdata = pkt.oldForgePacket(); UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); } u16 peer_id_client = 2; /* Send a large packet */ { const int datasize = 30000; NetworkPacket pkt(0, datasize); for (u16 i=0; i<datasize; i++) { pkt << (u8) i/4; } infostream << "Sending data (size=" << datasize << "):"; for (int i = 0; i < datasize && i < 20; i++) { if (i % 2 == 0) infostream << " "; char buf[10]; snprintf(buf, 10, "%.2X", ((int)((const char *)pkt.getU8Ptr(0))[i]) & 0xff); infostream<<buf; } if (datasize > 20) infostream << "..."; infostream << std::endl; Buffer<u8> sentdata = pkt.oldForgePacket(); server.Send(peer_id_client, 0, &pkt, true); //sleep_ms(3000); Buffer<u8> recvdata; infostream << "** running client.Receive()" << std::endl; u16 peer_id = 132; u16 size = 0; bool received = false; u32 timems0 = porting::getTimeMs(); for (;;) { if (porting::getTimeMs() - timems0 > 5000 || received) break; try { NetworkPacket pkt; client.Receive(&pkt); size = pkt.getSize(); peer_id = pkt.getPeerId(); recvdata = pkt.oldForgePacket(); received = true; } catch (con::NoIncomingDataException &e) { } sleep_ms(10); } UASSERT(received); infostream << "** Client received: peer_id=" << peer_id << ", size=" << size << std::endl; infostream << "Received data (size=" << size << "): "; for (int i = 0; i < size && i < 20; i++) { if (i % 2 == 0) infostream << " "; char buf[10]; snprintf(buf, 10, "%.2X", ((int)(recvdata[i])) & 0xff); infostream << buf; } if (size > 20) infostream << "..."; infostream << std::endl; UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); UASSERT(peer_id == PEER_ID_SERVER); } // Check peer handlers UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); UASSERT(hand_server.count == 1); UASSERT(hand_server.last_id == 2); }
void Run() { DSTACK("TestConnection::Run"); TestHelpers(); /* Test some real connections */ u32 proto_id = 0xad26846a; Handler hand_server("server"); Handler hand_client("client"); infostream<<"** Creating server Connection"<<std::endl; con::Connection server(proto_id, 512, 5.0, &hand_server); server.Serve(30001); infostream<<"** Creating client Connection"<<std::endl; con::Connection client(proto_id, 512, 5.0, &hand_client); assert(hand_server.count == 0); assert(hand_client.count == 0); sleep_ms(50); Address server_address(127,0,0,1, 30001); infostream<<"** running client.Connect()"<<std::endl; client.Connect(server_address); sleep_ms(50); // Client should have added server now assert(hand_client.count == 1); assert(hand_client.last_id == 1); // But server should not have added client assert(hand_server.count == 0); try { u16 peer_id; u8 data[100]; infostream<<"** running server.Receive()"<<std::endl; u32 size = server.Receive(peer_id, data, 100); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<std::endl; } catch(con::NoIncomingDataException &e) { // No actual data received, but the client has // probably been connected } // Client should be the same assert(hand_client.count == 1); assert(hand_client.last_id == 1); // Server should have the client assert(hand_server.count == 1); assert(hand_server.last_id == 2); //sleep_ms(50); while(client.Connected() == false) { try { u16 peer_id; u8 data[100]; infostream<<"** running client.Receive()"<<std::endl; u32 size = client.Receive(peer_id, data, 100); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<std::endl; } catch(con::NoIncomingDataException &e) { } sleep_ms(50); } sleep_ms(50); try { u16 peer_id; u8 data[100]; infostream<<"** running server.Receive()"<<std::endl; u32 size = server.Receive(peer_id, data, 100); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<std::endl; } catch(con::NoIncomingDataException &e) { } { /*u8 data[] = "Hello World!"; u32 datasize = sizeof(data);*/ SharedBuffer<u8> data = SharedBufferFromString("Hello World!"); infostream<<"** running client.Send()"<<std::endl; client.Send(PEER_ID_SERVER, 0, data, true); sleep_ms(50); u16 peer_id; u8 recvdata[100]; infostream<<"** running server.Receive()"<<std::endl; u32 size = server.Receive(peer_id, recvdata, 100); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<", data="<<*data <<std::endl; assert(memcmp(*data, recvdata, data.getSize()) == 0); } u16 peer_id_client = 2; { /* Send consequent packets in different order */ //u8 data1[] = "hello1"; //u8 data2[] = "hello2"; SharedBuffer<u8> data1 = SharedBufferFromString("hello1"); SharedBuffer<u8> data2 = SharedBufferFromString("Hello2"); Address client_address = server.GetPeer(peer_id_client)->address; infostream<<"*** Sending packets in wrong order (2,1,2)" <<std::endl; u8 chn = 0; con::Channel *ch = &server.GetPeer(peer_id_client)->channels[chn]; u16 sn = ch->next_outgoing_seqnum; ch->next_outgoing_seqnum = sn+1; server.Send(peer_id_client, chn, data2, true); ch->next_outgoing_seqnum = sn; server.Send(peer_id_client, chn, data1, true); ch->next_outgoing_seqnum = sn+1; server.Send(peer_id_client, chn, data2, true); sleep_ms(50); infostream<<"*** Receiving the packets"<<std::endl; u16 peer_id; u8 recvdata[20]; u32 size; infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; size = client.Receive(peer_id, recvdata, 20); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<", data="<<recvdata <<std::endl; assert(size == data1.getSize()); assert(memcmp(*data1, recvdata, data1.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; size = client.Receive(peer_id, recvdata, 20); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<", data="<<recvdata <<std::endl; assert(size == data2.getSize()); assert(memcmp(*data2, recvdata, data2.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); bool got_exception = false; try { infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; size = client.Receive(peer_id, recvdata, 20); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<", data="<<recvdata <<std::endl; } catch(con::NoIncomingDataException &e) { infostream<<"** No incoming data for client"<<std::endl; got_exception = true; } assert(got_exception); } { const int datasize = 30000; SharedBuffer<u8> data1(datasize); for(u16 i=0; i<datasize; i++){ data1[i] = i/4; } infostream<<"Sending data (size="<<datasize<<"):"; for(int i=0; i<datasize && i<20; i++){ if(i%2==0) DEBUGPRINT(" "); DEBUGPRINT("%.2X", ((int)((const char*)*data1)[i])&0xff); } if(datasize>20) infostream<<"..."; infostream<<std::endl; server.Send(peer_id_client, 0, data1, true); sleep_ms(50); u8 recvdata[datasize + 1000]; infostream<<"** running client.Receive()"<<std::endl; u16 peer_id = 132; u16 size = client.Receive(peer_id, recvdata, datasize + 1000); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<std::endl; infostream<<"Received data (size="<<size<<"):"; for(int i=0; i<size && i<20; i++){ if(i%2==0) DEBUGPRINT(" "); DEBUGPRINT("%.2X", ((int)((const char*)recvdata)[i])&0xff); } if(size>20) infostream<<"..."; infostream<<std::endl; assert(memcmp(*data1, recvdata, data1.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); } // Check peer handlers assert(hand_client.count == 1); assert(hand_client.last_id == 1); assert(hand_server.count == 1); assert(hand_server.last_id == 2); //assert(0); }