1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-24 08:29:04 +00:00
Files
nmap/nsock/tests/connect.c
henri 3776852557 Added simple TCP connect test and setup ncat listeners.
The listeners are ncat-based echo servers:
  - UDP
  - TCP
  - TCP + SSL
2013-05-10 08:26:48 +00:00

78 lines
1.8 KiB
C

/*
* Nsock regression test suite
* Same license as nmap -- see http://nmap.org/book/man-legal.html
*/
#include "test-common.h"
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
struct connect_test_data {
nsock_pool nsp;
nsock_iod nsi;
enum nse_status connect_result;
};
static void connect_handler(nsock_pool nsp, nsock_event nse, void *udata) {
struct connect_test_data *ctd;
ctd = (struct connect_test_data *)nsp_getud(nsp);
ctd->connect_result = nse_status(nse);
}
static int connect_setup(void **tdata) {
struct connect_test_data *ctd;
ctd = calloc(1, sizeof(struct connect_test_data));
if (ctd == NULL)
return -ENOMEM;
ctd->nsp = nsp_new(ctd);
AssertNonNull(ctd->nsp);
ctd->nsi = nsi_new(ctd->nsp, NULL);
AssertNonNull(ctd->nsi);
*tdata = ctd;
return 0;
}
static int connect_teardown(void *tdata) {
struct connect_test_data *ctd = (struct connect_test_data *)tdata;
if (tdata) {
nsi_delete(ctd->nsi, NSOCK_PENDING_SILENT); /* nsp_delete would also handle it */
nsp_delete(ctd->nsp);
free(tdata);
}
return 0;
}
static int connect_tcp(void *tdata) {
struct connect_test_data *ctd = (struct connect_test_data *)tdata;
struct sockaddr_in peer;
memset(&peer, 0, sizeof(peer));
peer.sin_family = AF_INET;
inet_aton("127.0.0.1", &peer.sin_addr);
nsock_connect_tcp(ctd->nsp, ctd->nsi, connect_handler, 4000, NULL,
(struct sockaddr *)&peer, sizeof(peer), PORT_TCP);
nsock_loop(ctd->nsp, 4000);
AssertEqual(ctd->connect_result, NSE_STATUS_SUCCESS);
return 0;
}
const struct test_case TestConnectTCP = {
.t_name = "simple tcp connection",
.t_setup = connect_setup,
.t_run = connect_tcp,
.t_teardown = connect_teardown
};