void sslConnect(SSLSocket *socket, const HostAddress *address, uint64_t usTimeout, sslCb callback, void *arg) { SSL_set_connect_state(socket->ssl); SSLOp *newOp = allocSSLOp(socket, callback, arg, 0, 0, afNone); newOp->type = sslOpConnect; newOp->state = sslStConnecting; if (!socket->current) { socket->current = newOp; asyncConnect(socket->object, address, usTimeout, connectProc, newOp); } else { newOp->address = *address; newOp->usTimeout = usTimeout; socket->current->next = newOp; } }
static void finishSSLOp(SSLOp *Op, AsyncOpStatus status) { SSLOp *current = Op->next; if (Op->type != sslOpWrite) Op->info.socket->current = current; Op->info.status = status; if (Op->info.callback) Op->info.callback(&Op->info); releaseObject(Op->info.socket->base, Op, sslPoolId); if (current && Op->type != sslOpWrite) { SSLSocket *S = current->info.socket; switch (current->type) { case sslOpConnect : asyncConnect(S->object, ¤t->address, current->usTimeout, connectProc, current); break; case sslOpRead : asyncRead(S->object, S->sslReadBuffer, S->sslReadBufferSize, afNone, current->usTimeout, readProc, current); break; } } }
/** * calles to init the Websockets server */ void WebSocketsClient::begin(const char *host, uint16_t port, const char * url, const char * protocol) { _host = host; _port = port; #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) _fingerprint = ""; #endif _client.num = 0; _client.status = WSC_NOT_CONNECTED; _client.tcp = NULL; #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) _client.isSSL = false; _client.ssl = NULL; #endif _client.cUrl = url; _client.cCode = 0; _client.cIsUpgrade = false; _client.cIsWebsocket = true; _client.cKey = ""; _client.cAccept = ""; _client.cProtocol = protocol; _client.cExtensions = ""; _client.cVersion = 0; _client.base64Authorization = ""; _client.plainAuthorization = ""; #ifdef ESP8266 randomSeed(RANDOM_REG32); #else // todo find better seed randomSeed(millis()); #endif #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) asyncConnect(); #endif }