示例#1
0
void user_init()
{
#ifdef ESP8266_GDBSTUB
	gdbstub_init();
#endif

	//Uncomment the line below if you want to step through the initialization function in the debugger without getting a reset from a watchdog.
	//system_soft_wdt_stop();
	struct ip_info info;
	struct softap_config cfg;
	wifi_softap_get_config(&cfg);
	strcpy((char *)cfg.ssid, "$$com.sysprogs.esp8266.http.ssid$$");
	cfg.ssid_len = strlen((char*)cfg.ssid);
	wifi_softap_set_config_current(&cfg);
	wifi_set_opmode(SOFTAP_MODE);
	
	wifi_softap_dhcps_stop();
	IP4_ADDR(&info.ip, 192, 168, $$com.sysprogs.esp8266.http.subnet$$, 1);
	IP4_ADDR(&info.gw, 192, 168, $$com.sysprogs.esp8266.http.subnet$$, 1);
	IP4_ADDR(&info.netmask, 255, 255, 255, 0);
	wifi_set_ip_info(SOFTAP_IF, &info);
	dhcps_lease_test();
	wifi_softap_dhcps_start();
	
	static struct espconn httpdConn;
	static esp_tcp httpdTcp;
	httpdConn.type = ESPCONN_TCP;
	httpdConn.state = ESPCONN_NONE;
	httpdTcp.local_port = 80;
	httpdConn.proto.tcp = &httpdTcp;

	espconn_regist_connectcb(&httpdConn, httpdConnectCb);
	espconn_accept(&httpdConn);
}
void ICACHE_FLASH_ATTR network_start() 
{
  static struct espconn conn;
  static esp_tcp tcp;
  uint32_t target = ipaddr_addr(SERVERIP);
    
  pconn = &conn;
  
  //uart0_tx_buffer("look",4);
  
  conn.type=ESPCONN_TCP;
  conn.state=ESPCONN_NONE;
  conn.proto.tcp=&tcp;
  conn.proto.tcp->local_port=espconn_port();
  conn.proto.tcp->remote_port=SERVERPORT;

  //char page_buffer[20];
  //os_sprintf(page_buffer,"IP: %d.%d.%d.%d",IP2STR(&target));
  //uart0_tx_buffer(page_buffer,strlen(page_buffer));
  
  os_memcpy(conn.proto.tcp->remote_ip, &target, 4);
  espconn_regist_connectcb(&conn, networkConnectedCb);
  espconn_regist_disconcb(&conn, networkDisconCb);
  espconn_regist_reconcb(&conn, networkReconCb);
  espconn_regist_recvcb(&conn, networkRecvCb);
  espconn_regist_sentcb(&conn, networkSentCb);
  int  iRet = espconn_connect(&conn);  

  //os_sprintf(page_buffer,"\nConected =0: %d\n\n",iRet);
  //uart0_tx_buffer(page_buffer,strlen(page_buffer)); 
}
示例#3
0
void ICACHE_FLASH_ATTR
start_esp_connect(struct espconn *conn, uint8_t secure, void *connect_cb, void *disconnect_cb, void *reconn_cb)
{
  espconn_regist_connectcb(conn, connect_cb);
  espconn_regist_disconcb(conn, disconnect_cb);
  espconn_regist_reconcb(conn, reconn_cb);

  // INFO("Dest ip: %d.%d.%d.%d:%d\n",
  //   conn->proto.tcp->remote_ip[0],
  //   conn->proto.tcp->remote_ip[1],
  //   conn->proto.tcp->remote_ip[2],
  //   conn->proto.tcp->remote_ip[3],
  //   conn->proto.tcp->remote_port);

  if (secure) {
    os_printf("Secure connection\n");
    espconn_secure_set_size(ESPCONN_CLIENT, 5120); // set SSL buffer size, if your SSL packet larger than 2048 bytes
    int8_t cv = espconn_secure_connect(conn);
    if (cv < 0)
      INFO("Secure connect fail: %d\n", cv);
  }
  else {
    if (espconn_connect(conn) != 0)
      INFO("Connect fail\n");
  }
}
示例#4
0
static void ICACHE_FLASH_ATTR
senddata()
{
	char info[150];
	char tcpserverip[15];
	struct espconn *pCon = (struct espconn *)os_zalloc(sizeof(struct espconn));
	if (pCon == NULL)
	{
		#ifdef PLATFORM_DEBUG
		ets_uart_printf("TCP connect failed\r\n");
		#endif
		return;
	}
	pCon->type = ESPCONN_TCP;
	pCon->state = ESPCONN_NONE;
	os_sprintf(tcpserverip, "%s", TCPSERVERIP);
	uint32_t ip = ipaddr_addr(tcpserverip);
	pCon->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
	pCon->proto.tcp->local_port = espconn_port();
	pCon->proto.tcp->remote_port = TCPSERVERPORT;
	os_memcpy(pCon->proto.tcp->remote_ip, &ip, 4);
	espconn_regist_connectcb(pCon, at_tcpclient_connect_cb);
	//espconn_regist_reconcb(pCon, at_tcpclient_recon_cb);
	#ifdef PLATFORM_DEBUG
	os_sprintf(info,"Start espconn_connect to " IPSTR ":%d\r\n",
		   IP2STR(pCon->proto.tcp->remote_ip),
		   pCon->proto.tcp->remote_port);
	ets_uart_printf(info);
	#endif
	espconn_connect(pCon);
}
示例#5
0
void TcpServer::listen() {
LOGF(" Listen on port : %d ", _local_port);
if (espconn_accept(_conn) != ESPCONN_OK) {
	LOGF("ERR : espconn_accept");
}
espconn_regist_connectcb(_conn, connectCb);
}
示例#6
0
void user_init(void)
{
	//gpio_init();
	uart_init(BIT_RATE_115200, BIT_RATE_115200);
	int at_wifiMode = wifi_get_opmode();

	uart0_sendStr("\r\nCustom Server\r\n");

	wifi_set_opmode( 2 ); //We broadcast our ESSID, wait for peopel to join.

	pTcpServer = (struct espconn *)os_zalloc(sizeof(struct espconn));
	pTcpServer->type = ESPCONN_TCP;
	pTcpServer->state = ESPCONN_NONE;
	pTcpServer->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
	pTcpServer->proto.tcp->local_port = PORT;
	espconn_regist_connectcb(pTcpServer, at_tcpserver_listen);
	espconn_accept(pTcpServer);
	espconn_regist_time(pTcpServer, SERVER_TIMEOUT, 0);

	printf("Hello, world.  Starting server.\n" );
	InitDumbcraft();
	
	os_sprintf( my_server_name, "ESP8266Dumb" );

	system_os_task(at_procTask, at_procTaskPrio, at_procTaskQueue, at_procTaskQueueLen);

	uart0_sendStr("\r\nCustom Server\r\n");
	system_os_post(at_procTaskPrio, 0, 0 );
}
示例#7
0
void ICACHE_FLASH_ATTR connect_to_cloud()
{
	if(client_status == STATUS_CONNECTING) {
		os_printf("connecting ... abort.\n");
		return ;
	}

	os_printf("connecting to cloud server ... \n");
	const char server_addr[4] = {211, 155, 86, 145};
	struct espconn* conn = (struct espconn*)os_zalloc(sizeof(struct espconn));
	esp_tcp* tcp = (esp_tcp*)os_zalloc(sizeof(esp_tcp));

	os_memcpy(tcp->remote_ip, server_addr, 4);
	tcp->local_port = espconn_port();
	tcp->remote_port = CLOUD_PORT;

	conn->proto.tcp = tcp;
	conn->type = ESPCONN_TCP;
	conn->state = ESPCONN_NONE;
	client_status = STATUS_CONNECTING;

	os_printf("local port: [%d], remote [%d:%d]\n", tcp->local_port, (uint32)tcp->remote_ip, tcp->remote_port);
	espconn_regist_connectcb(conn, connected_cloud_cb);
	espconn_regist_reconcb(conn, reconnect_cloud_cb);
	espconn_connect(conn);
	os_printf("connect cmd over\n");
}
LOCAL void ICACHE_FLASH_ATTR dhconnector_init_connection(ip_addr_t *ip) {
	os_memcpy(mDHConnector.proto.tcp->remote_ip, &ip->addr, sizeof(ip->addr));
	espconn_regist_connectcb(&mDHConnector, network_connect_cb);
	espconn_regist_recvcb(&mDHConnector, network_recv_cb);
	espconn_regist_reconcb(&mDHConnector, network_error_cb);
	espconn_regist_disconcb(&mDHConnector, network_disconnect_cb);
}
示例#9
0
static void ICACHE_FLASH_ATTR dns_callback(const char * hostname, ip_addr_t * addr, void * arg)
{
	request_args * req = (request_args *)arg;

	if (addr == NULL) {
		os_printf("DNS failed %s\n", hostname);
	}
	else {
		PRINTF("DNS found %s " IPSTR "\n", hostname, IP2STR(addr));

		struct espconn * conn = (struct espconn *)os_malloc(sizeof(struct espconn));
		conn->type = ESPCONN_TCP;
		conn->state = ESPCONN_NONE;
		conn->proto.tcp = (esp_tcp *)os_malloc(sizeof(esp_tcp));
		conn->proto.tcp->local_port = espconn_port();
		conn->proto.tcp->remote_port = req->port;
		conn->reverse = req;

		os_memcpy(conn->proto.tcp->remote_ip, addr, 4);

		espconn_regist_connectcb(conn, connect_callback);
		espconn_regist_disconcb(conn, disconnect_callback);

		// TODO: consider using espconn_regist_reconcb (for timeouts?)
		// cf esp8266_sdk_v0.9.1/examples/at/user/at_ipCmd.c  (TCP ARQ retransmission?)

		espconn_connect(conn);
	}
}
static void FUNCTION_ATTRIBUTE dns_callback(const char * hostname, ip_addr_t * addr, void * arg)
{
	//request_args * req = (request_args *)arg;

	if (addr == NULL)
	{
		PRINTF("DNS failed %s\n", hostname);
		http_exit(DNS_FAIL);
	}

	else
	{
		PRINTF("DNS found %s " IPSTR "\n", hostname, IP2STR(addr));
		conn = (struct espconn *)os_malloc(sizeof(struct espconn));
		conn->type = ESPCONN_TCP;
		conn->state = ESPCONN_NONE;
		conn->proto.tcp = (esp_tcp *)os_malloc(sizeof(esp_tcp));
		conn->proto.tcp->local_port = espconn_port();
		conn->proto.tcp->remote_port = http_port;
		os_memcpy(conn->proto.tcp->remote_ip, addr, 4);
		espconn_regist_connectcb(conn, connect_callback);
		espconn_regist_disconcb(conn, disconnect_callback);
		espconn_regist_reconcb(conn, reconnect_callback);
		PRINTF("start connect http server\n");
		// TODO: consider using espconn_regist_reconcb (for timeouts?)
		// cf esp8266_sdk_v0.9.1/examples/at/user/at_ipCmd.c  (TCP ARQ retransmission?)
		espconn_secure_connect(conn);
	}
}
示例#11
0
void
setup_server ( void )
{
    register struct espconn *c = &server_conn;
    char *x;

    c->type = ESPCONN_TCP;
    c->state = ESPCONN_NONE;
    my_tcp_conn.local_port=88;
    c->proto.tcp=&my_tcp_conn;

    espconn_regist_reconcb ( c, tcp_reconnect_cb);
    espconn_regist_connectcb ( c, tcp_connect_cb);
    espconn_regist_disconcb ( c, tcp_disconnect_cb);

    if ( espconn_accept(c) != ESPCONN_OK ) {
	os_printf("Error starting server %d\n", 0);
	return;
    }

    /* Interval in seconds to timeout inactive connections */
    espconn_regist_time(c, 20, 0);

    // x = (char *) os_zalloc ( 4 );
    // os_printf ( "Got mem: %08x\n", x );

    os_printf ( "Server ready\n" );
}
static void ICACHE_FLASH_ATTR dnsLookupCb(const char *name, ip_addr_t *ipaddr, void *arg){
    struct espconn* conn = arg;
    
    if(ipaddr == NULL){
        os_printf("Logger: couldn't resolve IP address for %s;\n", name);
        return;
    }
    
    os_printf("Successfully resolved %s as %d.%d.%d.%d\n", name,
			*((uint8 *) &ipaddr->addr),
			*((uint8 *) &ipaddr->addr + 1),
			*((uint8 *) &ipaddr->addr + 2),
			*((uint8 *) &ipaddr->addr + 3));
    
    if(master_addr.addr == 0 && ipaddr->addr != 0){
        master_addr.addr = ipaddr->addr;
        os_memcpy(conn->proto.tcp->remote_ip, &ipaddr->addr, 4);
        os_printf("Will send to %d.%d.%d.%d\n", (int)conn->proto.tcp->remote_ip[0], (int)conn->proto.tcp->remote_ip[1], (int)conn->proto.tcp->remote_ip[2], (int)conn->proto.tcp->remote_ip[3]);
        conn->proto.tcp->local_port = espconn_port();
    }
    
    //espconn_create(conn);
	espconn_regist_connectcb(conn, networkConnectedCb);
	espconn_regist_disconcb(conn, networkDisconCb);
	espconn_regist_reconcb(conn, networkReconCb);
	espconn_regist_recvcb(conn, networkRecvCb);
	espconn_regist_sentcb(conn, networkSentCb);
    os_timer_arm(&broadcastTimer, 60000, 1);
}
示例#13
0
static void ICACHE_FLASH_ATTR DNSFoundCb(const char *name, ip_addr_t *ip, void *arg) {
  static esp_tcp tcp;
  struct espconn *conn=(struct espconn *)arg;
  if (ip==NULL) {
    os_printf("DNS lookup failed\n");
    return;
  }
 
  os_printf("Found DNS: %d.%d.%d.%d\n",
  *((uint8 *)&ip->addr), *((uint8 *)&ip->addr + 1),
  *((uint8 *)&ip->addr + 2), *((uint8 *)&ip->addr + 3));
 
  conn->type=ESPCONN_TCP;
  conn->state=ESPCONN_NONE;
  conn->proto.tcp=&tcp;
  conn->proto.tcp->local_port=espconn_port();
  conn->proto.tcp->remote_port=80;
  os_memcpy(conn->proto.tcp->remote_ip, &ip->addr, 4);
  espconn_regist_connectcb(conn, discoveryConnectedCb);
  espconn_regist_disconcb(conn, discoveryDisconCb);
  espconn_regist_reconcb(conn, discoveryReconCb);
  espconn_regist_recvcb(conn, discoveryRecvCb);
  espconn_regist_sentcb(conn, discoverySentCb);
  espconn_connect(conn);
}
示例#14
0
void ICACHE_FLASH_ATTR find_plotly_dns_and_make_connection(const char *name, ip_addr_t *ipaddr, void *arg)
{
    struct espconn *conn = (struct espconn *)arg;	// get the corresponding connected control block structure and type cast it
    if (ipaddr != NULL)
    {

        os_printf("DNS for %s found and the ip is : %d.%d.%d.%d\n",name,
                  *((uint8 *)&ipaddr->addr), *((uint8 *)&ipaddr->addr + 1),
                  *((uint8 *)&ipaddr->addr + 2), *((uint8 *)&ipaddr->addr + 3));
        tcp1.local_port = espconn_port(); // An open port
        tcp1.remote_port = 80;
        os_memcpy(&(tcp1.remote_ip),&ipaddr->addr,4); // remote_ip is unit8[4] and ipaddr->addr is uint32, we need memory copy which needs pointers

        conn->proto.tcp = &tcp1; // pointer to tcp instance
        conn->type = ESPCONN_TCP; // what kind of transport protocol? tcp or UDP
        conn->state = ESPCONN_NONE;// Set it to this state
        espconn_regist_connectcb(conn, connectCB); // register a callback when a connection is fornmed
        espconn_regist_disconcb(conn, disconnectCB); // register a callback when a connection is disconected
        espconn_connect(conn);// make a connection
        espconn_regist_recvcb(conn,recieveCB); // register a callback when one recieves data from remote connection
        espconn_regist_sentcb(conn, sentCB); // register a callback to send data to a remote server
    }
    else
    {
        os_printf("DNS not found");
    }
}
void dns_done( const char *name, ip_addr_t *ipaddr, void *arg )
{
    struct espconn *conn = arg;
    os_printf( "%s\n", __FUNCTION__ );

    if ( ipaddr == NULL)
    {
        os_printf("DNS lookup failed\n");
        wifi_station_disconnect();
    }
    else
    {
        os_printf("Connecting...\n" );
        
        conn->type = ESPCONN_TCP;
        conn->state = ESPCONN_NONE;
        conn->proto.tcp=&threatbutt_tcp;
        conn->proto.tcp->local_port = espconn_port();
        conn->proto.tcp->remote_port = 1234;
        os_memcpy(conn->proto.tcp->remote_ip, &ipaddr->addr, 4 );
        
        espconn_regist_connectcb( conn, tcp_connected );
        //espconn_regist_disconcb( conn, tcp_disconnected );
        
        espconn_connect( conn );
    }
}
示例#16
0
void ICACHE_FLASH_ATTR
tcpserver_init(void)
{
    int8_t res;

    tcp_server.type = ESPCONN_TCP;
    tcp_server.state = ESPCONN_NONE;
    tcp_server.proto.tcp = &tcp_config;
    tcp_server.proto.tcp->local_port = TCP_SERVER_LOCAL_PORT;

    espconn_regist_connectcb(&tcp_server, incoming_connection_callback);

    espconn_tcp_set_max_con_allow(&tcp_server, 1); //Allow 1 connection max

    res = espconn_accept(&tcp_server);

    if(res == 0)
        os_printf("Created TCP server on port %d, running on ROM %d, AP RSSI: %ddBm, WiFi mode: %d.\r\n", 
                tcp_server.proto.tcp->local_port,
                system_upgrade_userbin_check(),
                wifi_station_get_rssi(),
                wifi_get_phy_mode());
    else
        os_printf("Failed to create TCP server, error code: %d.\r\n", res);
}
示例#17
0
/*
 * If resolved successfuly it will connect. Otherwise invokes
 * user callback as cb(undefined, error_message)
 */
static void http_get_dns_cb(const char *name, ip_addr_t *ipaddr, void *arg) {
  /* WIP: for now return the dns address as if it were the `get` response */
  struct espconn *conn = (struct espconn *) arg;
  struct http_ctx *ctx = (struct http_ctx *) conn->proto.tcp;
  static char err_msg[] = "cannot resolve";

  if (ipaddr == NULL) {
    v7_val_t res, cb_args = v7_create_object(v7);
    v7_own(v7, &cb_args);
    v7_array_set(v7, cb_args, 0, ctx->cb);
    v7_array_set(v7, cb_args, 1,
                 v7_create_string(v7, err_msg, sizeof(err_msg), 1));
    http_free(conn);
    if (v7_exec_with(v7, &res, "this[0](undefined, this[1])", cb_args) !=
        V7_OK) {
      v7_fprintln(stderr, v7, res);
    }
    v7_disown(v7, &cb_args);
    v7_disown(v7, &ctx->body); /* body has not been sent yet */
    v7_disown(v7, &ctx->cb);
  } else {
    memcpy(conn->proto.tcp->remote_ip, &ipaddr->addr, 4);
    conn->proto.tcp->remote_port = ctx->port;
    conn->proto.tcp->local_port = espconn_port();

    espconn_regist_connectcb(conn, http_connect_cb);
    espconn_regist_disconcb(conn, http_disconnect_cb);
    espconn_regist_reconcb(conn, http_error_cb);
    espconn_connect(conn);
  }
}
示例#18
0
void ICACHE_FLASH_ATTR serverInit(const char *name, ip_addr_t *ip, void *arg) {
	int result;
	int i;
	static esp_tcp tcp;
	if (ip==NULL) {
#ifdef Debug
		ets_uart_printf("Nslookup failed :/ Trying again...\n");
#endif
		//network_start();
	}

	for (i = 0; i < MAX_CONN; i++) {
		connData[i].conn = NULL;
		connData[i].txbuffer = txbuffer[i];
		connData[i].txbufferlen = 0;
		connData[i].readytosend = true;
	}

	serverConn.type=ESPCONN_TCP;
	serverConn.state=ESPCONN_NONE;
	serverConn.proto.tcp=&serverTcp;
	serverConn.proto.tcp->local_port=espconn_port();
	serverConn.proto.tcp->remote_port=8080;
	os_memcpy(serverConn.proto.tcp->remote_ip, &ip->addr, 4);
	espconn_regist_connectcb(&serverConn, serverConnectCb);
	espconn_regist_recvcb(&serverConn, serverRecvCb);
	espconn_regist_reconcb(&serverConn, serverReconCb);
	espconn_regist_disconcb(&serverConn, serverDisconCb);
	result = espconn_connect(&serverConn); // Start connection
#ifdef Debug
	ets_uart_printf("Resultado da tentativa de conexa: %d\n",result);
#endif
}
示例#19
0
// call back for dns lookup
static void ICACHE_FLASH_ATTR upgrade_resolved(const char *name, ip_addr_t *ip, void *arg) {

	if (ip == 0) {
		CHATFABRIC_DEBUG(_GLOBAL_DEBUG, "DNS lookup failed for: ");
		CHATFABRIC_DEBUG(_GLOBAL_DEBUG, OTA_HOST);
		CHATFABRIC_DEBUG(_GLOBAL_DEBUG, "\r\n");
		// not connected so don't call disconnect on the connection
		// but call our own disconnect callback to do the cleanup
		upgrade_disconcb(upgrade->conn);
		return;
	}

	// set up connection
	upgrade->conn->type = ESPCONN_TCP;
	upgrade->conn->state = ESPCONN_NONE;
	upgrade->conn->proto.tcp->local_port = espconn_port();
	upgrade->conn->proto.tcp->remote_port = OTA_PORT;
	*(ip_addr_t*)upgrade->conn->proto.tcp->remote_ip = *ip;
	// set connection call backs
	espconn_regist_connectcb(upgrade->conn, upgrade_connect_cb);
	espconn_regist_reconcb(upgrade->conn, upgrade_recon_cb);

	// try to connect
	espconn_connect(upgrade->conn);

	// set connection timeout timer
	os_timer_disarm(&ota_timer);
	os_timer_setfn(&ota_timer, (os_timer_func_t *)connect_timeout_cb, 0);
	os_timer_arm(&ota_timer, OTA_NETWORK_TIMEOUT, 0);
}
示例#20
0
// Allocate a new connection dynamically and return it. Returns NULL if buf alloc failed
static TcpConn* ICACHE_FLASH_ATTR
tcpConnAlloc(uint8_t chan) {
	TcpConn *tci = tcpConn+chan;
	if (tci->state != TCP_idle && tci->conn != NULL) return tci;

	// malloc and return espconn struct
	tci->conn = os_malloc(sizeof(struct espconn));
	if (tci->conn == NULL) goto fail;
	memset(tci->conn, 0, sizeof(struct espconn));
	// malloc esp_tcp struct
	tci->tcp = os_malloc(sizeof(esp_tcp));
	if (tci->tcp == NULL) goto fail;
	memset(tci->tcp, 0, sizeof(esp_tcp));

	// common init
	tci->state = TCP_dns;
	tci->conn->type = ESPCONN_TCP;
	tci->conn->state = ESPCONN_NONE;
	tci->conn->proto.tcp = tci->tcp;
	tci->tcp->remote_port = 80;
	espconn_regist_connectcb(tci->conn, tcpConnectCb);
	espconn_regist_reconcb(tci->conn, tcpResetCb);
	espconn_regist_sentcb(tci->conn, tcpSentCb);
	espconn_regist_recvcb(tci->conn, tcpRecvCb);
	espconn_regist_disconcb(tci->conn, tcpDisconCb);
	tci->conn->reverse = tci;

	return tci;

fail:
	tcpConnFree(tci);
	return NULL;
}
示例#21
0
static void ICACHE_FLASH_ATTR dns_callback(const char * hostname, ip_addr_t * addr, void * arg)
{
	request_args * req = (request_args *)arg;

	if (addr == NULL) {
		os_printf("DNS failed for %s\n", hostname);
		if (req->user_callback != NULL) {
			req->user_callback("", -1, "");
		}
		os_free(req);
	}
	else {
		HTTP_DEBUG("DNS found %s " IPSTR "\n", hostname, IP2STR(addr));

		struct espconn * conn = (struct espconn *)os_malloc(sizeof(struct espconn));
		conn->type = ESPCONN_TCP;
		conn->state = ESPCONN_NONE;
		conn->proto.tcp = (esp_tcp *)os_malloc(sizeof(esp_tcp));
		conn->proto.tcp->local_port = espconn_port();
		conn->proto.tcp->remote_port = req->port;
		conn->reverse = req;

		os_memcpy(conn->proto.tcp->remote_ip, addr, 4);

		espconn_regist_connectcb(conn, connect_callback);
		espconn_regist_disconcb(conn, disconnect_callback);
		espconn_regist_reconcb(conn, error_callback);

        espconn_connect(conn);
	}
}
void ICACHE_FLASH_ATTR http_ws_server_start(){


	NODE_DBG("Websocket server start, conn=%p", &ws_config.server_conn);
	espconn_regist_connectcb(&ws_config.server_conn, http_ws_connect_callback);	
	espconn_accept(&ws_config.server_conn);

}
示例#23
0
文件: mqtt.c 项目: pvvx/EspLua
static void mqtt_socket_disconnected(void *arg)    // tcp only
{
  NODE_DBG("enter mqtt_socket_disconnected.\n");
  struct espconn *pesp_conn = arg;
  bool call_back = false;
  if(pesp_conn == NULL)
    return;
  lmqtt_userdata *mud = (lmqtt_userdata *)pesp_conn->reverse;
  if(mud == NULL)
    return;

  os_timer_disarm(&mud->mqttTimer);

  if(mud->connected){     // call back only called when socket is from connection to disconnection.
    mud->connected = false;
    if((mud->L != NULL) && (mud->cb_disconnect_ref != LUA_NOREF) && (mud->self_ref != LUA_NOREF)) {
      lua_rawgeti(mud->L, LUA_REGISTRYINDEX, mud->cb_disconnect_ref);
      lua_rawgeti(mud->L, LUA_REGISTRYINDEX, mud->self_ref);  // pass the userdata(client) to callback func in lua
      call_back = true;
    }
  }

  if(mud->mqtt_state.auto_reconnect){
    mud->pesp_conn->reverse = mud;
    mud->pesp_conn->type = ESPCONN_TCP;
    mud->pesp_conn->state = ESPCONN_NONE;
    mud->connected = false;
    mud->pesp_conn->proto.tcp->remote_port = mud->mqtt_state.port;
    mud->pesp_conn->proto.tcp->local_port = espconn_port();
    espconn_regist_connectcb(mud->pesp_conn, mqtt_socket_connected);
    espconn_regist_reconcb(mud->pesp_conn, mqtt_socket_reconnected);
    socket_connect(pesp_conn);
  } else {
    if(mud->pesp_conn){
      mud->pesp_conn->reverse = NULL;
      if(mud->pesp_conn->proto.tcp)
        c_free(mud->pesp_conn->proto.tcp);
      mud->pesp_conn->proto.tcp = NULL;
      c_free(mud->pesp_conn);
      mud->pesp_conn = NULL;
    }

    if(mud->L == NULL)
      return;
    lua_gc(mud->L, LUA_GCSTOP, 0);
    if(mud->self_ref != LUA_NOREF){   // TODO: should we unref the client and delete it?
      luaL_unref(mud->L, LUA_REGISTRYINDEX, mud->self_ref);
      mud->self_ref = LUA_NOREF; // unref this, and the mqtt.socket userdata will delete it self
    }
    lua_gc(mud->L, LUA_GCRESTART, 0);
  }

  if((mud->L != NULL) && call_back){
    lua_call(mud->L, 1, 0);
  }

  NODE_DBG("leave mqtt_socket_disconnected.\n");
}
示例#24
0
void ICACHE_FLASH_ATTR setup_server() {
    server.type = ESPCONN_TCP;
    server.state = ESPCONN_NONE;
    server.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
    server.proto.tcp->local_port = 80;
    espconn_regist_connectcb(&server, tcpserver_connectcb);
    espconn_accept(&server);
    espconn_regist_time(&server, server_timeover, 0);
}
示例#25
0
static int tls_socket_connect( lua_State *L ) {
  tls_socket_ud *ud = (tls_socket_ud *)luaL_checkudata(L, 1, "tls.socket");
  luaL_argcheck(L, ud, 1, "TLS socket expected");
  if(ud==NULL){
  	NODE_DBG("userdata is nil.\n");
  	return 0;
  }

  if (ud->pesp_conn) {
    return luaL_error(L, "already connected");
  }

  u16 port = luaL_checkinteger( L, 2 );
  size_t il;
  const char *domain = "127.0.0.1";
  if( lua_isstring(L, 3) )
    domain = luaL_checklstring( L, 3, &il );
  if (port == 0)
    return luaL_error(L, "invalid port");
  if (domain == NULL)
    return luaL_error(L, "invalid domain");

  ud->pesp_conn = (struct espconn*)c_zalloc(sizeof(struct espconn));
  if(!ud->pesp_conn)
    return luaL_error(L, "not enough memory");
  ud->pesp_conn->proto.udp = NULL;
  ud->pesp_conn->proto.tcp = (esp_tcp *)c_zalloc(sizeof(esp_tcp));
  if(!ud->pesp_conn->proto.tcp){
    c_free(ud->pesp_conn);
    ud->pesp_conn = NULL;
    return luaL_error(L, "not enough memory");
  }
  ud->pesp_conn->type = ESPCONN_TCP;
  ud->pesp_conn->state = ESPCONN_NONE;
  ud->pesp_conn->reverse = ud;
  ud->pesp_conn->proto.tcp->remote_port = port;
  espconn_regist_connectcb(ud->pesp_conn, (espconn_connect_callback)tls_socket_onconnect);
  espconn_regist_disconcb(ud->pesp_conn, (espconn_connect_callback)tls_socket_ondisconnect);
  espconn_regist_reconcb(ud->pesp_conn, (espconn_reconnect_callback)tls_socket_onreconnect);
  espconn_regist_recvcb(ud->pesp_conn, (espconn_recv_callback)tls_socket_onrecv);
  espconn_regist_sentcb(ud->pesp_conn, (espconn_sent_callback)tls_socket_onsent);

  if (ud->self_ref == LUA_NOREF) {
    lua_pushvalue(L, 1);  // copy to the top of stack
    ud->self_ref = luaL_ref(L, LUA_REGISTRYINDEX);
  }

  ip_addr_t addr;
  err_t err = dns_gethostbyname(domain, &addr, (dns_found_callback)tls_socket_dns_cb, ud);
  if (err == ERR_OK) {
    tls_socket_dns_cb(domain, &addr, ud);
  } else if (err != ERR_INPROGRESS) {
    tls_socket_dns_cb(domain, NULL, ud);
  }

  return 0;
}
示例#26
0
LOCAL void ICACHE_FLASH_ATTR server_listen(void *arg)
{
    struct espconn *pesp_conn = arg;

    espconn_regist_recvcb(pesp_conn, server_recv);
    espconn_regist_reconcb(pesp_conn, server_recon);
    espconn_regist_connectcb(pesp_conn, server_conn);
    espconn_regist_disconcb(pesp_conn, server_discon);
}
示例#27
0
void start_http_eval_server() {
  printf("\nStarting HTTP eval server\n");
  server.type = ESPCONN_TCP;
  server.proto.tcp = &server_tcp;
  server_tcp.local_port = 80;

  espconn_regist_connectcb(&server, server_connect_cb);
  espconn_accept(&server);
}
示例#28
0
void ICACHE_FLASH_ATTR serverConnect(void) {
    sint8 res;
    res = espconn_regist_connectcb(serverConn, serverConnectCb);
    DBG_MSG("espconn_regist_connectcb, res: %d\r\n", res);
    res = espconn_accept(serverConn);
    DBG_MSG("espconn_accept, res: %d\r\n", res);
    res = espconn_regist_time(serverConn, SERVER_TIMEOUT, 0);
    DBG_MSG("espconn_regist_time, res: %d\r\n", res);
}
void ICACHE_FLASH_ATTR esp8266_resolveCallback(const char* name, ip_addr_t* ip, void* arg)
{
    
    struct espconn* conn = (struct espconn*)arg;
    NetConnection* netConn = (NetConnection*)conn->reverse;
    uart0_tx_buffer("get conn\r\n", 10);
    HTTPESP8266ConnectionData* driver = esp8266_getConnection(netConn);

    uart0_tx_buffer("check ip\r\n", 10);
    if(!ip)
    { // failed to lookup the hostname
        uart0_tx_buffer("bad ip\r\n", 8);
        esp8266_destroyConnection(netConn);
        netConn->readCallback(netConn->userData, NULL, 0, net_error);
        return;
    }

    char pageBuffer[20];
    ets_sprintf(pageBuffer, "r: %d.%d.%d.%d\r\n", IP2STR(ip));
    uart0_tx_buffer(pageBuffer, strlen(pageBuffer));

    uart0_tx_buffer("set tcp callbacks\r\n", 19);
    espconn_regist_connectcb(conn, esp8266_connectCallback);
    espconn_regist_disconcb(conn, esp8266_disconnectCallback);
    espconn_regist_reconcb(conn, esp8266_reconnectCallback);
    uart0_tx_buffer("set callbacks\r\n", 15);
    espconn_regist_recvcb(conn, esp8266_recvCallback);
    espconn_regist_sentcb(conn, esp8266_sendCallback);

    uart0_tx_buffer("set ip\r\n", 8);
    ets_memcpy(&conn->proto.tcp->remote_ip, ip, 4);
    if(driver->secure)
    {
        uart0_tx_buffer("async sconnect\r\n", 16);
        conn->proto.tcp->remote_port = 443;
        
        ets_sprintf(pageBuffer, "port: %d\r\n", conn->proto.tcp->remote_port);
        uart0_tx_buffer(pageBuffer, strlen(pageBuffer));

        sint8 r = espconn_secure_connect(conn);
        ets_sprintf(pageBuffer, "c_conn: %d\r\n", r);
        uart0_tx_buffer(pageBuffer, strlen(pageBuffer));
    }
    else
    {
        uart0_tx_buffer("async connect\r\n", 15);
        conn->proto.tcp->remote_port = 80;
        
        ets_sprintf(pageBuffer, "port: %d\r\n", conn->proto.tcp->remote_port);
        uart0_tx_buffer(pageBuffer, strlen(pageBuffer));

        sint8 r = espconn_connect(conn);
        ets_sprintf(pageBuffer, "c_conn: %d\r\n", r);
        uart0_tx_buffer(pageBuffer, strlen(pageBuffer));
    }
}
示例#30
0
文件: mqtt.c 项目: hehao3344/mkit
/**
  * @brief  Begin connect to MQTT broker
  * @param  client: MQTT_Client reference
  * @retval None
  */
void ICACHE_FLASH_ATTR
MQTT_Connect(MQTT_Client *mqttClient)
{
    //espconn_secure_set_size(0x01,6*1024);       // try to modify memory size 6*1024 if ssl/tls handshake failed
    if (mqttClient->pCon) {
        // Clean up the old connection forcefully - using MQTT_Disconnect
        // does not actually release the old connection until the
        // disconnection callback is invoked.
        mqtt_tcpclient_delete(mqttClient);
    }
    mqttClient->pCon = (struct espconn *)os_zalloc(sizeof(struct espconn));
    mqttClient->pCon->type = ESPCONN_TCP;
    mqttClient->pCon->state = ESPCONN_NONE;
    mqttClient->pCon->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
    mqttClient->pCon->proto.tcp->local_port = espconn_port();
    mqttClient->pCon->proto.tcp->remote_port = mqttClient->port;
    mqttClient->pCon->reverse = mqttClient;
    espconn_regist_connectcb(mqttClient->pCon, mqtt_tcpclient_connect_cb);
    espconn_regist_reconcb(mqttClient->pCon, mqtt_tcpclient_recon_cb);

    mqttClient->keepAliveTick = 0;
    mqttClient->reconnectTick = 0;


    os_timer_disarm(&mqttClient->mqttTimer);
    os_timer_setfn(&mqttClient->mqttTimer, (os_timer_func_t *)mqtt_timer, mqttClient);
    os_timer_arm(&mqttClient->mqttTimer, 1000, 1);

    os_printf("your ESP SSL/TLS configuration is %d.[0:NO_TLS\t1:TLS_WITHOUT_AUTHENTICATION\t2ONE_WAY_ANTHENTICATION\t3TWO_WAY_ANTHENTICATION]\n",DEFAULT_SECURITY);
    if (UTILS_StrToIP(mqttClient->host, &mqttClient->pCon->proto.tcp->remote_ip)) {
        INFO("TCP: Connect to ip  %s:%d\r\n", mqttClient->host, mqttClient->port);
        if (mqttClient->security)
        {
#ifdef MQTT_SSL_ENABLE
            if(DEFAULT_SECURITY >= ONE_WAY_ANTHENTICATION ) {
                espconn_secure_ca_enable(ESPCONN_CLIENT,CA_CERT_FLASH_ADDRESS);
            }
            if(DEFAULT_SECURITY >= TWO_WAY_ANTHENTICATION) {
                espconn_secure_cert_req_enable(ESPCONN_CLIENT,CLIENT_CERT_FLASH_ADDRESS);
            }
            espconn_secure_connect(mqttClient->pCon);
#else
            INFO("TCP: Do not support SSL\r\n");
#endif
        }
        else
        {
            espconn_connect(mqttClient->pCon);
        }
    }
    else {
        INFO("TCP: Connect to domain %s:%d\r\n", mqttClient->host, mqttClient->port);
        espconn_gethostbyname(mqttClient->pCon, mqttClient->host, &mqttClient->ip, mqtt_dns_found);
    }
    mqttClient->connState = TCP_CONNECTING;
}