แนวคิด

Outline SDK สร้างขึ้นบนแนวคิดพื้นฐานบางประการที่ได้รับคำนิยามว่าเป็นอินเทอร์เฟซที่สามารถทำงานร่วมกันได้ ซึ่งช่วยให้จัดองค์ประกอบและนำกลับมาใช้ใหม่ได้อย่างง่ายดาย

การเชื่อมต่อ

การเชื่อมต่อจะสร้างสื่อสารระหว่างอุปกรณ์ปลายทาง 2 เครื่องผ่านการรับส่งข้อมูลแบบแอบสแตรกต์ โดยการเชื่อมต่อมีด้วยกัน 2 ประเภทดังนี้

  • transport.StreamConn: การเชื่อมต่อที่ใช้สตรีม เช่น TCP และประเภทซ็อกเก็ต Posix SOCK_STREAM
  • transport.PacketConn: การเชื่อมต่อที่ใช้ Datagram เช่น UDP และประเภทซ็อกเก็ต SOCK_DGRAM เราใช้ "แพ็กเก็ต" แทน "Datagram" เนื่องจากเป็นข้อตกลงในไลบรารีมาตรฐานของ Go

การเชื่อมต่อสามารถรวมเข้าด้วยกันเพื่อสร้างการเชื่อมต่อแบบฝังผ่านการรับส่งข้อมูลใหม่ได้ เช่น ใช้ StreamConn ผ่าน TCP, ผ่าน TLS ผ่าน TCP, ผ่าน HTTP ผ่าน TLS ผ่าน TCP, ผ่าน QUIC และอื่นๆ

Dialer

Dialer จะสร้างการเชื่อมต่อตามที่อยู่ host:port ที่ระบุ ในขณะเดียวกันก็ทำการห่อหุ้มการรับส่งข้อมูลหรือพร็อกซีโปรโตคอลที่เกี่ยวข้อง ประเภท StreamDialer จะสร้างการเชื่อมต่อ StreamConn และ PacketDialer จะสร้าง PacketConn ตามที่อยู่ที่ระบุ นอกจากนี้ยังฝัง Dialer ได้ด้วย เช่น TLS Stream Dialer สามารถใช้ TCP Dialer เพื่อสร้าง StreamConn ที่รองรับโดยการเชื่อมต่อ TCP จากนั้นจึงสร้าง TLS StreamConn ที่รองรับโดย TCP StreamConn SOCKS5-over-TLS Dialer สามารถใช้ TLS Dialer เพื่อสร้าง TLS StreamConn ไปยังพร็อกซีก่อนทำการเชื่อมต่อ SOCKS5 ไปยังที่อยู่เป้าหมาย

รีโซลเวอร์

รีโซลเวอร์ (dns.Resolver) ช่วยให้ตอบคำถาม DNS ไปพร้อมกับทำการห่อหุ้มข้อมูลอัลกอริทึมหรือโปรโตคอลที่เกี่ยวข้อง โดยจะใช้รีโซลเวอร์เป็นหลักสำหรับการแมปชื่อโดเมนกับที่อยู่ IP