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)); }
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"); } }
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); }
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); }
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 ); }
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); }
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); } }
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); }
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); }
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 ); } }
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); }
/* * 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); } }
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 }
// 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); }
// 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; }
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); }
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"); }
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); }
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; }
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); }
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); }
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)); } }
/** * @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; }