Commit e2fbdea1 authored by Andreas Schmidt's avatar Andreas Schmidt
Browse files

IP and port are return upon reception.

* Update examples.
parent 94baf44d
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -3,11 +3,12 @@ import prrt

port = int(sys.argv[1])

s = prrt.PrrtSocket(port=port, isSender=False)
s = prrt.PrrtSocket(port=port)

while True:
    d = s.recv()
    d, addr = s.recv()
    d = d.decode("utf8")
    if d != "Close":
        print d
        print(d, addr)
    else:
        break
+4 −3
Original line number Diff line number Diff line
@@ -3,10 +3,11 @@ import prrt

host = sys.argv[1]
port = int(sys.argv[2])
localport = int(sys.argv[3])

s = prrt.PrrtSocket(port=port, isSender=True)
s = prrt.PrrtSocket(port=localport)
s.connect(host, port)

for i in range(10):
    s.send("Packet {}".format(i))
s.send("Close")
    s.send("Packet {}".format(i).encode("utf8"))
s.send("Close".encode("utf8"))
+13 −7
Original line number Diff line number Diff line
include "posix/time.pxd"
include "sockets.pxd"

from libc.stdint cimport uint32_t, uint16_t, uint8_t, int32_t
from libc.string cimport const_char


cdef extern from "pthread.h" nogil:
    ctypedef struct pthread_t:
        pass
@@ -123,14 +125,14 @@ cdef extern from "proto/socket.h":
    int PrrtSocket_connect(PrrtSocket *sock_ptr, const_char *host, const uint16_t port)
    int PrrtSocket_send(PrrtSocket *sock_ptr, const uint8_t *data, const size_t data_len)

    int32_t PrrtSocket_recv(PrrtSocket *sock_ptr, void *buf_ptr) nogil
    int32_t PrrtSocket_receive_asap(PrrtSocket *s, void *buf_ptr) nogil
    int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr) nogil
    int32_t PrrtSocket_receive_asap_timedwait(PrrtSocket *s, void *buf_ptr, timespec* deadline) nogil
    int32_t PrrtSocket_recv(PrrtSocket *sock_ptr, void *buf_ptr, sockaddr* addr) nogil
    int32_t PrrtSocket_receive_asap(PrrtSocket *s, void *buf_ptr, sockaddr* addr) nogil
    int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr, sockaddr* addr) nogil
    int32_t PrrtSocket_receive_asap_timedwait(PrrtSocket *s, void *buf_ptr, sockaddr* addr, timespec* deadline) nogil

    int32_t PrrtSocket_receive_ordered(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us) nogil
    int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us) nogil
    int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us, timespec* deadline) nogil
    int32_t PrrtSocket_receive_ordered(PrrtSocket *s, void *buf_ptr, sockaddr* addr, prrtTimedelta_t time_window_us) nogil
    int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, sockaddr* addr, prrtTimedelta_t time_window_us) nogil
    int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, sockaddr* addr, prrtTimedelta_t time_window_us, timespec* deadline) nogil

    bint PrrtSocket_set_sock_opt(PrrtSocket *sock_ptr, const_char *name, const uint32_t value)
    uint32_t PrrtSocket_get_sock_opt(PrrtSocket *sock_ptr, const_char *name)
@@ -149,6 +151,9 @@ cdef extern from "proto/socket.h":
    bint PrrtSocket_get_app_limited(PrrtSocket *socket)
    bint PrrtSocket_enable_thread_pinning(PrrtSocket *socket)

    char *PrrtSocket_inet_ntoa(in_addr*)
    uint16_t PrrtSocket_ntohs(uint16_t v)

cdef extern from "proto/stores/packetDeliveryStore.h":
    ctypedef struct PrrtPacketDeliveryStore:
        pass
@@ -171,3 +176,4 @@ cdef extern from "util/pipe.h":
cdef extern from "util/mpsc_queue.h":
    ctypedef struct MPSCQueue:
        pass
+1 −0
Original line number Diff line number Diff line
@@ -303,6 +303,7 @@ void *receive_data_loop(void *ptr) {
        XlapTimeStampCycle(&tsph3, ts_any_packet, 0, DecodeEnd);
        prrtSequenceNumber_t seqno = packet->sequenceNumber;
        prrtTimestamp_t prrt_recv_timestamp = PrrtClock_TimespecToPrrtTimestamp(packet_recv_timestamp);
        memcpy(&packet->sender_addr, &remote, addrlen);

        prrtPacketType_t packetType = PrrtPacket_type(packet);
        debug(DEBUG_DATARECEIVER, "received packet %d:%u", (int) packetType, seqno);
+26 −16
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#include "types/packetTimeout.h"
#include "socket.h"

static inline prrtPacketLength_t deliver_packet(const PrrtSocket *s, void *buffer, PrrtPacket *packet) {
static inline prrtPacketLength_t deliver_packet(const PrrtSocket *s, void *buffer, PrrtPacket *packet, struct sockaddr* addr) {
    prrtPacketLength_t len = 0;
    if(packet != NULL) {
        XlapTimeStampClock(s, ts_data_packet, packet->sequenceNumber, PrrtReceivePackage);
@@ -29,6 +29,8 @@ static inline prrtPacketLength_t deliver_packet(const PrrtSocket *s, void *buffe
        PrrtPacket_copy_payload_to_buffer(buffer, packet, PRRT_PACKET_DATA_HEADER_SIZE);
        XlapTimeStampCycle(s, ts_data_packet, packet->sequenceNumber, CopyOutputEnd);

        memcpy(addr, &(packet->sender_addr), sizeof(struct sockaddr_in));

        XlapTimeStampClock(s, ts_data_packet, packet->sequenceNumber, PrrtDeliver);
        XlapTimeStampCycle(s, ts_data_packet, packet->sequenceNumber, PrrtDeliver);
        PrrtPacket_destroy(packet);
@@ -238,13 +240,13 @@ bool PrrtSocket_closing(PrrtSocket *s) {
    return atomic_load_explicit(&s->closing, memory_order_acquire);
}

int32_t PrrtSocket_receive_asap(PrrtSocket *s, void *buf_ptr) {
int32_t PrrtSocket_receive_asap(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr) {
    PrrtPacket *packet;
    packet = PrrtPacketDeliveryStore_get_packet(s->packetDeliveryStore, 0, MAX_TIMESTAMP);
    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}

int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr) {
int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr) {
    PrrtPacket *packet;
    do {
        packet = PrrtPacketDeliveryStore_get_packet_wait(s->packetDeliveryStore, 0, MAX_TIMESTAMP);
@@ -253,30 +255,30 @@ int32_t PrrtSocket_receive_asap_wait(PrrtSocket *s, void *buf_ptr) {
        }
    } while (!packet);

    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}

int32_t PrrtSocket_receive_asap_timedwait(PrrtSocket *s, void *buf_ptr, struct timespec* deadline) {
int32_t PrrtSocket_receive_asap_timedwait(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr, struct timespec* deadline) {
    PrrtPacket *packet = PrrtPacketDeliveryStore_get_packet_timedwait(s->packetDeliveryStore, 0, MAX_TIMESTAMP, deadline);
    if (packet == NULL && errno == ETIMEDOUT) {
        return -1 * ETIMEDOUT;
    }

    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}

int32_t PrrtSocket_recv(PrrtSocket *s, void *buf_ptr) {
    return PrrtSocket_receive_asap_wait(s, buf_ptr);
int32_t PrrtSocket_recv(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr) {
    return PrrtSocket_receive_asap_wait(s, buf_ptr, addr);
}

int32_t PrrtSocket_receive_ordered(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us) {
int32_t PrrtSocket_receive_ordered(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr, prrtTimedelta_t time_window_us) {
    prrtTimestamp_t now = PrrtClock_get_current_time_us();
    PrrtPacket *packet = PrrtPacketDeliveryStore_get_packet(s->packetDeliveryStore, now - time_window_us,
                                                            now + time_window_us);
    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}

int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us) {
int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr, prrtTimedelta_t time_window_us) {
    PrrtPacket *packet;
    do {
        prrtTimestamp_t now = PrrtClock_get_current_time_us();
@@ -287,10 +289,10 @@ int32_t PrrtSocket_receive_ordered_wait(PrrtSocket *s, void *buf_ptr, prrtTimede
        }
    } while (!packet);

    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}

int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, prrtTimedelta_t time_window_us, struct timespec* deadline) {
int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, struct sockaddr* addr, prrtTimedelta_t time_window_us, struct timespec* deadline) {
    prrtTimestamp_t now = PrrtClock_get_current_time_us();

    PrrtPacket *packet = PrrtPacketDeliveryStore_get_packet_timedwait(s->packetDeliveryStore, now - time_window_us,
@@ -299,7 +301,7 @@ int32_t PrrtSocket_receive_ordered_timedwait(PrrtSocket *s, void *buf_ptr, prrtT
        return -1 * ETIMEDOUT;
    }

    return deliver_packet(s, buf_ptr, packet);
    return deliver_packet(s, buf_ptr, packet, addr);
}


@@ -543,3 +545,11 @@ PrrtCoder *PrrtSocket_get_matching_coder(PrrtSocket *s, PrrtCodingConfiguration
    }
    return PrrtCoder_copy(s->coder);
};

char *PrrtSocket_inet_ntoa(struct in_addr* in) {
    return inet_ntoa(*in);
}

uint16_t PrrtSocket_ntohs(uint16_t v) {
    return ntohs(v);
}
 No newline at end of file
Loading