Esempio n. 1
0
/**
	UDPSend
*/
int udpsend(int localport,char* dstip,int dstport,char* msg, int len)
{
	struct sockaddr_in ina;
	int i;

	i=udpbyport(localport);
	if (i<0) i=udpcreate(localport);
	if (i>=0)
	{
		ina.sin_family = AF_INET;
		ina.sin_port   = htons((unsigned short)dstport);
		ina.sin_addr.s_addr = inet_addr_bin(dstip);

		// hack pour dns. dans le bytecode de simu, on considère que
		// 192.168.1.1 est le dns. Si on essaie d'envoyer un paquet à
		// cette adresse, il faut translater vers le "vrai" dns.
		in_addr_t ip_192_168_1_1 = inet_addr("192.168.1.1");
		if (!memcmp(&(ina.sin_addr),&ip_192_168_1_1, sizeof(ip_192_168_1_1))) {
			my_printf(LOG_SIMUNET, "Sockets : (hack) converting 192.168.1.1 to real dns ip\n");
			res_init();
			if (_res.nscount <= 0) { my_printf(LOG_SIMUNET, "Fatal error: no DNS available. Should abort\n"); return 0; };
			ina.sin_addr = _res.nsaddr_list[0].sin_addr;
		}

		my_printf(LOG_SIMUNET, "Sockets : send %d bytes on chn %d\n",len,i);
		sendto(udp_sock[i],msg,len,0,(struct sockaddr *)&ina,sizeof(ina));
		return 0;
	}
	return -1;
}
Esempio n. 2
0
//process
PROCESS_THREAD(ntp_client_Process, ev, data)
{
    static struct etimer ntp_timer;
    PROCESS_BEGIN();
    //printf("ntp_client_Process begin\n");
    
    process_start(&ntp_connectPprocess, NULL);

    ntp.client_sock = -1;
    ntp.exit_process = 0;
    ntp.retry_cnt = 0;
    
    ntp.client_sock = udpcreate(NTP_LOCAL_PORT, &ntp_connectPprocess);
    if(ntp.client_sock == -1) {
        printf("create udp socket fail");
        ntp.exit_process = 1;
    } else {
        //printf("create socket:%d\n", ntp.client_sock);
        //us.pool.ntp.org(108.61.56.35)
        if( uiplib_ipaddrconv("108.61.56.35", &ntp.server_ip)  == 0) {
            printf("erro ip format\n");
            ntp.exit_process = 1;
        }
    }
    
    memset( &packet, 0, sizeof( ntp_packet ) );
    *( ( char * ) &packet + 0 ) = 0x1b; // Represents 27 in base 10 or 00011011 in base 2.
    
    while(!ntp.exit_process) {
        if(ntp.retry_cnt > MAX_RETRYCNT) {
            printf("ntp client can not rece ntp server data, please check network\n");
            break;
        }
        etimer_set(&ntp_timer, 1 * CLOCK_SECOND);
        PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);

        if(udpsendto(ntp.client_sock, (char *)&packet, sizeof(packet), &ntp.server_ip, NTP_SERVER_PORT) == -1) {
            printf("udpsendto fail\n");
        }
        ntp.retry_cnt++;
    }

    if(udpclose(ntp.client_sock) == -1) {
        printf("udpclose fail\n");
    }
    process_post_synch(&ntp_connectPprocess, PROCESS_EVENT_EXIT, NULL);
    //printf("ntp_client_Process end\n");
    PROCESS_END();
}