Ejemplo n.º 1
0
        public static List <SIPChannel> ParseSIPChannelsNode(SIPAccount sipAccount)
        {
            var channels = new List <SIPChannel>();

            var ipEndPoint = new IPEndPoint(sipAccount.LocalIP, sipAccount.LocalPort);

            SIPChannel channel = null;

            if (sipAccount.MsgProtocol == ProtocolType.Udp)
            {
                channel = new SIPUDPChannel(ipEndPoint);
                channels.Add(channel);
            }
            else if (sipAccount.MsgProtocol == ProtocolType.Tcp)
            {
                channel = new SIPUDPChannel(ipEndPoint);
                channels.Add(channel);
                channel = new SIPTCPChannel(ipEndPoint);
                channels.Add(channel);
            }
            return(channels);
        }
Ejemplo n.º 2
0
        public static List <SIPChannel> ParseSIPChannelsNode(XmlNode sipChannelsNode, int port = 0)
        {
            var sipChannels = new List <SIPChannel>();

            foreach (XmlNode sipSocketNode in sipChannelsNode.ChildNodes)
            {
                logger.Debug("Creating SIP Channel for " + sipSocketNode.OuterXml + ".");

                var localSocket = sipSocketNode.InnerText;

                var protocol = SIPProtocolsEnum.udp;
                if (sipSocketNode.Attributes.GetNamedItem(SIP_PROTOCOL_PARAMETER) != null)
                {
                    protocol = SIPProtocolsType.GetProtocolType(sipSocketNode.Attributes
                                                                .GetNamedItem(SIP_PROTOCOL_PARAMETER).Value);
                }

                var nodeSIPEndPoints = GetSIPEndPoints(localSocket, protocol, port);

                foreach (var sipEndPoint in nodeSIPEndPoints)
                {
                    try
                    {
                        switch (protocol)
                        {
                        case SIPProtocolsEnum.udp:
                        {
                            logger.Debug(" attempting to create SIP UDP channel for " +
                                         sipEndPoint.GetIPEndPoint() + ".");
                            var udpChannel = new SIPUDPChannel(sipEndPoint.GetIPEndPoint());
                            sipChannels.Add(udpChannel);
                        }
                        break;

                        case SIPProtocolsEnum.tcp:
                        {
                            logger.Debug(" attempting to create SIP TCP channel for " +
                                         sipEndPoint.GetIPEndPoint() + ".");

                            var tcpChannel = new SIPTCPChannel(sipEndPoint.GetIPEndPoint());
                            sipChannels.Add(tcpChannel);
                        }
                        break;

                        case SIPProtocolsEnum.tls:
                            if (sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_PATH_PARAMETER) == null)
                            {
                                logger.Warn("Could not create SIPTLSChannel from XML configuration node as no " +
                                            CERTIFICATE_PATH_PARAMETER + " attribute was present.");
                            }
                            else
                            {
                                var certificateType = "machinestore";
                                if (sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_TYPE_PARAMETER) != null)
                                {
                                    certificateType = sipSocketNode.Attributes
                                                      .GetNamedItem(CERTIFICATE_TYPE_PARAMETER).Value;
                                }

                                var certificatePath =
                                    (sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_PATH_PARAMETER) != null)
                                            ? sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_PATH_PARAMETER).Value
                                            : null;
                                var certificateKeyPassword =
                                    (sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_KEY_PASSWORD_PARAMETER) !=
                                     null)
                                            ? sipSocketNode.Attributes.GetNamedItem(CERTIFICATE_KEY_PASSWORD_PARAMETER)
                                    .Value
                                            : String.Empty;
                                logger.Debug(" attempting to create SIP TLS channel for " +
                                             sipEndPoint.GetIPEndPoint() + " and certificate type of " +
                                             certificateType + " at " + certificatePath + ".");
                                var certificate = LoadCertificate(certificateType, certificatePath,
                                                                  certificateKeyPassword);
                                if (certificate != null)
                                {
                                    var tlsChannel = new SIPTLSChannel(certificate, sipEndPoint.GetIPEndPoint());
                                    sipChannels.Add(tlsChannel);
                                }
                                else
                                {
                                    logger.Warn(
                                        "A SIP TLS channel was not created because the certificate could not be loaded.");
                                }
                            }

                            break;

                        default:
                            logger.Warn("Could not create a SIP channel for protocol " + protocol + ".");
                            break;
                        }
                    }
                    catch (Exception excp)
                    {
                        logger.Warn("Exception SIPTransportConfig Adding SIP Channel for " + sipEndPoint + ". " +
                                    excp.Message);
                    }
                }
            }

            return(sipChannels);
        }