extern "C" char * do_select(Plug plug, SOCKET skt, int startup) { void * frontend = nullptr; if (!is_ssh(plug) && !is_pfwd(plug)) { // If it is not SSH/PFwd plug, then it must be Proxy plug. // Get SSH/PFwd plug which it wraps. Proxy_Socket ProxySocket = (reinterpret_cast<Proxy_Plug>(plug))->proxy_socket; plug = ProxySocket->plug; } bool pfwd = is_pfwd(plug) != 0; if (pfwd) { plug = static_cast<Plug>(get_pfwd_backend(plug)); } frontend = get_ssh_frontend(plug); DebugAssert(frontend); TSecureShell * SecureShell = NB_STATIC_DOWNCAST(TSecureShell, frontend); if (!pfwd) { SecureShell->UpdateSocket(skt, startup != 0); } else { SecureShell->UpdatePortFwdSocket(skt, startup != 0); } return nullptr; }
//--------------------------------------------------------------------------- extern "C" char * do_select(Plug plug, SOCKET skt, int startup) { void * frontend; if (!is_ssh(plug) && !is_pfwd(plug)) { // If it is not SSH/PFwd plug, then it must be Proxy plug. // Get SSH/PFwd plug which it wraps. Proxy_Socket ProxySocket = ((Proxy_Plug)plug)->proxy_socket; plug = ProxySocket->plug; } bool pfwd = is_pfwd(plug); if (pfwd) { plug = (Plug)get_pfwd_backend(plug); } frontend = get_ssh_frontend(plug); assert(frontend); TSecureShell * SecureShell = reinterpret_cast<TSecureShell*>(frontend); if (!pfwd) { SecureShell->UpdateSocket(skt, startup); } else { SecureShell->UpdatePortFwdSocket(skt, startup); } return NULL; }