Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1648)

Unified Diff: net/quic/quic_server.h

Issue 340433002: Port QuicServer to Chrome network stack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix invalid memory access + blocked writers Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_server.h
diff --git a/net/tools/quic/quic_server.h b/net/quic/quic_server.h
similarity index 49%
copy from net/tools/quic/quic_server.h
copy to net/quic/quic_server.h
index 119fa78ee4e01352ad0f886843adab9759d9e9aa..788bb3c0463600a1fa7ff002a311dec9921fcc37 100644
--- a/net/tools/quic/quic_server.h
+++ b/net/quic/quic_server.h
@@ -5,31 +5,32 @@
// A toy server, which listens on a specified address for QUIC traffic and
// handles incoming responses.
-#ifndef NET_TOOLS_QUIC_QUIC_SERVER_H_
-#define NET_TOOLS_QUIC_QUIC_SERVER_H_
+#ifndef NET_QUIC_QUIC_SERVER_H_
+#define NET_QUIC_QUIC_SERVER_H_
#include "base/basictypes.h"
+#include "base/file_util.h"
wtc 2014/06/18 02:04:47 It doesn't seem necessary to include "base/file_ut
dmziegler 2014/06/18 20:13:41 Removed.
#include "base/memory/scoped_ptr.h"
+#include "net/base/io_buffer.h"
#include "net/base/ip_endpoint.h"
#include "net/quic/crypto/quic_crypto_server_config.h"
+#include "net/quic/quic_clock.h"
#include "net/quic/quic_config.h"
#include "net/quic/quic_framer.h"
wtc 2014/06/18 02:04:47 It doesn't seem necessary to include "net/quic/qui
dmziegler 2014/06/18 20:13:41 Removed.
-#include "net/tools/epoll_server/epoll_server.h"
-#include "net/tools/quic/quic_dispatcher.h"
namespace net {
-namespace tools {
namespace test {
class QuicServerPeer;
} // namespace test
+class QuicConnectionHelperInterface;
class QuicDispatcher;
+class UDPServerSocket;
-class QuicServer : public EpollCallbackInterface {
+class NET_EXPORT_PRIVATE QuicServer {
public:
- QuicServer();
QuicServer(const QuicConfig& config,
const QuicVersionVector& supported_versions,
uint32 server_initial_flow_control_receive_window);
@@ -39,31 +40,14 @@ class QuicServer : public EpollCallbackInterface {
// Start listening on the specified address.
bool Listen(const IPEndPoint& address);
- // Wait up to 50ms, and handle any events which occur.
- void WaitForEvents();
-
- // Server deletion is imminent. Start cleaning up the epoll server.
+ // Server deletion is imminent. Start cleaning up.
void Shutdown();
- // From EpollCallbackInterface
- virtual void OnRegistration(EpollServer* eps,
- int fd,
- int event_mask) OVERRIDE {}
- virtual void OnModification(int fd, int event_mask) OVERRIDE {}
- virtual void OnEvent(int fd, EpollEvent* event) OVERRIDE;
- virtual void OnUnregistration(int fd, bool replaced) OVERRIDE {}
-
- // Reads a packet from the given fd, and then passes it off to
- // the QuicDispatcher. Returns true if a packet is read, false
- // otherwise.
- // If packets_dropped is non-null, the socket is configured to track
- // dropped packets, and some packets are read, it will be set to the number of
- // dropped packets.
- static bool ReadAndDispatchSinglePacket(int fd, int port,
- QuicDispatcher* dispatcher,
- uint32* packets_dropped);
-
- virtual void OnShutdown(EpollServer* eps, int fd) OVERRIDE {}
+ void OnReadComplete(int result);
wtc 2014/06/18 02:04:47 Document this method.
dmziegler 2014/06/18 20:13:41 Done.
+
+ // Start reading on the socket. After each asynchronous read, OnReadComplete
+ // will call StartReading again.
+ void StartReading();
void SetStrikeRegisterNoStartupPeriod() {
crypto_config_.set_strike_register_no_startup_period();
@@ -75,40 +59,21 @@ class QuicServer : public EpollCallbackInterface {
crypto_config_.SetProofSource(source);
}
- bool overflow_supported() { return overflow_supported_; }
-
- uint32 packets_dropped() { return packets_dropped_; }
-
- int port() { return port_; }
-
private:
- friend class net::tools::test::QuicServerPeer;
+ friend class net::test::QuicServerPeer;
// Initialize the internal state of the server.
void Initialize();
// Accepts data from the framer and demuxes clients to sessions.
scoped_ptr<QuicDispatcher> dispatcher_;
- // Frames incoming packets and hands them to the dispatcher.
- EpollServer epoll_server_;
-
- // The port the server is listening on.
- int port_;
-
- // Listening connection. Also used for outbound client communication.
- int fd_;
- // If overflow_supported_ is true this will be the number of packets dropped
- // during the lifetime of the server. This may overflow if enough packets
- // are dropped.
- uint32 packets_dropped_;
+ QuicClock clock_;
- // True if the kernel supports SO_RXQ_OVFL, the number of packets dropped
- // because the socket would otherwise overflow.
- bool overflow_supported_;
+ QuicConnectionHelperInterface* helper_;
- // If true, use recvmmsg for reading.
- bool use_recvmmsg_;
+ // Listening connection. Also used for outbound client communication.
wtc 2014/06/18 02:04:47 "Listening connection" seems wrong. I think this s
dmziegler 2014/06/18 20:13:41 Done.
+ scoped_ptr<UDPServerSocket> socket_;
// config_ contains non-crypto parameters that are negotiated in the crypto
// handshake.
@@ -126,10 +91,21 @@ class QuicServer : public EpollCallbackInterface {
// connections.
uint32 server_initial_flow_control_receive_window_;
+ IPEndPoint server_address_;
wtc 2014/06/18 02:04:46 Add a comment. Perhaps adapting the original comme
dmziegler 2014/06/18 20:13:41 Done.
+
+ bool read_pending_;
+
+ int synchronous_read_count_;
+
+ scoped_refptr<IOBufferWithSize> read_buffer_;
+
+ IPEndPoint read_addr_;
+
+ base::WeakPtrFactory<QuicServer> weak_factory_;
wtc 2014/06/18 02:04:47 Except for weak_factory_, all the new data members
dmziegler 2014/06/18 20:13:41 Done.
+
DISALLOW_COPY_AND_ASSIGN(QuicServer);
};
-} // namespace tools
} // namespace net
-#endif // NET_TOOLS_QUIC_QUIC_SERVER_H_
+#endif // NET_QUIC_QUIC_SERVER_H_

Powered by Google App Engine
This is Rietveld 408576698