#include <algorithm>
+#include "nacl_io/log.h"
#include "nacl_io/pepper_interface.h"
#include "nacl_io/socket/packet.h"
#include "nacl_io/socket/udp_event_emitter.h"
public:
explicit UdpRecvWork(const ScopedUdpEventEmitter& emitter)
: UdpWork(emitter) {
- data_ = new char[kMaxPacketSize];
}
- ~UdpRecvWork() { delete[] data_; }
-
virtual bool Start(int32_t val) {
AUTO_LOCK(emitter_->GetLock());
UdpNode* stream = static_cast<UdpNode*>(emitter_->stream());
if (length_error > 0) {
Packet* packet = new Packet(filesystem()->ppapi());
packet->Copy(data_, length_error, addr_);
+ filesystem()->ppapi()->ReleaseResource(addr_);
emitter_->WriteRXPacket_Locked(packet);
stream->ClearStreamFlags(SSF_RECVING);
stream->QueueInput();
}
private:
- char* data_;
+ char data_[kMaxPacketSize];
PP_Resource addr_;
};
SocketNode::Destroy();
}
-UdpEventEmitter* UdpNode::GetEventEmitter() { return emitter_.get(); }
+UdpEventEmitter* UdpNode::GetEventEmitter() {
+ return emitter_.get();
+}
Error UdpNode::Init(int open_flags) {
Error err = SocketNode::Init(open_flags);
if (err != 0)
return err;
- if (UDPInterface() == NULL)
+ if (UDPInterface() == NULL) {
+ LOG_ERROR("Got NULL interface: UDP");
return EACCES;
+ }
socket_resource_ =
UDPInterface()->Create(filesystem_->ppapi()->GetInstance());
- if (0 == socket_resource_)
+ if (0 == socket_resource_) {
+ LOG_ERROR("Unable to create UDP resource.");
return EACCES;
+ }
return 0;
}