From 59ca9f825163556fa3c94002f0cd5b00db6e0c42 Mon Sep 17 00:00:00 2001 From: mappu Date: Sat, 2 Apr 2016 12:51:23 +1300 Subject: [PATCH] nmdcs support --- src/libnmdc/libnmdc.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/libnmdc/libnmdc.go b/src/libnmdc/libnmdc.go index 5c39e8c..8f7e122 100644 --- a/src/libnmdc/libnmdc.go +++ b/src/libnmdc/libnmdc.go @@ -2,17 +2,30 @@ package libnmdc import ( + "crypto/tls" "fmt" "net" + "net/url" "regexp" "strings" "time" ) type ConnectionState int -type HubAddress string type HubEventType int +type HubAddress string + +func (this *HubAddress) IsSecure() bool { + parsed, _ := url.Parse(strings.ToLower(string(*this))) + return parsed.Scheme == "nmdcs" || parsed.Scheme == "dchubs" +} + +func (this *HubAddress) GetHostOnly() string { + parsed, _ := url.Parse(strings.ToLower(string(*this))) + return parsed.Host +} + const ( CONNECTIONSTATE_DISCONNECTED = 1 CONNECTIONSTATE_CONNECTING = 2 // Handshake in progress @@ -283,13 +296,19 @@ func (this *HubConnection) processProtocolMessage(message string) { func (this *HubConnection) worker() { var fullBuffer string + var err error = nil for { // If we're not connected, attempt reconnect if this.conn == nil { - tmp, err := net.Dial("tcp", string(this.Hco.Address)) - this.conn = tmp + + if this.Hco.Address.IsSecure() { + this.conn, err = tls.Dial("tcp", this.Hco.Address.GetHostOnly(), nil) + } else { + this.conn, err = net.Dial("tcp", this.Hco.Address.GetHostOnly()) + } + if err == nil { this.OnEvent <- HubEvent{EventType: EVENT_CONNECTION_STATE_CHANGED, StateChange: CONNECTIONSTATE_CONNECTING} }