net: socket system, high level api
[quarnos.git] / resources / net / udp_client_socket.cpp
blobe9e2b53eb188b653d0aae1ab7d1a93e5a022f32e
1 #include "udp.h"
2 #include "udp_client_socket.h"
4 using namespace net;
6 void udp_client_socket::receive(const ipv4_addr &addr, u16 sender_port, const buffer &data) {
7 if (addr != server || sender_port != server_port)
8 return;
10 incoming_data.push(data.copy());
13 udp_client_socket::udp_client_socket(p<transport_layer> tl) : client_socket(tl) { }
15 udp_client_socket::~udp_client_socket() {
16 close();
19 void udp_client_socket::connect(const ipv4_addr &addr, int port) {
20 server = addr;
21 server_port = port;
23 client_port = down->acquire_port();
25 down.cast<udp>()->listen(client_port, udp::port_listener::method(this, &udp_client_socket::receive));
28 void udp_client_socket::write(const buffer &data) {
29 down.cast<udp>()->send(server, server_port, client_port, data);
32 void udp_client_socket::read(buffer &data) {
33 buffer buf = incoming_data.pop();
34 data.copy_data(buf);
37 void udp_client_socket::close() {
38 if (client_port != 0) {
39 down->release_port(client_port);
40 down.cast<udp>()->remove_listener(client_port, udp::port_listener::method(this, &udp_client_socket::receive));
41 client_port = 0;