public SamListener(string bridgeHost, int bridgePort, string options = null) { SamV3Session session = null; try { session = new SamV3Session(bridgeHost, bridgePort); session.Handshake(); session.Create(null, options); this.Session = session; this.Create(false); session = null; } catch (Exception) { if (session != null) { session.Dispose(); } throw; } }
public SamListener(string bridgeHost, int bridgePort, string options = null) { SamV3Session session = null; try { session = new SamV3Session(bridgeHost, bridgePort); session.Handshake(); session.Create(null, options); this.Session = session; this.Create(false); session = null; } catch (Exception) { if (session != null) session.Dispose(); throw; } }
public SamV3StatefulAcceptor(SamV3Session session, Socket bridgeSocket = null) : base(session, bridgeSocket) { }
public SamV3Connector(SamV3Session session, Socket bridgeSocket = null) : base(session.BridgeHost, session.BridgePort, session.BridgeSessionId, bridgeSocket) { }
private Cap CreateCap(object sender, string uri) { if (_disposed) return null; if (this.State == ManagerState.Stop) return null; if (!uri.StartsWith("i2p:")) return null; List<IDisposable> garbages = new List<IDisposable>(); try { string scheme = null; string host = null; { Regex regex = new Regex(@"(.*?):(.*)"); var match = regex.Match(uri); if (match.Success) { scheme = match.Groups[1].Value; host = match.Groups[2].Value; } } if (host == null) return null; { string proxyScheme = null; string proxyHost = null; int proxyPort = -1; { Regex regex = new Regex(@"(.*?):(.*):(\d*)"); var match = regex.Match(this.SamBridgeUri); if (match.Success) { proxyScheme = match.Groups[1].Value; proxyHost = match.Groups[2].Value; proxyPort = int.Parse(match.Groups[3].Value); } } if (proxyHost == null) return null; if (scheme == "i2p") { SamV3Connector connector = null; try { SamV3Session session; lock (_samClientLock) { session = _samSession; if (session == null) { Socket proxySocket = null; try { proxySocket = OverlayNetworkManager.Connect(new IPEndPoint(OverlayNetworkManager.GetIpAddress(proxyHost), proxyPort), new TimeSpan(0, 0, 10)); string caption = "Outopos_Client"; string[] options = new string[] { "inbound.nickname=" + caption, "outbound.nickname=" + caption }; string optionsString = string.Join(" ", options); session = new SamV3Session(proxyHost, proxyPort, null, proxySocket); session.Handshake(); session.Create(null, optionsString); _samSession = session; } catch (Exception) { if (session != null) session.Dispose(); if (proxySocket != null) proxySocket.Dispose(); throw; } } } connector = new SamV3Connector(session); connector.Handshake(); connector.Connect(host); } catch (SamBridgeErrorException ex) { bool isLog = true; if (connector != null) connector.Dispose(); string result = ex.Reply.UniqueValue("RESULT", string.Empty).Value; if (result == SamBridgeErrorMessage.INVALID_ID) { lock (_samClientLock) { if (_samSession != null) { _samSession.Dispose(); _samSession = null; } } isLog = false; } else if (result == SamBridgeErrorMessage.CANT_REACH_PEER || result == SamBridgeErrorMessage.PEER_NOT_FOUND) { isLog = false; } if (isLog) Debug.WriteLine(ex); throw; } catch (SamException ex) { Debug.WriteLine(ex); if (connector != null) connector.Dispose(); throw; } return new SocketCap(connector.BridgeSocket); } } } catch (Exception) { foreach (var item in garbages) { item.Dispose(); } } return null; }
public override void Stop() { lock (_stateLock) { lock (this.ThisLock) { if (this.State == ManagerState.Stop) return; _state = ManagerState.Stop; } _watchThread.Join(); _watchThread = null; lock (_samClientLock) { if (_samSession != null) _samSession.Dispose(); _samSession = null; } lock (_samServerLock) { if (_samListener != null) _samListener.Dispose(); _samListener = null; _oldSamBridgeUri = null; } lock (this.ThisLock) { if (_settings.I2pUri != null) { if (this.RemoveUri(_settings.I2pUri)) Log.Information(string.Format("Remove Node uri: {0}", _settings.I2pUri)); } _settings.I2pUri = null; } } }
public SamV3StatefulAcceptor(SamV3Session session, Socket bridgeSocket = null) : base(session, bridgeSocket) { }
public SamV3Connector(SamV3Session session, Socket bridgeSocket = null) : base(session.BridgeHost, session.BridgePort, session.BridgeSessionId, bridgeSocket) { }