void ns_hexdump_connection(struct ns_connection *nc, const char *path, int num_bytes, int ev) { const struct mbuf *io = ev == NS_SEND ? &nc->send_mbuf : &nc->recv_mbuf; FILE *fp; char *buf, src[60], dst[60]; int buf_size = num_bytes * 5 + 100; if ((fp = fopen(path, "a")) != NULL) { ns_sock_to_str(nc->sock, src, sizeof(src), 3); ns_sock_to_str(nc->sock, dst, sizeof(dst), 7); fprintf(fp, "%lu %p %s %s %s %d\n", (unsigned long) time(NULL), nc->user_data, src, ev == NS_RECV ? "<-" : ev == NS_SEND ? "->" : ev == NS_ACCEPT ? "<A" : ev == NS_CONNECT ? "C>" : "XX", dst, num_bytes); if (num_bytes > 0 && (buf = (char *) NS_MALLOC(buf_size)) != NULL) { ns_hexdump(io->buf + (ev == NS_SEND ? 0 : io->len) - (ev == NS_SEND ? 0 : num_bytes), num_bytes, buf, buf_size); fprintf(fp, "%s", buf); NS_FREE(buf); } fclose(fp); } }
static const char *test_mgr_with_ssl(int use_ssl) { char addr[100] = "127.0.0.1:0", ip[sizeof(addr)], buf[100] = ""; struct ns_mgr mgr; struct ns_connection *nc; int port, port2; #ifndef NS_ENABLE_SSL (void)use_ssl; #endif ns_mgr_init(&mgr, NULL); /* mgr.hexdump_file = "/dev/stdout"; */ ASSERT((nc = ns_bind(&mgr, addr, eh1)) != NULL); port2 = htons(nc->sa.sin.sin_port); ASSERT(port2 > 0); #ifdef NS_ENABLE_SSL if (use_ssl) { ASSERT(ns_set_ssl(nc, S_PEM, CA_PEM) == NULL); } #endif ns_sock_to_str(nc->sock, addr, sizeof(addr), 3); ASSERT(sscanf(addr, "%[^:]:%d", ip, &port) == 2); ASSERT(strcmp(ip, "127.0.0.1") == 0); ASSERT(port == port2); ASSERT((nc = ns_connect(&mgr, addr, eh1)) != NULL); #ifdef NS_ENABLE_SSL if (use_ssl) { ASSERT(ns_set_ssl(nc, C_PEM, CA_PEM) == NULL); } #endif nc->user_data = buf; poll_mgr(&mgr, 50); ASSERT(strcmp(buf, "ok!") == 0); ns_mgr_free(&mgr); return NULL; }