Moved client code from iperf_api.* to iperf_client_api.*
diff --git a/src/Makefile.old b/src/Makefile.old
index 38e3b15..a544455 100644
--- a/src/Makefile.old
+++ b/src/Makefile.old
@@ -1,5 +1,5 @@
 CFLAGS=-g -Wall
-OBJS=main.o iperf_api.o iperf_server_api.o iperf_tcp.o iperf_udp.o timer.o net.o tcp_window_size.o units.o iperf_util.o tcp_info.o locale.o iperf_error.o
+OBJS=main.o iperf_api.o iperf_server_api.o iperf_tcp.o iperf_udp.o timer.o net.o tcp_window_size.o units.o iperf_util.o tcp_info.o locale.o iperf_error.o iperf_client_api.o
 LDFLAGS=
 
 UNAME=$(shell uname)
diff --git a/src/iperf_api.c b/src/iperf_api.c
index fab18bc..d088555 100644
--- a/src/iperf_api.c
+++ b/src/iperf_api.c
@@ -450,16 +450,7 @@
         test->timer = new_timer(test->duration, 0);
         if (test->timer == NULL)
             return (-1);
-/*
-        printf(test_start_time, test->protocol->name, test->num_streams, test->settings->blksize,
-            test->duration);
-*/
-    } else {
-/*
-        printf(test_start_bytes, test->protocol->name, test->num_streams, test->settings->blksize,
-            test->settings->bytes);
-*/
-    }
+    } 
 
     if (test->stats_interval != 0) {
         test->stats_timer = new_timer(test->stats_interval, 0);
@@ -806,7 +797,6 @@
         for (sp = test->streams; sp; sp = sp->next)
             if (sp->id == sid) break;
         if (sp == NULL) {
-            // fprintf(stderr, "error: No stream with id %d\n", sid);
             i_errno = IESTREAMID;
             return (-1);
         }
@@ -959,121 +949,6 @@
     return (0);
 }
 
-/**************************************************************************/
-
-int
-iperf_create_streams(struct iperf_test *test)
-{
-    int i, s;
-    struct iperf_stream *sp;
-
-    for (i = 0; i < test->num_streams; ++i) {
-
-        if ((s = test->protocol->connect(test)) < 0)
-            return (-1);
-
-        FD_SET(s, &test->read_set);
-        FD_SET(s, &test->write_set);
-        test->max_fd = (test->max_fd < s) ? s : test->max_fd;
-
-        sp = iperf_new_stream(test, s);
-        if (!sp)
-            return (-1);
-
-        /* Perform the new stream callback */
-        if (test->on_new_stream)
-            test->on_new_stream(sp);
-    }
-
-    return (0);
-}
-
-int
-iperf_handle_message_client(struct iperf_test *test)
-{
-    int rval;
-
-    if ((rval = read(test->ctrl_sck, &test->state, sizeof(char))) <= 0) {
-        if (rval == 0) {
-            i_errno = IECTRLCLOSE;
-            return (-1);
-        } else {
-            i_errno = IERECVMESSAGE;
-            return (-1);
-        }
-    }
-
-    switch (test->state) {
-        case PARAM_EXCHANGE:
-            if (iperf_exchange_parameters(test) < 0)
-                return (-1);
-            if (test->on_connect)
-                test->on_connect(test);
-            break;
-        case CREATE_STREAMS:
-            if (iperf_create_streams(test) < 0)
-                return (-1);
-            break;
-        case TEST_START:
-            if (iperf_init_test(test) < 0)
-                return (-1);
-            break;
-        case TEST_RUNNING:
-            break;
-        case EXCHANGE_RESULTS:
-            if (iperf_exchange_results(test) < 0)
-                return (-1);
-            break;
-        case DISPLAY_RESULTS:
-            if (test->on_test_finish)
-                test->on_test_finish(test);
-            iperf_client_end(test);
-            break;
-        case IPERF_DONE:
-            break;
-        case SERVER_TERMINATE:
-            i_errno = IESERVERTERM;
-            return (-1);
-        case ACCESS_DENIED:
-            i_errno = IEACCESSDENIED;
-            return (-1);
-        default:
-            i_errno = IEMESSAGE;
-            return (-1);
-    }
-
-    return 0;
-}
-
-/* iperf_connect -- client to server connection function */
-int
-iperf_connect(struct iperf_test *test)
-{
-//    printf("Connecting to host %s, port %d\n", test->server_hostname, test->server_port);
-
-    FD_ZERO(&test->read_set);
-    FD_ZERO(&test->write_set);
-
-    get_uuid(test->cookie);
-
-    /* Create and connect the control channel */
-    test->ctrl_sck = netdial(Ptcp, test->server_hostname, test->server_port);
-    if (test->ctrl_sck < 0) {
-        i_errno = IECONNECT;
-        return (-1);
-    }
-
-    if (Nwrite(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) {
-        i_errno = IESENDCOOKIE;
-        return (-1);
-    }
-
-    FD_SET(test->ctrl_sck, &test->read_set);
-    FD_SET(test->ctrl_sck, &test->write_set);
-    test->max_fd = (test->ctrl_sck > test->max_fd) ? test->ctrl_sck : test->max_fd;
-
-    return (0);
-}
 
 /**************************************************************************/
 void
@@ -1419,114 +1294,9 @@
 }
 
 
-/**************************************************************************/
-
-int
-iperf_client_end(struct iperf_test *test)
-{
-    struct iperf_stream *sp, *np;
- 
-    /* show final summary */
-    test->reporter_callback(test);
-
-    /* Deleting all streams - CAN CHANGE FREE_STREAM FN */
-    for (sp = test->streams; sp; sp = np) {
-        close(sp->socket);
-        np = sp->next;
-        iperf_free_stream(sp);
-    }
-
-    test->state = IPERF_DONE;
-    if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
-        i_errno = IESENDMESSAGE;
-        return (-1);
-    }
-
-    return (0);
-}
-
 void
 sig_handler(int sig)
 {
    longjmp(env, 1); 
 }
 
-int
-iperf_run_client(struct iperf_test * test)
-{
-    int result;
-    fd_set temp_read_set, temp_write_set;
-    struct timeval tv;
-
-    /* Start the client and connect to the server */
-    if (iperf_connect(test) < 0) {
-        return (-1);
-    }
-
-    // XXX: Do we need to check signal() for errors?
-    signal(SIGINT, sig_handler);
-    if (setjmp(env)) {
-        test->state = CLIENT_TERMINATE;
-        if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
-            i_errno = IESENDMESSAGE;
-            return (-1);
-        }
-        exit(1);
-    }
-
-    while (test->state != IPERF_DONE) {
-
-        memcpy(&temp_read_set, &test->read_set, sizeof(fd_set));
-        memcpy(&temp_write_set, &test->write_set, sizeof(fd_set));
-        tv.tv_sec = 15;
-        tv.tv_usec = 0;
-
-        result = select(test->max_fd + 1, &temp_read_set, &temp_write_set, NULL, &tv);
-        if (result < 0 && errno != EINTR) {
-            i_errno = IESELECT;
-            return (-1);
-        } else if (result > 0) {
-            if (FD_ISSET(test->ctrl_sck, &temp_read_set)) {
-                if (iperf_handle_message_client(test) < 0)
-                    return (-1);
-                FD_CLR(test->ctrl_sck, &temp_read_set);
-            }
-
-            if (test->state == TEST_RUNNING) {
-                if (test->reverse) {
-                    // Reverse mode. Client receives.
-                    if (iperf_recv(test) < 0)
-                        return (-1);
-                } else {
-                    // Regular mode. Client sends.
-                    if (iperf_send(test) < 0)
-                        return (-1);
-                }
-
-                /* Perform callbacks */
-                if (timer_expired(test->stats_timer)) {
-                    test->stats_callback(test);
-                    if (update_timer(test->stats_timer, test->stats_interval, 0) < 0)
-                        return (-1);
-                }
-                if (timer_expired(test->reporter_timer)) {
-                    test->reporter_callback(test);
-                    if (update_timer(test->reporter_timer, test->reporter_interval, 0) < 0)
-                        return (-1);
-                }
-               
-                /* Send TEST_END if all data has been sent or timer expired */ 
-                if (all_data_sent(test) || timer_expired(test->timer)) {
-                    test->stats_callback(test);
-                    test->state = TEST_END;
-                    if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
-                        i_errno = IESENDMESSAGE;
-                        return (-1);
-                    }
-                }
-            }
-        }
-    }
-
-    return (0);
-}
diff --git a/src/iperf_api.h b/src/iperf_api.h
index 281f9f4..903671b 100644
--- a/src/iperf_api.h
+++ b/src/iperf_api.h
@@ -45,12 +45,6 @@
 
 
 /**
- * iperf_run_client -- Runs the client portion of a test
- *
- */
-int      iperf_run_client(struct iperf_test * test);
-
-/**
  * iperf_new_test -- return a new iperf_test with default values
  *
  * returns NULL on failure
@@ -100,8 +94,6 @@
 void build_tcpinfo_message(struct iperf_interval_results *r, char *message);
 
 void print_interval_results(struct iperf_test * test, struct iperf_stream *sp);
-int iperf_connect(struct iperf_test *);
-int iperf_client_end(struct iperf_test *);
 int iperf_send(struct iperf_test *);
 int iperf_recv(struct iperf_test *);
 void sig_handler(int);
@@ -110,8 +102,6 @@
 int all_data_sent(struct iperf_test *);
 int package_parameters(struct iperf_test *);
 int parse_parameters(struct iperf_test *);
-int iperf_create_streams(struct iperf_test *);
-int iperf_handle_message_client(struct iperf_test *);
 int iperf_exchange_results(struct iperf_test *);
 int parse_results(struct iperf_test *, char *);
 int iperf_init_test(struct iperf_test *);
diff --git a/src/iperf_client_api.c b/src/iperf_client_api.c
new file mode 100644
index 0000000..293a0dd
--- /dev/null
+++ b/src/iperf_client_api.c
@@ -0,0 +1,240 @@
+#include <errno.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/select.h>
+#include <sys/uio.h>
+
+#include "iperf.h"
+#include "iperf_api.h"
+#include "iperf_client_api.h"
+#include "iperf_error.h"
+#include "iperf_util.h"
+#include "net.h"
+#include "timer.h"
+
+
+int
+iperf_create_streams(struct iperf_test *test)
+{
+    int i, s;
+    struct iperf_stream *sp;
+
+    for (i = 0; i < test->num_streams; ++i) {
+
+        if ((s = test->protocol->connect(test)) < 0)
+            return (-1);
+
+        FD_SET(s, &test->read_set);
+        FD_SET(s, &test->write_set);
+        test->max_fd = (test->max_fd < s) ? s : test->max_fd;
+
+        sp = iperf_new_stream(test, s);
+        if (!sp)
+            return (-1);
+
+        /* Perform the new stream callback */
+        if (test->on_new_stream)
+            test->on_new_stream(sp);
+    }
+
+    return (0);
+}
+
+int
+iperf_handle_message_client(struct iperf_test *test)
+{
+    int rval;
+
+    if ((rval = read(test->ctrl_sck, &test->state, sizeof(char))) <= 0) {
+        if (rval == 0) {
+            i_errno = IECTRLCLOSE;
+            return (-1);
+        } else {
+            i_errno = IERECVMESSAGE;
+            return (-1);
+        }
+    }
+
+    switch (test->state) {
+        case PARAM_EXCHANGE:
+            if (iperf_exchange_parameters(test) < 0)
+                return (-1);
+            if (test->on_connect)
+                test->on_connect(test);
+            break;
+        case CREATE_STREAMS:
+            if (iperf_create_streams(test) < 0)
+                return (-1);
+            break;
+        case TEST_START:
+            if (iperf_init_test(test) < 0)
+                return (-1);
+            break;
+        case TEST_RUNNING:
+            break;
+        case EXCHANGE_RESULTS:
+            if (iperf_exchange_results(test) < 0)
+                return (-1);
+            break;
+        case DISPLAY_RESULTS:
+            if (test->on_test_finish)
+                test->on_test_finish(test);
+            iperf_client_end(test);
+            break;
+        case IPERF_DONE:
+            break;
+        case SERVER_TERMINATE:
+            i_errno = IESERVERTERM;
+            return (-1);
+        case ACCESS_DENIED:
+            i_errno = IEACCESSDENIED;
+            return (-1);
+        default:
+            i_errno = IEMESSAGE;
+            return (-1);
+    }
+
+    return 0;
+}
+
+
+
+/* iperf_connect -- client to server connection function */
+int
+iperf_connect(struct iperf_test *test)
+{
+//    printf("Connecting to host %s, port %d\n", test->server_hostname, test->server_port);
+
+    FD_ZERO(&test->read_set);
+    FD_ZERO(&test->write_set);
+
+    get_uuid(test->cookie);
+
+    /* Create and connect the control channel */
+    test->ctrl_sck = netdial(Ptcp, test->server_hostname, test->server_port);
+    if (test->ctrl_sck < 0) {
+        i_errno = IECONNECT;
+        return (-1);
+    }
+
+    if (Nwrite(test->ctrl_sck, test->cookie, COOKIE_SIZE, Ptcp) < 0) {
+        i_errno = IESENDCOOKIE;
+        return (-1);
+    }
+
+    FD_SET(test->ctrl_sck, &test->read_set);
+    FD_SET(test->ctrl_sck, &test->write_set);
+    test->max_fd = (test->ctrl_sck > test->max_fd) ? test->ctrl_sck : test->max_fd;
+
+    return (0);
+}
+
+
+int
+iperf_client_end(struct iperf_test *test)
+{
+    struct iperf_stream *sp, *np;
+
+    /* show final summary */
+    test->reporter_callback(test);
+
+    /* Deleting all streams - CAN CHANGE FREE_STREAM FN */
+    for (sp = test->streams; sp; sp = np) {
+        close(sp->socket);
+        np = sp->next;
+        iperf_free_stream(sp);
+    }
+
+    test->state = IPERF_DONE;
+    if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
+        i_errno = IESENDMESSAGE;
+        return (-1);
+    }
+
+    return (0);
+}
+
+
+int
+iperf_run_client(struct iperf_test * test)
+{
+    int result;
+    fd_set temp_read_set, temp_write_set;
+    struct timeval tv;
+
+    /* Start the client and connect to the server */
+    if (iperf_connect(test) < 0) {
+        return (-1);
+    }
+
+    // XXX: Do we need to check signal() for errors?
+    signal(SIGINT, sig_handler);
+    if (setjmp(env)) {
+        test->state = CLIENT_TERMINATE;
+        if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
+            i_errno = IESENDMESSAGE;
+            return (-1);
+        }
+        exit(1);
+    }
+
+    while (test->state != IPERF_DONE) {
+
+        memcpy(&temp_read_set, &test->read_set, sizeof(fd_set));
+        memcpy(&temp_write_set, &test->write_set, sizeof(fd_set));
+        tv.tv_sec = 15;
+        tv.tv_usec = 0;
+
+        result = select(test->max_fd + 1, &temp_read_set, &temp_write_set, NULL, &tv);
+        if (result < 0 && errno != EINTR) {
+            i_errno = IESELECT;
+            return (-1);
+        } else if (result > 0) {
+            if (FD_ISSET(test->ctrl_sck, &temp_read_set)) {
+                if (iperf_handle_message_client(test) < 0)
+                    return (-1);
+                FD_CLR(test->ctrl_sck, &temp_read_set);
+            }
+
+            if (test->state == TEST_RUNNING) {
+                if (test->reverse) {
+                    // Reverse mode. Client receives.
+                    if (iperf_recv(test) < 0)
+                        return (-1);
+                } else {
+                    // Regular mode. Client sends.
+                    if (iperf_send(test) < 0)
+                        return (-1);
+                }
+
+                /* Perform callbacks */
+                if (timer_expired(test->stats_timer)) {
+                    test->stats_callback(test);
+                    if (update_timer(test->stats_timer, test->stats_interval, 0) < 0)
+                        return (-1);
+                }
+                if (timer_expired(test->reporter_timer)) {
+                    test->reporter_callback(test);
+                    if (update_timer(test->reporter_timer, test->reporter_interval, 0) < 0)
+                        return (-1);
+                }
+
+                /* Send TEST_END if all data has been sent or timer expired */
+                if (all_data_sent(test) || timer_expired(test->timer)) {
+                    test->stats_callback(test);
+                    test->state = TEST_END;
+                    if (Nwrite(test->ctrl_sck, &test->state, sizeof(char), Ptcp) < 0) {
+                        i_errno = IESENDMESSAGE;
+                        return (-1);
+                    }
+                }
+            }
+        }
+    }
+
+    return (0);
+}
diff --git a/src/iperf_client_api.h b/src/iperf_client_api.h
new file mode 100644
index 0000000..1bc683d
--- /dev/null
+++ b/src/iperf_client_api.h
@@ -0,0 +1,18 @@
+
+#ifndef __IPERF_CLIENT_API_H
+#define __IPERF_CLIENT_API_H
+
+#include "iperf.h"
+
+int iperf_run_client(struct iperf_test *);
+
+int iperf_connect(struct iperf_test *);
+
+int iperf_create_streams(struct iperf_test *);
+
+int iperf_handle_message_client(struct iperf_test *);
+
+int iperf_client_end(struct iperf_test *);
+
+#endif
+
diff --git a/src/iperf_server_api.h b/src/iperf_server_api.h
index d1d7abb..0574c80 100644
--- a/src/iperf_server_api.h
+++ b/src/iperf_server_api.h
@@ -1,3 +1,4 @@
+
 #ifndef __IPERF_SERVER_API_H
 #define __IPERF_SERVER_API_H
 
@@ -14,3 +15,4 @@
 void iperf_test_reset(struct iperf_test *);
 
 #endif
+
diff --git a/src/main.c b/src/main.c
index 996bea6..c05a426 100644
--- a/src/main.c
+++ b/src/main.c
@@ -25,6 +25,7 @@
 
 #include "iperf.h"
 #include "iperf_api.h"
+#include "iperf_client_api.h"
 #include "iperf_server_api.h"
 #include "units.h"
 #include "locale.h"