summaryrefslogtreecommitdiff
path: root/nuttx/net/send.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-11-05 23:04:16 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-11-05 23:04:16 +0000
commit13a1d731ec51a27983bc9e6fcaa841607a090764 (patch)
tree93b32ce5f98ff118a21eb072cf111e164fd38686 /nuttx/net/send.c
parent4cfb76d4d59acfdadc0f50527533b9c129edde41 (diff)
downloadpx4-nuttx-13a1d731ec51a27983bc9e6fcaa841607a090764.tar.gz
px4-nuttx-13a1d731ec51a27983bc9e6fcaa841607a090764.tar.bz2
px4-nuttx-13a1d731ec51a27983bc9e6fcaa841607a090764.zip
Basic TCP send functional
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@371 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/net/send.c')
-rw-r--r--nuttx/net/send.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/nuttx/net/send.c b/nuttx/net/send.c
index dc5dbc75b..07a3a0a72 100644
--- a/nuttx/net/send.c
+++ b/nuttx/net/send.c
@@ -42,8 +42,11 @@
#include <sys/types.h>
#include <sys/socket.h>
+
#include <string.h>
#include <errno.h>
+#include <debug.h>
+
#include <arch/irq.h>
#include "net-internal.h"
@@ -101,11 +104,13 @@ static void send_interrupt(struct uip_driver_s *dev, void *private)
struct send_s *pstate = (struct send_s *)private;
struct uip_conn *conn;
+ vdbg("Interrupt uip_flags: %02x state: %d\n", uip_flags, pstate->snd_state);
+
/* If the data has not been sent OR if it needs to be retransmitted,
* then send it now.
*/
- if (pstate->snd_state != STATE_DATA_SENT || uip_rexmit())
+ if (pstate->snd_state != STATE_DATA_SENT || uip_rexmit_event())
{
if (pstate->snd_buflen > uip_mss())
{
@@ -117,11 +122,12 @@ static void send_interrupt(struct uip_driver_s *dev, void *private)
}
pstate->snd_state = STATE_DATA_SENT;
+ vdbg("state: STATE_DATA_SENT(%d)\n", STATE_DATA_SENT);
}
/* Check if all data has been sent and acknowledged */
- else if (pstate->snd_state == STATE_DATA_SENT && uip_acked())
+ else if (pstate->snd_state == STATE_DATA_SENT && uip_ack_event())
{
/* Yes.. the data has been sent AND acknowledge */
@@ -136,9 +142,12 @@ static void send_interrupt(struct uip_driver_s *dev, void *private)
/* Send again on the next poll */
pstate->snd_state = STATE_POLLWAIT;
+ vdbg("state: STATE_POLLWAIT(%d)\n", STATE_POLLWAIT);
}
else
{
+ vdbg("state: Data sent\n");
+
/* All data has been sent */
pstate->snd_sent += pstate->snd_buflen;
@@ -163,6 +172,8 @@ static void send_interrupt(struct uip_driver_s *dev, void *private)
else if ((uip_flags & (UIP_CLOSE|UIP_ABORT|UIP_TIMEDOUT)) != 0)
{
+ vdbg("state: TCP failure\n");
+
/* Stop further callbacks */
conn = (struct uip_conn *)pstate->snd_sock->s_conn;
@@ -305,12 +316,14 @@ ssize_t send(int sockfd, const void *buf, size_t len, int flags)
* automatically re-enabled when the task restarts.
*/
+ vdbg("Sending %d bytes...\n", len);
ret = sem_wait(&state. snd_sem);
/* Make sure that no further interrupts are processed */
conn->data_private = NULL;
conn->data_event = NULL;
+ vdbg("Sent\n");
}
sem_destroy(&state. snd_sem);