/// <summary> /// Creates and adds new route to route collection. /// </summary> /// <param name="description">Route description text.</param> /// <param name="pattern">Route pattern.</param> /// <param name="enabled">Specifies if route is enabled.</param> /// <param name="action">Route action.</param> /// <returns></returns> public Route Add(string description,string pattern,bool enabled,RouteActionBase action) { /* AddRoute <virtualServerID> "<routeID>" <cost> "<description>" "<pattern>" <enabled> <actionType> "<actionData>:base64" Responses: +OK -ERR <errorText> */ string id = Guid.NewGuid().ToString(); long cost = DateTime.Now.Ticks; // Call TCP AddRoute m_pVirtualServer.Server.TcpClient.TcpStream.WriteLine("AddRoute " + m_pVirtualServer.VirtualServerID + " " + TextUtils.QuoteString(id) + " " + cost + " " + TextUtils.QuoteString(description) + " " + TextUtils.QuoteString(pattern) + " " + enabled + " " + (int)action.ActionType + " " + Convert.ToBase64String(action.Serialize()) ); string response = m_pVirtualServer.Server.ReadLine(); if(!response.ToUpper().StartsWith("+OK")){ throw new Exception(response); } Route route = new Route(this,id,cost,description,pattern,enabled,action); m_pRoutes.Add(route); return route; }
/// <summary> /// Creates and adds new route to route collection. /// </summary> /// <param name="description">Route description text.</param> /// <param name="pattern">Route pattern.</param> /// <param name="enabled">Specifies if route is enabled.</param> /// <param name="action">Route action.</param> /// <returns></returns> public Route Add(string description, string pattern, bool enabled, RouteActionBase action) { /* AddRoute <virtualServerID> "<routeID>" <cost> "<description>" "<pattern>" <enabled> <actionType> "<actionData>:base64" * Responses: +OK * -ERR <errorText> */ string id = Guid.NewGuid().ToString(); long cost = DateTime.Now.Ticks; // Call TCP AddRoute m_pVirtualServer.Server.TcpClient.TcpStream.WriteLine("AddRoute " + m_pVirtualServer.VirtualServerID + " " + TextUtils.QuoteString(id) + " " + cost + " " + TextUtils.QuoteString(description) + " " + TextUtils.QuoteString(pattern) + " " + enabled + " " + (int)action.ActionType + " " + Convert.ToBase64String(action.Serialize()) ); string response = m_pVirtualServer.Server.ReadLine(); if (!response.ToUpper().StartsWith("+OK")) { throw new Exception(response); } Route route = new Route(this, id, cost, description, pattern, enabled, action); m_pRoutes.Add(route); return(route); }
/// <summary> /// Gets server groups and binds them to this. /// </summary> private void Bind() { /* GetRoutes <virtualServerID> * Responses: +OK <sizeOfData> * <data> * * -ERR <errorText> */ lock (m_pVirtualServer.Server.LockSynchronizer){ // Call TCP GetRoutes m_pVirtualServer.Server.TcpClient.TcpStream.WriteLine("GetRoutes " + m_pVirtualServer.VirtualServerID); string response = m_pVirtualServer.Server.ReadLine(); if (!response.ToUpper().StartsWith("+OK")) { throw new Exception(response); } int sizeOfData = Convert.ToInt32(response.Split(new char[] { ' ' }, 2)[1]); MemoryStream ms = new MemoryStream(); m_pVirtualServer.Server.TcpClient.TcpStream.ReadFixedCount(ms, sizeOfData); // Decompress dataset DataSet ds = Utils.DecompressDataSet(ms); if (ds.Tables.Contains("Routing")) { foreach (DataRow dr in ds.Tables["Routing"].Rows) { RouteAction_enum actionType = (RouteAction_enum)Convert.ToInt32(dr["Action"]); RouteActionBase action = null; if (actionType == RouteAction_enum.RouteToEmail) { action = new RouteAction_RouteToEmail(Convert.FromBase64String(dr["ActionData"].ToString())); } else if (actionType == RouteAction_enum.RouteToHost) { action = new RouteAction_RouteToHost(Convert.FromBase64String(dr["ActionData"].ToString())); } else if (actionType == RouteAction_enum.RouteToMailbox) { action = new RouteAction_RouteToMailbox(Convert.FromBase64String(dr["ActionData"].ToString())); } m_pRoutes.Add(new Route( this, dr["RouteID"].ToString(), Convert.ToInt64(dr["Cost"]), dr["Description"].ToString(), dr["Pattern"].ToString(), Convert.ToBoolean(dr["Enabled"].ToString()), action )); } } } }
/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Owner RouteCollection collection that owns this route.</param> /// <param name="id">Route ID.</param> /// <param name="cost">Rule cost.</param> /// <param name="descritpion">Route description text.</param> /// <param name="pattern">Routing pattern.</param> /// <param name="enabled">Specifies if route is enabled.</param> /// <param name="action">Route action.</param> internal Route(RouteCollection owner,string id,long cost,string descritpion,string pattern,bool enabled,RouteActionBase action) { m_pOwner = owner; m_ID = id; m_Cost = cost; m_Description = descritpion; m_Pattern = pattern; m_Enabled = enabled; m_pAction = action; }
/// <summary> /// Default constructor. /// </summary> /// <param name="owner">Owner RouteCollection collection that owns this route.</param> /// <param name="id">Route ID.</param> /// <param name="cost">Rule cost.</param> /// <param name="descritpion">Route description text.</param> /// <param name="pattern">Routing pattern.</param> /// <param name="enabled">Specifies if route is enabled.</param> /// <param name="action">Route action.</param> internal Route(RouteCollection owner, string id, long cost, string descritpion, string pattern, bool enabled, RouteActionBase action) { m_pOwner = owner; m_ID = id; m_Cost = cost; m_Description = descritpion; m_Pattern = pattern; m_Enabled = enabled; m_pAction = action; }