]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/net/lwip_tcpip/v2_0/tests/tcpecho.c
unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / net / lwip_tcpip / v2_0 / tests / tcpecho.c
1 /*
2  * Copyright (c) 2001, Swedish Institute of Computer Science.
3  * All rights reserved. 
4  *
5  * Redistribution and use in source and binary forms, with or without 
6  * modification, are permitted provided that the following conditions 
7  * are met: 
8  * 1. Redistributions of source code must retain the above copyright 
9  *    notice, this list of conditions and the following disclaimer. 
10  * 2. Redistributions in binary form must reproduce the above copyright 
11  *    notice, this list of conditions and the following disclaimer in the 
12  *    documentation and/or other materials provided with the distribution. 
13  * 3. Neither the name of the Institute nor the names of its contributors 
14  *    may be used to endorse or promote products derived from this software 
15  *    without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
27  * SUCH DAMAGE. 
28  *
29  * This file is part of the lwIP TCP/IP stack.
30  * 
31  * Author: Adam Dunkels <adam@sics.se>
32  *
33  */
34
35 #include "lwip/sys.h"
36 #include "lwip/api.h"
37 #include <cyg/infra/testcase.h>
38
39 #ifdef CYGPKG_LWIP_TCP
40
41 static void 
42 tcpecho_thread(void *arg)
43 {
44   struct netconn *conn, *newconn;
45   err_t err;
46
47   /* Create a new connection identifier. */
48   conn = netconn_new(NETCONN_TCP);
49
50   /* Bind connection to well known port number 7. */
51   netconn_bind(conn, NULL, 7);
52
53   /* Tell connection to go into listening mode. */
54   netconn_listen(conn);
55
56   while(1) {
57
58     /* Grab new connection. */
59     newconn = netconn_accept(conn);
60     /* Process the new connection. */
61     if(newconn != NULL) {
62       struct netbuf *buf;
63       void *data;
64       u16_t len;
65       
66       while((buf = netconn_recv(newconn)) != NULL) {
67         do {
68           netbuf_data(buf, &data, &len);
69           err = netconn_write(newconn, data, len, NETCONN_COPY);
70           if(err != ERR_OK) {
71           }
72         } while(netbuf_next(buf) >= 0);
73         netbuf_delete(buf);     
74       }
75       /* Close connection and discard connection identifier. */
76       netconn_delete(newconn);
77     }
78   }
79 }
80
81 void
82 tmain(cyg_addrword_t p)
83 {
84   lwip_init();  
85   sys_thread_new(tcpecho_thread, (void*)"tcpecho",7);  
86 }
87
88 #define STACK_SIZE 0x1000
89 static char stack[STACK_SIZE];
90 static cyg_thread thread_data;
91 static cyg_handle_t thread_handle;
92
93 void
94 tcpecho_main(void)
95 {
96     CYG_TEST_INIT();
97     
98     // Create a main thread, so we can run the scheduler and have time 'pass'
99     cyg_thread_create(10,                // Priority - just a number
100                       tmain,          // entry
101                       0,                 // entry parameter
102                       "TCP echo test",        // Name
103                       &stack[0],         // Stack
104                       STACK_SIZE,        // Size
105                       &thread_handle,    // Handle
106                       &thread_data       // Thread data structure
107             );
108             
109     cyg_thread_resume(thread_handle);  // Start it   
110     cyg_scheduler_start();
111     CYG_TEST_FAIL_FINISH("Not reached");
112 }
113
114 externC void
115 cyg_start( void )
116 {
117     tcpecho_main();
118 }
119
120 #else // def CYGPKG_LWIP_TCP
121 #define N_A_MSG "TCP support disabled"
122 #endif // def CYGFUN_KERNEL_API_C
123
124 #ifdef N_A_MSG
125 externC void
126 cyg_start( void )
127 {
128     CYG_TEST_INIT();
129     CYG_TEST_NA(N_A_MSG);
130 }
131 #endif // N_A_MSG