Commit 353cbe23 authored by jan.koester's avatar jan.koester
Browse files

test

parent de1b48e5
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -522,8 +522,11 @@ namespace netplus {
                    // Do NOT call flush_out again - the WRITE completion handler will manage async writes.
                    // Just check if handshake is done, otherwise repost recv for more data.
                    
                    if (!owner->csock->getHandshakeDone()) {
                        std::cerr << "[IOCP] Handshake not done yet, reposting recv" << std::endl;
                    bool handshakeDone = owner->csock->getHandshakeDone();
                    std::cerr << "[IOCP] After handshake_after_accept: handshakeDone=" << handshakeDone << " hasPendingWrite=" << (int)owner->csock->hasPendingWrite() << std::endl;
                    
                    if (!handshakeDone) {
                        std::cerr << "[IOCP] Handshake not done yet, reposting recv for more data" << std::endl;
                        try {
                            post_recv(st, *owner);
                        } catch (...) {}
@@ -539,11 +542,14 @@ namespace netplus {
                        
                        if (decLen == 0) break;
                        
                        std::cerr << "[IOCP] Received " << decLen << " bytes of application data" << std::endl;
                        owner->RecvData.append(decrypted.data.buf, decLen);
                        ev->RequestEvent(*owner, tid, (ULONG_PTR)decLen);
                        std::cerr << "[IOCP] RequestEvent returned, SendData.size()=" << owner->SendData.size() << std::endl;
                    }
                } catch (NetException& e) {
                    if (e.getErrorType() != NetException::Note) {
                        std::cerr << "[IOCP] Application data recvData threw NetException: " << e.what() << std::endl;
                        ev->DisconnectEvent(*owner, tid, 0);
                        remove_con(st, cs);
                        try { owner->csock->close(); } catch (...) {}
@@ -554,8 +560,17 @@ namespace netplus {

                // if user filled SendData -> try send
                try {
                    std::cerr << "[IOCP] Calling try_post_send, SendData.size()=" << owner->SendData.size() << std::endl;
                    try_post_send(ev, st, *owner, tid);
                    std::cerr << "[IOCP] try_post_send completed" << std::endl;
                } catch (std::exception& ex) {
                    std::cerr << "[IOCP] try_post_send threw: " << ex.what() << std::endl;
                    ev->DisconnectEvent(*owner, tid, 0);
                    remove_con(st, cs);
                    try { owner->csock->close(); } catch (...) {}
                    continue;
                } catch (...) {
                    std::cerr << "[IOCP] try_post_send threw unknown exception" << std::endl;
                    ev->DisconnectEvent(*owner, tid, 0);
                    remove_con(st, cs);
                    try { owner->csock->close(); } catch (...) {}
+13 −2
Original line number Diff line number Diff line
@@ -1216,18 +1216,29 @@ std::vector<uint8_t> netplus::ssl::_tls13_read_record_handshake()
{
    for (;;) {  // Loop to skip CCS records
        std::vector<uint8_t> rec = readTlsRecordAsync();
        if (rec.empty()) return {};
        if (rec.empty()) {
            std::cerr << "[SSL] _tls13_read_record_handshake: readTlsRecordAsync returned empty" << std::endl;
            return {};
        }

        if (rec.size() < 5)
        std::cerr << "[SSL] _tls13_read_record_handshake: got record, size=" << rec.size() << std::endl;

        if (rec.size() < 5) {
            std::cerr << "[SSL] _tls13_read_record_handshake: record too short (" << rec.size() << " < 5)" << std::endl;
            throwSSL(NetException::Error, "TLS1.3 record too short");
        }

        uint8_t  outer_type = rec[0];
        uint16_t ver        = (uint16_t(rec[1]) << 8) | rec[2];
        uint16_t rlen       = (uint16_t(rec[3]) << 8) | rec[4];

        std::cerr << "[SSL] _tls13_read_record_handshake: outer_type=0x" << std::hex << (int)outer_type << std::dec 
                  << " ver=0x" << std::hex << ver << std::dec << " rlen=" << rlen << std::endl;

        // ✅ Skip CCS records (middlebox compatibility in TLS 1.3)
        if (outer_type == 0x14) {
            if (rec.size() == 6 && rec[5] == 0x01) {
                std::cerr << "[SSL] _tls13_read_record_handshake: skipping CCS record" << std::endl;
                continue;  // ignore CCS, read next record
            }
        }