Click here to Skip to main content
15,879,326 members
Articles / Web Development / HTML

My own Mailinator in 5 minutes

Rate me:
Please Sign up or sign in to vote.
5.00/5 (6 votes)
19 Nov 2012CPOL6 min read 31.6K   405   13  
A simple Mailinator clone developed in five minutes with the NetFluid framework
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

namespace LumiSoft.Net.RTP
{
    /// <summary>
    /// This class implements RTP session address.
    /// </summary>
    public class RTP_Address
    {
        private IPAddress  m_pIP         = null;
        private int        m_DataPort    = 0;
        private int        m_ControlPort = 0;
        private int        m_TTL         = 0;
        private IPEndPoint m_pRtpEP      = null;
        private IPEndPoint m_pRtcpEP     = null;    

        /// <summary>
        /// Unicast constructor.
        /// </summary>
        /// <param name="ip">Unicast IP address.</param>
        /// <param name="dataPort">RTP data port.</param>
        /// <param name="controlPort">RTP control port. Usualy this is <b>dataPort</b> + 1.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>ip</b> is null reference.</exception>
        /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid values.</exception>
        public RTP_Address(IPAddress ip,int dataPort,int controlPort)
        {
            if(ip == null){
                throw new ArgumentNullException("ip");
            }
            if(dataPort < IPEndPoint.MinPort || dataPort > IPEndPoint.MaxPort){
                throw new ArgumentException("Argument 'dataPort' value must be between '" + IPEndPoint.MinPort + "' and '" + IPEndPoint.MaxPort + "'.");
            }
            if(controlPort < IPEndPoint.MinPort || controlPort > IPEndPoint.MaxPort){
                throw new ArgumentException("Argument 'controlPort' value must be between '" + IPEndPoint.MinPort + "' and '" + IPEndPoint.MaxPort + "'.");
            }
            if(dataPort == controlPort){
                throw new ArgumentException("Arguments 'dataPort' and 'controlPort' values must be different.");
            }

            m_pIP         = ip;
            m_DataPort    = dataPort;
            m_ControlPort = controlPort;

            m_pRtpEP  = new IPEndPoint(ip,dataPort);
            m_pRtcpEP = new IPEndPoint(ip,controlPort);
        }

        /// <summary>
        /// Multicast constructor.
        /// </summary>
        /// <param name="ip">Multicast IP address.</param>
        /// <param name="dataPort">RTP data port.</param>
        /// <param name="controlPort">RTP control port. Usualy this is <b>dataPort</b> + 1.</param>
        /// <param name="ttl">RTP control port. Usualy this is <b>dataPort</b> + 1.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>ip</b> is null reference.</exception>
        /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid values.</exception>
        public RTP_Address(IPAddress ip,int dataPort,int controlPort,int ttl)
        {
            if(ip == null){
                throw new ArgumentNullException("ip");
            }
            if(!Net_Utils.IsMulticastAddress(ip)){
                throw new ArgumentException("Argument 'ip' is not multicast ip address.");
            }
            if(dataPort < IPEndPoint.MinPort || dataPort > IPEndPoint.MaxPort){
                throw new ArgumentException("Argument 'dataPort' value must be between '" + IPEndPoint.MinPort + "' and '" + IPEndPoint.MaxPort + "'.");
            }
            if(controlPort < IPEndPoint.MinPort || controlPort > IPEndPoint.MaxPort){
                throw new ArgumentException("Argument 'controlPort' value must be between '" + IPEndPoint.MinPort + "' and '" + IPEndPoint.MaxPort + "'.");
            }
            if(dataPort == controlPort){
                throw new ArgumentException("Arguments 'dataPort' and 'controlPort' values must be different.");
            }
            if(ttl < 0 || ttl > 255){
                throw new ArgumentException("Argument 'ttl' value must be between '0' and '255'.");
            }

            m_pIP         = ip;
            m_DataPort    = dataPort;
            m_ControlPort = controlPort;
            m_TTL         = ttl;

            m_pRtpEP  = new IPEndPoint(ip,dataPort);
            m_pRtcpEP = new IPEndPoint(ip,controlPort);
        }


        #region method Equals

        /// <summary>
        /// Determines whether the specified Object is equal to the current Object.
        /// </summary>
        /// <param name="obj">The Object to compare with the current Object.</param>
        /// <returns>True if the specified Object is equal to the current Object; otherwise, false.</returns>
        public override bool Equals(object obj)
        {
            if(obj == null){
                return false;
            }

            if(obj is RTP_Address){
                RTP_Address a = (RTP_Address)obj;

                if(a.IP.Equals(this.IP) && a.ControlPort == this.ControlPort && a.DataPort == this.DataPort){
                    return true;
                }
            }

            return false;
        }

        #endregion

        #region ovveride method GetHashCode

        /// <summary>
        /// Gets this hash code.
        /// </summary>
        /// <returns></returns>
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        #endregion


        #region Properties implementation

        /// <summary>
        /// Gets if this is multicast RTP address.
        /// </summary>
        public bool IsMulticast
        {
            get{ return Net_Utils.IsMulticastAddress(m_pIP); }
        }

        /// <summary>
        /// Gets IP address.
        /// </summary>
        public IPAddress IP
        {
            get{ return m_pIP; }
        }

        /// <summary>
        /// Gets RTP data port.
        /// </summary>
        public int DataPort
        {
            get{ return m_DataPort; }
        }

        /// <summary>
        /// Gets RTCP control port.
        /// </summary>
        public int ControlPort
        {
            get{ return m_ControlPort; }
        }

        /// <summary>
        /// Gets mulicast TTL(time to live) value.
        /// </summary>
        public int TTL
        {
            get{ return m_TTL; }
        }

        /// <summary>
        /// Gets RTP end point.
        /// </summary>
        public IPEndPoint RtpEP
        {
            get{ return m_pRtpEP; }
        }

        /// <summary>
        /// Gets RTPCP end point.
        /// </summary>
        public IPEndPoint RtcpEP
        {
            get{ return m_pRtcpEP; }
        }

        #endregion

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer Genny Mobility
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions