Exemplo n.º 1
0
int main(int argc, char **argv)
{
    su_peer_t sar;
    char ip[256], errinfo[256];

    signal(SIGINT, sigint);

    /* Targer address domain parse */
    if (domain_parse(argv[1], ip, sizeof(ip), errinfo, sizeof(errinfo)) < 0)
        err_quit("Destination parse failed %s", errinfo);
    log_msg("Destination %s", ip);

	if (argc != 2 && argc != 3)
		err_quit("usage: udpcli <Destination> [Port Default 7]");

#if 0
	struct sockaddr_in servaddr;
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = PF_INET;
    servaddr.sin_port = htons(argc == 2 ? 7 : atoi(argv[2]));
	Inet_pton(AF_INET, ip, &servaddr.sin_addr);
#else
	struct sockaddr_in6 servaddr;
    char ip6[INET6_ADDRSTRLEN];
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin6_family = PF_INET6;
    servaddr.sin6_port = htons(argc == 2 ? 7 : atoi(argv[2]));

    // IPv4 to IPv6
    snprintf(ip6, sizeof(ip6),"::ffff:%s", ip);
    log_msg("Target IPv6 %s", ip6);
	Inet_pton(AF_INET6, ip6, &servaddr.sin6_addr.s6_addr);
#endif

#if 1
    /* Using random free port */
    if (su_peer_create(&sar, (SA*)&servaddr, sizeof(servaddr)) < 0)
        err_quit("su_peer_create error");
#else
    /* Using bind configure port */
    if (su_peer_create_bind(&sar, 10000, (SA*)&servaddr, sizeof(servaddr)) < 0)
        err_sys("su_peer_create_bind error");
#endif

    /* Install the reliable request handler */
    su_peer_reliable_request_handle_install(&sar, udpin_reliable);
    /* Install the ordinary request handler */
    su_peer_ordinary_request_handle_install(&sar, udpin_ordinary);

#if 1
    // send reliable data to target
	//cli_su_peer_request(stdin, &sar);
    cli_su_peer_request_random(&sar);
#else
    // send ordinary data to target
	cli_su_peer_send(stdin, &sar);
#endif

    return 0;
    exit(0);
}
Exemplo n.º 2
0
int su_peer_create(su_peer_t *psar, const SA *ptoaddr, socklen_t servlen)
{
    return su_peer_create_bind(psar, 0, ptoaddr, servlen);
}