15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/socket/udp_event_emitter.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/auto_lock.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)UdpEventEmitter::UdpEventEmitter(size_t rsize, size_t wsize)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : in_fifo_(rsize), out_fifo_(wsize) {
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Packet* UdpEventEmitter::ReadRXPacket_Locked() {
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Packet* packet = in_fifo_.ReadPacket();
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return packet;
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UdpEventEmitter::WriteRXPacket_Locked(Packet* packet) {
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  in_fifo_.WritePacket(packet);
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Packet* UdpEventEmitter::ReadTXPacket_Locked() {
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  Packet* packet = out_fifo_.ReadPacket();
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return packet;
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void UdpEventEmitter::WriteTXPacket_Locked(Packet* packet) {
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  out_fifo_.WritePacket(packet);
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
43