%% options copyright owner = Dirk Krause copyright year = 2012-2013 license = bsd %% module #define TEST_PEERS 1 #define TEST_HTTP_CLIENT 1 #define TEST_PEER_COMPARE 1 #include "dk3all.h" #include "dk3sock.h" $(trace-include) #define USE_DNS_NAME 0 static dkChar const gn[] = { dkT("dkt3-test") } ; static char const rq[] = { "GET / HTTP/1.0\n\n" }; static char const hn[] = { #if USE_DNS_NAME "studium.e-technik.fh-schmalkalden.de" #else "194.94.29.30" #endif }; static char const * const remote_addresses[] = { $!string-table 127.0.0.1 127.0.0.1/255.0.0.0 127.0.0.1/8 127.0.0.1/32 194.94.29.100 194.94.29.100/255.0.0.0 194.94.29.100/8 194.94.29.100/255.255.255.255 194.94.29.100/32 fs.e-technik.fh-schmalkalden.de fs.e-technik.fh-schmalkalden.de/24 fs.e-technik.fh-schmalkalden.de/255.255.255.0 fs.e-technik.fh-schmalkalden.de/255.255.255.255 ::1 ::1/128 ::1/64 ::1/::1 $!end }; static void show_allowed_peer(dk3_peer_allowed_t *pp) { unsigned long ip4; unsigned long ma4; #if DK3_HAVE_STRUCT_SOCKADDR_IN6 int i; IN6_ADDR *ip6; IN6_ADDR *ma6; #endif if(pp->wh) { printf("IPv6 "); #if DK3_HAVE_STRUCT_SOCKADDR_IN6 ip6 = &((pp->d).ip6.ad); for(i = 0; i < 16; i++) { if(i) { if(!(i % 2)) fputc(':', stdout); } printf("%02x", (int)(ip6->s6_addr[i])); } fputc('/', stdout); ip6 = &((pp->d).ip6.ma); for(i = 0; i < 16; i++) { if(i) { if(!(i% 2)) fputc(':', stdout); } printf("%02x", (int)(ip6->s6_addr[i])); } #endif printf("\n"); } else { ip4 = ntohl((pp->d).ip4.ad.s_addr); ma4 = ntohl((pp->d).ip4.ma.s_addr); printf( "IPv4 %lu.%lu.%lu.%lu/%lu.%lu.%lu.%lu\n", ((ip4 >> 24) & 0x000000FFUL), ((ip4 >> 16) & 0x000000FFUL), ((ip4 >> 8) & 0x000000FFUL), ((ip4 ) & 0x000000FFUL), ((ma4 >> 24) & 0x000000FFUL), ((ma4 >> 16) & 0x000000FFUL), ((ma4 >> 8) & 0x000000FFUL), ((ma4 ) & 0x000000FFUL) ); } } DK3_MAIN { char bu[4096]; dk3_app_t *app; dk3_socket_t sfd; int rdbytes; $!trace-init test-sock.deb $? "+ main" app = dk3app_open_command(argc, (dkChar const * const *)argv, gn); if(app) { $? ". app" #if TEST_HTTP_CLIENT { sfd = dk3socket_open_net_stream_client(hn, 80, 9876, 10L, 0L, NULL, app); if(INVALID_SOCKET != sfd) { $? ". sfd" if(dk3socket_send(sfd, rq, strlen(rq), 10L, 0L, NULL, app)) { $? ". send" if(dk3socket_shutdown(sfd, DK3_TCPIP_SHUTDOWN_WRITE, NULL, app)) { $? ". shutdown" do { rdbytes = dk3socket_recv(sfd, bu, sizeof(bu), 10L, 0L, NULL, app); if(rdbytes > 0) { $? ". rdbyts = %d", rdbytes fwrite(bu, 1, (size_t)rdbytes, stdout); } } while(rdbytes > 0); fputc('\n', stdout); fflush(stdout); } else { $? "! shutdown" } } else { $? "! send" } dk3socket_close(sfd, NULL, app); } else { $? "! sfd" } } #endif #if TEST_PEERS { char const * const *raptr; dk3_peer_allowed_t apeer; raptr = remote_addresses; while(*raptr) { fputs(*raptr, stdout); fputc('\n', stdout); if(dk3socket_set_peer(&apeer, *raptr, NULL, app)) { $? ". found" show_allowed_peer(&apeer); } else { $? "! not found" } fputc('\n', stdout); raptr++; } } #endif #if TEST_PEER_COMPARE { dk3_peer_allowed_t apeer; dk3_peer_allowed_t *pp; char const * const *raptr; dk3_sto_t *s_peers; dk3_sto_it_t *i_peers; s_peers = dk3sto_open_app(app); if(s_peers) { dk3sto_set_comp(s_peers, dk3socket_compare_peer, 0); i_peers = dk3sto_it_open(s_peers); if(i_peers) { raptr = remote_addresses; while(*raptr) { if(dk3socket_set_peer(&apeer, *raptr, NULL, app)) { pp = dk3_new_app(dk3_peer_allowed_t,1,app); if(pp) { dk3mem_cpy( (void *)pp, (void *)(&apeer), sizeof(dk3_peer_allowed_t) ); if(!dk3sto_add(s_peers, (void *)pp)) { dk3_delete(pp) } } } raptr++; } dk3sto_it_reset(i_peers); while(NULL != (pp = (dk3_peer_allowed_t *)dk3sto_it_next(i_peers))) { show_allowed_peer(pp); dk3_delete(pp) } dk3sto_it_close(i_peers); } } } #endif dk3app_close(app); } else { $? "! app" /* ##### ERROR: Memory */ } $? "- main" $!trace-end exit(0); return 0; }