port-tunnel/TODO.md

2.1 KiB

TODO:

  • listen and connect for UDP

    listener {
        mainsock = new UdpSocket(true)
        mainsock.bind(in_end)
    
        do {
            pac = mainsock.receiveAny(out sender_end)
        } while (pac is not ConnectionRequest) skip package
        connector_end = sender_end
        mainsock.sendTo(ConnectionConfirmation, connector_end)
    
        attemptN = 0
        while(attemptN < 20){
            try {
                pac = mainsock.receiveAny(out sender_end)
                if(sender_end == connector_end) {
                    connector_pac = new ConnectorPackage.parse(pac)
                    mainsock.sendTo(connector_pac.data, connector_pac.destination), 
                }
                else {
                    extern_pac = new ExternPackage(pac, sender_end)
                    mainsock.sendTo(extern_pac, connector_end)
                }
                attemptN = 0
            }
            catch { 
                attemptN++
                sleep(10ms)
            }
        }
        log("connector is unreachable")
    }
    
    connector {
        if(output_mode == bind) {
            mainsock = new UdpSocket(true)
            mainsock.bind(out_end)
        }
        else if(output_mode == send) {
            mainsock = new UdpSocket(false)
        }
        else throw
    
        attemptN = 0
        while(attemptN < 20) {
            try {
                pac = mainsock.receiveAny(out sender_end)
                if(sender_end == out_end) {
                    connector_pac = new ConnectorPackage(pac)
                }
                else {
                    extern_pac = ExternPackage.parse(pac)
                    mainsock.sendTo(extern_pac.data, out_end)
                }
                attemptN = 0
            }
            catch { 
                attemptN++
                sleep(10ms)
            }
        }
        log("connector is unreachable")
    }
    
    
  • listen and connect for TCP

    
    
  • encrypt/decrypt input/output

    • generate temp password from key every 10 minutes:
      rng(seed: time()/(10*60*CLOCKS_PER_SECOND), salt: hash(key))