Ejemplo n.º 1
0
/*
* 硬件平台相关,UDP监听端口数据接收处理函数
*/
void wifilan_recv_callbk(void *arg, char *pdata, unsigned short len)
{
	airkiss_lan_ret_t ret = airkiss_lan_recv(pdata, len, &akconf);
	airkiss_lan_ret_t packret;

	switch (ret) {
	case AIRKISS_LAN_SSDP_REQ:

		airkiss_udp.remote_port = DEFAULT_LAN_PORT;
		lan_buf_len = sizeof(lan_buf);

		packret = airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD,
					   DEVICE_TYPE, DEVICE_ID, 0, 0,
					   lan_buf, &lan_buf_len, &akconf);

		if (packret != AIRKISS_LAN_PAKE_READY) {
			uart0_sendStr("Pack lan packet error!\r\n");
			return;
		}

		packret = espconn_sent(&ptrairudpconn, lan_buf, lan_buf_len);

		if (packret != 0) {
			uart0_sendStr("LAN UDP Send err!\r\n");
		} else {
			// close the udp 12476
		}
		break;
	default:
		uart0_sendStr("Pack is not ssdq req!\r\n");
		break;
	}
}
Ejemplo n.º 2
0
LOCAL void ICACHE_FLASH_ATTR
airkiss_wifilan_recv_callbk(void *arg, char *pdata, unsigned short len)
{
	uint16 i;
	remot_info* pcon_info = NULL;
		
	airkiss_lan_ret_t ret = airkiss_lan_recv(pdata, len, &akconf);
	airkiss_lan_ret_t packret;
	
	switch (ret){
	case AIRKISS_LAN_SSDP_REQ:
		espconn_get_connection_info(&pssdpudpconn, &pcon_info, 0);
		os_printf("remote ip: %d.%d.%d.%d \r\n",pcon_info->remote_ip[0],pcon_info->remote_ip[1],
			                                    pcon_info->remote_ip[2],pcon_info->remote_ip[3]);
		os_printf("remote port: %d \r\n",pcon_info->remote_port);
      
        pssdpudpconn.proto.udp->remote_port = pcon_info->remote_port;
		memcpy(pssdpudpconn.proto.udp->remote_ip,pcon_info->remote_ip,4);
		ssdp_udp.remote_port = DEFAULT_LAN_PORT;
		
		lan_buf_len = sizeof(lan_buf);
		packret = airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD,
			DEVICE_TYPE, DEVICE_ID, 0, 0, lan_buf, &lan_buf_len, &akconf);
		
		if (packret != AIRKISS_LAN_PAKE_READY) {
			os_printf("Pack lan packet error!");
			return;
		}

		os_printf("\r\n\r\n");
		for (i=0; i<lan_buf_len; i++)
			os_printf("%c",lan_buf[i]);
		os_printf("\r\n\r\n");
		
		packret = espconn_sendto(&pssdpudpconn, lan_buf, lan_buf_len);
		if (packret != 0) {
			os_printf("LAN UDP Send err!");
		}
		
		break;
	default:
		os_printf("Pack is not ssdq req!%d\r\n",ret);
		break;
	}
}
Ejemplo n.º 3
0
static void ak_discovery_thread(void *arg)
{
  UNUSED_PARAMETER( arg );

  OSStatus err;
  struct sockaddr_t addr;
  socklen_t addr_len = sizeof(addr);
  struct timeval_t t;
  int udp_fd = -1 ;
  fd_set readfds;
  char *buf = NULL;
  ssize_t len = 0;
  int ret;

  buf = (char*)malloc( 1024 );
  require_action( buf, exit, err = kNoMemoryErr );
  
  /*Establish a UDP port to receive any data sent to this port*/
  udp_fd = socket( AF_INET, SOCK_DGRM, IPPROTO_UDP );
  require_action( IsValidSocket( udp_fd ), exit, err = kNoResourcesErr );
  
  addr.s_ip = INADDR_ANY;
  addr.s_port = LOCAL_UDP_PORT;
  err = bind(udp_fd, &addr, sizeof(addr));
  require_noerr( err, exit );

  t.tv_sec = 5;
  t.tv_usec = 0;

  while(1)
  {
    //udp_broadcast_log( "broadcast now!" );
    FD_ZERO( &readfds );
    FD_SET( udp_fd, &readfds );
    
    require_action( select( udp_fd + 1, &readfds, NULL, NULL, &t) >= 0, exit, err = kConnectionErr );
    
    /* recv wlan data, and send back */
    if( FD_ISSET( udp_fd, &readfds ) )
    {
      memset(buf, 0x0, 1024);
      len = recvfrom( udp_fd, buf, 1024, 0, &addr, &addr_len);
      require_action( len >= 0, exit, err = kConnectionErr );
      airkiss_log("Airkiss discover request received, length=%d", len);

      ret = airkiss_lan_recv(buf, len, &akconf);
      switch (ret){
        case AIRKISS_LAN_SSDP_REQ:
          len = 1024;
          ret = airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD, _appid, _deviceid, 0, 0, buf, (unsigned short *)&len, &akconf); 
          require_action( ret == AIRKISS_LAN_PAKE_READY, exit, err = kMalformedErr );

          len = sendto( udp_fd, buf, len, 0, &addr, sizeof(addr) );
          require_action( len >= 0, exit, err = kConnectionErr );
          break;
        default:
          airkiss_log("Pack is not ssdq req!"); 
          break;
        }
    }
    if(_started == false)
      goto exit;
  }
  
exit:
  if( err != kNoErr )
    airkiss_log("Airkiss discover thread exit with err: %d", err);
  if(buf) free(buf);
  SocketClose( &udp_fd );
  mico_rtos_delete_thread(NULL);
}