コード例 #1
0
		//public TrunkLocalProxie(int transactionId, ByteArrayPart toUri, ByteArrayPart toTag, LocationService.Binding binding, int fromTag, Trunk trunk)
		public TrunkLocalProxie(int transactionId, Trunk trunk, LocationService.Binding binding)
			: base(transactionId)
		{
			//this.toUri = toUri;
			//this.toTag = toTag;
			//this.tag = fromTag;
			this.trunk = trunk;
			this.binding = binding;
		}
コード例 #2
0
ファイル: MsPresTU.cs プロジェクト: hungdluit/sipserver
		public MsPresTU(IAccounts accounts, IUserz userz, LocationService locationService)
		{
			this.accounts = accounts;
			this.userz = userz;
			this.locationService = locationService;
			this.enhancedPresence = new EnhancedPresence1(BenotifyHandler);
			this.dialogManager = new DialogManager();

			locationService.AorAdded += LocationService_AorAdded;
			locationService.AorRemoved += LocationService_AorRemoved;
			locationService.ContactAdded += LocationService_ContactAdded;
			locationService.ContactRemoved += LocationService_ContactRemoved;

			userz.Updated += Users_AddedOrUpdated;
			userz.Added += Users_AddedOrUpdated;
			userz.Reset += Users_Reset;

			accounts.ForEach((account) =>
			{
				for (int i = 0; i < userz.Count; i++)
					ResetUsers(userz[i], account);
			});
		}
コード例 #3
0
ファイル: MsPresTU.cs プロジェクト: hungdluit/sipserver
		private void LocationService_ContactRemoved(ByteArrayPart aor1, LocationService.Binding binding)
		{
			enhancedPresence.EndpointUnregistered(aor1.ToString(),
				binding.SipInstance.IsValid ? binding.SipInstance.ToString() : binding.AddrSpec.ToString());
		}
コード例 #4
0
ファイル: MsPresTU.cs プロジェクト: hungdluit/sipserver
		/// <summary>
		/// Обработчик события evRegisteredAORContact от Location Service.
		/// </summary>
		private void LocationService_ContactAdded(ByteArrayPart aor1, LocationService.Binding contact, SipMessageReader request)
		{
			var aor = aor1.ToString();
			bool ep = false;

			for (var i = 0; i < request.Count.SupportedCount; i++)
			{
				if (request.Supported[i].Option.ToString() == @"msrtc-event-categories")
				{
					ep = true;
					break;
				}
			}

			enhancedPresence.EndpointRegistered(aor, contact.SipInstance.Length != 0 ? contact.SipInstance.ToString() : contact.AddrSpec.ToString(), ep);
		}
コード例 #5
0
ファイル: ProxieFactory.cs プロジェクト: hungdluit/sipserver
		public static IProxie Create(int transactionId, LocationService.Binding binding)
		{
			return new LocalProxie(binding, transactionId);
		}
コード例 #6
0
ファイル: Initializer.cs プロジェクト: hungdluit/sipserver
		public Initializer(EventHandler<EventArgs> configChangedHandler)
		{
			var configuration = SipServerConfigurationSection.GetSection();

			var adUsers = (configuration.IsActiveDirectoryEnabled == false) ? null : new AdUsers(configuration.ActiveDirectoryGroup);

			Func<Userz> CreateUserz = () =>
			{
				var result = new Userz(configuration.CustomUsersPath);

				result.Add(new CsvUsers(configuration.UsersCsvFilePathName));
				if (adUsers != null)
					result.Add(adUsers);

				result.LoadCustomUsers();

				return result;
			};


			var serversManager = new ServersManager<Connection>(new ServersManagerConfig());
			var transportLayer = new TransportLayer(serversManager, configuration.WebSocketResponseFrame);
			var authorization = new SipAuthorizationManager();
			var transactionLayer = new TransactionLayer(authorization);
			var userz = CreateUserz();
			var locationService = new LocationService();
			var mras = new Mras.Mras1();
			var trunkManager = new TrunkManager();
			var accounts = new Accountx(configuration.AccountConfigFilePathName);
			var msPresTu = new MsPresTU(accounts, userz, locationService);
			var wcfService = new WCFService(configuration, msPresTu.EnhancedPresence, trunkManager, accounts, userz);
			var httpAuthorization = new HttpAuthorizationManager();
			var httpServer = new HttpServer(httpAuthorization, configuration.AdminUri);
			//var httpServerAgentRegistrar = new Func<IHttpServerAgent, IHttpServer>((agent) => { return httpServer.Register(agent); });
			var restapi = new RestapiService(accounts, userz) { AdministratorPassword = configuration.AdministratorPassword, };
			var httpFileServer = new HttpFileServer(configuration.WwwPath, string.Empty);
			var xcapServer = new XcapServer();
			var configurationMonitor = new ConfigurationMonitor();
			var simpleModule = new SimpleModule(EqualityComparer<string>.Default);
            var proxyServerTU = new ProxyServerTU(locationService, trunkManager, accounts);

			GetResults = (
				out TransportLayer transportLayer1,
				out TransactionLayer transactionLayer1,
				out LocationService locationService1,
				out WCFService wcfService1,
				out ConfigurationMonitor configurationMonitor1,
				out TrunkManager trunkManager1,
				out SipAuthorizationManager authorization1,
				out Userz userz1,
				out AdUsers adUsers1,
				out Mras.Mras1 mras1,
				out HttpFileServer httpFileServer1,
				out Accountx accounts1,
				out RestapiService restapi1,
                out ProxyServerTU proxyServerTU1
				) =>
			{
				transportLayer1 = transportLayer;
				transactionLayer1 = transactionLayer;
				locationService1 = locationService;
				wcfService1 = wcfService;
				configurationMonitor1 = configurationMonitor;
				trunkManager1 = trunkManager;
				authorization1 = authorization;
				userz1 = userz;
				adUsers1 = adUsers;
				mras1 = mras;
				httpFileServer1 = httpFileServer;
				accounts1 = accounts;
				restapi1 = restapi;
                proxyServerTU1 = proxyServerTU;
			};


			Action InitializeTracer = () =>
			{
				Tracer.Initialize(serversManager.Logger);
                Tracer.Configure(configuration.TracingPath, configuration.IsTracingEnabled);
			};


			Action InitializeConfigurationMonitor = () =>
			{
				configurationMonitor.Changed += configChangedHandler;
				configurationMonitor.StartMonitoring(configuration);
			};

			Action InitializeHttpModules = () =>
			{
				httpServer.SendAsync = transportLayer.SendAsyncHttp;
				transportLayer.IncomingHttpRequest = httpServer.ProcessIncomingRequest;

				httpServer.Register(restapi, 0, true);
				httpServer.Register(xcapServer, 0, true);
				httpServer.Register(new HttpFileServer(configuration.WwwAdminPath, configuration.AdminUri), 254, true);
				httpServer.Register(httpFileServer, 255, true);

				xcapServer.AddHandler(new ResourceListsHandler(accounts, userz));
				xcapServer.AddHandler(new PidfManipulationHandler(simpleModule));
			};

			Action InitializeWcfService = () =>
			{
				wcfService.Start();
			};


            Action InitializeProxyServerTU = () =>
            {
                proxyServerTU.IsOfficeSIPFiletransferEnabled = configuration.IsOfficeSIPFiletransferEnabled;
            };


            Action InitializeTransactionLayer = () =>
			{
                InitializeProxyServerTU();

				transportLayer.IncomingMessage += transactionLayer.IncomingMessage;
				transportLayer.SendErrorSip += transactionLayer.TransportError;
				transactionLayer.SendAsync = transportLayer.SendAsyncSip;
				transactionLayer.IsLocalAddress = transportLayer.IsLocalAddress;

				serversManager.EndConnection += (s, c) => { locationService.RemoveBindingsWhenConnectionEnd(c.Id); };
				transactionLayer.RegisterTransactionUser(new RegistrarTU(locationService, accounts));

				transactionLayer.RegisterTransactionUser(msPresTu);

				transactionLayer.RegisterTransactionUser(new SimpleTU(simpleModule));
				transactionLayer.RegisterTransactionUser(new OptionsTU());
				transactionLayer.RegisterTransactionUser(new MessageSummaryTU());

				transactionLayer.RegisterTransactionUser(new MrasTU(mras));

				transactionLayer.RegisterTransactionUser(new DirectorySearchTU(accounts, new ServiceSoap.ServiceSoap1(), userz));

                transactionLayer.RegisterTransactionUser(proxyServerTU);

				transactionLayer.RegisterTransactionUser(new TrunkTU(trunkManager));
				transactionLayer.RegisterTransactionUser(new ErrorTU());
			};


			Action InitializeAuthorization = () =>
			{
				authorization.IsEnabled = configuration.IsAuthorizationEnabled;

				if (configuration.IsActiveDirectoryEnabled)
				{
					var kerberosAuth = new SipMicrosoftAuthentication(SipAuthSchemes.Kerberos, accounts, userz);
					var ntlmAuth = new SipMicrosoftAuthentication(SipAuthSchemes.Ntlm, accounts, userz);

					authorization.RegisterAgent(kerberosAuth, SipAuthSchemes.Kerberos);
					authorization.RegisterAgent(ntlmAuth, SipAuthSchemes.Ntlm);
				}

				var digestAuth = new SipDigestAuthentication(accounts, userz, configuration.IsAuthIntEnabled);
				authorization.RegisterAgent(digestAuth, SipAuthSchemes.Digest);



				httpAuthorization.IsEnabled = configuration.IsAuthorizationEnabled;
				httpAuthorization.RegisterAgent(new HttpDigestAuthentication(accounts, userz, false), HttpAuthSchemes.Digest);
			};


			Action InitializeServersManager = () =>
			{
				serversManager.FakeAddressAction = (ServerEndPoint localEndpoint) =>
				{
					foreach (var portForwarding in configuration.PortForwardings)
					{
						if (localEndpoint.Equals(portForwarding.Protocol, portForwarding.LocalEndpoint))
							return portForwarding.ExternalEndpoint;
					}

					return null;
				};

				Action<ServerProtocol, int> bind = (protocol, port) =>
				{
					if (port > 0)
					{
						var error = serversManager.Bind(new ProtocolPort()
						{
							Protocol = protocol,
							Port = port,
						});

						if (error != SocketError.Success)
							Tracer.WriteError("Can't open " + protocol + " port " + port + ".\r\n" + error.ToString());
					}
				};

				if (configuration.UdpPort > 0)
					bind(ServerProtocol.Udp, configuration.UdpPort);
				if (configuration.TcpPort > 0)
					bind(ServerProtocol.Tcp, configuration.TcpPort);
				if (configuration.TcpPort2 > 0)
					bind(ServerProtocol.Tcp, configuration.TcpPort2);
			};

			ConfigureMras(mras, configuration);
			InitializeConfigurationMonitor();
			InitializeTracer();
			InitializeTransactionLayer();
			InitializeAuthorization();
			InitializeWcfService();
			InitializeHttpModules();
			InitializeServersManager();
		}
コード例 #7
0
ファイル: ProxieFactory.cs プロジェクト: hungdluit/sipserver
		public static IProxie Create(int transactionId, Trunk trunk, LocationService.Binding binding)
		{
			return new TrunkLocalProxie(transactionId, trunk, binding);
		}
コード例 #8
0
        public Initializer(EventHandler <EventArgs> configChangedHandler)
        {
            var configuration = SipServerConfigurationSection.GetSection();

            var adUsers = (configuration.IsActiveDirectoryEnabled == false) ? null : new AdUsers(configuration.ActiveDirectoryGroup);

            Func <Userz> CreateUserz = () =>
            {
                var result = new Userz(configuration.CustomUsersPath);

                result.Add(new CsvUsers(configuration.UsersCsvFilePathName));
                if (adUsers != null)
                {
                    result.Add(adUsers);
                }

                result.LoadCustomUsers();

                return(result);
            };


            var serversManager    = new ServersManager <Connection>(new ServersManagerConfig());
            var transportLayer    = new TransportLayer(serversManager, configuration.WebSocketResponseFrame);
            var authorization     = new SipAuthorizationManager();
            var transactionLayer  = new TransactionLayer(authorization);
            var userz             = CreateUserz();
            var locationService   = new LocationService();
            var mras              = new Mras.Mras1();
            var trunkManager      = new TrunkManager();
            var accounts          = new Accountx(configuration.AccountConfigFilePathName);
            var msPresTu          = new MsPresTU(accounts, userz, locationService);
            var wcfService        = new WCFService(configuration, msPresTu.EnhancedPresence, trunkManager, accounts, userz);
            var httpAuthorization = new HttpAuthorizationManager();
            var httpServer        = new HttpServer(httpAuthorization, configuration.AdminUri);
            //var httpServerAgentRegistrar = new Func<IHttpServerAgent, IHttpServer>((agent) => { return httpServer.Register(agent); });
            var restapi = new RestapiService(accounts, userz)
            {
                AdministratorPassword = configuration.AdministratorPassword,
            };
            var httpFileServer       = new HttpFileServer(configuration.WwwPath, string.Empty);
            var xcapServer           = new XcapServer();
            var configurationMonitor = new ConfigurationMonitor();
            var simpleModule         = new SimpleModule(EqualityComparer <string> .Default);
            var proxyServerTU        = new ProxyServerTU(locationService, trunkManager, accounts);

            GetResults = (
                out TransportLayer transportLayer1,
                out TransactionLayer transactionLayer1,
                out LocationService locationService1,
                out WCFService wcfService1,
                out ConfigurationMonitor configurationMonitor1,
                out TrunkManager trunkManager1,
                out SipAuthorizationManager authorization1,
                out Userz userz1,
                out AdUsers adUsers1,
                out Mras.Mras1 mras1,
                out HttpFileServer httpFileServer1,
                out Accountx accounts1,
                out RestapiService restapi1,
                out ProxyServerTU proxyServerTU1
                ) =>
            {
                transportLayer1       = transportLayer;
                transactionLayer1     = transactionLayer;
                locationService1      = locationService;
                wcfService1           = wcfService;
                configurationMonitor1 = configurationMonitor;
                trunkManager1         = trunkManager;
                authorization1        = authorization;
                userz1          = userz;
                adUsers1        = adUsers;
                mras1           = mras;
                httpFileServer1 = httpFileServer;
                accounts1       = accounts;
                restapi1        = restapi;
                proxyServerTU1  = proxyServerTU;
            };


            Action InitializeTracer = () =>
            {
                Tracer.Initialize(serversManager.Logger);
                Tracer.Configure(configuration.TracingPath, configuration.IsTracingEnabled);
            };


            Action InitializeConfigurationMonitor = () =>
            {
                configurationMonitor.Changed += configChangedHandler;
                configurationMonitor.StartMonitoring(configuration);
            };

            Action InitializeHttpModules = () =>
            {
                httpServer.SendAsync = transportLayer.SendAsyncHttp;
                transportLayer.IncomingHttpRequest = httpServer.ProcessIncomingRequest;

                httpServer.Register(restapi, 0, true);
                httpServer.Register(xcapServer, 0, true);
                httpServer.Register(new HttpFileServer(configuration.WwwAdminPath, configuration.AdminUri), 254, true);
                httpServer.Register(httpFileServer, 255, true);

                xcapServer.AddHandler(new ResourceListsHandler(accounts, userz));
                xcapServer.AddHandler(new PidfManipulationHandler(simpleModule));
            };

            Action InitializeWcfService = () =>
            {
                wcfService.Start();
            };


            Action InitializeProxyServerTU = () =>
            {
                proxyServerTU.IsOfficeSIPFiletransferEnabled = configuration.IsOfficeSIPFiletransferEnabled;
            };


            Action InitializeTransactionLayer = () =>
            {
                InitializeProxyServerTU();

                transportLayer.IncomingMessage += transactionLayer.IncomingMessage;
                transportLayer.SendErrorSip    += transactionLayer.TransportError;
                transactionLayer.SendAsync      = transportLayer.SendAsyncSip;
                transactionLayer.IsLocalAddress = transportLayer.IsLocalAddress;

                serversManager.EndConnection += (s, c) => { locationService.RemoveBindingsWhenConnectionEnd(c.Id); };
                transactionLayer.RegisterTransactionUser(new RegistrarTU(locationService, accounts));

                transactionLayer.RegisterTransactionUser(msPresTu);

                transactionLayer.RegisterTransactionUser(new SimpleTU(simpleModule));
                transactionLayer.RegisterTransactionUser(new OptionsTU());
                transactionLayer.RegisterTransactionUser(new MessageSummaryTU());

                transactionLayer.RegisterTransactionUser(new MrasTU(mras));

                transactionLayer.RegisterTransactionUser(new DirectorySearchTU(accounts, new ServiceSoap.ServiceSoap1(), userz));

                transactionLayer.RegisterTransactionUser(proxyServerTU);

                transactionLayer.RegisterTransactionUser(new TrunkTU(trunkManager));
                transactionLayer.RegisterTransactionUser(new ErrorTU());
            };


            Action InitializeAuthorization = () =>
            {
                authorization.IsEnabled = configuration.IsAuthorizationEnabled;

                if (configuration.IsActiveDirectoryEnabled)
                {
                    var kerberosAuth = new SipMicrosoftAuthentication(SipAuthSchemes.Kerberos, accounts, userz);
                    var ntlmAuth     = new SipMicrosoftAuthentication(SipAuthSchemes.Ntlm, accounts, userz);

                    authorization.RegisterAgent(kerberosAuth, SipAuthSchemes.Kerberos);
                    authorization.RegisterAgent(ntlmAuth, SipAuthSchemes.Ntlm);
                }

                var digestAuth = new SipDigestAuthentication(accounts, userz, configuration.IsAuthIntEnabled);
                authorization.RegisterAgent(digestAuth, SipAuthSchemes.Digest);



                httpAuthorization.IsEnabled = configuration.IsAuthorizationEnabled;
                httpAuthorization.RegisterAgent(new HttpDigestAuthentication(accounts, userz, false), HttpAuthSchemes.Digest);
            };


            Action InitializeServersManager = () =>
            {
                serversManager.FakeAddressAction = (ServerEndPoint localEndpoint) =>
                {
                    foreach (var portForwarding in configuration.PortForwardings)
                    {
                        if (localEndpoint.Equals(portForwarding.Protocol, portForwarding.LocalEndpoint))
                        {
                            return(portForwarding.ExternalEndpoint);
                        }
                    }

                    return(null);
                };

                Action <ServerProtocol, int> bind = (protocol, port) =>
                {
                    if (port > 0)
                    {
                        var error = serversManager.Bind(new ProtocolPort()
                        {
                            Protocol = protocol,
                            Port     = port,
                        });

                        if (error != SocketError.Success)
                        {
                            Tracer.WriteError("Can't open " + protocol + " port " + port + ".\r\n" + error.ToString());
                        }
                    }
                };

                if (configuration.UdpPort > 0)
                {
                    bind(ServerProtocol.Udp, configuration.UdpPort);
                }
                if (configuration.TcpPort > 0)
                {
                    bind(ServerProtocol.Tcp, configuration.TcpPort);
                }
                if (configuration.TcpPort2 > 0)
                {
                    bind(ServerProtocol.Tcp, configuration.TcpPort2);
                }
            };

            ConfigureMras(mras, configuration);
            InitializeConfigurationMonitor();
            InitializeTracer();
            InitializeTransactionLayer();
            InitializeAuthorization();
            InitializeWcfService();
            InitializeHttpModules();
            InitializeServersManager();
        }
コード例 #9
0
ファイル: RegistrarTU.cs プロジェクト: hungdluit/sipserver
		public RegistrarTU(LocationService locationService, IAccounts accounts)
		{
			this.locationService = locationService;
			this.accounts = accounts;
		}
コード例 #10
0
ファイル: LocalProxie.cs プロジェクト: hungdluit/sipserver
		public LocalProxie(LocationService.Binding binding, int transactionId)
			: base(transactionId)
		{
			this.binding = binding;
		}
コード例 #11
0
 public RegistrarTU(LocationService locationService, IAccounts accounts)
 {
     this.locationService = locationService;
     this.accounts        = accounts;
 }