Outline SDK สร้างขึ้นบนแนวคิดพื้นฐานบางประการที่ได้รับคำนิยามว่าเป็นอินเทอร์เฟซที่สามารถทำงานร่วมกันได้ ซึ่งช่วยให้จัดองค์ประกอบและนำกลับมาใช้ใหม่ได้อย่างง่ายดาย
การเชื่อมต่อ
การเชื่อมต่อจะสร้างสื่อสารระหว่างอุปกรณ์ปลายทาง 2 เครื่องผ่านการรับส่งข้อมูลแบบแอบสแตรกต์ โดยการเชื่อมต่อมีด้วยกัน 2 ประเภทดังนี้
transport.StreamConn
: การเชื่อมต่อที่ใช้สตรีม เช่น TCP และประเภทซ็อกเก็ต PosixSOCK_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