]> rtime.felk.cvut.cz Git - frescor/frsh-forb.git/blob - src/fna/tests/tests_unix_fna/test_unix_fna_send_receive.c
Add 'src/fna/' from commit '493e9e8be9c3761691b96e8366d036d6b3c314fb'
[frescor/frsh-forb.git] / src / fna / tests / tests_unix_fna / test_unix_fna_send_receive.c
1 //----------------------------------------------------------------------
2 //  Copyright (C) 2006 - 2009 by the FRESCOR consortium:
3 //
4 //    Universidad de Cantabria,              SPAIN
5 //    University of York,                    UK
6 //    Scuola Superiore Sant'Anna,            ITALY
7 //    Kaiserslautern University,             GERMANY
8 //    Univ. Politecnica  Valencia,           SPAIN
9 //    Czech Technical University in Prague,  CZECH REPUBLIC
10 //    ENEA                                   SWEDEN
11 //    Thales Communication S.A.              FRANCE
12 //    Visual Tools S.A.                      SPAIN
13 //    Rapita Systems Ltd                     UK
14 //    Evidence                               ITALY
15 //
16 //    See http://www.frescor.org
17 //
18 //        The FRESCOR project (FP6/2005/IST/5-034026) is funded
19 //        in part by the European Union Sixth Framework Programme
20 //        The European Union is not liable of any use that may be
21 //        made of this code.
22 //
23 //
24 //  based on previous work (FSF) done in the FIRST project
25 //
26 //   Copyright (C) 2005  Mälardalen University, SWEDEN
27 //                       Scuola Superiore S.Anna, ITALY
28 //                       Universidad de Cantabria, SPAIN
29 //                       University of York, UK
30 //
31 // This file is part of FNA (Frescor Network Adaptation)
32 //
33 // FNA is free software; you can redistribute it and/or modify it
34 // under terms of the GNU General Public License as published by the
35 // Free Software Foundation; either version 2, or (at your option) any
36 // later version.  FNA is distributed in the hope that it will be
37 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
38 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
39 // General Public License for more details. You should have received a
40 // copy of the GNU General Public License along with FNA; see file
41 // COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
42 // Cambridge, MA 02139, USA.
43 //
44 // As a special exception, including FNA header files in a file,
45 // instantiating FNA generics or templates, or linking other files
46 // with FNA objects to produce an executable application, does not
47 // by itself cause the resulting executable application to be covered
48 // by the GNU General Public License. This exception does not
49 // however invalidate any other reasons why the executable file might be
50 // covered by the GNU Public License.
51 // -----------------------------------------------------------------------
52 #include <stdio.h>
53 #include <stdlib.h> /* atoi */
54 #include <unistd.h> /* sleep */
55 #include <assert.h>
56 #include <string.h> /* memset */
57
58 #include "frsh.h" // for FRSH_CPU_ID_DEFAULT
59
60 #include "fna.h" // for fna_vres_id_t
61 #include "unix_fna.h" // for unix_fna_operations
62
63 #define THE_SENDER_ADDR         0
64 #define THE_RECEIVER_ADDR       1
65 #define THE_STREAM_ID           3
66 void sender(void);
67 void receiver(void);
68
69 int main ()
70 {
71         int err;
72
73         err = unix_fna_operations.fna_init(FRSH_NETWORK_ID_DEFAULT);
74         assert(err == 0);
75
76         printf("I am %d\n", FRSH_CPU_ID_DEFAULT);
77
78         switch(FRSH_CPU_ID_DEFAULT) {
79         case 0:
80                 sender();
81                 break;
82         case 1:
83                 receiver();
84                 break;
85         default:
86                 printf("wrong node number\n");
87                 return -1;
88         }
89
90         return 0;
91 }
92
93 void sender(void)
94 {
95         int err, i;
96         frsh_contract_t contract;
97         fna_endpoint_data_t endpoint;
98         char buffer[100];
99         size_t size;
100
101         printf("I am the sender\n");
102
103         err = unix_fna_operations.fna_contract_negotiate
104                         (FRSH_NETWORK_ID_DEFAULT,
105                          &contract,
106                          &endpoint.vres);
107         assert(err == 0);
108
109         endpoint.endpoint_type  = FRSH_SEND_ENDPOINT_TYPE;
110         endpoint.is_bound       = true;
111         endpoint.destination    = THE_RECEIVER_ADDR;
112         endpoint.resource_id    = FRSH_NETWORK_ID_DEFAULT;
113         endpoint.stream_id      = THE_STREAM_ID;
114
115         for(i=0; i<10; i++) {
116                 sleep(1);
117                 size = snprintf(buffer, sizeof(buffer), "hello world %d", i);
118
119                 err = unix_fna_operations.fna_send_async(&endpoint,
120                                                          buffer,
121                                                          size);
122                 assert (err == 0);
123
124                 printf("sender : sent %s\n", buffer);
125         }
126
127         printf("Sender done\n");
128 }
129
130 void receiver(void)
131 {
132         int err, i;
133         fna_endpoint_data_t endpoint;
134         frsh_network_address_t from;
135         char buffer[100];
136         size_t received_bytes;
137
138         printf("I am the receiver\n");
139
140         endpoint.endpoint_type  = FRSH_RECEIVE_ENDPOINT_TYPE;
141         endpoint.is_bound       = false;
142         endpoint.resource_id    = FRSH_NETWORK_ID_DEFAULT;
143         endpoint.stream_id      = THE_STREAM_ID;
144
145         err = unix_fna_operations.fna_receive_endpoint_created(&endpoint);
146         assert (err == 0);
147
148         for(i=0; i<10; i++) {
149                 err = unix_fna_operations.fna_receive_sync(&endpoint,
150                                                            buffer,
151                                                            100,
152                                                            &received_bytes,
153                                                            &from);
154                 assert (err == 0);
155
156                 buffer[received_bytes] = '\0';
157
158                 printf("receiver : received %s from %d\n", buffer, from);
159         }
160
161         printf("Receiver done\n");
162 }