#include "utcp_priv.h"
+#ifndef EBADMSG
+#define EBADMSG 104
+#endif
+
+#ifndef SHUT_RDWR
+#define SHUT_RDWR 2
+#endif
+
+#ifdef poll
+#undef poll
+#endif
+
+#ifndef timersub
+#define timersub(a, b, r) do {\
+ (r)->tv_sec = (a)->tv_sec - (b)->tv_sec;\
+ (r)->tv_usec = (a)->tv_usec - (b)->tv_usec;\
+ if((r)->tv_usec < 0)\
+ (r)->tv_sec--, (r)->tv_usec += 1000000;\
+} while (0)
+#endif
+
#ifdef UTCP_DEBUG
#include <stdarg.h>
return NULL;
c->recv = recv;
+ c->priv = priv;
struct hdr hdr;
retransmit(c);
}
+ if(c->poll && c->sndbufsize < c->maxsndbufsize / 2)
+ c->poll(c, c->maxsndbufsize - c->sndbufsize);
+
if(timerisset(&c->conn_timeout) && timercmp(&c->conn_timeout, &next, <))
next = c->conn_timeout;
return c->maxsndbufsize;
}
+size_t utcp_get_sndbuf_free(struct utcp_connection *c) {
+ return c->maxsndbufsize - c->sndbufsize;
+}
+
void utcp_set_sndbuf(struct utcp_connection *c, size_t size) {
c->maxsndbufsize = size;
if(c->maxsndbufsize != size)
size_t utcp_get_outq(struct utcp_connection *c) {
return seqdiff(c->snd.nxt, c->snd.una);
}
+
+void utcp_set_recv_cb(struct utcp_connection *c, utcp_recv_t recv) {
+ c->recv = recv;
+}
+
+void utcp_set_poll_cb(struct utcp_connection *c, utcp_poll_t poll) {
+ c->poll = poll;
+}