| 191 | |
| 192 | int32_t |
| 193 | AcceptTCPConnection(int32_t servSock) |
| 194 | { |
| 195 | int32_t clntSock; /* Socket descriptor for client */ |
| 196 | struct sockaddr_in echoClntAddr; |
| 197 | uint32_t clntLen; |
| 198 | |
| 199 | /* Set the size of the in-out parameter */ |
| 200 | clntLen = sizeof(echoClntAddr); |
| 201 | |
| 202 | /* Wait for a client to connect */ |
| 203 | //if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0) { |
| 204 | if ((clntSock = accept(servSock, NULL, NULL)) < 0) { |
| 205 | return -1; |
| 206 | } |
| 207 | |
| 208 | /* clntSock is connected to a client! */ |
| 209 | |
| 210 | printf("Handling client %s\n", inet_ntoa(echoClntAddr.sin_addr)); |
| 211 | |
| 212 | return clntSock; |
| 213 | } |
| 214 | |
| 215 | int32_t |
| 216 | CreateTCPServerSocket(uint16_t port) |
| 217 | { |
| 218 | int32_t sock; /* socket to create */ |
| 219 | struct sockaddr_in echoServAddr; /* Local address */ |
| 220 | |
| 221 | /* Create socket for incoming connections */ |
| 222 | if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) |
| 223 | ERROR(1, "socket() failed\n"); |
| 224 | |
| 225 | /* Construct local address structure */ |
| 226 | memset(&echoServAddr, 0, sizeof(echoServAddr)); /* Zero out structure */ |
| 227 | echoServAddr.sin_family = AF_INET; /* int32_ternet address family */ |
| 228 | echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming int32_terface */ |
| 229 | echoServAddr.sin_port = htons(port); /* Local port */ |
| 230 | |
| 231 | /* Bind to the local address */ |
| 232 | if (bind(sock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0) |
| 233 | ERROR(1, "bind() failed\n"); |
| 234 | |
| 235 | /* Mark the socket so it will listen for incoming connections */ |
| 236 | if (listen(sock, 5) < 0) { |
| 237 | printf("listen() failed\n"); |
| 238 | return 0; |
| 239 | } |
| 240 | |
| 241 | return sock; |
| 242 | } |
| 243 | |
| 244 | void |
| 245 | HandleTCPClient(int32_t socketfd, Utility * uList[], Parameter * pList[], \ |
| 246 | Observable * oList[], CE_Info * ce_info) |
| 247 | { |
| 248 | char buffer[256]; /* Buffer for echo string */ |
| 249 | |
| 250 | /* Receive message from client */ |
| 251 | bzero(buffer,256); |
| 252 | ReadMessage(socketfd,buffer); |
| 253 | |
| 254 | printf("Cognitive Radio:: Message Received - %s.\n\n", buffer); |
| 255 | |
| 256 | if(strcmp(buffer,"c_register") == 0) |
| 257 | InitializeCE(socketfd, uList, pList, oList, ce_info); |
| 258 | |
| 259 | if(strcmp(buffer,"p_register") == 0) |
| 260 | InitializePE(socketfd, ce_info); |
| 261 | |
| 262 | if(strcmp(buffer,"optimize") == 0) |
| 263 | RunSimulator(socketfd, uList, pList, oList, ce_info); |
| 264 | |
| 265 | //close(socketfd); /* Close client socket */ |
| 266 | } |