You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
// Copyright (c) 2018 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "third_party/chromium_quic/demo/delegates.h"
|
|
|
|
#include <stdio.h>
|
|
|
|
UdpTransport::UdpTransport(int fd, struct sockaddr_in peer_address)
|
|
: fd_(fd), peer_address_(peer_address) {}
|
|
UdpTransport::~UdpTransport() = default;
|
|
|
|
int UdpTransport::Write(const char* buffer,
|
|
size_t buf_len,
|
|
const PacketInfo& info) {
|
|
printf("writing...\n");
|
|
return sendto(fd_, buffer, buf_len, 0, (struct sockaddr*)&peer_address_,
|
|
sizeof(peer_address_));
|
|
}
|
|
|
|
StreamDelegate::StreamDelegate() = default;
|
|
StreamDelegate::~StreamDelegate() = default;
|
|
|
|
void StreamDelegate::OnReceived(quic::QuartcStream* stream,
|
|
const char* data,
|
|
size_t size) {
|
|
if (!size) {
|
|
printf(" -- (fin)\n");
|
|
if (!stream->fin_sent()) {
|
|
stream->WriteMemSlices(quic::QuicMemSliceSpan(quic::QuicMemSliceSpanImpl(
|
|
nullptr, nullptr, 0)),
|
|
true);
|
|
}
|
|
} else {
|
|
printf(" :: %*s\n", (int)size, data);
|
|
}
|
|
}
|
|
|
|
void StreamDelegate::OnClose(quic::QuartcStream* stream) {
|
|
closed_ = true;
|
|
printf("stream closed\n");
|
|
}
|
|
|
|
void StreamDelegate::OnBufferChanged(quic::QuartcStream* stream) {}
|
|
|
|
SessionDelegate::SessionDelegate() = default;
|
|
SessionDelegate::~SessionDelegate() = default;
|
|
|
|
void SessionDelegate::OnCryptoHandshakeComplete() {
|
|
printf("crypto handshake complete\n");
|
|
}
|
|
|
|
void SessionDelegate::OnIncomingStream(quic::QuartcStream* stream) {
|
|
if (connection_closed_) {
|
|
return;
|
|
}
|
|
auto next_delegate = std::make_unique<StreamDelegate>();
|
|
stream->SetDelegate(next_delegate.get());
|
|
stream_delegates_.push_back(std::move(next_delegate));
|
|
}
|
|
|
|
void SessionDelegate::OnConnectionClosed(quic::QuicErrorCode error_code,
|
|
const quic::QuicString& error_details,
|
|
quic::ConnectionCloseSource source) {
|
|
connection_closed_ = true;
|
|
stream_delegates_.clear();
|
|
printf("connection closed: %s\n", error_details.c_str());
|
|
}
|
|
|
|
FakeTaskRunner::FakeTaskRunner(std::vector<FakeTask>* tasks) : tasks_(tasks) {}
|
|
FakeTaskRunner::~FakeTaskRunner() = default;
|
|
|
|
bool FakeTaskRunner::PostDelayedTask(const base::Location& whence,
|
|
base::OnceClosure task,
|
|
base::TimeDelta delay) {
|
|
tasks_->push_back({whence, std::move(task), delay});
|
|
return true;
|
|
}
|
|
|
|
bool FakeTaskRunner::RunsTasksInCurrentSequence() const {
|
|
return true;
|
|
}
|