18 |
18 |
int listenTo(unsigned short int portNum) {
|
19 |
19 |
|
20 |
20 |
// Buffer
|
21 |
|
char *requestBuffer = malloc(HCI_COMM_REQUEST_BUFFER_SIZE * sizeof char);
|
22 |
|
if(requestBuffer = NULL) {
|
|
21 |
char *requestBuffer = malloc(HCI_COMM_REQUEST_BUFFER_SIZE * sizeof(char));
|
|
22 |
if(requestBuffer == NULL) {
|
23 |
23 |
fprintf(stderr,"HCI comm error: Cannot allocate buffer.\n");
|
24 |
24 |
return HCI_COMM_ERR_BUF_ALOC_FAIL;
|
25 |
25 |
}
|
... | ... | |
27 |
27 |
// Socket holder
|
28 |
28 |
int socketHolder = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
|
29 |
29 |
if(socketHolder < 0) {
|
30 |
|
fpritf(stderr,"HCI comm error: Cannot create a new socket.\n");
|
|
30 |
fprintf(stderr,"HCI comm error: Cannot create a new socket.\n");
|
31 |
31 |
return HCI_COMM_ERR_NEW_SOCKET_FAIL;
|
32 |
32 |
}
|
33 |
33 |
|
34 |
34 |
// Socket address holder
|
35 |
35 |
struct sockaddr_in socketAddressHolder;
|
36 |
|
memset(&socketAddressHolder, 0, sizeof socketAddressHolder);
|
37 |
|
stSockAddr.sin_family = AF_INET;
|
38 |
|
stSockAddr.sin_port = htons(portNum);
|
39 |
|
stSockAddr.sin_addr.s_addr = INADDR_ANY;
|
|
36 |
memset(&socketAddressHolder, 0, sizeof(socketAddressHolder));
|
|
37 |
socketAddressHolder.sin_family = AF_INET;
|
|
38 |
socketAddressHolder.sin_port = htons(portNum);
|
|
39 |
socketAddressHolder.sin_addr.s_addr = INADDR_ANY;
|
40 |
40 |
|
41 |
41 |
// Bind socket to port
|
42 |
|
int bindingResult = bind(socketHolder,(struct sockaddr *)&socketAddressHolder, sizeof socketAddressHolder);
|
|
42 |
int bindingResult = bind(socketHolder,(struct sockaddr *)&socketAddressHolder, sizeof(socketAddressHolder));
|
43 |
43 |
if(bindingResult == -1) {
|
44 |
|
fpritf(stderr,"HCI comm error: Cannot bind socket to port %d.\n",portNum);
|
|
44 |
fprintf(stderr,"HCI comm error: Cannot bind socket to port %d.\n",portNum);
|
45 |
45 |
close(socketHolder);
|
46 |
46 |
return HCI_COMM_ERR_BIND_FAIL;
|
47 |
47 |
}
|
... | ... | |
49 |
49 |
// Listen to port
|
50 |
50 |
int listenResult = listen(socketHolder, 10);
|
51 |
51 |
if(listenResult == -1) {
|
52 |
|
fpritf(stderr,"HCI comm error: Cannot listen to port %d.\n",portNum);
|
|
52 |
fprintf(stderr,"HCI comm error: Cannot listen to port %d.\n",portNum);
|
53 |
53 |
close(socketHolder);
|
54 |
54 |
return HCI_COMM_ERR_LISTEN_FAIL;
|
55 |
55 |
}
|
56 |
56 |
|
57 |
57 |
// Infinite listening
|
58 |
|
while(true) {
|
|
58 |
while(1) {
|
59 |
59 |
|
60 |
60 |
// Accept request
|
61 |
61 |
int connectionHolder = accept(socketHolder,NULL,NULL);
|
62 |
62 |
if(connectionHolder < 0) {
|
63 |
|
fpritf(stderr,"HCI comm error: Error accepting request.\n");
|
|
63 |
fprintf(stderr,"HCI comm error: Error accepting request.\n");
|
64 |
64 |
close(socketHolder);
|
65 |
65 |
return HCI_COMM_ERR_ACCEPT_FAIL;
|
66 |
66 |
}
|
... | ... | |
68 |
68 |
// Read request
|
69 |
69 |
int readResult = read(connectionHolder,requestBuffer,HCI_COMM_REQUEST_BUFFER_SIZE);
|
70 |
70 |
if(readResult < 0) {
|
71 |
|
fpritf(stderr,"HCI comm error: Error reading request.\n");
|
|
71 |
fprintf(stderr,"HCI comm error: Error reading request.\n");
|
72 |
72 |
close(socketHolder);
|
73 |
73 |
return HCI_COMM_ERR_READ_FAIL;
|
74 |
74 |
}
|
... | ... | |
85 |
85 |
// Send response
|
86 |
86 |
int writeResult = write(connectionHolder,hciResponse,responseLength);
|
87 |
87 |
if(writeResult < 0) {
|
88 |
|
fpritf(stderr,"HCI comm error: Error writting response.\n");
|
|
88 |
fprintf(stderr,"HCI comm error: Error writting response.\n");
|
89 |
89 |
close(socketHolder);
|
90 |
90 |
return HCI_COMM_ERR_WRITE_FAIL;
|
91 |
91 |
}
|