added cookie in all state messages, changed tcp payload, changed receive_result_from_server
This commit is contained in:
parent
6f6716aed1
commit
d47cf1d204
123
src/iperf_api.c
123
src/iperf_api.c
@ -76,10 +76,11 @@ void exchange_parameters(struct iperf_test *test)
|
|||||||
sp = temp->streams;
|
sp = temp->streams;
|
||||||
sp->settings->state = PARAM_EXCHANGE;
|
sp->settings->state = PARAM_EXCHANGE;
|
||||||
|
|
||||||
|
|
||||||
printf("Sending EXCHANGE Request \n");
|
printf("Sending EXCHANGE Request \n");
|
||||||
result = send(sp->socket, buf, size , 0);
|
result = send(sp->socket, buf, size , 0);
|
||||||
|
|
||||||
|
printf("result = %d state = %d, %d = error\n",result, buf[0], errno);
|
||||||
|
|
||||||
do{
|
do{
|
||||||
result = recv(sp->socket, buf, size, 0);
|
result = recv(sp->socket, buf, size, 0);
|
||||||
} while (result == -1 && errno == EINTR);
|
} while (result == -1 && errno == EINTR);
|
||||||
@ -103,8 +104,6 @@ void exchange_parameters(struct iperf_test *test)
|
|||||||
|
|
||||||
int param_received(struct iperf_stream *sp, struct param_exchange *param)
|
int param_received(struct iperf_stream *sp, struct param_exchange *param)
|
||||||
{
|
{
|
||||||
int size = sp->settings->blksize;
|
|
||||||
char *buf = (char *) malloc(size);
|
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if(sp->settings->cookie[0] == '\0')
|
if(sp->settings->cookie[0] == '\0')
|
||||||
@ -118,21 +117,22 @@ int param_received(struct iperf_stream *sp, struct param_exchange *param)
|
|||||||
sp->settings->blksize = param->blksize;
|
sp->settings->blksize = param->blksize;
|
||||||
sp->settings->socket_rcv_bufsize = param->recv_window;
|
sp->settings->socket_rcv_bufsize = param->recv_window;
|
||||||
sp->settings->unit_format = param->format;
|
sp->settings->unit_format = param->format;
|
||||||
|
|
||||||
return param->state;
|
return param->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else if (strncmp(param->cookie, sp->settings->cookie, 37) != 0)
|
||||||
{
|
{
|
||||||
printf("New connection denied\n");
|
printf("New connection denied\n");
|
||||||
// send NO to client
|
// send NO to client
|
||||||
int size = DEFAULT_TCP_BLKSIZE;
|
int size = DEFAULT_TCP_BLKSIZE;
|
||||||
buf = (char *) malloc(size);
|
char *buf = (char *) malloc(size);
|
||||||
buf[0] = -1;
|
buf[0] = -1;
|
||||||
result = send(sp->socket, buf, size, 0);
|
result = send(sp->socket, buf, size, 0);
|
||||||
|
free(buf);
|
||||||
return ACCESS_DENIED;
|
return ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return param->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setnonblocking(int sock)
|
void setnonblocking(int sock)
|
||||||
@ -207,6 +207,7 @@ void send_result_to_client(struct iperf_stream *sp)
|
|||||||
memcpy(buf, sp->data, strlen((char *)sp->data));
|
memcpy(buf, sp->data, strlen((char *)sp->data));
|
||||||
|
|
||||||
result = send(sp->socket, buf, size , 0);
|
result = send(sp->socket, buf, size , 0);
|
||||||
|
printf("RESULT SENT TO CLIENT\n");
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
@ -214,18 +215,24 @@ void send_result_to_client(struct iperf_stream *sp)
|
|||||||
void receive_result_from_server(struct iperf_test *test)
|
void receive_result_from_server(struct iperf_test *test)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
struct iperf_test *temp;
|
||||||
struct iperf_stream *sp;
|
struct iperf_stream *sp;
|
||||||
int size =0;
|
int size =0;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
|
|
||||||
//Overriding actual Test parameters for result exchange
|
temp = iperf_new_test();
|
||||||
test->protocol = Ptcp;
|
iperf_defaults(temp);
|
||||||
test->new_stream = iperf_new_tcp_stream;
|
temp->role = 'c';
|
||||||
test->num_streams= 1;
|
temp->default_settings->blksize = DEFAULT_TCP_BLKSIZE;
|
||||||
|
temp->new_stream = iperf_new_tcp_stream;
|
||||||
|
temp->server_hostname = test->server_hostname;
|
||||||
|
temp->server_port = test->server_port;
|
||||||
|
strncpy(temp->default_settings->cookie,test->default_settings->cookie, 37);
|
||||||
|
|
||||||
iperf_init_test(test);
|
iperf_init_test(temp);
|
||||||
sp = test->streams;
|
sp = temp->streams;
|
||||||
|
|
||||||
|
puts(sp->settings->cookie);
|
||||||
sp->settings->state = ALL_STREAMS_END;
|
sp->settings->state = ALL_STREAMS_END;
|
||||||
sp->snd(sp);
|
sp->snd(sp);
|
||||||
|
|
||||||
@ -243,7 +250,8 @@ void receive_result_from_server(struct iperf_test *test)
|
|||||||
printf( server_reporting, sp->socket);
|
printf( server_reporting, sp->socket);
|
||||||
puts(buf);
|
puts(buf);
|
||||||
|
|
||||||
iperf_free_stream(test, sp);
|
iperf_free_stream(temp, sp);
|
||||||
|
iperf_free_test(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getsock_tcp_mss( int inSock )
|
int getsock_tcp_mss( int inSock )
|
||||||
@ -377,25 +385,21 @@ int iperf_tcp_recv(struct iperf_stream *sp)
|
|||||||
{
|
{
|
||||||
ch = buf[0];
|
ch = buf[0];
|
||||||
message = (int) ch;
|
message = (int) ch;
|
||||||
|
|
||||||
// CHECK: packet length and state
|
// CHECK: packet length and state
|
||||||
|
// printf("result = %d state = %d, %d = error\n",result, message, errno);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("socket has been closed by client, result = 0\n");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(message == PARAM_EXCHANGE)
|
if(message != 7)
|
||||||
{
|
{
|
||||||
//printf("result = %d state = %d, %d = error\n",result, buf[0], errno);
|
printf("result = %d state = %d, %d = error\n",result, buf[0], errno);
|
||||||
message = param_received(sp, param);
|
message = param_received(sp, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(message == 6)
|
|
||||||
printf("stream begin %d\n", sp->settings->blksize);
|
|
||||||
|
|
||||||
if(message == 3 || message == 8 || message == 9 )
|
|
||||||
{
|
|
||||||
printf("Recieved %d from client\n", message);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(message != STREAM_END)
|
if(message != STREAM_END)
|
||||||
sp->result->bytes_received+= result;
|
sp->result->bytes_received+= result;
|
||||||
|
|
||||||
@ -428,6 +432,11 @@ int iperf_udp_recv(struct iperf_stream *sp)
|
|||||||
message = udp->state;
|
message = udp->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(message != 7)
|
||||||
|
{
|
||||||
|
printf("result = %d state = %d, %d = error\n",result, buf[0], errno);
|
||||||
|
}
|
||||||
|
|
||||||
if(message == STREAM_RUNNING && (sp->stream_id == udp->stream_id))
|
if(message == STREAM_RUNNING && (sp->stream_id == udp->stream_id))
|
||||||
{
|
{
|
||||||
sp->result->bytes_received+= result;
|
sp->result->bytes_received+= result;
|
||||||
@ -467,9 +476,6 @@ int iperf_udp_recv(struct iperf_stream *sp)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(message == 3 || message == 9 || message == 8)
|
|
||||||
printf("Recieved %d from client\n", message);
|
|
||||||
|
|
||||||
free(buf);
|
free(buf);
|
||||||
return message;
|
return message;
|
||||||
|
|
||||||
@ -479,8 +485,8 @@ int iperf_tcp_send(struct iperf_stream *sp)
|
|||||||
{
|
{
|
||||||
int result,i;
|
int result,i;
|
||||||
int size = sp->settings->blksize;
|
int size = sp->settings->blksize;
|
||||||
|
|
||||||
char *buf = (char *) malloc(size);
|
char *buf = (char *) malloc(size);
|
||||||
|
struct param_exchange *param = (struct param_exchange *) buf;
|
||||||
|
|
||||||
|
|
||||||
if(!buf)
|
if(!buf)
|
||||||
@ -490,35 +496,41 @@ int iperf_tcp_send(struct iperf_stream *sp)
|
|||||||
|
|
||||||
switch(sp->settings->state)
|
switch(sp->settings->state)
|
||||||
{
|
{
|
||||||
|
|
||||||
case STREAM_BEGIN:
|
case STREAM_BEGIN:
|
||||||
buf[0]= (STREAM_BEGIN);
|
param->state = STREAM_BEGIN;
|
||||||
for(i=1; i < size; i++)
|
strncpy(param->cookie,sp->settings->cookie,37);
|
||||||
buf[i] = 97;
|
for(i = sizeof(struct param_exchange);i< size; i++)
|
||||||
|
buf[i] = rand();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STREAM_END:
|
case STREAM_END:
|
||||||
buf[0]= (STREAM_END);
|
param->state = STREAM_END;
|
||||||
for(i=1; i < size; i++)
|
strncpy(param->cookie,sp->settings->cookie,37);
|
||||||
buf[i] = 97;
|
printf("STREAM_END\n");
|
||||||
|
for(i = sizeof(struct param_exchange);i< size; i++)
|
||||||
|
buf[i] = rand();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RESULT_REQUEST:
|
case RESULT_REQUEST:
|
||||||
buf[0]= (RESULT_REQUEST);
|
param->state = RESULT_REQUEST;
|
||||||
for(i=1; i < size; i++)
|
strncpy(param->cookie,sp->settings->cookie,37);
|
||||||
buf[i] = 97;
|
printf("RESULT_REQUEST\n");
|
||||||
|
for(i = sizeof(struct param_exchange);i< size; i++)
|
||||||
|
buf[i] = rand();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ALL_STREAMS_END:
|
case ALL_STREAMS_END:
|
||||||
buf[0]= (ALL_STREAMS_END);
|
param->state = ALL_STREAMS_END;
|
||||||
for(i=1; i < size; i++)
|
strncpy(param->cookie,sp->settings->cookie,37);
|
||||||
buf[i] = 97;
|
printf("ALL_STREAM_END\n");
|
||||||
|
for(i = sizeof(struct param_exchange);i< size; i++)
|
||||||
|
buf[i] = rand();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STREAM_RUNNING:
|
case STREAM_RUNNING:
|
||||||
buf[0]= STREAM_RUNNING;
|
buf[0]= STREAM_RUNNING;
|
||||||
for(i=1; i < size; i++)
|
for(i=1; i < size; i++)
|
||||||
buf[i] = 97;
|
buf[i] = rand();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("State of the stream can't be determined\n");
|
printf("State of the stream can't be determined\n");
|
||||||
@ -533,6 +545,8 @@ int iperf_tcp_send(struct iperf_stream *sp)
|
|||||||
|
|
||||||
result = send(sp->socket, buf, size , 0);
|
result = send(sp->socket, buf, size , 0);
|
||||||
|
|
||||||
|
//printf("result = %d state = %d, %d = error\n",result, buf[0], errno);
|
||||||
|
|
||||||
if(buf[0] != STREAM_END)
|
if(buf[0] != STREAM_END)
|
||||||
sp->result->bytes_sent+= size;
|
sp->result->bytes_sent+= size;
|
||||||
|
|
||||||
@ -1207,7 +1221,6 @@ int iperf_tcp_accept(struct iperf_test *test)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
sp = test->new_stream(test);
|
sp = test->new_stream(test);
|
||||||
|
|
||||||
//setting noblock doesn't report back to client
|
//setting noblock doesn't report back to client
|
||||||
//setnonblocking(peersock);
|
//setnonblocking(peersock);
|
||||||
|
|
||||||
@ -1218,6 +1231,14 @@ int iperf_tcp_accept(struct iperf_test *test)
|
|||||||
iperf_init_stream(sp, test);
|
iperf_init_stream(sp, test);
|
||||||
iperf_add_stream(test, sp);
|
iperf_add_stream(test, sp);
|
||||||
|
|
||||||
|
|
||||||
|
// this means the new connection is for requesting result
|
||||||
|
//set the blksize to DEFAULT_TCP_SIZE explicitly
|
||||||
|
//in case of udp test -- need to improve this
|
||||||
|
if(test->default_settings->state == TEST_RUNNING)
|
||||||
|
sp->settings->blksize = DEFAULT_TCP_BLKSIZE;
|
||||||
|
|
||||||
|
|
||||||
if(test->default_settings->state != RESULT_REQUEST)
|
if(test->default_settings->state != RESULT_REQUEST)
|
||||||
connect_msg(sp);
|
connect_msg(sp);
|
||||||
|
|
||||||
@ -1382,17 +1403,17 @@ void iperf_run_server(struct iperf_test *test)
|
|||||||
//copy the received settings into test
|
//copy the received settings into test
|
||||||
if(message != ACCESS_DENIED)
|
if(message != ACCESS_DENIED)
|
||||||
memcpy(test->default_settings, test->streams->settings, sizeof(struct iperf_settings));
|
memcpy(test->default_settings, test->streams->settings, sizeof(struct iperf_settings));
|
||||||
// FREE ALL STREAMS
|
|
||||||
close(np->socket);
|
close(np->socket);
|
||||||
FD_CLR(np->socket, &test->read_set);
|
FD_CLR(np->socket, &test->read_set);
|
||||||
iperf_free_stream(test, np);
|
iperf_free_stream(test, np);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(message == STREAM_END)
|
if(message == STREAM_END)
|
||||||
{
|
{
|
||||||
np->settings->state = STREAM_END;
|
np->settings->state = STREAM_END;
|
||||||
gettimeofday(&np->result->end_time, NULL);
|
gettimeofday(&np->result->end_time, NULL);
|
||||||
FD_CLR(j, &test->read_set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(message == RESULT_REQUEST)
|
if(message == RESULT_REQUEST)
|
||||||
@ -1558,7 +1579,6 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
{
|
{
|
||||||
sp = np;
|
sp = np;
|
||||||
sp->settings->state = STREAM_END;
|
sp->settings->state = STREAM_END;
|
||||||
printf("sp blksize = %d \n", sp->settings->blksize);
|
|
||||||
sp->snd(sp);
|
sp->snd(sp);
|
||||||
np = sp->next;
|
np = sp->next;
|
||||||
} while (np);
|
} while (np);
|
||||||
@ -1567,6 +1587,9 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
read = test->reporter_callback(test);
|
read = test->reporter_callback(test);
|
||||||
puts(read);
|
puts(read);
|
||||||
|
|
||||||
|
// Requesting for result from Server
|
||||||
|
receive_result_from_server(test);
|
||||||
|
|
||||||
// Deleting all streams - CAN CHANGE FREE_STREAM FN
|
// Deleting all streams - CAN CHANGE FREE_STREAM FN
|
||||||
sp = test->streams;
|
sp = test->streams;
|
||||||
np = sp;
|
np = sp;
|
||||||
@ -1576,12 +1599,8 @@ void iperf_run_client(struct iperf_test *test)
|
|||||||
close(sp->socket);
|
close(sp->socket);
|
||||||
np = sp->next;
|
np = sp->next;
|
||||||
iperf_free_stream(test, sp);
|
iperf_free_stream(test, sp);
|
||||||
|
|
||||||
} while (np);
|
} while (np);
|
||||||
|
|
||||||
// Requesting for result from Server
|
|
||||||
receive_result_from_server(test);
|
|
||||||
|
|
||||||
if(test->stats_interval!= 0)
|
if(test->stats_interval!= 0)
|
||||||
free_timer(stats_interval);
|
free_timer(stats_interval);
|
||||||
if(test->reporter_interval!= 0)
|
if(test->reporter_interval!= 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user