These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Committer:
frank26080115
Date:
Sun Mar 20 05:38:56 2011 +0000
Revision:
0:bf7b9fba3924

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:bf7b9fba3924 1 /*
frank26080115 0:bf7b9fba3924 2 * Copyright (c) 2003, Adam Dunkels.
frank26080115 0:bf7b9fba3924 3 * All rights reserved.
frank26080115 0:bf7b9fba3924 4 *
frank26080115 0:bf7b9fba3924 5 * Redistribution and use in source and binary forms, with or without
frank26080115 0:bf7b9fba3924 6 * modification, are permitted provided that the following conditions
frank26080115 0:bf7b9fba3924 7 * are met:
frank26080115 0:bf7b9fba3924 8 * 1. Redistributions of source code must retain the above copyright
frank26080115 0:bf7b9fba3924 9 * notice, this list of conditions and the following disclaimer.
frank26080115 0:bf7b9fba3924 10 * 2. Redistributions in binary form must reproduce the above copyright
frank26080115 0:bf7b9fba3924 11 * notice, this list of conditions and the following disclaimer in the
frank26080115 0:bf7b9fba3924 12 * documentation and/or other materials provided with the distribution.
frank26080115 0:bf7b9fba3924 13 * 3. The name of the author may not be used to endorse or promote
frank26080115 0:bf7b9fba3924 14 * products derived from this software without specific prior
frank26080115 0:bf7b9fba3924 15 * written permission.
frank26080115 0:bf7b9fba3924 16 *
frank26080115 0:bf7b9fba3924 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
frank26080115 0:bf7b9fba3924 18 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
frank26080115 0:bf7b9fba3924 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
frank26080115 0:bf7b9fba3924 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
frank26080115 0:bf7b9fba3924 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
frank26080115 0:bf7b9fba3924 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
frank26080115 0:bf7b9fba3924 23 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
frank26080115 0:bf7b9fba3924 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
frank26080115 0:bf7b9fba3924 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
frank26080115 0:bf7b9fba3924 26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
frank26080115 0:bf7b9fba3924 27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
frank26080115 0:bf7b9fba3924 28 *
frank26080115 0:bf7b9fba3924 29 * This file is part of the uIP TCP/IP stack
frank26080115 0:bf7b9fba3924 30 *
frank26080115 0:bf7b9fba3924 31 * $Id: telnetd.c,v 1.2 2006/06/07 09:43:54 adam Exp $
frank26080115 0:bf7b9fba3924 32 *
frank26080115 0:bf7b9fba3924 33 */
frank26080115 0:bf7b9fba3924 34
frank26080115 0:bf7b9fba3924 35 #include "uip.h"
frank26080115 0:bf7b9fba3924 36 #include "telnetd.h"
frank26080115 0:bf7b9fba3924 37 #include "memb.h"
frank26080115 0:bf7b9fba3924 38 #include "shell.h"
frank26080115 0:bf7b9fba3924 39
frank26080115 0:bf7b9fba3924 40 #include <string.h>
frank26080115 0:bf7b9fba3924 41
frank26080115 0:bf7b9fba3924 42 #define ISO_nl 0x0a
frank26080115 0:bf7b9fba3924 43 #define ISO_cr 0x0d
frank26080115 0:bf7b9fba3924 44
frank26080115 0:bf7b9fba3924 45 struct telnetd_line {
frank26080115 0:bf7b9fba3924 46 char line[TELNETD_CONF_LINELEN];
frank26080115 0:bf7b9fba3924 47 };
frank26080115 0:bf7b9fba3924 48 MEMB(linemem, struct telnetd_line, TELNETD_CONF_NUMLINES);
frank26080115 0:bf7b9fba3924 49
frank26080115 0:bf7b9fba3924 50 #define STATE_NORMAL 0
frank26080115 0:bf7b9fba3924 51 #define STATE_IAC 1
frank26080115 0:bf7b9fba3924 52 #define STATE_WILL 2
frank26080115 0:bf7b9fba3924 53 #define STATE_WONT 3
frank26080115 0:bf7b9fba3924 54 #define STATE_DO 4
frank26080115 0:bf7b9fba3924 55 #define STATE_DONT 5
frank26080115 0:bf7b9fba3924 56 #define STATE_CLOSE 6
frank26080115 0:bf7b9fba3924 57
frank26080115 0:bf7b9fba3924 58 static struct telnetd_state s;
frank26080115 0:bf7b9fba3924 59
frank26080115 0:bf7b9fba3924 60 #define TELNET_IAC 255
frank26080115 0:bf7b9fba3924 61 #define TELNET_WILL 251
frank26080115 0:bf7b9fba3924 62 #define TELNET_WONT 252
frank26080115 0:bf7b9fba3924 63 #define TELNET_DO 253
frank26080115 0:bf7b9fba3924 64 #define TELNET_DONT 254
frank26080115 0:bf7b9fba3924 65 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 66 static char *
frank26080115 0:bf7b9fba3924 67 alloc_line(void)
frank26080115 0:bf7b9fba3924 68 {
frank26080115 0:bf7b9fba3924 69 return memb_alloc(&linemem);
frank26080115 0:bf7b9fba3924 70 }
frank26080115 0:bf7b9fba3924 71 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 72 static void
frank26080115 0:bf7b9fba3924 73 dealloc_line(char *line)
frank26080115 0:bf7b9fba3924 74 {
frank26080115 0:bf7b9fba3924 75 memb_free(&linemem, line);
frank26080115 0:bf7b9fba3924 76 }
frank26080115 0:bf7b9fba3924 77 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 78 void
frank26080115 0:bf7b9fba3924 79 shell_quit(char *str)
frank26080115 0:bf7b9fba3924 80 {
frank26080115 0:bf7b9fba3924 81 s.state = STATE_CLOSE;
frank26080115 0:bf7b9fba3924 82 }
frank26080115 0:bf7b9fba3924 83 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 84 static void
frank26080115 0:bf7b9fba3924 85 sendline(char *line)
frank26080115 0:bf7b9fba3924 86 {
frank26080115 0:bf7b9fba3924 87 static unsigned int i;
frank26080115 0:bf7b9fba3924 88
frank26080115 0:bf7b9fba3924 89 for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
frank26080115 0:bf7b9fba3924 90 if(s.lines[i] == NULL) {
frank26080115 0:bf7b9fba3924 91 s.lines[i] = line;
frank26080115 0:bf7b9fba3924 92 break;
frank26080115 0:bf7b9fba3924 93 }
frank26080115 0:bf7b9fba3924 94 }
frank26080115 0:bf7b9fba3924 95 if(i == TELNETD_CONF_NUMLINES) {
frank26080115 0:bf7b9fba3924 96 dealloc_line(line);
frank26080115 0:bf7b9fba3924 97 }
frank26080115 0:bf7b9fba3924 98 }
frank26080115 0:bf7b9fba3924 99 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 100 void
frank26080115 0:bf7b9fba3924 101 shell_prompt(char *str)
frank26080115 0:bf7b9fba3924 102 {
frank26080115 0:bf7b9fba3924 103 char *line;
frank26080115 0:bf7b9fba3924 104 line = alloc_line();
frank26080115 0:bf7b9fba3924 105 if(line != NULL) {
frank26080115 0:bf7b9fba3924 106 strncpy(line, str, TELNETD_CONF_LINELEN);
frank26080115 0:bf7b9fba3924 107 /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
frank26080115 0:bf7b9fba3924 108 sendline(line);
frank26080115 0:bf7b9fba3924 109 }
frank26080115 0:bf7b9fba3924 110 }
frank26080115 0:bf7b9fba3924 111 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 112 void
frank26080115 0:bf7b9fba3924 113 shell_output(char *str1, char *str2)
frank26080115 0:bf7b9fba3924 114 {
frank26080115 0:bf7b9fba3924 115 static unsigned len;
frank26080115 0:bf7b9fba3924 116 char *line;
frank26080115 0:bf7b9fba3924 117
frank26080115 0:bf7b9fba3924 118 line = alloc_line();
frank26080115 0:bf7b9fba3924 119 if(line != NULL) {
frank26080115 0:bf7b9fba3924 120 len = strlen(str1);
frank26080115 0:bf7b9fba3924 121 strncpy(line, str1, TELNETD_CONF_LINELEN);
frank26080115 0:bf7b9fba3924 122 if(len < TELNETD_CONF_LINELEN) {
frank26080115 0:bf7b9fba3924 123 strncpy(line + len, str2, TELNETD_CONF_LINELEN - len);
frank26080115 0:bf7b9fba3924 124 }
frank26080115 0:bf7b9fba3924 125 len = strlen(line);
frank26080115 0:bf7b9fba3924 126 if(len < TELNETD_CONF_LINELEN - 2) {
frank26080115 0:bf7b9fba3924 127 line[len] = ISO_cr;
frank26080115 0:bf7b9fba3924 128 line[len+1] = ISO_nl;
frank26080115 0:bf7b9fba3924 129 line[len+2] = 0;
frank26080115 0:bf7b9fba3924 130 }
frank26080115 0:bf7b9fba3924 131 /* petsciiconv_toascii(line, TELNETD_CONF_LINELEN);*/
frank26080115 0:bf7b9fba3924 132 sendline(line);
frank26080115 0:bf7b9fba3924 133 }
frank26080115 0:bf7b9fba3924 134 }
frank26080115 0:bf7b9fba3924 135 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 136 void
frank26080115 0:bf7b9fba3924 137 telnetd_init(void)
frank26080115 0:bf7b9fba3924 138 {
frank26080115 0:bf7b9fba3924 139 uip_listen(HTONS(23));
frank26080115 0:bf7b9fba3924 140 memb_init(&linemem);
frank26080115 0:bf7b9fba3924 141 shell_init();
frank26080115 0:bf7b9fba3924 142 }
frank26080115 0:bf7b9fba3924 143 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 144 static void
frank26080115 0:bf7b9fba3924 145 acked(void)
frank26080115 0:bf7b9fba3924 146 {
frank26080115 0:bf7b9fba3924 147 static unsigned int i;
frank26080115 0:bf7b9fba3924 148
frank26080115 0:bf7b9fba3924 149 while(s.numsent > 0) {
frank26080115 0:bf7b9fba3924 150 dealloc_line(s.lines[0]);
frank26080115 0:bf7b9fba3924 151 for(i = 1; i < TELNETD_CONF_NUMLINES; ++i) {
frank26080115 0:bf7b9fba3924 152 s.lines[i - 1] = s.lines[i];
frank26080115 0:bf7b9fba3924 153 }
frank26080115 0:bf7b9fba3924 154 s.lines[TELNETD_CONF_NUMLINES - 1] = NULL;
frank26080115 0:bf7b9fba3924 155 --s.numsent;
frank26080115 0:bf7b9fba3924 156 }
frank26080115 0:bf7b9fba3924 157 }
frank26080115 0:bf7b9fba3924 158 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 159 static void
frank26080115 0:bf7b9fba3924 160 senddata(void)
frank26080115 0:bf7b9fba3924 161 {
frank26080115 0:bf7b9fba3924 162 static char *bufptr, *lineptr;
frank26080115 0:bf7b9fba3924 163 static int buflen, linelen;
frank26080115 0:bf7b9fba3924 164
frank26080115 0:bf7b9fba3924 165 bufptr = uip_appdata;
frank26080115 0:bf7b9fba3924 166 buflen = 0;
frank26080115 0:bf7b9fba3924 167 for(s.numsent = 0; s.numsent < TELNETD_CONF_NUMLINES &&
frank26080115 0:bf7b9fba3924 168 s.lines[s.numsent] != NULL ; ++s.numsent) {
frank26080115 0:bf7b9fba3924 169 lineptr = s.lines[s.numsent];
frank26080115 0:bf7b9fba3924 170 linelen = strlen(lineptr);
frank26080115 0:bf7b9fba3924 171 if(linelen > TELNETD_CONF_LINELEN) {
frank26080115 0:bf7b9fba3924 172 linelen = TELNETD_CONF_LINELEN;
frank26080115 0:bf7b9fba3924 173 }
frank26080115 0:bf7b9fba3924 174 if(buflen + linelen < uip_mss()) {
frank26080115 0:bf7b9fba3924 175 memcpy(bufptr, lineptr, linelen);
frank26080115 0:bf7b9fba3924 176 bufptr += linelen;
frank26080115 0:bf7b9fba3924 177 buflen += linelen;
frank26080115 0:bf7b9fba3924 178 } else {
frank26080115 0:bf7b9fba3924 179 break;
frank26080115 0:bf7b9fba3924 180 }
frank26080115 0:bf7b9fba3924 181 }
frank26080115 0:bf7b9fba3924 182 uip_send(uip_appdata, buflen);
frank26080115 0:bf7b9fba3924 183 }
frank26080115 0:bf7b9fba3924 184 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 185 static void
frank26080115 0:bf7b9fba3924 186 closed(void)
frank26080115 0:bf7b9fba3924 187 {
frank26080115 0:bf7b9fba3924 188 static unsigned int i;
frank26080115 0:bf7b9fba3924 189
frank26080115 0:bf7b9fba3924 190 for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
frank26080115 0:bf7b9fba3924 191 if(s.lines[i] != NULL) {
frank26080115 0:bf7b9fba3924 192 dealloc_line(s.lines[i]);
frank26080115 0:bf7b9fba3924 193 }
frank26080115 0:bf7b9fba3924 194 }
frank26080115 0:bf7b9fba3924 195 }
frank26080115 0:bf7b9fba3924 196 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 197 static void
frank26080115 0:bf7b9fba3924 198 get_char(u8_t c)
frank26080115 0:bf7b9fba3924 199 {
frank26080115 0:bf7b9fba3924 200 if(c == ISO_cr) {
frank26080115 0:bf7b9fba3924 201 return;
frank26080115 0:bf7b9fba3924 202 }
frank26080115 0:bf7b9fba3924 203
frank26080115 0:bf7b9fba3924 204 s.buf[(int)s.bufptr] = c;
frank26080115 0:bf7b9fba3924 205 if(s.buf[(int)s.bufptr] == ISO_nl ||
frank26080115 0:bf7b9fba3924 206 s.bufptr == sizeof(s.buf) - 1) {
frank26080115 0:bf7b9fba3924 207 if(s.bufptr > 0) {
frank26080115 0:bf7b9fba3924 208 s.buf[(int)s.bufptr] = 0;
frank26080115 0:bf7b9fba3924 209 /* petsciiconv_topetscii(s.buf, TELNETD_CONF_LINELEN);*/
frank26080115 0:bf7b9fba3924 210 }
frank26080115 0:bf7b9fba3924 211 shell_input(s.buf);
frank26080115 0:bf7b9fba3924 212 s.bufptr = 0;
frank26080115 0:bf7b9fba3924 213 } else {
frank26080115 0:bf7b9fba3924 214 ++s.bufptr;
frank26080115 0:bf7b9fba3924 215 }
frank26080115 0:bf7b9fba3924 216 }
frank26080115 0:bf7b9fba3924 217 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 218 static void
frank26080115 0:bf7b9fba3924 219 sendopt(u8_t option, u8_t value)
frank26080115 0:bf7b9fba3924 220 {
frank26080115 0:bf7b9fba3924 221 char *line;
frank26080115 0:bf7b9fba3924 222 line = alloc_line();
frank26080115 0:bf7b9fba3924 223 if(line != NULL) {
frank26080115 0:bf7b9fba3924 224 line[0] = TELNET_IAC;
frank26080115 0:bf7b9fba3924 225 line[1] = option;
frank26080115 0:bf7b9fba3924 226 line[2] = value;
frank26080115 0:bf7b9fba3924 227 line[3] = 0;
frank26080115 0:bf7b9fba3924 228 sendline(line);
frank26080115 0:bf7b9fba3924 229 }
frank26080115 0:bf7b9fba3924 230 }
frank26080115 0:bf7b9fba3924 231 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 232 static void
frank26080115 0:bf7b9fba3924 233 newdata(void)
frank26080115 0:bf7b9fba3924 234 {
frank26080115 0:bf7b9fba3924 235 u16_t len;
frank26080115 0:bf7b9fba3924 236 u8_t c;
frank26080115 0:bf7b9fba3924 237 char *dataptr;
frank26080115 0:bf7b9fba3924 238
frank26080115 0:bf7b9fba3924 239
frank26080115 0:bf7b9fba3924 240 len = uip_datalen();
frank26080115 0:bf7b9fba3924 241 dataptr = (char *)uip_appdata;
frank26080115 0:bf7b9fba3924 242
frank26080115 0:bf7b9fba3924 243 while(len > 0 && s.bufptr < sizeof(s.buf)) {
frank26080115 0:bf7b9fba3924 244 c = *dataptr;
frank26080115 0:bf7b9fba3924 245 ++dataptr;
frank26080115 0:bf7b9fba3924 246 --len;
frank26080115 0:bf7b9fba3924 247 switch(s.state) {
frank26080115 0:bf7b9fba3924 248 case STATE_IAC:
frank26080115 0:bf7b9fba3924 249 if(c == TELNET_IAC) {
frank26080115 0:bf7b9fba3924 250 get_char(c);
frank26080115 0:bf7b9fba3924 251 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 252 } else {
frank26080115 0:bf7b9fba3924 253 switch(c) {
frank26080115 0:bf7b9fba3924 254 case TELNET_WILL:
frank26080115 0:bf7b9fba3924 255 s.state = STATE_WILL;
frank26080115 0:bf7b9fba3924 256 break;
frank26080115 0:bf7b9fba3924 257 case TELNET_WONT:
frank26080115 0:bf7b9fba3924 258 s.state = STATE_WONT;
frank26080115 0:bf7b9fba3924 259 break;
frank26080115 0:bf7b9fba3924 260 case TELNET_DO:
frank26080115 0:bf7b9fba3924 261 s.state = STATE_DO;
frank26080115 0:bf7b9fba3924 262 break;
frank26080115 0:bf7b9fba3924 263 case TELNET_DONT:
frank26080115 0:bf7b9fba3924 264 s.state = STATE_DONT;
frank26080115 0:bf7b9fba3924 265 break;
frank26080115 0:bf7b9fba3924 266 default:
frank26080115 0:bf7b9fba3924 267 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 268 break;
frank26080115 0:bf7b9fba3924 269 }
frank26080115 0:bf7b9fba3924 270 }
frank26080115 0:bf7b9fba3924 271 break;
frank26080115 0:bf7b9fba3924 272 case STATE_WILL:
frank26080115 0:bf7b9fba3924 273 /* Reply with a DONT */
frank26080115 0:bf7b9fba3924 274 sendopt(TELNET_DONT, c);
frank26080115 0:bf7b9fba3924 275 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 276 break;
frank26080115 0:bf7b9fba3924 277
frank26080115 0:bf7b9fba3924 278 case STATE_WONT:
frank26080115 0:bf7b9fba3924 279 /* Reply with a DONT */
frank26080115 0:bf7b9fba3924 280 sendopt(TELNET_DONT, c);
frank26080115 0:bf7b9fba3924 281 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 282 break;
frank26080115 0:bf7b9fba3924 283 case STATE_DO:
frank26080115 0:bf7b9fba3924 284 /* Reply with a WONT */
frank26080115 0:bf7b9fba3924 285 sendopt(TELNET_WONT, c);
frank26080115 0:bf7b9fba3924 286 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 287 break;
frank26080115 0:bf7b9fba3924 288 case STATE_DONT:
frank26080115 0:bf7b9fba3924 289 /* Reply with a WONT */
frank26080115 0:bf7b9fba3924 290 sendopt(TELNET_WONT, c);
frank26080115 0:bf7b9fba3924 291 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 292 break;
frank26080115 0:bf7b9fba3924 293 case STATE_NORMAL:
frank26080115 0:bf7b9fba3924 294 if(c == TELNET_IAC) {
frank26080115 0:bf7b9fba3924 295 s.state = STATE_IAC;
frank26080115 0:bf7b9fba3924 296 } else {
frank26080115 0:bf7b9fba3924 297 get_char(c);
frank26080115 0:bf7b9fba3924 298 }
frank26080115 0:bf7b9fba3924 299 break;
frank26080115 0:bf7b9fba3924 300 }
frank26080115 0:bf7b9fba3924 301
frank26080115 0:bf7b9fba3924 302
frank26080115 0:bf7b9fba3924 303 }
frank26080115 0:bf7b9fba3924 304
frank26080115 0:bf7b9fba3924 305 }
frank26080115 0:bf7b9fba3924 306 /*---------------------------------------------------------------------------*/
frank26080115 0:bf7b9fba3924 307 void
frank26080115 0:bf7b9fba3924 308 telnetd_appcall(void)
frank26080115 0:bf7b9fba3924 309 {
frank26080115 0:bf7b9fba3924 310 static unsigned int i;
frank26080115 0:bf7b9fba3924 311 if(uip_connected()) {
frank26080115 0:bf7b9fba3924 312 /* tcp_markconn(uip_conn, &s);*/
frank26080115 0:bf7b9fba3924 313 for(i = 0; i < TELNETD_CONF_NUMLINES; ++i) {
frank26080115 0:bf7b9fba3924 314 s.lines[i] = NULL;
frank26080115 0:bf7b9fba3924 315 }
frank26080115 0:bf7b9fba3924 316 s.bufptr = 0;
frank26080115 0:bf7b9fba3924 317 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 318
frank26080115 0:bf7b9fba3924 319 shell_start();
frank26080115 0:bf7b9fba3924 320 }
frank26080115 0:bf7b9fba3924 321
frank26080115 0:bf7b9fba3924 322 if(s.state == STATE_CLOSE) {
frank26080115 0:bf7b9fba3924 323 s.state = STATE_NORMAL;
frank26080115 0:bf7b9fba3924 324 uip_close();
frank26080115 0:bf7b9fba3924 325 return;
frank26080115 0:bf7b9fba3924 326 }
frank26080115 0:bf7b9fba3924 327
frank26080115 0:bf7b9fba3924 328 if(uip_closed() ||
frank26080115 0:bf7b9fba3924 329 uip_aborted() ||
frank26080115 0:bf7b9fba3924 330 uip_timedout()) {
frank26080115 0:bf7b9fba3924 331 closed();
frank26080115 0:bf7b9fba3924 332 }
frank26080115 0:bf7b9fba3924 333
frank26080115 0:bf7b9fba3924 334 if(uip_acked()) {
frank26080115 0:bf7b9fba3924 335 acked();
frank26080115 0:bf7b9fba3924 336 }
frank26080115 0:bf7b9fba3924 337
frank26080115 0:bf7b9fba3924 338 if(uip_newdata()) {
frank26080115 0:bf7b9fba3924 339 newdata();
frank26080115 0:bf7b9fba3924 340 }
frank26080115 0:bf7b9fba3924 341
frank26080115 0:bf7b9fba3924 342 if(uip_rexmit() ||
frank26080115 0:bf7b9fba3924 343 uip_newdata() ||
frank26080115 0:bf7b9fba3924 344 uip_acked() ||
frank26080115 0:bf7b9fba3924 345 uip_connected() ||
frank26080115 0:bf7b9fba3924 346 uip_poll()) {
frank26080115 0:bf7b9fba3924 347 senddata();
frank26080115 0:bf7b9fba3924 348 }
frank26080115 0:bf7b9fba3924 349 }
frank26080115 0:bf7b9fba3924 350 /*---------------------------------------------------------------------------*/