Beispiel #1
0
/******************************************************************************
 * FunctionName : espconn_connect
 * Description  : The function given as the connect
 * Parameters   : espconn -- the espconn used to listen the connection
 * Returns      : none
*******************************************************************************/
sint8 ICACHE_FLASH_ATTR
espconn_connect(struct espconn *espconn)
{
	struct ip_addr ipaddr;
	struct ip_info ipinfo;
	uint8 connect_status = 0;
	sint8 value = ESPCONN_OK;
	espconn_msg *plist = NULL;

    if (espconn == NULL) {
        return ESPCONN_ARG;
    } else if (espconn ->type != ESPCONN_TCP)
    	return ESPCONN_ARG;

    if (wifi_get_opmode() == ESPCONN_STA){
    	wifi_get_ip_info(STA_NETIF,&ipinfo);
    	if (ipinfo.ip.addr == 0){
   	 		return ESPCONN_RTE;
   	 	}
    } else if(wifi_get_opmode() == ESPCONN_AP){
    	wifi_get_ip_info(AP_NETIF,&ipinfo);
    	if (ipinfo.ip.addr == 0){
    		return ESPCONN_RTE;
    	}
    } else if(wifi_get_opmode() == ESPCONN_AP_STA){
    	IP4_ADDR(&ipaddr, espconn->proto.tcp->remote_ip[0],
    	    	    		espconn->proto.tcp->remote_ip[1],
    	    	    		espconn->proto.tcp->remote_ip[2],
    	    	    		espconn->proto.tcp->remote_ip[3]);
    	ipaddr.addr <<= 8;
    	wifi_get_ip_info(AP_NETIF,&ipinfo);
    	ipinfo.ip.addr <<= 8;
    	espconn_printf("softap_addr = %x, remote_addr = %x\n", ipinfo.ip.addr, ipaddr.addr);

    	if (ipaddr.addr != ipinfo.ip.addr){
    		connect_status = wifi_station_get_connect_status();
			if (connect_status == STATION_GOT_IP){
				wifi_get_ip_info(STA_NETIF,&ipinfo);
				if (ipinfo.ip.addr == 0)
					return ESPCONN_RTE;
			} else {
				return connect_status;
			}
    	}
    }

    for (plist = plink_active; plist != NULL; plist = plist->pnext){
    	if (plist->pespconn->type == ESPCONN_TCP){
    		if (espconn->proto.tcp->local_port == plist->pespconn->proto.tcp->local_port){
    			return ESPCONN_ISCONN;
    		}
    	}
    }

    value = espconn_tcp_client(espconn);

    return value;
}
/******************************************************************************
 * FunctionName : espconn_connect
 * Description  : The function given as the connect
 * Parameters   : espconn -- the espconn used to listen the connection
 * Returns      : none
*******************************************************************************/
sint8 ICACHE_FLASH_ATTR
espconn_connect(struct espconn *espconn)
{
	struct netif *eagle_netif;
	struct ip_info ipinfo;
	sint8 value = ESPCONN_OK;
	espconn_msg *plist = NULL;

    if (espconn == NULL) {
        return ESPCONN_ARG;
    } else if (espconn ->type != ESPCONN_TCP)
    	return ESPCONN_ARG;

    if (wifi_get_opmode() == ESPCONN_STA){
    	wifi_get_ip_info(STA_NETIF,&ipinfo);
    	if (ipinfo.ip.addr == 0){
   	 		return ESPCONN_RTE;
   	 	}
    } else if(wifi_get_opmode() == ESPCONN_AP){
    	wifi_get_ip_info(AP_NETIF,&ipinfo);
    	if (ipinfo.ip.addr == 0){
    		return ESPCONN_RTE;
    	}
    } else if(wifi_get_opmode() == ESPCONN_AP_STA){
//    	wifi_get_ip_info(STA_NETIF,&ipinfo);
//    	if (ipinfo.ip.addr == 0){
//    		return ESPCONN_RTE;
//    	}

    	wifi_get_ip_info(AP_NETIF,&ipinfo);
    	if (ipinfo.ip.addr == 0){
    		return ESPCONN_RTE;
    	}
    }

    for (plist = plink_active; plist != NULL; plist = plist->pnext){
    	if (plist->pespconn->type == ESPCONN_TCP){
    		if (espconn->proto.tcp->local_port == plist->pespconn->proto.tcp->local_port){
    			return ESPCONN_ISCONN;
    		}
    	}
    }

    value = espconn_tcp_client(espconn);

    return value;
}
Beispiel #3
0
/******************************************************************************
 * FunctionName : espconn_connect
 * Description  : The function given as the connect
 * Parameters   : espconn -- the espconn used to listen the connection
 * Returns      : none
*******************************************************************************/
sint8 ICACHE_FLASH_ATTR
espconn_connect(struct espconn *espconn)
{
	ip_addr_t ipaddr;
	tcpip_adapter_ip_info_t ipinfo;
	uint8 connect_status = 0;
	sint8 value = ESPCONN_OK;
	espconn_msg *plist = NULL;
	// remot_info *pinfo = NULL;

    if (espconn == NULL) {
        return ESPCONN_ARG;
    } else if (espconn ->type != ESPCONN_TCP)
    	return ESPCONN_ARG;

    /*Check the active node count whether is the limit or not*/
    if (espconn_get_acticve_num(ESPCONN_TCP) >= espconn_tcp_get_max_con())
    {
    	printf("espconn_tcp_get_max_con \n");
    	return ESPCONN_ISCONN;
    }

    /*Check the IP address whether is zero or not in different mode*/
    esp_wifi_get_mode((wifi_mode_t*)&value);
    if (value == WIFI_MODE_STA){
    	wifi_get_ip_info(TCPIP_ADAPTER_IF_STA,&ipinfo);
    	if (ipinfo.ip.addr == 0){
   	 		return ESPCONN_RTE;
   	 	}
    } else if(value == WIFI_MODE_AP){
    	wifi_get_ip_info(TCPIP_ADAPTER_IF_AP,&ipinfo);
    	if (ipinfo.ip.addr == 0){
    		return ESPCONN_RTE;
    	}
    } else if(value == WIFI_MODE_APSTA){
    	IP4_ADDR(&ipaddr.u_addr.ip4, espconn->proto.tcp->remote_ip[0],
    	    	    		espconn->proto.tcp->remote_ip[1],
    	    	    		espconn->proto.tcp->remote_ip[2],
    	    	    		espconn->proto.tcp->remote_ip[3]);
    	ipaddr.u_addr.ip4.addr <<= 8;
    	wifi_get_ip_info(TCPIP_ADAPTER_IF_AP,&ipinfo);
    	ipinfo.ip.addr <<= 8;
    	// espconn_printf("softap_addr = %x, remote_addr = %x\n", ipinfo.ip.addr, ipaddr.u_addr.ip4.addr);

    	if (ipaddr.u_addr.ip4.addr != ipinfo.ip.addr){

    		connect_status = wifi_station_get_connect_status();
    		
			if (connect_status == SYSTEM_EVENT_STA_GOT_IP){
				wifi_get_ip_info(TCPIP_ADAPTER_IF_STA,&ipinfo);
    // espconn_printf("wifi_get_ip_info:(ip: " IPSTR ", mask: " IPSTR ", gw: " IPSTR ")\n",
    //         IP2STR(&ipinfo.ip), IP2STR(&ipinfo.netmask), IP2STR(&ipinfo.gw));



				if (ipinfo.ip.addr == 0)
					return ESPCONN_RTE;
			} else if (connect_status != SYSTEM_EVENT_STA_GOT_IP){
				return ESPCONN_RTE;
			} else {
				return connect_status;
			}
    	}
    }
    /*check the active node information whether is the same as the entity or not*/
    for (plist = plink_active; plist != NULL; plist = plist->pnext){
    	if (plist->pespconn && plist->pespconn->type == ESPCONN_TCP){
    		if (espconn->proto.tcp->local_port == plist->pespconn->proto.tcp->local_port){
    			return ESPCONN_ISCONN;
    		}
    	}
    }

	espconn_set_opt(espconn, ESPCONN_COPY|ESPCONN_NODELAY);
    value = espconn_tcp_client(espconn);
    espconn_printf("espconn_connect err value %d \n",value);

    return value;
}
Beispiel #4
0
/******************************************************************************
 * FunctionName : espconn_connect
 * Description  : The function given as the connect
 * Parameters   : espconn -- the espconn used to listen the connection
 * Returns      : none
*******************************************************************************/
sint8 ICACHE_FLASH_ATTR
espconn_connect(struct espconn *espconn)
{
    struct ip_addr ipaddr;
    struct ip_info ipinfo;
    uint8 connect_status = 0;
    sint8 value = ESPCONN_OK;
    espconn_msg *plist = NULL;
    remot_info *pinfo = NULL;

    if (espconn == NULL) {
        return ESPCONN_ARG;
    } else if (espconn ->type != ESPCONN_TCP)
        return ESPCONN_ARG;

    /*Check the active node count whether is the limit or not*/
    if (espconn_get_acticve_num(ESPCONN_TCP) >= espconn_tcp_get_max_con())
        return ESPCONN_ISCONN;

    /*Check the IP address whether is zero or not in different mode*/
    if (wifi_get_opmode() == ESPCONN_STA) {
        wifi_get_ip_info(STA_NETIF,&ipinfo);
        if (ipinfo.ip.addr == 0) {
            return ESPCONN_RTE;
        }
    } else if(wifi_get_opmode() == ESPCONN_AP) {
        wifi_get_ip_info(AP_NETIF,&ipinfo);
        if (ipinfo.ip.addr == 0) {
            return ESPCONN_RTE;
        }
    } else if(wifi_get_opmode() == ESPCONN_AP_STA) {
        IP4_ADDR(&ipaddr, espconn->proto.tcp->remote_ip[0],
                 espconn->proto.tcp->remote_ip[1],
                 espconn->proto.tcp->remote_ip[2],
                 espconn->proto.tcp->remote_ip[3]);
        ipaddr.addr <<= 8;
        wifi_get_ip_info(AP_NETIF,&ipinfo);
        ipinfo.ip.addr <<= 8;
        espconn_printf("softap_addr = %x, remote_addr = %x\n", ipinfo.ip.addr, ipaddr.addr);

        if (ipaddr.addr != ipinfo.ip.addr) {
            connect_status = wifi_station_get_connect_status();
            if (connect_status == STATION_GOT_IP) {
                wifi_get_ip_info(STA_NETIF,&ipinfo);
                if (ipinfo.ip.addr == 0)
                    return ESPCONN_RTE;
            } else if (connect_status == STATION_IDLE) {
                return ESPCONN_RTE;
            } else {
                return connect_status;
            }
        }
    }

    /*check the active node information whether is the same as the entity or not*/
    for (plist = plink_active; plist != NULL; plist = plist->pnext) {
        if (plist->pespconn && plist->pespconn->type == ESPCONN_TCP) {
            if (espconn->proto.tcp->local_port == plist->pespconn->proto.tcp->local_port) {
                return ESPCONN_ISCONN;
            }
        }
    }

    value = espconn_tcp_client(espconn);

    return value;
}