コード例 #1
0
static void ICACHE_FLASH_ATTR
incoming_connection_callback(void *arg)
{
    struct espconn *pconnection = arg;
    remot_info *premot = NULL;
    uint8_t idx;
    int8_t value;

    espconn_regist_recvcb(pconnection, tcpserver_recv_callback);
    espconn_regist_reconcb(pconnection, tcpserver_reconnect_callback);
    espconn_regist_disconcb(pconnection, tcpserver_disconnect_callback);

    value = espconn_get_connection_info(&tcp_server, &premot, 0);
    os_printf("Incoming TCP connection. link_cnt=%d. Get connnection info result:[%d]\r\n", 
            tcp_server.link_cnt, value);

    if (value == ESPCONN_OK)
    {
        //char *testString = "Hello! This is a TCP server on ESP8266.\r\n";
        for (idx = 0; idx < tcp_server.link_cnt; idx++)
        {
            os_printf("TCP client %d: %d.%d.%d.%d:%d\r\n",
                    idx + 1,
                    premot[idx].remote_ip[0],
                    premot[idx].remote_ip[1],
                    premot[idx].remote_ip[2],
                    premot[idx].remote_ip[3],
                    premot[idx].remote_port);
        }
    }

    os_printf("\r\n");
}
コード例 #2
0
ファイル: v7_http_client.c プロジェクト: Bravo13/smart.js
/*
 * 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);
  }
}
コード例 #3
0
static void ICACHE_FLASH_ATTR httpdConnectCb(void *arg) {
	struct espconn *conn=arg;
	int i;
	//Find empty conndata in pool
	for (i=0; i<MAX_CONN; i++) if (connData[i].conn==NULL) break;
	os_printf("Con req, conn=%p, pool slot %d\n", conn, i);
	if (i==MAX_CONN) {
		os_printf("Aiee, conn pool overflow!\n");
		espconn_disconnect(conn);
		return;
	}
	connData[i].priv=&connPrivData[i];
	connData[i].conn=conn;
	connData[i].priv->headPos=0;
	connData[i].post=&connPostData[i];
	connData[i].post->buff=NULL;
	connData[i].post->buffLen=0;
	connData[i].post->received=0;
	connData[i].post->len=-1;

	espconn_regist_recvcb(conn, httpdRecvCb);
	espconn_regist_reconcb(conn, httpdReconCb);
	espconn_regist_disconcb(conn, httpdDisconCb);
	espconn_regist_sentcb(conn, httpdSentCb);
}
コード例 #4
0
/**
 * Callback function registered to the ESP8266 environment that is
 * invoked when a new inbound connection has been formed.
 */
static void esp8266_callback_connectCB_inbound(
    void *arg //!<
) {
    struct espconn *pEspconn = (struct espconn *)arg;
    assert(pEspconn != NULL);

    struct socketData *pClientSocketData = allocateNewSocket();
    if (pClientSocketData == NULL) {
        DBG("%s: out of sockets, dropping inbound connection\n", DBG_LIB);
        espconn_disconnect(pEspconn);
        return;
    }
    DBG("%s: accepted socket %d inbound to port %d from %d.%d.%d.%d:%d\n", DBG_LIB,
        pClientSocketData->socketId, pEspconn->proto.tcp->local_port,
        IP2STR(pEspconn->proto.tcp->remote_ip), pEspconn->proto.tcp->remote_port);
    //dumpEspConn(pEspconn);

    // register callbacks on the new connection
    espconn_regist_disconcb(pEspconn, esp8266_callback_disconnectCB);
    espconn_regist_reconcb(pEspconn, esp8266_callback_reconnectCB);
    espconn_regist_sentcb(pEspconn, esp8266_callback_sentCB);
    espconn_regist_recvcb(pEspconn, esp8266_callback_recvCB);

    pClientSocketData->pEspconn          = pEspconn;
    pClientSocketData->pEspconn->reverse = pClientSocketData;
    pClientSocketData->creationType      = SOCKET_CREATED_INBOUND;
    pClientSocketData->state             = SOCKET_STATE_UNACCEPTED;
}
コード例 #5
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");
}
コード例 #6
0
ファイル: rboot-ota.c プロジェクト: daviddpd/dpdChatFabric
// 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);
}
コード例 #7
0
ファイル: tcpclient.c プロジェクト: jonribera/esp-link
// 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;
}
コード例 #8
0
ファイル: Discovery.cpp プロジェクト: mirobot/mirobot-arduino
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);
}
コード例 #9
0
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);
}
コード例 #10
0
ファイル: httpclient.c プロジェクト: withmaia/maia-attinytemp
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);
	}
}
コード例 #11
0
ファイル: fota-util.c プロジェクト: eprzenic/esp8266-dev
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");
  }
}
コード例 #12
0
ファイル: user_main.c プロジェクト: cnlohr/dumbcraft8266
LOCAL void ICACHE_FLASH_ATTR
at_tcpserver_listen(void *arg)
{
	struct espconn *pespconn = (struct espconn *)arg;
	uint8_t i;
	printf("get tcpClient:\r\n");
	for( i = 0; i < MAX_CONNS; i++ )
	{
		if( connections[i].pespconn == 0 )
		{
			break;
		}
	}
	if( i == MAX_CONNS )
	{
		return;
	}

	connections[i].pespconn = pespconn;
	connections[i].cansend = 1;
	connections[i].id = i;

	pespconn->reverse = (void*)&connections[i];
	espconn_regist_recvcb(pespconn, at_tcpclient_recv);
	espconn_regist_reconcb(pespconn, at_tcpserver_recon_cb);
	espconn_regist_disconcb(pespconn, at_tcpserver_discon_cb);
	espconn_regist_sentcb(pespconn, at_tcpclient_sent_cb);
	uart0_sendStr("Link\r\n");
	AddPlayer( i );
}
コード例 #13
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" );
}
コード例 #14
0
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);
}
コード例 #15
0
ファイル: server.c プロジェクト: LeandroTE/ESP8266
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
}
コード例 #16
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");
}
コード例 #17
0
ファイル: user_main.c プロジェクト: johnkok/IoT_LightControl
LOCAL void ICACHE_FLASH_ATTR
server_listen(void *arg)
{
    struct espconn *pesp_conn = arg;

    espconn_regist_recvcb(pesp_conn, webserver_recv);
    espconn_regist_reconcb(pesp_conn, webserver_recon);
    espconn_regist_disconcb(pesp_conn, webserver_discon);
}
コード例 #18
0
ファイル: webserver.c プロジェクト: Itachihi/esp8266_car
LOCAL ICACHE_FLASH_ATTR
void webserver_listen(void *arg) {
	struct espconn *pesp_conn = arg;

	espconn_regist_recvcb(pesp_conn, webserver_recv);//接收到数据调用webserver_recv
	espconn_regist_reconcb(pesp_conn, webserver_recon);//
	espconn_regist_disconcb(pesp_conn, webserver_discon);//未接收到数据调用webserver_discon

}
コード例 #19
0
ファイル: tls.c プロジェクト: FelixPe/nodemcu-firmware
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;
}
コード例 #20
0
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));
    }
}
コード例 #21
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;
}
コード例 #22
0
ファイル: httpd-nonos.c プロジェクト: MightyPork/libesphttpd
static void ICACHE_FLASH_ATTR platConnCb(void *arg) {
	ConnTypePtr conn=arg;
	if (httpdConnectCb(conn, (char*)conn->proto.tcp->remote_ip, conn->proto.tcp->remote_port)) {
		espconn_regist_recvcb(conn, platRecvCb);
		espconn_regist_reconcb(conn, platReconCb);
		espconn_regist_disconcb(conn, platDisconCb);
		espconn_regist_sentcb(conn, platSentCb);
	} else {
		espconn_disconnect(conn);
	}
}
コード例 #23
0
void ICACHE_FLASH_ATTR client_connected_cb(void* conn)
{
	struct espconn* pconn = (struct espconn*)conn;
	os_printf("client connected\n");
	os_printf("debug: [%p], [" IPSTR ":%d], state, [%d]\n",
			pconn, IP2STR(pconn->proto.tcp->remote_ip), pconn->proto.tcp->remote_port, pconn->state);

	espconn_regist_recvcb(pconn, data_received_cb);
	espconn_regist_sentcb(pconn, sent_cloud_cb);
	espconn_regist_disconcb(pconn, client_disconnected_cb);
	espconn_regist_reconcb(pconn, client_reconnect_cb);
}
コード例 #24
0
static void
esp8266_cb_connect(void *arg)
{
	struct espconn *cs = arg;
//	struct ip_addr *ipa = (struct ip_addr *)cs->proto.tcp->remote_ip;
	struct lws_vhost *vh = hacky_context->vhost_list;
//	struct ip_info info;
	struct lws *wsi;
	int n;

	lwsl_notice("%s: (wsi coming): %p\n", __func__, cs->reverse);
#if 0
	wifi_get_ip_info(0, &info);
	if (ip_addr_netcmp(ipa, &info.ip, &info.netmask)) {
		/* we are on the same subnet as the AP, ie, connected to AP */
		while (vh && strcmp(vh->name, "ap"))
			vh = vh->vhost_next;
	} else
		while (vh && !strcmp(vh->name, "ap"))
			vh = vh->vhost_next;

	if (!vh)
		goto bail;
#endif
	n = esp8266_find_free_conn(hacky_context);
	if (n < 0)
		goto bail;

	hacky_context->connpool[n] = cs;

	espconn_recv_hold(cs);

	wsi = lws_adopt_socket_vhost(vh, cs);
	if (!wsi)
		goto bail;

	lwsl_err("%s: wsi %p (using free_conn %d): vh %s\n", __func__, wsi, n, vh->name);

	espconn_regist_recvcb(cs, esp8266_cb_rx);
	espconn_regist_reconcb(cs, esp8266_cb_recon);
	espconn_regist_disconcb(cs, esp8266_cb_disconnected);
	espconn_regist_sentcb(cs, esp8266_cb_sent);

	espconn_set_opt(cs, ESPCONN_NODELAY | ESPCONN_REUSEADDR);
	espconn_regist_time(cs, 7200, 1);

	return;

bail:
	lwsl_err("%s: bailed]n", __func__);
	espconn_disconnect(cs);
}
コード例 #25
0
void ICACHE_FLASH_ATTR
tcpserver_listen(void *arg)
{
    struct espconn *pesp_conn = arg;
    os_printf("TCP listen\r\n");

    espconn_regist_recvcb(pesp_conn, tcpserver_recv_cb);
    espconn_regist_reconcb(pesp_conn, tcpserver_recon_cb);
    espconn_regist_disconcb(pesp_conn, tcpserver_discon_cb);
    
    //espconn_regist_sentcb(pesp_conn, tcp_server_sent_cb);
    //tcp_server_multi_send();
}
コード例 #26
0
ファイル: telnet_server.c プロジェクト: nvl1109/esp8266-dev
static void ICACHE_FLASH_ATTR serverConnectCb(void *arg) {
    struct espconn *conn = arg;

    connData->conn=conn;
    connData->txbufferlen = 0;
    connData->readytosend = true;
    DBG_MSG("Client connected!!! txbufferlen=%d\r\n", connData->txbufferlen);

    espconn_regist_recvcb(conn, serverRecvCb);
    espconn_regist_reconcb(conn, serverReconCb);
    espconn_regist_disconcb(conn, serverDisconCb);
    espconn_regist_sentcb(conn, serverSentCb);
    config_status = CONFIG_STATUS_TELNET_CONNNECTED;
}
コード例 #27
0
void ICACHE_FLASH_ATTR dhap_httpd_init() {
	struct espconn *httpdConn = (struct espconn *)os_zalloc(sizeof(struct espconn ));
	esp_tcp *httpdTcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
	httpdConn->type = ESPCONN_TCP;
	httpdConn->state = ESPCONN_NONE;
	httpdTcp->local_port = HTTPD_PORT;
	httpdConn->proto.tcp = httpdTcp;

	espconn_regist_connectcb(httpdConn, dhap_httpd_connect_cb);
	espconn_regist_reconcb(httpdConn, dhap_httpd_reconnect_cb);
	sint8 res = espconn_accept(httpdConn);
	if(res)
		dhdebug("espconn_accept returned: %d", res);
}
コード例 #28
0
ファイル: mqtt.c プロジェクト: haithamkob/esp_wifi_repeater
/**
  * @brief  Begin connect to MQTT broker
  * @param  client: MQTT_Client reference
  * @retval None
  */
void ICACHE_FLASH_ATTR
MQTT_Connect(MQTT_Client *mqttClient)
{
  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);

  if (UTILS_StrToIP(mqttClient->host, &mqttClient->pCon->proto.tcp->remote_ip)) {
    MQTT_INFO("TCP: Connect to ip  %s:%d\r\n", mqttClient->host, mqttClient->port);
    if (mqttClient->security)
    {
#ifdef MQTT_SSL_ENABLE
      espconn_secure_set_size(ESPCONN_CLIENT, MQTT_SSL_SIZE);
      espconn_secure_connect(mqttClient->pCon);
#else
      MQTT_INFO("TCP: Do not support SSL\r\n");
#endif
    }
    else
    {
      espconn_connect(mqttClient->pCon);
    }
  }
  else {
    MQTT_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;
}
コード例 #29
0
static void  webserver_listen(void *arg)
{
    struct espconn *pesp_conn = arg;
    console_printf("connect    | %d.%d.%d.%d:%d \n",
		   pesp_conn->proto.tcp->remote_ip[0],
		   pesp_conn->proto.tcp->remote_ip[1],
		   pesp_conn->proto.tcp->remote_ip[2],
		   pesp_conn->proto.tcp->remote_ip[3],
		   pesp_conn->proto.tcp->remote_port);

    espconn_regist_recvcb(pesp_conn, webserver_recv);
    espconn_regist_reconcb(pesp_conn, webserver_recon);
    espconn_regist_disconcb(pesp_conn, webserver_discon);

}
コード例 #30
0
ファイル: httpd.c プロジェクト: koltegirish/esphttpd-1
/************************************************
*	name:			httpdConnectCb
*	parameters:		ptArgument - esp connection
*	return value:	none
*	purpose:		assign connection to request
************************************************/
static void ICACHE_FLASH_ATTR	httpdConnectCb(void *	ptArgument)
{
	/* initialization */
	struct espconn *	ptEspConnection = ptArgument;
	int 				iIndex 	 			= 0;

	/* find empty g_ptConnectionData in pool */
	for (iIndex = 0; HTTPD_MAX_CONNECTIONS > iIndex; iIndex++)
	{
		if (NULL == g_ptConnectionData[iIndex].ptEspConnection)
		{
			break;
		}
		
#ifdef HTTPD_DEBUG
		os_printf("httpdConnectCb: connection request: connection %p, pool slot %d\n", ptEspConnection, iIndex);
#endif

		if (HTTPD_MAX_CONNECTIONS == iIndex)
		{

#ifdef HTTPD_DEBUG
			os_printf("httpdConnectCb: connection pool overflow!\n");
#endif

			espconn_disconnect(ptEspConnection);
			goto lblCleanup;
		}
	}

	g_ptConnectionData[iIndex].ptPrivate = &g_ptConnectionPrivateData[iIndex];
	g_ptConnectionData[iIndex].ptEspConnection = ptEspConnection;
	g_ptConnectionData[iIndex].ptPrivate->cbHeaderLength = 0;
	g_ptConnectionData[iIndex].ptPost = &g_ptConnectionPost[iIndex];
	g_ptConnectionData[iIndex].ptPost->pbBuffer = NULL;
	g_ptConnectionData[iIndex].ptPost->cbBufferLength = 0;
	g_ptConnectionData[iIndex].ptPost->cbReceived = 0;
	g_ptConnectionData[iIndex].ptPost->cbProcessed = 0;
	g_ptConnectionData[iIndex].ptPost->cbPostLength = -1;

	espconn_regist_recvcb(ptEspConnection, httpdRecvCb);
	espconn_regist_reconcb(ptEspConnection, httpdReconCb);
	espconn_regist_disconcb(ptEspConnection, httpdDisconCb);
	espconn_regist_sentcb(ptEspConnection, httpdSentCb);

lblCleanup:
	return;
}