Example #1
0
int cb_udp_server_start(cb_msg_callback cbmsg)
{
	int i = 0;
	int ret;
	char* recv_buf;
	SOCKET sock;
	recv_buf = (char*)malloc(512);
	if(recv_buf == NULL)
	{
		fprintf(stdout, "malloc failed!\n");
		return -1;
	}
	memset(recv_buf, 0, 512);
	socket_init();
	udp_socket(&sock);
	udp_bind(&sock, 5060);
	while(1)
	{
		ret = cbmsg(&sock, recv_buf, LOCAL_HOST, 5061);
		if(ret == 0)
		{
			printf("udp client connect times = %d\n", i);
			printf("udp receive buffer: %s\n", (char*)recv_buf);
			memset(recv_buf, 0, 512);
			i++;
		}
	}
	return 0;
}
Example #2
0
void *
tftp_udplisten(ip_addr fhost, unshort fport, unshort * lport, void *ptr)
{
   UDPCONN u;
   unshort tmpport;  /* tmp holder for local port value */

   /* first, get a local port for use on this connection */
   if (*lport == 0)   /* caller wants us to allocate one */
      tmpport = udp_socket();
   else  /* use port passed */
      tmpport = *lport;

   if (ptr == NULL)
      ptr = TFTPSERVER;  /* indicate server */

   u = udp_open(fhost, fport, tmpport, tftp_upcall, (void *)ptr);

   if (u)
   {
      *lport = tmpport;       /* return local port to caller */
      return ((void *)u);     /* success */
   }
   else
      return (void *)NULL;    /* error */
}
Example #3
0
extern int send_rescueack(unsigned short no, unsigned short lo)
{
	ebuf_t *buf = NULL;
	int acksocket;
	char tftpnull;
	int res, i;

	/*
	 * Open a UDP socket to the TFTP server
	 */
	acksocket = udp_socket(UDP_PROTO_TFTP);
	res = udp_bind(acksocket, 69);
	if (res < 0) {
		return res;
	}
	udp_connect(acksocket, ackport);
	for (i = 0; i < 1; i++) {
		buf = udp_alloc();
		if (!buf)
			return -1;
		/*
		 * Send the data
		 */
		ebuf_append_u16_be(buf, no);
		ebuf_append_u16_be(buf, lo);
		ebuf_append_bytes(buf,&tftpnull, 0);
		udp_send(acksocket ,buf, tftpipto);
	}
	if (buf)
		udp_free(buf);
	udp_close(acksocket);
	return 0;
}
Example #4
0
int syscall_handler(int num, struct syscall_arguments *args)
{
    interrupt_unmask();
    
    switch (num)
    {
        case ADDPROCESS:
            interrupt_mask();
                process_add((void (*)())args->arg1);
            interrupt_unmask();
        break;
        case YIELD:
            interrupt_sleepinsyscall();
        break;
        
        case UDPSEND:
            return udp_output(args->arg1, (struct sockaddr*)args->arg2, 
                (char *)args->arg3, args->arg4);
        break;
        case UDPRECV:
            return udp_recvfrom(args->arg1, (struct sockaddr*)args->arg2, 
                (char *)args->arg3, args->arg4);
        break;
        case UDPSOCKET: 
            return udp_socket();
        break;
        case UDPBIND:
            return udp_bind(args->arg1, (struct sockaddr*)args->arg2);
        break;
        case UDPCLOSE:
            return udp_close(args->arg1);
        break;
        
        case TCPCONNECT:
            return tcp_connect(args->arg1, (struct sockaddr*)args->arg2);
        break;
        
        case TCPSEND:
            return tcp_send(args->arg1, (char *)args->arg2, args->arg3);
        break;
        case TCPRECV:
            return tcp_recv(args->arg1, (char *)args->arg2, args->arg3);
        break;
        case TCPSOCKET: 
            return tcp_socket();
        break;
        case TCPBIND:
            return tcp_bind(args->arg1, (struct sockaddr*)args->arg2);
        break;
        case TCPCLOSE:
            return tcp_close(args->arg1);
        break;
        case TCPLISTEN:
            return tcp_listen(args->arg1);
        break;
    }
    
    return 0;
}
Example #5
0
void arm_init(void){
	slock_enable = true;
	sd = udp_socket();
	if(sd < 0){
		return;
	}
	if(connect(sd, ARM_ADDR, sizeof(struct sockaddr_in)) < 0){
		perror("arm_init: connect() failed");
		close(sd);
	}
}
Example #6
0
void rollcontrol_init(void){
	set_armed(false);

	sd = udp_socket();
	if(sd < 0){
		return;
	}
	if(connect(sd, RC_SERVO_ENABLE_ADDR, sizeof(struct sockaddr_in)) < 0){
		perror("rollcontrol_init: connect() failed");
		close(sd);
	}

}
Example #7
0
int
udp_flood(void * pio)
{
   int      i;          /* index */
   int      e;          /* tmp error holder */
   int      send_err;   /* total send error count */
   int      no_pkt;     /* times packet get failed */
   u_short  lport;      /* local port for send (random) */
   PACKET   p;
   int      addr_index; /* index into floodtargs[] */

   ns_printf(pio, "sending UDP flood of %ld pkts to %u.%u.%u.%u\n", 
      pktcount, PUSH_IPADDR(activehost) );

   lport = udp_socket();
   e = send_err = no_pkt = 0;

   addr_index = 0;
   for (i = 0; i < pktcount; i++)
   {
      p = udp_alloc((unsigned)deflength, 0);        /* get packet for sending */
      if(!p)
      {
/*         ns_printf(pio, "pkt alloc failed on send #%d\n", i); */
         no_pkt++;
         continue;
      }
      p->nb_plen = deflength;
      /* if floodtargs array has any entries rotate through them, else send all
       * of the packets to activehost
       */
      if(floodtargs[0] == 0)
         p->fhost = activehost;
      else
      {
         p->fhost = floodtargs[addr_index++];   /* get next host */
         if(floodtargs[addr_index++] == 0)      /* wrap if at end of list */
            addr_index = 0;
      }
      e = udp_send(lport, fport, p);
      if(e)
      {
         send_err++;
/*          ns_printf(pio, "UDP send error %d on %d\n", e, i); */
         continue;
      }
   }
   ns_printf(pio, "sent %d pkts, %d errors, %d no-pkt, last return code: %d\n", 
      i - no_pkt, send_err, no_pkt, e);
   return e;
}
Example #8
0
int udp_client_start(char* ip, u_short port, char* send_buf = NULL)
{
	SOCKET sock;
	if(send_buf == NULL)
	{
		send_buf = (char*)malloc(64);
		memset(send_buf, 'U', 64);
		send_buf[64] = '\0';
	}
	socket_init();
	udp_socket(&sock);
	udp_bind(&sock, 5061);
	udp_sendto(&sock, send_buf, ip, port);
	return 0;
}
Example #9
0
void udp_task (void *data)
{
	int i;
	buf_t *p;
	unsigned old_count = 0;
	unsigned long start, end, elapsed;
	unsigned long long bytes;
	
	start = timer_milliseconds (&timer);

	debug_printf ("Press ENTER to start sending to %d.%d.%d.%d:%d\n", server_ip[0],
		server_ip[1], server_ip[2], server_ip[3], PORT);
	debug_getchar ();
	
	udp_socket (&sock, &ip, PORT);
	trace_udp.udps_ip = (unsigned)sock.ip;

	for (;;) {
		p = buf_alloc (&pool, BUF_SIZE * 4, 42);

		for (i = 0; i < BUF_SIZE; ++i) 
			buf[i] = count++;
		memcpy (p->payload, buf, sizeof(buf));

        if (!udp_sendto (&sock, p, server_ip, PORT)){
            count -= BUF_SIZE;
            debug_printf ("Press ENTER to start sending to %@.4D:%d\n", server_ip, PORT);
            while (debug_peekchar () < 0)
                task_yield();
            debug_getchar ();
        }
		
		if (timer_passed (&timer, start, 1000)) {
			end = timer_milliseconds (&timer);
			elapsed = end - start;
			bytes = (count - old_count) << 2;
			old_count = count;
			debug_printf ("snd rate: %lu (bytes/sec)\n", (unsigned) (bytes * 1000 / elapsed));
			start = end;
		}
	}
}
Example #10
0
int nsapi_tests(const char *name, NetworkInterface *iface, const char *test_address, uint16_t test_port)
{
  TCPSocket tcp_socket(iface);
  UDPSocket udp_socket(iface);

  int ret = 0;

  printf("--- Running NetworkInterface Tests ---\r\n\r\n");
  ret |= nsapi_ni_run_test("nsapi_ni_isConnected_test", iface, &nsapi_ni_isConnected_test);
  ret |= nsapi_ni_run_test("nsapi_ni_getIPAddress_test", iface, &nsapi_ni_getIPAddress_test);
  ret |= nsapi_ni_run_test("nsapi_ni_getMACAddress_test", iface, &nsapi_ni_getMACAddress_test);
  ret |= nsapi_ni_run_test("nsapi_ni_getHostByName_test", iface, &nsapi_ni_getHostByName_test);

  printf("\r\n\r\n--- Running TCPSocket Tests ---\r\n\r\n");
  ret |= nsapi_socket_run_test("nsapi_socket_open_test", &tcp_socket, test_address, test_port, &nsapi_socket_open_test);
  ret |= nsapi_socket_run_test("nsapi_socket_getIpAddress_test", &tcp_socket, test_address, test_port, &nsapi_socket_getIpAddress_test);
  ret |= nsapi_socket_run_test("nsapi_socket_getPort_test", &tcp_socket, test_address, test_port, &nsapi_socket_getPort_test);
  ret |= nsapi_socket_run_test("nsapi_socket_blocking_test", &tcp_socket, test_address, test_port, &nsapi_socket_blocking_test);
  ret |= nsapi_socket_run_test("nsapi_socket_non_blocking_test", &tcp_socket, test_address, test_port, &nsapi_socket_non_blocking_test);
  ret |= nsapi_socket_run_test("nsapi_socket_close_test", &tcp_socket, test_address, test_port, &nsapi_socket_close_test);


  printf("\r\n\r\n--- Running UDPSocket Tests ---\r\n\r\n");
  ret |= nsapi_socket_run_test("nsapi_socket_open_test", &udp_socket, test_address, test_port, &nsapi_socket_open_test);
  ret |= nsapi_socket_run_test("nsapi_socket_getIpAddress_test", &udp_socket, test_address, test_port, &nsapi_socket_getIpAddress_test);
  ret |= nsapi_socket_run_test("nsapi_socket_getPort_test", &udp_socket, test_address, test_port, &nsapi_socket_getPort_test);
  ret |= nsapi_socket_run_test("nsapi_socket_blocking_test", &udp_socket, test_address, test_port, &nsapi_socket_blocking_test);
  ret |= nsapi_socket_run_test("nsapi_socket_non_blocking_test", &udp_socket, test_address, test_port, &nsapi_socket_non_blocking_test);
  ret |= nsapi_socket_run_test("nsapi_socket_close_test", &udp_socket, test_address, test_port, &nsapi_socket_close_test);

  if (ret == 0) {
    printf("\r\n\r\n--- ALL TESTS PASSING ---\r\n");
  } else {
    printf("\r\n\r\n--- TEST FAILURES OCCURRED ---\r\n");
  }

  return ret != 0;
}
static int _tftpd_open(tftp_info_t *info,char *hostname,char *filename,int mode)
{
    ebuf_t *buf = NULL;
    uint16_t type;
    int res;
    int retries;
    char ch = 0;

    /*
     * Open a UDP socket
     */    

    info->tftp_socket = udp_socket(UDP_PROTO_TFTP);
    info->tftp_lastblock = 0;
    info->tftp_error = 0;
    info->tftp_filemode = mode;

    /*
     * Listen for requests
     */

    res = udp_bind(info->tftp_socket,UDP_PROTO_TFTP);
    if (res < 0) return res;

    res = CFE_ERR_TIMEOUT;

    for (retries = 0; retries < tftp_max_retries; retries++) {
	while (console_status()) {
	    console_read(&ch,1);
	    if (ch == 3) break;
	}
	if (ch == 3) {
	    res = CFE_ERR_INTR;
	    break;
	}

	buf = udp_recv_with_timeout(info->tftp_socket,tftp_recv_timeout);
	if (buf == NULL) continue;

	/*
	 * Process the request
	 */

	ebuf_get_u16_be(buf,type);

	switch (type) {
	    case TFTP_OP_RRQ:
		udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
		memcpy(info->tftp_ipaddr,buf->eb_usrptr,IP_ADDR_LEN);
		info->tftp_blknum = 1;
		info->tftp_blklen = 0;
		res = 0;
		break;

	    case TFTP_OP_WRQ:
		udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
		memcpy(info->tftp_ipaddr,buf->eb_usrptr,IP_ADDR_LEN);
		info->tftp_blknum = 0;
		res = _tftp_readmore(info);
		break;

	    default:
		/* 
		 * we aren't expecting any of these messages
		 */
		res = CFE_ERR_PROTOCOLERR;
		break;
	}

	udp_free(buf);
	break;
    }

    if (res) {
	udp_close(info->tftp_socket);
	info->tftp_socket = -1;
    }

    return res;
}
int main(int argc, char **argv)
{

    int i,j;

    int flags = fcntl(0, F_GETFL, 0); /* get current file status flags */
    flags |= O_NONBLOCK; /* turn off blocking flag */
    fcntl(0, F_SETFL, flags);

    int status;
    struct VISION_TASK visionTask;

    unsigned long nb = 0;

    /* Messaging used for GPP/DSP synchronization */
    struct DSP_MSG msgToDsp;
    struct DSP_MSG msgFromDsp;

    system("sysctl -w kernel.shmmax=134217728");
    system("sysctl -w kernel.shmall=134217728");
    system("./cexec.out -T ddspbase_tiomap3430.dof64P");

    //Image structures initailization
    struct img_struct* img_new = malloc(sizeof(struct img_struct));
    img_new->w = VIDEO_IN_W;
    img_new->h = VIDEO_IN_H;

    struct img_struct* img_dsp = malloc(sizeof(struct img_struct));
    img_dsp->w = VIDEO_OUT_W;
    img_dsp->h = VIDEO_OUT_H;

    if(DSPVisionOpen(&visionTask,img_new, img_dsp)!=0)
    {
        printf("Fail to open DSP Vision\n");
        return EXIT_FAILURE;
    }

    //Video streaming initilization
    // Video Input
    struct vid_struct vid;
    vid.device = (char*)"/dev/video1";
    vid.w=VIDEO_IN_W;
    vid.h=VIDEO_IN_H;
    vid.n_buffers = 4;
    if (video_init(&vid)<0)
    {
        printf("Error initialising video\n");
        return EXIT_FAILURE;
    }

    // Video Resizing
    uint8_t quality_factor = 50; // From 0 to 99 (99=high)
    uint8_t dri_jpeg_header = 0;

    int millisleep = 10;

    struct img_struct small;
    small.w = vid.w / DOWNSIZE_FACTOR;
    small.h = vid.h / DOWNSIZE_FACTOR;
    small.buf = (uint8_t*)malloc(small.w*small.h*2);


    // Video Compression
    uint8_t* jpegbuf = (uint8_t*)malloc(vid.h*vid.w*2);

    // Network Transmit
    struct UdpSocket* vsock;
    vsock = udp_socket("192.168.1.255", 5000, 5001, FMS_BROADCAST);

    struct sigaction action;
    memset(&action, 0, sizeof(action));
    action.sa_handler = &sigint_handler;
    sigaction(SIGINT, &action, &old_action);

    struct timespec start,end;
    unsigned long diffTime;

    printf("Vision started...\n");

    while(visionRun)
    {
        //usleep(1000 * millisleep);
        diffTime = 0;
        clock_gettime(CLOCK_MONOTONIC,&start);
        while(diffTime<100000)
        {
            clock_gettime(CLOCK_MONOTONIC, &end);
            diffTime = ((end.tv_sec - start.tv_sec)*1000000000 + (end.tv_nsec - start.tv_nsec))/1000;
        }

        //Get picture
        video_grab_image(&vid, img_new);

        printf("d... ");

        clock_gettime(CLOCK_MONOTONIC, &start);
        //Send it to the DSP
        DSPProcessor_FlushMemory(visionTask.hProcessor, (PVOID)(visionTask.bufferSend),SIZEBUFF2DSP,0);
        msgToDsp.dwCmd = VISION_WRITEREADY;
        msgToDsp.dwArg1 = (DWORD)SIZEBUFF2DSP / g_dwDSPWordSize;
        status = DSPNode_PutMessage(visionTask.hNode, &msgToDsp,  DSP_FOREVER);
        if (DSP_FAILED(status)) {
            fprintf(stdout, "DSPProcessor_PutMessage failed. Status = 0x%x\n", (UINT)status);
        }

        //Read back
        status = DSPNode_GetMessage(visionTask.hNode, &msgFromDsp, DSP_FOREVER);
        if (DSP_FAILED(status)) {
            fprintf(stdout, "DSPProcessor_GetMessage failed. Status = 0x%x\n", (UINT)status);
        }
        // Go ahead and flush here
        DSPProcessor_InvalidateMemory(visionTask.hProcessor, (PVOID)(visionTask.bufferReceive),SIZEBUFF2MPU);

        clock_gettime(CLOCK_MONOTONIC, &end);
        diffTime = ((end.tv_sec - start.tv_sec)*1000000000 + (end.tv_nsec - start.tv_nsec))/1000;
        printf("%d us\n", diffTime);

        printf("Send picture %d\n", nb++);
        send_rtp_frame(
            vsock,            // UDP
            img_dsp->buf,msgFromDsp.dwArg1,     // JPEG
            img_dsp->w/DOWNSIZE_FACTOR, img_dsp->h/DOWNSIZE_FACTOR, // Img Size
            0,                // Format 422
            quality_factor,               // Jpeg-Quality
            dri_jpeg_header,                // DRI Header
            0              // 90kHz time increment
        );
    }

    sigaction(SIGINT, &old_action, NULL);
    video_close(&vid);
    DSPVisionClose(&visionTask);
    return EXIT_SUCCESS;
}
 realtime_plot(unsigned int port = REALTIME_PLOT_DEFAULT_PORT)
 {
     this->port = port;
     this->sock = udp_socket(REALTIME_PLOT_LOCAL_PORT);
 }
static int _tftp_open(tftp_info_t *info,char *hostname,char *filename,int mode)
{
    ebuf_t *buf = NULL;
    const char *datamode = "octet";
    uint16_t type,error,block;
    int res;
    int retries;

    /*
     * Look up the remote host's IP address
     */

    res = dns_lookup(hostname,info->tftp_ipaddr);
    if (res < 0) return res;

    /*
     * Open a UDP socket to the TFTP server
     */    

    info->tftp_socket = udp_socket(UDP_PROTO_TFTP);
    info->tftp_lastblock = 0;
    info->tftp_error = 0;
    info->tftp_filemode = mode;

    /*
     * Try to send the RRQ packet to open the file
     */

    for (retries = 0; retries < tftp_max_retries; retries++) {

	buf = udp_alloc();
	if (!buf) break;

	if (info->tftp_filemode == FILE_MODE_READ) {
	    ebuf_append_u16_be(buf,TFTP_OP_RRQ);	/* read file */
	    }
	else {
	    ebuf_append_u16_be(buf,TFTP_OP_WRQ);	/* write file */
	    }
	ebuf_append_bytes(buf,filename,strlen(filename)+1);
	ebuf_append_bytes(buf,datamode,strlen(datamode)+1);

	udp_send(info->tftp_socket,buf,info->tftp_ipaddr);

	buf = udp_recv_with_timeout(info->tftp_socket,tftp_rrq_timeout);
	if (buf) break;
	}

    /*
     * If we got no response, bail now.
     */

    if (!buf) {
	udp_close(info->tftp_socket);
	info->tftp_socket = -1;
	return CFE_ERR_TIMEOUT;
	}

    /*
     * Otherwise, process the response.
     */

    ebuf_get_u16_be(buf,type);

    switch (type) {
	case TFTP_OP_ACK:
	    /*
	     * Acks are what we get back on a WRQ command,
	     * but are otherwise unexpected.
	     */
	    if (info->tftp_filemode == FILE_MODE_WRITE) {
		udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
		info->tftp_blknum = 1;
		info->tftp_blklen = 0;
		udp_free(buf);
		return 0;
		break;
		}
	    /* fall through */
	case TFTP_OP_RRQ:
	case TFTP_OP_WRQ:
	default:
	    /* 
	     * we aren't expecting any of these messages
	     */
	    udp_free(buf);
	    udp_close(info->tftp_socket);
	    info->tftp_socket = -1;
	    return CFE_ERR_PROTOCOLERR;

	case TFTP_OP_ERROR:
	    ebuf_get_u16_be(buf,error);
	    xprintf("TFTP error %d: %s\n",error,ebuf_ptr(buf));
	    udp_free(buf);
	    udp_close(info->tftp_socket);
	    info->tftp_socket = -1;
	    return CFE_ERR_PROTOCOLERR;

	case TFTP_OP_DATA:
	    /*
	     * Yay, we've got data!  Store the first block.
	     */
	    ebuf_get_u16_be(buf,block);
	    udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
	    info->tftp_blknum = block;
	    info->tftp_blklen = ebuf_length(buf);
	    ebuf_get_bytes(buf,info->tftp_data,ebuf_length(buf));
	    udp_free(buf);
	    if (info->tftp_blklen < TFTP_BLOCKSIZE) {
		info->tftp_lastblock = 1;		/* EOF */
		}
	    return 0;
	    break;
	    
	}
}
Example #15
0
void build_socket( struct fds *all_fds, struct raw_context *self, const char *network_port, struct udp_context *both )
{
	all_fds->udp_server_fd = udp_socket( both, SRV_PORT, true,  network_port );
	all_fds->udp_client_fd = udp_socket( both, CLT_PORT, false, network_port );
}
Example #16
0
int main(int argc, char**argv) {
    ipxs = ipx_socket();
    udps = udp_socket(argv[1]);
    loop(ipxs,udps);
    return 0;
}
Example #17
0
int
main(
	int argc,
	char ** argv
)
{
	/* getopt_long stores the option index here. */
	int option_index = 0;
	int port = 9999;
	const char * config_file = NULL;
	const char * startup_message = "";
	int timeout = 60;
	unsigned width = 512;
	unsigned height = 64;
	int no_init = 0;

	while (1)
	{
		const int c = getopt_long(
			argc,
			argv,
			"vp:c:t:W:H:m:n",
			long_options,
			&option_index
		);

		if (c == -1)
			break;
		switch (c)
		{
		case 'v':
			verbose++;
			break;
		case 'n':
			no_init++;
			break;
		case 'c':
			config_file = optarg;
			break;
		case 't':
			timeout = atoi(optarg);
			break;
		case 'W':
			width = atoi(optarg);
			break;
		case 'H':
			height = atoi(optarg);
			break;
		case 'm':
			startup_message = optarg;
			break;
		default:
			usage();
			return -1;
		}
	}

	const int sock = udp_socket(port);
	if (sock < 0)
		die("socket port %d failed: %s\n", port, strerror(errno));

	const size_t image_size = width * height * 3;
	const size_t buf_size = (width*height*4)/packets_per_frame + 1;

	// largest possible UDP packet
	uint8_t *buf = malloc(buf_size);
#if 0
	if (sizeof(buf) < image_size + 1)
		die("%u x %u too large for UDP\n", width, height);
#endif

	fprintf(stderr, "%u x %u, UDP port %u\n", width, height, port);

	ledscape_config_t * config = &ledscape_matrix_default;
	if (config_file)
	{
		config = ledscape_config(config_file);
		if (!config)
			return EXIT_FAILURE;
	}

	if (config->type == LEDSCAPE_MATRIX)
	{
		config->matrix_config.width = width;
		config->matrix_config.height = height;
	}

	ledscape_t * const leds = ledscape_init(config, no_init);
	if (!leds)
		return EXIT_FAILURE;

	const unsigned report_interval = 10;
	unsigned last_report = 0;
	unsigned long delta_sum = 0;
	unsigned frames = 0;

	uint32_t * const fb = calloc(width*height,4);
	ledscape_printf(fb, width, 0xFF0000, "%s", startup_message);
	ledscape_printf(fb+16*width, width, 0x00FF00, "%dx%d UDP port %d", width, height, port);
	ledscape_draw(leds, fb);

	while (1)
	{
		int rc = wait_socket(sock, timeout*1000);
		if (rc < 0)
		{
			// something failed
			memset(fb, 0, width*height*4);
			ledscape_printf(fb, width, 0xFF0000, "read failed?");
			ledscape_draw(leds, fb);
			exit(EXIT_FAILURE);
		}

		if (rc == 0)
		{
			// go into timeout mode
			memset(fb, 0, width*height*4);
			ledscape_printf(fb, width, 0xFF0000, "timeout");
			ledscape_draw(leds, fb);
			continue;
		}

		const ssize_t rlen = recv(sock, buf, buf_size, 0);
		if (rlen < 0)
			die("recv failed: %s\n", strerror(errno));
		warn_once("received %zu bytes\n", rlen);

		/*
		if (buf[0] == 2)
		{
			// image type
			printf("image type: %.*s\n",
				(int) rlen - 1,
				&buf[1]
			);
			continue;
		}

		if (buf[0] != 1)
		{
			// What is it?
			warn_once("Unknown image type '%c' (%02x)\n",
				buf[0],
				buf[0]
			);
			continue;
		}
		*/
		const unsigned frame_part = buf[0];
		if (frame_part != 0 && frame_part != 1)
		{
			printf("bad type %d\n", frame_part);
			continue;
		}

		if ((size_t) rlen != image_size + 1)
		{
			warn_once("WARNING: Received packet %zu bytes, expected %zu\n",
				rlen,
				image_size + 1
			);
		}

		struct timeval start_tv, stop_tv, delta_tv;
		gettimeofday(&start_tv, NULL);

		const unsigned frame_num = 0;

		// copy the 3-byte values into the 4-byte framebuffer
		// and turn onto the side
		for (unsigned x = 0 ; x < width ; x++) // 256
		{
			for (unsigned y = 0 ; y < 32 ; y++) // 64
			{
				uint32_t * out = (void*) &fb[(y+32*frame_part)*width + x];
				const uint8_t * const in = &buf[1 + 3*(y*width + x)];
				uint32_t r = in[0];
				uint32_t g = in[1];
				uint32_t b = in[2];
				*out = (r << 16) | (g << 8) | (b << 0);
			}
		}

		// only draw after the second frame
		if (frame_part == 1)
			ledscape_draw(leds, fb);

		gettimeofday(&stop_tv, NULL);
		timersub(&stop_tv, &start_tv, &delta_tv);

		frames++;
		delta_sum += delta_tv.tv_usec;
		if (stop_tv.tv_sec - last_report < report_interval)
			continue;
		last_report = stop_tv.tv_sec;

		const unsigned delta_avg = delta_sum / frames;
		printf("%6u usec avg, max %.2f fps, actual %.2f fps (over %u frames)\n",
			delta_avg,
			report_interval * 1.0e6 / delta_avg,
			frames * 1.0 / report_interval,
			frames
		);

		frames = delta_sum = 0;
	}

	return 0;
}
Example #18
0
int main(int argc, char * argv[]){
	//Pointer to
    element * ptr_to_first=NULL;
    //Integers to check the arguments
    int i,j,bad_arguments=0, contagem=0;
    //Port variables
    int snp_port = 0,porto_servidor = 0;
    //IP variables, Surname, Message
    char * ip_servidor = (char*)malloc(20*sizeof(char));
    char * ip_maquina = (char*)malloc(20*sizeof(char));
    char * surname = (char*)malloc(30*sizeof(char));
    char * name_ip_servidor = (char*)malloc(126*sizeof(char));
    char * message = (char*)malloc(126*sizeof(char));
	//Addresses
    struct in_addr ipaddress, ipaddress_sa;
    //Check the application's arguments
    if(argc==7){//saip and saport omitted, argc=7 (snp -n surname -s snpip -q snpport)
        for(i=1;i<7;i+=2){
            if(strcmp(argv[i],"-n")==0){//Surname
                if(strlen(argv[i+1])>20){//Check the lenght of the surname
                    printf("Invalid Surname: Too big...\n");
                    bad_arguments=1;
                }else{
                    if(argv[i+1][0]>'Z'|| argv[i+1][0]<'A'){//First letter must be a capital
                        printf("Invalid Surname: Must use a capital letter for the first character of a surname\n");
                        bad_arguments=1;
                    }else{
                        for(j=1;j<=(strlen(argv[i+1])-1);j++){//Must be lower case
                            if('a'>argv[i+1][j] || argv[i+1][j]>'z'){
                                printf("Invalid Surname: Must use lower case letters to the rest of the surname \n");
                                bad_arguments=1;
                            }
                        }
                        strncpy(surname, argv[i+1],strlen(argv[i+1]));
						printf("%s\n",surname);
                        contagem++;
                    }
                }
            }else if(strcmp(argv[i],"-s")==0){//IP address
                if(inet_pton(AF_INET,argv[i+1],&(ipaddress.s_addr))==1){//Check if the ip is valid
                    strcpy(ip_maquina, argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid IP Address\n");
                }
            }else if(strcmp(argv[i],"-q")==0){//UDP Port, Port value must be between 1024 and 65535 (maxvalue is 65535 2^16-1 16 bits)  1024–49151 registed ports 49151-65535 are called dynamic and/or private ports
                if((49151 < atoi(argv[i+1])) && (atoi(argv[i+1])<= 65535)){//Check if the port is valid
                    snp_port=atoi(argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid Port: Value of Port must be between 49151 and 65535\n");
                    bad_arguments=1;
                }
            }
        }
        //Get the address of Tejo
        strcpy(name_ip_servidor,"tejo.tecnico.ulisboa.pt");//Omitted values
        ipaddress_sa = getaddressbyname(&name_ip_servidor);//Convert from name to ip - gethostsname.c
        porto_servidor = 58000;
        if(contagem != 3){bad_arguments=1;}//Wrong arguments

    //All arguments, argc=11
    }else if(argc==11){
        for(i=1;i<11;i+=2){
            if(strcmp(argv[i],"-n")==0){//Surname
                if(strlen(argv[i+1])>20){//Check the lenght of the surname
                    printf("Invalid Surname: Too big...\n");
                    bad_arguments=1;
                }else{
                    if(argv[i+1][0]>'Z'|| argv[i+1][0]<'A'){//First letter must be a capital
                        printf("Invalid Surname: Must use a capital letter for the first character of a surname\n");
                        bad_arguments=1;
                    }else{
                        for(j=1;j<=(strlen(argv[i+1])-1);j++){//Must be lower case
                            if('a'>argv[i+1][j] || argv[i+1][j]>'z'){
                                printf("Invalid Surname: Must use lower case letters to the rest of the surname \n");
                                bad_arguments=1;
                            }
                        }
                        strncpy(surname, argv[i+1],strlen(argv[i+1]));
                        contagem++;
                    }
                }
            }else if(strcmp(argv[i],"-s")==0){//IP address SNP
                if(inet_pton(AF_INET,argv[i+1],&(ipaddress.s_addr))==1){//Check if the ip is valid
                    strcpy(ip_maquina, argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid IP Address\n");
                }
            }else if(strcmp(argv[i],"-q")==0){//UDP Port SNP
                if((49151 < atoi(argv[i+1])) && (atoi(argv[i+1])<= 65535)){//Check if the port is valid
                    snp_port=atoi(argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid Port: Value of Port must be between 49151 and 65535\n");
                    bad_arguments=1;
                }
            }else if(strcmp(argv[i],"-i")==0){//IP address SA
                if(inet_pton(AF_INET,argv[i+1],&(ipaddress_sa.s_addr))==1){//Check if the ip is valid
                    strcpy(ip_servidor, argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid IP Address\n");
                }
            }else if(strcmp(argv[i],"-p")==0){//Port SA
                if((49151 < atoi(argv[i+1])) && (atoi(argv[i+1])<= 65535)){//Check if the port is valid
                    porto_servidor=atoi(argv[i+1]);
                    contagem++;
                }else{
                    printf("Invalid Port: Value of Port must be between 49151 and 65535\n");
                    bad_arguments=1;
                }
            }
        }
        if(contagem != 5){bad_arguments=1;}//Wrong arguments
    }

    //Missing arguments , too many arguments or bad arguments
    if((argc!=7 && argc!=11) || bad_arguments == 1){
        printf("Start the program as follows: ./snp -n surname -s snpip -q snpport [-i saip] [-p saport]\n");
        exit(-1);
    }
    //Values
    printf("SNP:\nSurname: %s\nIP address: %s\nPort: %d\n\n",surname,ip_maquina,snp_port);
    printf("SA:\nIP address: %s\nPort: %d\n\n",inet_ntoa(ipaddress_sa),porto_servidor);

    //-----------------------------------Menu------------------------------------------------//
    struct sockaddr_in addr;
    int fd_file,fd_socket_schat, num_elements=0, exit_menu=0;
    int *num_elements_ptr= &num_elements;
    fd_set readset;
    char option[32];
    
    printf("\nWelcome to the Name Server Interface. Choose an action: \n\n 1: list\n 2: exit \n");
	//------Open socket to communicate with Schat's------
    if((fd_socket_schat = socket(AF_INET,SOCK_DGRAM,0))==-1){
		perror("Socket: "); exit(1);
	}
    memset((void*)&addr,(int)'\0',sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_addr.s_addr=htonl(INADDR_ANY);
    addr.sin_port=htons(snp_port);
    //Bind
    if(bind(fd_socket_schat,(struct sockaddr*)&addr,sizeof(addr))==-1){
		perror("Bind failed: "); exit(2);
	}
	//----------------------------------------------
    //Regist of the SNP on SA
    sprintf(message,"SREG %s;%s;%d",surname,ip_maquina,snp_port);
    udp_socket(ipaddress_sa,porto_servidor,&message);//udp_socket_client.c
	printf("Registed on SA. Waiting for connections ...\n");
	//----------------------------------------------
	//Main cycle: waiting for activity on socket or input from keyboard
    while(exit_menu==0){
        fd_file = fileno(stdin);
        FD_ZERO(&readset);
        FD_SET(fd_socket_schat,&readset);
        FD_SET(fileno(stdin), &readset);
        if(select(max(fd_file,fd_socket_schat)+1,&readset,NULL,NULL,NULL)==-1){
			perror("Error in select(): ");  exit(3); //Error in select
		}
		//Activity on keyboard
        if(FD_ISSET(fd_file,&readset)) {
            fgets(option,32,stdin);
            if (strncmp(option,"exit",4)==0){
                printf("Server terminating...\n");
                exit_menu=1;
            }else{
                if(strncmp(option,"list",4)==0){
                    printf("List: [%d]\n", num_elements);
                    printList(ptr_to_first);
                }else {
                    printf("Command not found.\n");
                }
            }
        } 
		// Activity on socket
        if(FD_ISSET(fd_socket_schat,&readset)) {
            ptr_to_first = udp_socket_server(ptr_to_first,num_elements_ptr, fd_socket_schat,addr,ipaddress_sa);//udp_socket_client.c
        }
	}
	//---------------------------------------------------------------------------------//
    //------Remove SNP from SA-----//
    sprintf(message,"SUNR %s",surname);
    udp_socket(ipaddress_sa,porto_servidor,&message);//udp_socket_client.c
    //Frees
    free(message); free(name_ip_servidor); free(surname); free(ip_servidor); free(ip_maquina);
    freeList(ptr_to_first);
	//Exit
    exit(0);
}
Example #19
0
		void UDPSocket::tryCreateInstance02()
		{
			::Spin::UDPSocket udp_socket(::Spin::Details::Address(0), 9005);
		}
Example #20
0
static int _tftpd_open(tftp_info_t *info,char *hostname,char *filename,int mode)
{
    ebuf_t *buf = NULL;
    uint16_t type;
    int res;
    int retries;
    char ch = 0;
#ifdef RESCUE_MODE
	uint8_t asuslink[13] = "ASUSSPACELINK";
	uint8_t maclink[13]="snxxxxxxxxxxx";
	unsigned char tftpmask[4] = { 0xff, 0xff, 0xff, 0x00 };
	int i;
	char tftpnull;
	uint8_t ipaddr[4] = { 0xc0, 0xa8, 0x01, 0x0c };
	uint8_t hwaddr[6] = { 0x00, 0xe0, 0x18, 0x00, 0x3e, 0xc4 };
#endif

    /*
     * Open a UDP socket
     */    

    info->tftp_socket = udp_socket(UDP_PROTO_TFTP);
    info->tftp_lastblock = 0;
    info->tftp_error = 0;
    info->tftp_filemode = mode;

    /*
     * Listen for requests
     */

    res = udp_bind(info->tftp_socket,UDP_PROTO_TFTP);
    if (res < 0) return res;

    res = CFE_ERR_TIMEOUT;

    for (retries = 0; retries < tftp_max_retries; retries++) {
	while (console_status()) {
	    console_read(&ch,1);
	    if (ch == 3) break;
	}
	if (ch == 3) {
	    res = CFE_ERR_INTR;
	    break;
	}

	buf = udp_recv_with_timeout(info->tftp_socket,tftp_recv_timeout);
	if (buf == NULL) continue;

	/*
	 * Process the request
	 */

	ebuf_get_u16_be(buf,type);

	switch (type) {
	    case TFTP_OP_RRQ:
#ifdef RESCUE_MODE
                         udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
                         ackport = buf->eb_usrdata;
                         memcpy(info->tftp_ipaddr,buf->eb_usrptr,IP_ADDR_LEN);
                         info->tftp_blknum = 1;
                         info->tftp_blklen = 0;
                         for (i=0; i<13; i++) {
                                if (buf->eb_ptr[i] != asuslink[i])
                                                break;
                         }
                         if (i==13) {
                                tftpipfrom[0]=buf->eb_ptr[16];
                                tftpipfrom[1]=buf->eb_ptr[15];
                                tftpipfrom[2]=buf->eb_ptr[14];
                                tftpipfrom[3]=buf->eb_ptr[13];
                                tftpipto[0]=buf->eb_usrptr[0];
                                tftpipto[1]=buf->eb_usrptr[1];
                                tftpipto[2]=buf->eb_usrptr[2];
                                tftpipto[3]=buf->eb_usrptr[3];
                                        net_setparam(NET_IPADDR,tftpipfrom);
                                        net_setparam(NET_NETMASK,tftpmask);
                                        net_setparam(NET_GATEWAY,tftpipfrom);
                                        ui_myshowifconfig();
                                        net_setnetvars();
                                        for (i=0; i<4; i++)
                                                ipaddr[i]=tftpipto[i];
                                        for (i=0; i<6; i++)
                                                hwaddr[i]=buf->eb_data[6+i];
                                        buf = udp_alloc();
                                        if (!buf) {
                                                res = CFE_ERR_TIMEOUT;
                                                break;
                                        }
                                        ebuf_append_u16_be(buf, 3);
                                        ebuf_append_u16_be(buf, 1);
                                        ebuf_append_bytes(buf,&tftpnull, 0);
                                        arp_delete(ipaddr);
                                        arp_add(ipaddr,hwaddr);
                                        udp_send(info->tftp_socket, buf, tftpipto);
                                }
                                else {
                                        for (i=0; i<13; i++) {
                                                if (buf->eb_ptr[i] != maclink[i])
                                                        break;
                                        }
                                        if (i==13) {
                                                tftpipfrom[0]=buf->eb_ptr[16];
                                                tftpipfrom[1]=buf->eb_ptr[15];
                                                tftpipfrom[2]=buf->eb_ptr[14];
                                                tftpipfrom[3]=buf->eb_ptr[13];
                                                tftpipto[0]=buf->eb_usrptr[0];
                                                tftpipto[1]=buf->eb_usrptr[1];
                                                tftpipto[2]=buf->eb_usrptr[2];
                                                tftpipto[3]=buf->eb_usrptr[3];
                                                net_setparam(NET_IPADDR,tftpipfrom);
                                                net_setparam(NET_NETMASK,tftpmask);
                                                net_setparam(NET_GATEWAY,tftpipfrom);
                                                ui_myshowifconfig();
                                                net_setnetvars();
                                                for (i=0; i<4; i++)
                                                        ipaddr[i]=tftpipto[i];
                                                for (i=0; i<6; i++)
                                                        hwaddr[i]=buf->eb_data[6+i];
                                                buf = udp_alloc();
                                                if (!buf) {
                                                        res = CFE_ERR_TIMEOUT;
                                                break;
                                        }
                                        ebuf_append_u16_be(buf, 3);
                                        ebuf_append_u16_be(buf, 1);
                                        ebuf_append_bytes(buf,&tftpnull, 0);
                                        arp_delete(ipaddr);
                                        arp_add(ipaddr,hwaddr);
                                        udp_send(info->tftp_socket, buf, tftpipto);
                                }
                        }
                        res = CFE_ERR_TIMEOUT;
#else
		udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
		memcpy(info->tftp_ipaddr,buf->eb_usrptr,IP_ADDR_LEN);
		info->tftp_blknum = 1;
		info->tftp_blklen = 0;
		res = 0;
#endif
		break;

	    case TFTP_OP_WRQ:
		udp_connect(info->tftp_socket,(uint16_t) buf->eb_usrdata);
		memcpy(info->tftp_ipaddr,buf->eb_usrptr,IP_ADDR_LEN);
		info->tftp_blknum = 0;
		res = _tftp_readmore(info);
		break;

	    default:
		/* 
		 * we aren't expecting any of these messages
		 */
		res = CFE_ERR_PROTOCOLERR;
		break;
	}

	udp_free(buf);
	break;
    }

    if (res) {
	udp_close(info->tftp_socket);
	info->tftp_socket = -1;
    }

    return res;
}
Example #21
0
void main_task (void *data)
{
	buf_t *p, *r;
	unsigned char addr [4], *output;
	unsigned short port;
#if 1
	mutex_group_t *g;

	debug_printf ("\n\n*** Testing SNMP on UART 1 ***\n\n");

	arp = arp_init (arp_data, sizeof(arp_data), 0);

	/*
	 * Create a group of two locks: timer and eth.
	 */
	g = mutex_group_init (group, sizeof(group));
	mutex_group_add (g, &eth.netif.lock);
	mutex_group_add (g, &timer.decisec);
	ip = mem_alloc (&pool, sizeof (*ip));
	ip_init (ip, &pool, 70, &timer, arp, g);
	arp->ip = ip;

	/*
	 * Create interface eth0 144.206.181.251 / 255.255.255.0
	 */
	/* Reset чипа CS8900A заведен на порт G3.
	 * Он в прямой логике, надо подать туда 0. */
	outb_far (0x08, DDRG);
	clearb_far (3, PORTG);

	/* Добавляем один wait state, т.к. иначе cs8900 не успевает. */
	setb (SRW, MCUCR);
	cs8900_init (&eth, "eth0", 80, &pool, arp);
	route_add_netif (ip, &route, "\220\316\265\373", 24, &eth.netif);

	/*
	 * Add default route to 144.206.181.254
	 */
	route_add_gateway (ip, &default_route, "\0\0\0\0", 0, "\220\316\265\376");
	if (! default_route.netif)
		debug_printf ("test_snmp: no interface for default route!\n");

	snmp_init (&snmp, &pool, ip, snmp_tab, sizeof(snmp_tab),
		SNMP_SERVICE_REPEATER, "Testing SNMP",
		"1.3.6.1.4.1.20520.1.1");

#endif
	udp_socket (&sock, ip, 161);
	debug_printf ("test_snmp: mem available = %u bytes\n",
		mem_available (&pool));

	for (;;) {
		p = udp_recvfrom (&sock, addr, &port);
		debug_printf ("test_snmp: mem available = %u bytes\n",
			mem_available (&pool));

		r = buf_alloc (&pool, 1500, 50);
		if (! r) {
			debug_printf ("test_snmp: out of memory!\n");
			buf_free (p);
			continue;
		}

		output = snmp_execute (&snmp, p->payload, p->len, r->payload,
			r->len, addr);
		buf_free (p);
		if (! output) {
			buf_free (r);
			continue;
		}

		buf_add_header (r, - (output - r->payload));
		udp_sendto (&sock, r, addr, port);
	}
}