From f49fc35f553d903f424804a9ce3e500f56d2ef5b Mon Sep 17 00:00:00 2001 From: goldsimon Date: Thu, 21 Jun 2007 19:32:26 +0000 Subject: [PATCH] Converted the length argument of netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into int to be able to send a bigger buffer than 64K with one time (mainly used from lwip_send). --- CHANGELOG | 6 ++++++ src/api/api_lib.c | 2 +- src/api/api_msg.c | 9 ++++++++- src/include/lwip/api.h | 4 ++-- src/include/lwip/api_msg.h | 2 +- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 555e899a..32585ebf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -19,6 +19,12 @@ HISTORY ++ New features: + 2007-06-21 Simon Goldschmidt + * api_lib.c, api_msg.c, api.h, api_msg.h: Converted the length argument of + netconn_write (and therefore also api_msg_msg.msg.w.len) from u16_t into + int to be able to send a bigger buffer than 64K with one time (mainly + used from lwip_send). + 2007-06-21 Simon Goldschmidt * tcp.h, api_msg.c: Moved the nagle algorithm from netconn_write/do_write into a define (tcp_output_nagle) in tcp.h to provide it to raw api users, too. diff --git a/src/api/api_lib.c b/src/api/api_lib.c index 3c0cd9b9..b718db5b 100644 --- a/src/api/api_lib.c +++ b/src/api/api_lib.c @@ -775,7 +775,7 @@ netconn_send(struct netconn *conn, struct netbuf *buf) * @return ERR_OK if data was sent, any other err_t on error */ err_t -netconn_write(struct netconn *conn, const void *dataptr, u16_t size, u8_t copy) +netconn_write(struct netconn *conn, const void *dataptr, int size, u8_t copy) { struct api_msg msg; diff --git a/src/api/api_msg.c b/src/api/api_msg.c index 56e26b09..77492eec 100644 --- a/src/api/api_msg.c +++ b/src/api/api_msg.c @@ -732,7 +732,14 @@ do_writemore(struct netconn *conn) LWIP_ASSERT("conn->state == NETCONN_WRITE", (conn->state == NETCONN_WRITE)); dataptr = (u8_t*)conn->write_msg->msg.w.dataptr + conn->write_offset; - len = conn->write_msg->msg.w.len - conn->write_offset; + if ((conn->write_msg->msg.w.len - conn->write_offset > 0xffff)) { /* max_u16_t */ + len = 0xffff; +#if LWIP_TCPIP_CORE_LOCKING + conn->write_delayed = 1; +#endif + } else { + len = conn->write_msg->msg.w.len - conn->write_offset; + } available = tcp_sndbuf(conn->pcb.tcp); if (available < len) { /* don't try to write more than sendbuf */ diff --git a/src/include/lwip/api.h b/src/include/lwip/api.h index 2f8819c8..7e61c227 100644 --- a/src/include/lwip/api.h +++ b/src/include/lwip/api.h @@ -123,7 +123,7 @@ struct netconn { struct api_msg_msg *write_msg; /** TCP: when data passed to netconn_write doesn't fit into the send buffer, this temporarily stores how much is already sent. */ - u16_t write_offset; + int write_offset; #if LWIP_TCPIP_CORE_LOCKING /** TCP: when data passed to netconn_write doesn't fit into the send buffer, this temporarily stores whether to wake up the original application task @@ -187,7 +187,7 @@ err_t netconn_sendto (struct netconn *conn, err_t netconn_send (struct netconn *conn, struct netbuf *buf); err_t netconn_write (struct netconn *conn, - const void *dataptr, u16_t size, + const void *dataptr, int size, u8_t copy); err_t netconn_close (struct netconn *conn); diff --git a/src/include/lwip/api_msg.h b/src/include/lwip/api_msg.h index 510acc22..c98f30e6 100644 --- a/src/include/lwip/api_msg.h +++ b/src/include/lwip/api_msg.h @@ -63,7 +63,7 @@ struct api_msg_msg { } bc; /* do_bind, do_connect */ struct { const void *dataptr; - u16_t len; + int len; u8_t copy; } w; /* do_write */ struct {