1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/tools/quic/quic_epoll_connection_helper.h"
8 #include <sys/socket.h>
10 #include "base/logging.h"
11 #include "base/stl_util.h"
12 #include "net/base/ip_endpoint.h"
13 #include "net/quic/crypto/quic_random.h"
14 #include "net/tools/epoll_server/epoll_server.h"
15 #include "net/tools/quic/quic_socket_utils.h"
22 class QuicEpollAlarm
: public QuicAlarm
{
24 QuicEpollAlarm(EpollServer
* epoll_server
,
25 QuicAlarm::Delegate
* delegate
)
26 : QuicAlarm(delegate
),
27 epoll_server_(epoll_server
),
28 epoll_alarm_impl_(this) {}
31 virtual void SetImpl() OVERRIDE
{
32 DCHECK(deadline().IsInitialized());
33 epoll_server_
->RegisterAlarm(
34 deadline().Subtract(QuicTime::Zero()).ToMicroseconds(),
38 virtual void CancelImpl() OVERRIDE
{
39 DCHECK(!deadline().IsInitialized());
40 epoll_alarm_impl_
.UnregisterIfRegistered();
44 class EpollAlarmImpl
: public EpollAlarm
{
46 explicit EpollAlarmImpl(QuicEpollAlarm
* alarm
) : alarm_(alarm
) {}
48 virtual int64
OnAlarm() OVERRIDE
{
49 EpollAlarm::OnAlarm();
51 // Fire will take care of registering the alarm, if needed.
56 QuicEpollAlarm
* alarm_
;
59 EpollServer
* epoll_server_
;
60 EpollAlarmImpl epoll_alarm_impl_
;
65 QuicEpollConnectionHelper::QuicEpollConnectionHelper(EpollServer
* epoll_server
)
66 : epoll_server_(epoll_server
),
68 random_generator_(QuicRandom::GetInstance()) {
71 QuicEpollConnectionHelper::~QuicEpollConnectionHelper() {
74 const QuicClock
* QuicEpollConnectionHelper::GetClock() const {
78 QuicRandom
* QuicEpollConnectionHelper::GetRandomGenerator() {
79 return random_generator_
;
82 QuicAlarm
* QuicEpollConnectionHelper::CreateAlarm(
83 QuicAlarm::Delegate
* delegate
) {
84 return new QuicEpollAlarm(epoll_server_
, delegate
);