public static WebResultSet CreateRequest(HtunConnection conn, string sql, int limit, Dictionary <string, string> queryPars) { List <string> qnames = new List <string>(queryPars.Keys); qnames.Sort(delegate(string a, string b) { return(b.Length - a.Length); }); foreach (string qpar in qnames) { string val = queryPars[qpar]; if (val == null) { sql = sql.Replace(qpar, "NULL"); } else { sql = sql.Replace(qpar, "'" + val.Replace("'", "\\'") + "'"); } } Dictionary <string, byte[]> extpars = new Dictionary <string, byte[]>(); extpars["LIMIT"] = Encoding.ASCII.GetBytes(limit.ToString()); extpars["COMMAND"] = EncodeCommand(conn, sql); WebResponse resp = CreateWebResponse(conn, "QUERY", extpars, sql); return(new WebResultSet(resp, conn.ResultSetEncoding)); }
public static WebResultSendScript CreateSendScript(HtunConnection conn, IEnumerable <string> script) { var extpars = new Dictionary <string, byte[]>(); int index = 0; foreach (string cmd in script) { extpars["COMMAND" + index.ToString()] = EncodeCommand(conn, cmd); index++; } extpars["CMDCOUNT"] = Encoding.ASCII.GetBytes(index.ToString()); var resp = CreateWebResponse(conn, "SCRIPT", extpars, null); return(new WebResultSendScript(resp, conn.ResultSetEncoding)); }
public static WebResultSet CreateRequest(HtunConnection conn, string sql) { return(CreateRequest(conn, sql, -1, new Dictionary <string, string>())); }
protected static byte[] EncodeCommand(HtunConnection conn, string sql) { byte[] cmd = (conn.BinaryCommandEncoding ?? conn.ResultSetEncoding).GetBytes(sql); Array.Reverse(cmd); return(cmd); }
public static WebResponse CreateWebResponse(HtunConnection conn, string op, Dictionary <string, byte[]> extpars, string sqlForLogPurpose) { var fp = conn.FailoverParams; var start = DateTime.Now; Exception httpError = null; int reqindex = 0; for (; reqindex < fp.MaxRequestCount; reqindex++) { try { HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(conn.Driver.Url); if (!String.IsNullOrEmpty(conn.Driver.HttpLogin)) { webrequest.Credentials = new NetworkCredential(conn.Driver.HttpLogin, conn.Driver.HttpPassword); } webrequest.ContentType = "application/x-www-form-urlencoded; charset=" + conn.Driver.RealEncoding.WebName; webrequest.Method = "POST"; var pars = new Dictionary <string, byte[]>(); var spars = new Dictionary <string, string>(); conn.GetDatabaseParams(spars); foreach (var tuple in spars) { pars[tuple.Key] = Encoding.ASCII.GetBytes(tuple.Value); } pars["ENCODINGSTYLE"] = Encoding.ASCII.GetBytes(conn.Driver.EncodingStyle.ToString()); pars["VERSION"] = Encoding.ASCII.GetBytes(VERSION.ToString()); pars["OPERATION"] = Encoding.ASCII.GetBytes(op); pars["DATABASE"] = Encoding.ASCII.GetBytes(conn.Database ?? ""); pars["SESSIONINIT"] = EncodeCommand(conn, conn.SessionInitScript ?? ""); //pars["HOST"] = Encoding.ASCII.GetBytes(conn.Params.Host ?? ""); //pars["USER"] = Encoding.ASCII.GetBytes(conn.Params.Login ?? ""); ////pars["PORT"] = Encoding.ASCII.GetBytes(PtunDefaults.Instance.Port(conn.Params.Engine, conn.Params.Port).ToString()); //pars["PORT"] = Encoding.ASCII.GetBytes(conn.Params.Port.ToString()); //pars["PASSWORD"] = Encoding.ASCII.GetBytes(conn.Params.Password ?? ""); //pars["ENGINE"] = Encoding.ASCII.GetBytes(conn.Params.Engine ?? ""); //pars["DATABASE"] = Encoding.ASCII.GetBytes(conn.Database ?? ""); pars.AddAll(extpars); string pars_enc = StringTool.UrlEncode(pars); byte[] data = conn.Driver.RealEncoding.GetBytes(pars_enc); webrequest.ContentLength = data.Length; webrequest.Timeout = reqindex == 0 ? fp.HttpRequestTimeoutMilisecs : fp.RepeatedHttpRequestTimeoutMilisecs; using (Stream requestStream = webrequest.GetRequestStream()) { requestStream.Write(data, 0, data.Length); } try { WebResponse resp = webrequest.GetResponse(); return(resp); } catch (Exception e) { Logging.Warning(String.Format("HTTP tunnel error (run {0}), trying again:{1}", reqindex, e.Message)); Thread.Sleep(fp.DelayBeforeRepeatedRequestMilisecs); httpError = e; } if ((DateTime.Now - start).TotalMilliseconds > fp.RepeatedRequestTimeoutMilisecs) { break; } } catch (UriFormatException err) { throw new ConnectionFailedError("DAE-00329", err); } } Logging.Info(String.Format("Repeated HTTPTUN request failed, repeated={0}", reqindex)); if (sqlForLogPurpose != null) { DbConnectionExtension.LogExecuteQuery(sqlForLogPurpose); } else { Logging.Debug("Executing HTTPTUN operation:" + op); } throw httpError; }
public static WebResultDbPing CreatePing(HtunConnection conn) { var resp = CreateWebResponse(conn, "DBPING", null, null); return(new WebResultDbPing(resp, conn.ResultSetEncoding)); }