From fe970c8b52d553f2e8c33c3f9197d75324c65fa4 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 30 Jun 2010 08:19:09 +0000 Subject: [PATCH] Project finally compiles. --- cs/bmx_0200scr/BMX2/BMXNet.sln | 7 +- cs/bmx_0200scr/BMX2/BMXNet.suo | Bin 37888 -> 38400 bytes cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj | 65 +- cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj.user | 17 +- cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs | 1312 +++++++++++++++++ .../BMX2/BMXNet/bin/Release/BMXNet20.dll | Bin 94208 -> 90112 bytes .../BMX2/BMXNet/bin/Release/bmxnet.xml | 400 ++--- cs/bmx_0200scr/BMX2/BMXNet/bmxnet.xml | 400 ++--- cs/bmx_0200scr/BMX2/BMXNet/wv.key.snk | Bin 0 -> 596 bytes .../BMX2/BMXNetTest/BMXNetTest.csproj | 59 +- .../BMX2/BMXNetTest/BMXNetTest.csproj.user | 14 + .../BMXNetTest/bin/Release/BMXNetTest.exe | Bin 61440 -> 61440 bytes .../BMX2/BMXNetTest/frmBMXNetTest.cs | 4 +- 13 files changed, 1859 insertions(+), 419 deletions(-) create mode 100644 cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs create mode 100644 cs/bmx_0200scr/BMX2/BMXNet/wv.key.snk diff --git a/cs/bmx_0200scr/BMX2/BMXNet.sln b/cs/bmx_0200scr/BMX2/BMXNet.sln index 3879039..f6081ed 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet.sln +++ b/cs/bmx_0200scr/BMX2/BMXNet.sln @@ -1,6 +1,9 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMXNetTest", "BMXNetTest\BMXNetTest.csproj", "{A3A19C51-73D2-4EEE-A190-F1EFBF477BCB}" + ProjectSection(ProjectDependencies) = postProject + {DE8E4CC9-4F3A-4E32-8DFE-EE5692E8FC45} = {DE8E4CC9-4F3A-4E32-8DFE-EE5692E8FC45} + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMXNet", "BMXNet\BMXNet.csproj", "{DE8E4CC9-4F3A-4E32-8DFE-EE5692E8FC45}" EndProject diff --git a/cs/bmx_0200scr/BMX2/BMXNet.suo b/cs/bmx_0200scr/BMX2/BMXNet.suo index 2d0365ac19984ec62f6d836bf7ba6631df65e7b8..cf640aa249c1866ddcd738c3410a96624e3aefaf 100644 GIT binary patch literal 38400 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 delta 3976 zcmeHJdrX^E6u-Cq`hpKAP$-YVzQQ&kc2El2DCnl zz2}~D&+BXCWkuu##cYp)zZ{Fj;shbZ9@PdyNG&+crBRJRw*{Fdq-HQFzdG8*MY;a; zORqmuo)vhHDiJ>=z&Q5-k9Wj!k!3SvYF9;d9E_=aT6GczkxUMLRUP0$2*Q}!Pxr#d z>Pk8cf2fZbx)JO_>P6~9+KmLqHG)5G8=FTE3?uDBx(8_#X$*<&jmz@^d1e?J5#&RM z-Y*N~uV{Vt?Bg$HeErx3G_exuwWqh)Itt)re1)4fr0#*h%rGlh4ItULwyfaSJ|UTQ4{8*b8@F>BNS=HG@>(d6sMoqj{+`>4jK7p4k50k#L}I z7*6Im=>hm!Z-nP>ONUE(HFS-0u+NaSERIFsD4kRXuw;h`99gw4g*1{H;vxshKa&@@ zxTG9*{pv*6*`uzMwakkO%T@9V+KM#MHEwt}W0M$JGe#9PO8D)D_oW=4FZ1z*vUe8! zR(`)?u15T=`~%9ffMS|0I(7cWJh9n)f*$R%ufS~W#V*v1xjQJWyOCo#yqLdkla#mD ze86T3zTDP-=xV{pTs44=FNnDrM5R4w$UvfKY%NZ*7Hh(SS(P+CeyJww$IBOE~>&b>f*u=qfZ|k={scu+>_u#4ZjetG|bHmgmtcjpSa; z+5q0MRjjvCsvFoI90`USdIz9OXM~>x!RT^#_-;D>^fTv2E_$Dy{^`e)O%osPG!U$P zlX#+9OX2*X3UP2Mi$>SaX-od%==FYWX)+Mr;A5RGbppW%5)QF)Jcq&s8wa5g4q6X? zxAF@5NRz9>y$+3^G&Ln>a?S_|p(}^TU4-21dAR!9v$SscDfoG#K||h%xL#JAg*1DI zhUvyu3VZF@tS`e8_R=B-j-oSJPK+Tfj##V^zOdf_7xh|C#gg6SQi;Bd7qHKY6D!2ixG_C7Ud`47mZu@#z2aV|;OA~C!+38e9pnz;!8Uda&NXBmuB!0Qg=-73 zk@ZMc#H`p1omd+-q$*M?A#A-Kci4G1Vm8RwR0QYkgCKNr$^}d6;Z$?6RGrMK&l?3L ztJ>4nTcU2g3@;RIr3BZ*@0Mbzh|O`M@m%}?GoCC+aiu8j^4^TcES)WvWoKJ*l~^E> z19(TCylw}z(;%z$K%}o&zONq6HIykUWZ82KYPht$Afan^R~~%i;pI}A9@qvUx%?lH zvFm99hJ?)DmFX5RhYa9o+YZwM??@-_gojG%P1pRj3iX*r#a8y&Y!Xl1?oh()V4ox( zFYwp?qaeTPzw7@XFYWZ#8{{A??a4Lb+^~(p(a8zun{vSPL9_V6gB3KvL?;#)ar)rr zi|DS%i;GP2qeJbfxk1eYDS4-e)x2M;7_f3iW>j` diff --git a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj index 4580b81..cdc07dc 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj +++ b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj @@ -1,7 +1,7 @@ - + Local - 8.0.50727 + 9.0.30729 2.0 {DE8E4CC9-4F3A-4E32-8DFE-EE5692E8FC45} Debug @@ -11,7 +11,7 @@ BMXNet20 - IHSPrivateKey.pfx + wv.key.snk JScript Grid IE50 @@ -26,6 +26,23 @@ true + 2.0 + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true bin\Debug\ @@ -55,18 +72,18 @@ false - TRACE + DEBUG;TRACE bmxnet.xml - false + true 4096 false 1591 - true + false false false false 4 - none + full prompt @@ -149,7 +166,39 @@ - + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + diff --git a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj.user b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj.user index 97b1cb2..a2229be 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj.user +++ b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj.user @@ -3,7 +3,8 @@ 7.10.3077 Debug AnyCPU - c:\documents and settings\administrator\my documents\visual studio projects\clinicalscheduling\calendargrid\bin\release\ + + @@ -11,6 +12,20 @@ 0 ProjectFiles 0 + + + + + + + + + + + + + en-US + false false diff --git a/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs b/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs new file mode 100644 index 0000000..b8bd10f --- /dev/null +++ b/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs @@ -0,0 +1,1312 @@ +using System; +using System.Diagnostics; +using System.Text; +using System.IO; +using System.Net.Sockets; +using System.Net; +using System.Security.Cryptography; +using System.Security.Permissions; +using System.Security.Principal; +using System.Threading; +using System.Timers; + +namespace IndianHealthService.BMXNet +{ + /// + /// BMXNetLib implements low-level socket connectivity to RPMS databases. + /// The VA RPC Broker must be running on the RPMS server in order for + /// BMXNetLib to connect. + /// + [DnsPermission(SecurityAction.Assert, Unrestricted = true)] + public class BMXNetLib + { + public BMXNetLib() + { + m_sWKID = "BMX"; + m_sWINH = ""; + m_sPRCH = ""; + m_sWISH = ""; + m_cHDR = ADEBHDR(m_sWKID,m_sWINH,m_sPRCH,m_sWISH); + + } + + #region Piece Functions + + /// + /// Corresponds to M's $L(STRING,DELIMITER) + /// + /// + /// + /// + public static int PieceLength(string sInput, string sDelim) + { + char[] cDelim = sDelim.ToCharArray(); + string [] cSplit = sInput.Split(cDelim); + return cSplit.GetLength(0); + } + + /// + /// Corresponds to M's $$Piece function + /// + /// + /// + /// + /// + public static string Piece(string sInput, string sDelim, int nNumber) + { + try + { + char[] cDelim = sDelim.ToCharArray(); + string [] cSplit = sInput.Split(cDelim); + int nLength = cSplit.GetLength(0); + if ((nLength < nNumber)||(nNumber < 1)) + return ""; + return cSplit[nNumber-1]; + } + catch (Exception bmxEx) + { + string sMessage = bmxEx.Message + bmxEx.StackTrace; + throw new BMXNetException(sMessage); + } + + } + + public static string Piece(string sInput, string sDelim, int nNumber, int nEnd) + { + try + { + if (nNumber < 0) + nNumber = 1; + + if (nEnd < nNumber) + return ""; + + if (nEnd == nNumber) + return Piece(sInput, sDelim, nNumber); + + char[] cDelim = sDelim.ToCharArray(); + string [] cSplit = sInput.Split(cDelim); + int nLength = cSplit.GetLength(0); + if ((nLength < nNumber)||(nNumber < 1)) + return ""; + + //nNumber = 1-based index of the starting element to return + //nLength = count of elements + //nEnd = 1-based index of last element to return + //nCount = number of elements past nNumber to return + + //convert nNumber to 0-based index: + nNumber--; + + //convert nEnd to 0-based index; + nEnd--; + + //Calculate nCount; + int nCount = nEnd - nNumber + 1; + + //Adjust nCount for number of elements + if (nCount + nNumber >= nLength) + { + nCount = nLength - nNumber; + } + + string sRet = string.Join(sDelim, cSplit, nNumber, nCount ); + return sRet; + } + catch (Exception bmxEx) + { + string sMessage = bmxEx.Message + bmxEx.StackTrace; + throw new BMXNetException(sMessage); + } + } + + #endregion Piece Functions + + #region RPX Fields + + private string m_sWKID; + private string m_sWISH; + private string m_sPRCH; + private string m_sWINH; + private string m_cHDR; + private string m_cAppContext; + private bool m_bConnected; + private int m_nMServerPort; + private string m_cServerAddress; + private string m_cDUZ; + private string m_cLoginFacility; + private TcpClient m_pCommSocket; + private string m_sNameSpace = ""; + private int m_nReceiveTimeout = 30000; + + #endregion RPX Fields + + #region Encryption Keys + private string[] m_sKey = new string[] + { + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + @"MUST PROVIDE A VALID KEY", + }; + #endregion Encryption Keys + + #region RPX Functions + + /// + /// Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. + /// + /// + /// + private string ADEBLDPadString(string strInput) + { + return ADEBLDPadString(strInput, 3); + } + + /// + /// Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. + /// + /// + /// Default = 3 + /// + private string ADEBLDPadString(string strInput, int nLength /*=3*/) + { + return strInput.PadLeft(nLength, '0'); + } + + /// + /// Concatenates zero-padded length of sInput to sInput + /// Given "Hello" returns "004Hello" + /// If nSize = 5, returns "00004Hello" + /// Default for nSize is 3. + /// + /// + /// + private string ADEBLDB(string sInput) + { + return ADEBLDB(sInput, 3); + } + + /// + /// Concatenates zero-padded length of sInput to sInput + /// Given "Hello" returns "004Hello" + /// If nSize = 5, returns "00004Hello" + /// Default for nSize is 3. + /// + /// + /// + /// + private string ADEBLDB(string sInput, int nSize /*=3*/) + { + int nLen = sInput.Length; + string sLen = this.ADEBLDPadString(nLen.ToString(), nSize); + return sLen + sInput; + } + + /// + /// Build protocol header + /// + /// + /// + /// + /// + /// + private string ADEBHDR(string sWKID, string sWINH, string sPRCH, string sWISH) + { + string strResult; + strResult = sWKID+";"+sWINH+";"+sPRCH+";"+sWISH+";"; + strResult = ADEBLDB(strResult); + return strResult; + } + private string ADEBLDMsg(string cHDR, string cRPC, string cParam) + { + string sMult = ""; + return ADEBLDMsg(cHDR, cRPC, cParam, ref sMult); + } + private string ADEBLDMsg(string cHDR, string cRPC, string cParam, ref string cMult) + { + //Builds RPC message + //Automatically splits parameters longer than 200 into subscripted array + string cMSG; + string sBuild = ""; + string sPiece = ""; + string sBig = ""; + int l; + int nLength; + + if (cParam == "") + { + cMSG = "0" + cRPC ; + } + else + { + l = PieceLength(cParam, "^"); + for (int j=1; j <= l; j++) + { + sPiece = Piece(cParam, "^", j); + if ((j == l) && (sPiece.Length > 200)) + { + //Split up long param into array pieces + sBig = sPiece; + sPiece = ".x"; + nLength = sPiece.Length + 1; + sPiece = ADEBLDPadString(nLength.ToString()) + "2" + sPiece; + sBuild = sBuild + sPiece; + int nSubscript = 1; + string sSubscript =""; + int nSubLen = 0; + string sSubLen =""; + int nBigLen = sBig.Length; + string sHunk =""; + int nHunkLen = 0; + string sHunkLen =""; + int nChunk = 0; + do + { + nChunk = (sBig.Length > 200)?200:sBig.Length ; + sHunk = sBig.Substring(0, nChunk); + sBig = sBig.Remove(0, nChunk); + nBigLen = sBig.Length; + sSubscript = nSubscript.ToString(); + nSubLen = sSubscript.Length; + sSubLen = nSubLen.ToString(); + sSubLen = ADEBLDPadString(sSubLen); + nHunkLen = sHunk.Length; + sHunkLen = nHunkLen.ToString(); + sHunkLen = ADEBLDPadString(sHunkLen); + cMult = cMult + sSubLen + sSubscript + sHunkLen + sHunk; + nSubscript++; + } while (nBigLen > 0); + } + else + { + nLength = sPiece.Length +1; + sPiece = ADEBLDPadString(nLength.ToString()) + "0" + sPiece; + sBuild = sBuild + sPiece; + } + } + nLength = sBuild.Length; + string sTotLen = ADEBLDPadString(nLength.ToString(),5); + if (cMult.Length > 0) + { + cMSG = "1"+ cRPC + "^" +sTotLen + sBuild; + } + else + { + cMSG = "0"+ cRPC + "^" +sTotLen + sBuild; + } + } + cMSG = ADEBLDB(cMSG, 5); + cMSG = cHDR + cMSG; + return cMSG; + } + + internal string ADEEncryp(string sInput) + { + //Encrypt a string + string strResult; + string strPercent; + string strAssoc; + string strIdix; + int nPercent; + int nAssocix; + int nIdix; + Debug.Assert(sInput != ""); + System.Random rRand = new Random(DateTime.Now.Second); + + nPercent = rRand.Next(0,10000); + nPercent += 72439; + nAssocix = nPercent % 20; + nAssocix++; + Debug.Assert(nAssocix < 21); + strPercent = nPercent.ToString(); + strPercent = strPercent.Substring(1,2); + nIdix = Convert.ToInt32(strPercent); + nIdix = nIdix % 20; + nIdix++; + Debug.Assert(nIdix < 21); + + const int nEncryptBase = 101; + strAssoc = LoadKey(nEncryptBase + nAssocix); + Debug.Assert(strAssoc.Length == 94); + strIdix = LoadKey(nEncryptBase + nIdix); + Debug.Assert(strIdix.Length == 94); + string sEncrypted = ""; + + foreach (char c in sInput) + { + string d = c.ToString(); + int nFindChar = strIdix.IndexOf(c); + if (nFindChar > -1) + { + d = strAssoc.Substring(nFindChar,1); + } + sEncrypted += d; + } + + strResult = (char) (nIdix + 31) + sEncrypted + (char) (nAssocix + 31); + + return strResult; + } + + internal string ADEDecryp(string sInput) + { + //Encrypt a string + string strAssoc; + string strIdix; + int nAssocix; + int nIdix; + Debug.Assert(sInput != ""); + + //get associator string index + char cAssocix = sInput[sInput.Length-1]; + nAssocix =(int) cAssocix; + nAssocix -= 31; + Debug.Assert(nAssocix < 21); + + //get identifier string index + char cIdix = sInput[0]; + nIdix = (int) cIdix; + nIdix -= 31; + Debug.Assert(nIdix < 21); + + //get associator string + const int nEncryptBase = 101; + strAssoc = LoadKey(nEncryptBase + nAssocix); + Debug.Assert(strAssoc.Length == 94); + + //get identifier string + strIdix = LoadKey(nEncryptBase + nIdix); + Debug.Assert(strIdix.Length == 94); + + //translated result + string sDecrypted = ""; + sInput = sInput.Substring(1, sInput.Length - 2); + foreach (char c in sInput) + { + string d = c.ToString(); + int nFindChar = strAssoc.IndexOf(c); + if (nFindChar > -1) + { + d = strIdix.Substring(nFindChar,1); + } + sDecrypted += d; + } + + return sDecrypted; + } + + internal string BMXEncrypt(string sInput) + { + + ASCIIEncoding textConverter = new ASCIIEncoding(); + RijndaelManaged myRijndael = new RijndaelManaged(); + byte[] encrypted; + byte[] toEncrypt; + byte[] key; + byte[] IV; + + string sKey="pouphfoz sfdbqjuvmbwft qizmphfoz"; + string sIV = "Gichin Funakoshi"; + key = textConverter.GetBytes(sKey); + IV = textConverter.GetBytes(sIV); + + //Get an encryptor. + ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, IV); + + //Encrypt the data. + MemoryStream msEncrypt = new MemoryStream(); + CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write); + + //Convert the input data to a byte array. + toEncrypt = textConverter.GetBytes(sInput); + + //Write all data to the crypto stream and flush it. + csEncrypt.Write(toEncrypt, 0, toEncrypt.Length); + csEncrypt.FlushFinalBlock(); + + //Get encrypted array of bytes. + encrypted = msEncrypt.ToArray(); + + //Convert to string to send to RPMS + string sEncrypted = "" ; + byte bTmp; + string sTmp; + for (int j =0; j < encrypted.Length; j++) + { + bTmp = encrypted[j]; + sTmp = bTmp.ToString(); + sEncrypted += sTmp; + if (j < (encrypted.Length -1)) + sEncrypted += "~"; + } + return sEncrypted; + } + + internal string BMXDecrypt(string sInput) + { + try + { + byte[] fromEncrypt; + ASCIIEncoding textConverter = new ASCIIEncoding(); + RijndaelManaged myRijndael = new RijndaelManaged(); + string sRPMSEncrypted = sInput; + string sBar = "~"; + char[] cBar = sBar.ToCharArray(); + string[] sArray; + sArray = sRPMSEncrypted.Split(cBar); + byte[] bRPMSEncrypted = new byte[sArray.GetLength(0)]; + byte[] key; + byte[] IV; + + //Convert the RPMS-stored string to a byte array + for (int j = 0; j < sArray.GetLength(0); j++) + { + bRPMSEncrypted[j] = Byte.Parse(sArray[j]); + } + + //Get a decryptor that uses the same key and IV as the encryptor. + string sKey="pouphfoz sfdbqjuvmbwft qizmphfoz"; + string sIV = "Gichin Funakoshi"; + key = textConverter.GetBytes(sKey); + IV = textConverter.GetBytes(sIV); + ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, IV); + + MemoryStream msDecrypt = new MemoryStream(bRPMSEncrypted); + CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read); + + fromEncrypt = new byte[bRPMSEncrypted.Length - 2]; + + //Read the data out of the crypto stream. + csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length); + + int nZ = FindChar(fromEncrypt, (char) 0); + + //Convert the byte array back into a string. + string sResult; + if (nZ < 0) + { + sResult = textConverter.GetString(fromEncrypt); + } + else + { + sResult = textConverter.GetString(fromEncrypt, 0, nZ); + } + return sResult; + } + catch (Exception ex) + { + Debug.Write(ex.Message); + return ""; + } + } + + public static int FindChar(byte[] c, char y) + { + int n = 0; + int nRet = -1; + for (n=0; n < c.Length; n++) + { + if (y == (char) c[n]) + { + nRet = n; + break; + } + } + + return nRet; + } + + public static int FindChar(string s, char y) + { + int n = 0; + int nRet = -1; + foreach (char c in s) + { + if (y == c) + { + nRet = n; + break; + } + n++; + } + return nRet; + } + + + /// + /// Returns index of first instance of sSubString in sString. + /// If sSubString not found, returns -1. + /// + /// + /// + /// + public static int FindSubString(string sString, string sSubString) + { + int nFound = -1; + int nLimit = sString.Length - sSubString.Length + 1; + if (nLimit < 0) + return -1; + + int nSubLength = sSubString.Length; + for (int j=0; j < nLimit; j++) + { + if (sString.Substring(j, nSubLength) == sSubString) + { + nFound = j; + break; + } + } + return nFound; + } + + private string LoadKey(int nID) + { + nID -= 102; + Debug.Assert( nID < 20); + return m_sKey[nID]; + } + + private void OpenConnectionCommon(string sServerAddress) + { + try + { + m_cServerAddress = sServerAddress; + + //Connect with the server + TcpClient connector = new TcpClient(); + + try + { + connector = new TcpClient(); + connector.Connect(m_cServerAddress, m_nMServerPort); + } + catch (SocketException exSocket) + { + string s = exSocket.Message + exSocket.StackTrace; + throw new BMXNetException(s); + } + + //Prepare & send the connect message + string cSend = "TCPconnect^" + m_sNameSpace + "^^"; + int nLen = cSend.Length; + string sLen = nLen.ToString(); + sLen = sLen.PadLeft(5, '0'); + cSend = "{BMX}" + sLen + cSend; + + NetworkStream ns = connector.GetStream(); + byte[] sendBytes = Encoding.ASCII.GetBytes(cSend); + ns.Write(sendBytes,0,sendBytes.Length); + + m_pCommSocket = connector; + return; + + } + catch (BMXNetException bmxEx) + { + throw bmxEx; + } + catch (Exception ex) + { + string s = ex.Message + ex.StackTrace; + throw new BMXNetException(s); + } + }//End OpenConnectionCommon + + [SocketPermissionAttribute(SecurityAction.Assert, + Access="Connect", + Host="All", + Port="All", + Transport="All")] + public bool OpenConnection(string sServerAddress, WindowsIdentity winIdentity) + { + try + { + OpenConnectionCommon(sServerAddress); + bool bSecurity; + try + { + bSecurity = SendSecurityRequest(winIdentity); + + } + catch (Exception ex) + { + //Close the connection + SendString(m_pCommSocket, "#BYE#"); + m_pCommSocket.Close(); + m_bConnected = false; + m_cServerAddress = ""; + throw ex; + } + + m_bConnected = bSecurity; + return m_bConnected; + } + catch (BMXNetException bmxEx) + { + throw bmxEx; + } + catch (Exception ex) + { + string s = ex.Message + ex.StackTrace; + throw new BMXNetException(s); + } + } + + StreamWriter m_LogWriter; + bool m_bLogging = false; + + public void StartLog() + { + try + { + if (m_bLogging) + { + throw new Exception("Already logging."); + } + string sFile = "BMXLog " + DateTime.Now.DayOfYear.ToString() + " " + + DateTime.Now.Hour.ToString() + " " + DateTime.Now.Minute.ToString() + + " " + DateTime.Now.Second.ToString() + ".log"; + StartLog(sFile); + return; + } + catch (Exception ex) + { + throw ex; + } + } + + public void StartLog(string LogFileName) + { + try + { + if (m_bLogging) + { + throw new Exception("Already logging."); + } + m_LogWriter = File.AppendText(LogFileName); + m_bLogging = true; + return; + } + catch (Exception ex) + { + throw ex; + } + } + + public void StopLog() + { + try + { + //Close the writer and underlying file. + if (m_bLogging == false) + { + return; + } + m_LogWriter.Close(); + m_bLogging = false; + return; + } + catch (Exception ex) + { + throw ex; + } + } + + private static void Log(String logMessage, TextWriter w) + { + w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), + DateTime.Now.ToLongDateString()); + w.WriteLine(" :"); + w.WriteLine(" :{0}", logMessage); + w.WriteLine("-------------------------------"); + // Update the underlying file. + w.Flush(); + } + + [SocketPermissionAttribute(SecurityAction.Assert, + Access="Connect", + Host="All", + Port="All", + Transport="All")] + public bool OpenConnection(string sServerAddress, string sAccess, string sVerify) + { + try + { + this.OpenConnectionCommon(sServerAddress); + + try + { + bool bSecurity = SendSecurityRequest(sAccess, sVerify); + } + catch (Exception ex) + { + //Close the connection + SendString(m_pCommSocket, "#BYE#"); + m_pCommSocket.Close(); + m_bConnected = false; + m_cServerAddress = ""; + throw ex; + } + + m_bConnected = true; + return m_bConnected; + } + catch (BMXNetException bmxEx) + { + throw bmxEx; + } + catch (Exception ex) + { + string s = ex.Message + ex.StackTrace; + throw new BMXNetException(s); + } + } + + private void SendString(TcpClient tcpClient, string cSendString) + { + string sMult = ""; + SendString(tcpClient, cSendString, sMult); + } + + private void SendString(TcpClient tcpClient, string cSendString, string cMult) + { + int nLen = cSendString.Length; + string sLen = nLen.ToString(); + sLen = sLen.PadLeft(5, '0'); + cSendString = sLen + cSendString; + + nLen += 15; + sLen = nLen.ToString(); + sLen = sLen.PadLeft(5, '0'); + + cSendString = "{BMX}" + sLen + cSendString; + cSendString = cSendString + cMult; + + NetworkStream ns = tcpClient.GetStream(); + byte[] sendBytes = Encoding.ASCII.GetBytes(cSendString); + ns.Write(sendBytes,0,sendBytes.Length); + if (this.m_bLogging == true) + { + Log("Sent: " + cSendString, this.m_LogWriter); + } + return; + } + + private string ReceiveString(TcpClient tcpClient) + { + NetworkStream ns = tcpClient.GetStream(); + + int nTimeOut = this.m_nReceiveTimeout; + int nCnt = 0; + int nTimeElapsed = 0; + while (ns.DataAvailable == false) + { + if (nCnt > 9999) + break; + if (nTimeElapsed > nTimeOut) + break; + nCnt++; + nTimeElapsed += 50; + Thread.Sleep(50); + } + + Debug.Assert(ns.DataAvailable == true); + if (ns.DataAvailable == false) + { + this.CloseConnection(); + throw new Exception("BMXNetLib.ReceiveString timeout. Connection Closed."); + //return ""; + } + + byte[] bReadBuffer = new byte[1024]; + string sReadBuffer = ""; + StringBuilder sbAll = new StringBuilder("", 1024); + int numberOfBytesRead = 0; + + // Incoming message may be larger than the buffer size. + + bool bFinished = false; + int nFind = -1; + bool bStarted = false; + int lpBuf = 0; + string sError = ""; + string sAppError = ""; + do + { + + numberOfBytesRead = ns.Read(bReadBuffer, 0, bReadBuffer.Length); + if ((numberOfBytesRead == 1)&&(bStarted == false)) + { + Thread.Sleep(15); + numberOfBytesRead += ns.Read(bReadBuffer,1, bReadBuffer.Length-1); + //Debug.Write("ReceiveString waiting for data...\n"); + } + if (bStarted == false) + { + //Process error info at beginning of returned string + int nErrLen = bReadBuffer[0]; + int nAppLen = bReadBuffer[bReadBuffer[0]+1]; + if ((bReadBuffer[2] == 0)&&(bReadBuffer[3] == 0)) + { //special case: M error trap invoked in SND^XWBTCPC + lpBuf += 2; + } + sError = Encoding.ASCII.GetString(bReadBuffer, lpBuf + 1, nErrLen); + if (sError != "") + { + throw new BMXNetException(sError); + } + sAppError = Encoding.ASCII.GetString(bReadBuffer, lpBuf+1+nErrLen+1, nAppLen); + lpBuf += (nErrLen + nAppLen + 2); + numberOfBytesRead -= (nErrLen + nAppLen + 2); + bStarted = true; + } + + nFind = FindChar(bReadBuffer, (char) 4); + if (nFind > -1) + bFinished = true; + Debug.Assert(numberOfBytesRead > -1); + sReadBuffer = Encoding.ASCII.GetString(bReadBuffer, lpBuf, numberOfBytesRead); + lpBuf = 0; + if (nFind > -1) + { + sbAll.Append(sReadBuffer, 0, numberOfBytesRead -1); + } + else + { + sbAll.Append(sReadBuffer); + } + } + while(bFinished == false); + if (this.m_bLogging == true) + { + Log("Received: " + sbAll.ToString(), this.m_LogWriter); + } + return sbAll.ToString(); + + } + private bool SendSecurityRequest(WindowsIdentity winIdentity) + { + string strReceive = ""; + string cMSG; + string sTest; + + //Build AV Call + cMSG = ADEBLDMsg(m_cHDR, "BMX AV CODE", winIdentity.Name); + SendString(m_pCommSocket, cMSG); + + strReceive = ReceiveString(m_pCommSocket); + sTest = strReceive.Substring(0,3); + + + char[] cDelim = {(char) 13,(char) 10,(char) 0}; + string sDelim = new string(cDelim); + int nPiece = 1; + m_cDUZ = Piece(strReceive, sDelim , nPiece); + if ((m_cDUZ == "0")||(m_cDUZ == "")) + { + nPiece = 7; + string sReason = Piece(strReceive, sDelim, nPiece); + throw new Exception(sReason); + } + + return true; + } + + private bool SendSecurityRequest(string sAccess, string sVerify) + { + string strReceive = ""; + string cMSG; + sAccess = sAccess.ToUpper(); + sVerify = sVerify.ToUpper(); + + //Build AV Call + string strAV = sAccess + ";" + sVerify; + strAV = ADEEncryp(strAV); + cMSG = ADEBLDMsg(m_cHDR, "XUS AV CODE", strAV); + SendString(m_pCommSocket, cMSG); + + strReceive = ReceiveString(m_pCommSocket); + + char[] cDelim = {(char) 13,(char) 10,(char) 0}; + string sDelim = new string(cDelim); + int nPiece = 1; + m_cDUZ = Piece(strReceive, sDelim , nPiece); + if ((m_cDUZ == "0")||(m_cDUZ == "")) + { + nPiece = 7; + string sReason = Piece(strReceive, sDelim, nPiece); + throw new Exception(sReason); + } + + return true; + } + + public void CloseConnection() + { + if (!m_bConnected) + { + return; + } + SendString(m_pCommSocket, "#BYE#"); + m_pCommSocket.Close(); + m_bConnected = false; + m_cServerAddress = ""; + // m_cDUZ2 = ""; + m_cDUZ = ""; + } + + public bool Lock(string Variable) + { + return Lock(Variable, "", ""); + } + + public bool Lock(string Variable, string Increment) + { + return Lock(Variable, Increment, ""); + } + + /// + /// Lock a local or global M variable + /// Returns true if lock is obtained during TimeOut seconds + /// Use + to increment, - to decrement lock. + /// + /// + /// + /// + /// + public bool Lock(string Variable, string Increment, string TimeOut) + { + try + { + string sContext = this.AppContext; + this.AppContext = "BMXRPC"; + Variable = Variable.Replace("^","~"); + string sRet = "0"; + bool bRet = false; + string sParam = Variable + "^" + Increment + "^" + TimeOut; + sRet = TransmitRPC("BMX LOCK", sParam); + bRet = (sRet == "1")?true:false; + this.AppContext = sContext; + return bRet; + } + catch (Exception ex) + { + string sMsg = ex.Message; + return false; + } + } + + static ReaderWriterLock m_rwl = new ReaderWriterLock(); + private int m_nRWLTimeout = 30000; //30-second default timeout + + /// + /// Returns a reference to the internal ReaderWriterLock member. + /// + public ReaderWriterLock BMXRWL + { + get + { + return m_rwl; + } + } + + /// + /// Sets and returns the timeout in milliseconds for locking the transmit port. + /// If the transmit port is unavailable an ApplicationException will be thrown. + /// + public int RWLTimeout + { + get + { + return m_nRWLTimeout; + } + set + { + m_nRWLTimeout = value; + } + } + + public string TransmitRPC(string sRPC, string sParam, int nLockTimeOut) + { + try + { + try + { + if (m_bConnected == false) + { + throw new BMXNetException("BMXNetLib.TransmitRPC failed because BMXNetLib is not connected to RPMS."); + } + Debug.Assert(m_cDUZ != ""); + Debug.Assert(m_pCommSocket != null); + + string sOldAppContext = ""; + if (sRPC.StartsWith("BMX")&&(this.m_cAppContext != "BMXRPC")) + { + sOldAppContext = this.m_cAppContext; + this.AppContext = "BMXRPC"; + } + string sMult = ""; + string sSend = ADEBLDMsg(m_cHDR, sRPC, sParam, ref sMult); + SendString(m_pCommSocket, sSend, sMult); + // Debug.Write("TransmitRPC Sent: " + sSend + "\n"); + string strResult = ReceiveString(m_pCommSocket); + // Debug.Write("TransmitRPC Received: " + strResult + "\n"); + + if (sOldAppContext != "") + { + this.AppContext = sOldAppContext; + } + return strResult; + } + catch (Exception ex) + { + if (ex.Message == "Unable to write data to the transport connection.") + { + m_bConnected = false; + } + throw ex; + } + finally + { + } + } + catch (ApplicationException aex) + { + // The writer lock request timed out. + Debug.Write("TransmitRPC writer lock request timed out.\n"); + throw aex; + } + catch (Exception OuterEx) + { + throw OuterEx; + } + } + + public string TransmitRPC(string sRPC, string sParam) + { + try + { + return TransmitRPC(sRPC, sParam, m_nRWLTimeout); + } + catch (ApplicationException aex) + { + throw aex; + } + catch (Exception ex) + { + throw ex; + } + } + + public string GetLoginFacility() + { + try + { + if (m_bConnected == false) + { + throw new BMXNetException("BMXNetLib is not connected to RPMS"); + } + + if (m_cLoginFacility != "") + { + return m_cLoginFacility; + } + + Debug.Assert(m_pCommSocket != null); + Debug.Assert(m_cDUZ != ""); + SendString(m_pCommSocket, ADEBLDMsg(m_cHDR, "BMXGetFac", m_cDUZ)); + string sFac = ReceiveString(m_pCommSocket); + m_cLoginFacility = sFac; + return sFac; + } + catch (BMXNetException bmxEx) + { + string sMessage = bmxEx.Message + bmxEx.StackTrace; + throw new BMXNetException(sMessage); + } + catch (Exception ex) + { + throw ex; + } + } + + #endregion RPX Functions + + #region RPX Properties + + /// + /// Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. + /// If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. + /// The default is 30 seconds. + /// + public int ReceiveTimeout + { + get { return m_nReceiveTimeout; } + set { m_nReceiveTimeout = value; } + } + + public string WKID + { + get + { + return m_sWKID; + } + set + { + m_sWKID = value; + } + } + + public string PRCH + { + get + { + return m_sPRCH; + } + set + { + m_sPRCH = value; + } + } + + public string WINH + { + get + { + return m_sWINH; + } + set + { + m_sWINH = value; + } + } + + public string WISH + { + get + { + return m_sWISH; + } + set + { + m_sWISH = value; + } + } + + /// + /// Gets/sets the Kernel Application context + /// Throws an exception if unable to set the context. + /// + public string AppContext + { + get + { + return m_cAppContext; + } + set + { + //Send the changed context to RPMS + if ((m_bConnected == true) && (value != "")) + { + try + { + string sRPC = ADEEncryp(value); + string sAuthentication = TransmitRPC("XWB CREATE CONTEXT", sRPC); + + if (BMXNetLib.FindSubString(sAuthentication, "does not have access to option") > -1) + { + throw new BMXNetException(sAuthentication); + } + + } + catch (Exception ex) + { + Debug.Write(ex.Message); + throw ex; + } + } + m_cAppContext = value; + } + } + + public bool Connected + { + get + { + return m_bConnected; + } + } + + public string DUZ + { + get + { + return m_cDUZ; + } + } + + public string MServerAddress + { + get + { + return m_cServerAddress; + } + } + + public string MServerNamespace + { + get + { + return m_sNameSpace; + } + set + { + m_sNameSpace = value; + } + } + + public int MServerPort + { + get + { + return m_nMServerPort; + } + set + { + m_nMServerPort = value; + } + } + + public string NameSpace + { + get + { + return m_sNameSpace; + } + set + { + m_sNameSpace = value; + } + } + + #endregion RPX Properties + + } +} diff --git a/cs/bmx_0200scr/BMX2/BMXNet/bin/Release/BMXNet20.dll b/cs/bmx_0200scr/BMX2/BMXNet/bin/Release/BMXNet20.dll index 830c3e5c30dfa69f02bf83d607d1983ebdc44726..5ccefd8ac6981e5a0a53bde1de1358dcd0410da7 100644 GIT binary patch literal 90112 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%0A$6)m7=)XB8-rMc>@Y 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

3UWNH_0VFSm?5O%*D2IdzyO%!T%9 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 + +

+ Prompts for RPMS Server address and port + Obtains current values, if any, from isolated storage + and uses them as defaults. + If OK, then writes values to isolated storage and returns + Address and Port as properties. + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + If b is true, moves member vars into control data + otherwise, moves control data into member vars + + + + + + Gets/sets the internet address of the RPMS Server + + + + + Gets/sets the namespace of the RPMS Server + + + + + Gets/sets the TCP/IP Port of the RPMS Server + + + + + Summary description for DSelectDivision. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + If b is true, moves member vars into control data + otherwise, moves control data into member vars + + + + + + Clean up any resources being used. + + + + + BMXNetLib implements low-level socket connectivity to RPMS databases. + The VA RPC Broker must be running on the RPMS server in order for + BMXNetLib to connect. + + + + + Corresponds to M's $L(STRING,DELIMITER) + + + + + + + + Corresponds to M's $$Piece function + + + + + + + + + Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. + + + + + + + Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. + + + Default = 3 + + + + + Concatenates zero-padded length of sInput to sInput + Given "Hello" returns "004Hello" + If nSize = 5, returns "00004Hello" + Default for nSize is 3. + + + + + + + Concatenates zero-padded length of sInput to sInput + Given "Hello" returns "004Hello" + If nSize = 5, returns "00004Hello" + Default for nSize is 3. + + + + + + + + Build protocol header + + + + + + + + + + Returns index of first instance of sSubString in sString. + If sSubString not found, returns -1. + + + + + + + + Lock a local or global M variable + Returns true if lock is obtained during TimeOut seconds + Use + to increment, - to decrement lock. + + + + + + + + + Returns a reference to the internal ReaderWriterLock member. + + + + + Sets and returns the timeout in milliseconds for locking the transmit port. + If the transmit port is unavailable an ApplicationException will be thrown. + + + + + Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. + If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. + The default is 30 seconds. + + + + + Gets/sets the Kernel Application context + Throws an exception if unable to set the context. + + + + + Custom exception class for BMXNet + + + + + Returns the array of RMPSResultSets retrieved from RPMS + + + + + Sets and Returns the current recordset + + Summary description for DLoginInfo. @@ -214,205 +414,5 @@ Serializes RPMS server address and port - - - BMXNetLib implements low-level socket connectivity to RPMS databases. - The VA RPC Broker must be running on the RPMS server in order for - BMXNetLib to connect. - - - - - Corresponds to M's $L(STRING,DELIMITER) - - - - - - - - Corresponds to M's $$Piece function - - - - - - - - - Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. - - - - - - - Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. - - - Default = 3 - - - - - Concatenates zero-padded length of sInput to sInput - Given "Hello" returns "004Hello" - If nSize = 5, returns "00004Hello" - Default for nSize is 3. - - - - - - - Concatenates zero-padded length of sInput to sInput - Given "Hello" returns "004Hello" - If nSize = 5, returns "00004Hello" - Default for nSize is 3. - - - - - - - - Build protocol header - - - - - - - - - - Returns index of first instance of sSubString in sString. - If sSubString not found, returns -1. - - - - - - - - Lock a local or global M variable - Returns true if lock is obtained during TimeOut seconds - Use + to increment, - to decrement lock. - - - - - - - - - Returns a reference to the internal ReaderWriterLock member. - - - - - Sets and returns the timeout in milliseconds for locking the transmit port. - If the transmit port is unavailable an ApplicationException will be thrown. - - - - - Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. - If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. - The default is 30 seconds. - - - - - Gets/sets the Kernel Application context - Throws an exception if unable to set the context. - - - - - Returns the array of RMPSResultSets retrieved from RPMS - - - - - Sets and Returns the current recordset - - - - - Summary description for DSelectDivision. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - If b is true, moves member vars into control data - otherwise, moves control data into member vars - - - - - - Clean up any resources being used. - - - - - Prompts for RPMS Server address and port - Obtains current values, if any, from isolated storage - and uses them as defaults. - If OK, then writes values to isolated storage and returns - Address and Port as properties. - - - - - - Required designer variable. - - - - - Clean up any resources being used. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - If b is true, moves member vars into control data - otherwise, moves control data into member vars - - - - - - Gets/sets the internet address of the RPMS Server - - - - - Gets/sets the namespace of the RPMS Server - - - - - Gets/sets the TCP/IP Port of the RPMS Server - - - - - Custom exception class for BMXNet - - diff --git a/cs/bmx_0200scr/BMX2/BMXNet/bmxnet.xml b/cs/bmx_0200scr/BMX2/BMXNet/bmxnet.xml index d4bf490..f8f1c50 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet/bmxnet.xml +++ b/cs/bmx_0200scr/BMX2/BMXNet/bmxnet.xml @@ -4,6 +4,206 @@ BMXNet20 + + + Prompts for RPMS Server address and port + Obtains current values, if any, from isolated storage + and uses them as defaults. + If OK, then writes values to isolated storage and returns + Address and Port as properties. + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + If b is true, moves member vars into control data + otherwise, moves control data into member vars + + + + + + Gets/sets the internet address of the RPMS Server + + + + + Gets/sets the namespace of the RPMS Server + + + + + Gets/sets the TCP/IP Port of the RPMS Server + + + + + Summary description for DSelectDivision. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + If b is true, moves member vars into control data + otherwise, moves control data into member vars + + + + + + Clean up any resources being used. + + + + + BMXNetLib implements low-level socket connectivity to RPMS databases. + The VA RPC Broker must be running on the RPMS server in order for + BMXNetLib to connect. + + + + + Corresponds to M's $L(STRING,DELIMITER) + + + + + + + + Corresponds to M's $$Piece function + + + + + + + + + Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. + + + + + + + Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. + + + Default = 3 + + + + + Concatenates zero-padded length of sInput to sInput + Given "Hello" returns "004Hello" + If nSize = 5, returns "00004Hello" + Default for nSize is 3. + + + + + + + Concatenates zero-padded length of sInput to sInput + Given "Hello" returns "004Hello" + If nSize = 5, returns "00004Hello" + Default for nSize is 3. + + + + + + + + Build protocol header + + + + + + + + + + Returns index of first instance of sSubString in sString. + If sSubString not found, returns -1. + + + + + + + + Lock a local or global M variable + Returns true if lock is obtained during TimeOut seconds + Use + to increment, - to decrement lock. + + + + + + + + + Returns a reference to the internal ReaderWriterLock member. + + + + + Sets and returns the timeout in milliseconds for locking the transmit port. + If the transmit port is unavailable an ApplicationException will be thrown. + + + + + Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. + If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. + The default is 30 seconds. + + + + + Gets/sets the Kernel Application context + Throws an exception if unable to set the context. + + + + + Custom exception class for BMXNet + + + + + Returns the array of RMPSResultSets retrieved from RPMS + + + + + Sets and Returns the current recordset + + Summary description for DLoginInfo. @@ -214,205 +414,5 @@ Serializes RPMS server address and port - - - BMXNetLib implements low-level socket connectivity to RPMS databases. - The VA RPC Broker must be running on the RPMS server in order for - BMXNetLib to connect. - - - - - Corresponds to M's $L(STRING,DELIMITER) - - - - - - - - Corresponds to M's $$Piece function - - - - - - - - - Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. - - - - - - - Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. - - - Default = 3 - - - - - Concatenates zero-padded length of sInput to sInput - Given "Hello" returns "004Hello" - If nSize = 5, returns "00004Hello" - Default for nSize is 3. - - - - - - - Concatenates zero-padded length of sInput to sInput - Given "Hello" returns "004Hello" - If nSize = 5, returns "00004Hello" - Default for nSize is 3. - - - - - - - - Build protocol header - - - - - - - - - - Returns index of first instance of sSubString in sString. - If sSubString not found, returns -1. - - - - - - - - Lock a local or global M variable - Returns true if lock is obtained during TimeOut seconds - Use + to increment, - to decrement lock. - - - - - - - - - Returns a reference to the internal ReaderWriterLock member. - - - - - Sets and returns the timeout in milliseconds for locking the transmit port. - If the transmit port is unavailable an ApplicationException will be thrown. - - - - - Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. - If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. - The default is 30 seconds. - - - - - Gets/sets the Kernel Application context - Throws an exception if unable to set the context. - - - - - Returns the array of RMPSResultSets retrieved from RPMS - - - - - Sets and Returns the current recordset - - - - - Summary description for DSelectDivision. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - If b is true, moves member vars into control data - otherwise, moves control data into member vars - - - - - - Clean up any resources being used. - - - - - Prompts for RPMS Server address and port - Obtains current values, if any, from isolated storage - and uses them as defaults. - If OK, then writes values to isolated storage and returns - Address and Port as properties. - - - - - - Required designer variable. - - - - - Clean up any resources being used. - - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - If b is true, moves member vars into control data - otherwise, moves control data into member vars - - - - - - Gets/sets the internet address of the RPMS Server - - - - - Gets/sets the namespace of the RPMS Server - - - - - Gets/sets the TCP/IP Port of the RPMS Server - - - - - Custom exception class for BMXNet - - diff --git a/cs/bmx_0200scr/BMX2/BMXNet/wv.key.snk b/cs/bmx_0200scr/BMX2/BMXNet/wv.key.snk new file mode 100644 index 0000000000000000000000000000000000000000..a24841442ab30ad150ef405ec792fc7f44307503 GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098qE?3ZHO5>wQWXNBf5gaz-VS?!s!3sf75a{eoL7R0{t|4Q71D?+Objaps;6PmJk zkX1~=gsIqm>yEu3I@;^QcJ`n!+0|8SOJ?RV;jpsktm{lUp9(`fIh>YCL-A5RHVmy7 zG~6mUR=)|(iw%;T3=PIin();9M?`gr#ktW5f4YqRM!7gcD51TMx9r##;Al?f_O8>L zH?R?7dy664gS74|X$wSQ0Yvnl&U>u@$67O5Jljv;2yzxiC^%VX_Ra=nq8e{aQy`e$ z8EhFJdX=%BVbA^nmk%4En(tmdS`Ld+0-b zdio5_lSR|J#yd8-$wTP1-j$q&x%y!>n4;*H^5=5lU%HWk4$d^6a2yeB!ar6oi^CDF in + Local - 8.0.50727 + 9.0.30729 2.0 {A3A19C51-73D2-4EEE-A190-F1EFBF477BCB} Debug @@ -10,7 +10,8 @@ BMXNetTest - IHSPrivateKey.pfx + + JScript Grid IE50 @@ -25,6 +26,23 @@ false + 2.0 + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true bin\Debug\ @@ -59,7 +77,7 @@ TRACE - false + true 4096 false @@ -69,7 +87,7 @@ false false 4 - none + full prompt @@ -114,7 +132,36 @@ - + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + diff --git a/cs/bmx_0200scr/BMX2/BMXNetTest/BMXNetTest.csproj.user b/cs/bmx_0200scr/BMX2/BMXNetTest/BMXNetTest.csproj.user index 2d3315c..eec41d1 100644 --- a/cs/bmx_0200scr/BMX2/BMXNetTest/BMXNetTest.csproj.user +++ b/cs/bmx_0200scr/BMX2/BMXNetTest/BMXNetTest.csproj.user @@ -11,6 +11,20 @@ 0 ProjectFiles 0 + + + + + + + + + + + + + en-US + false false diff --git a/cs/bmx_0200scr/BMX2/BMXNetTest/bin/Release/BMXNetTest.exe b/cs/bmx_0200scr/BMX2/BMXNetTest/bin/Release/BMXNetTest.exe index 9caf47a2464a714b3c7685c52324b04fe29f0681..f6f7575f54ad529b26765dba9243fa938feaec5c 100644 GIT binary patch delta 5509 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 delta 5088 zcmb_g3shBA8vge_m-~J{!3TQPL^D*#A}b3@Q+$x}b_$b%j6|;(c7Fv^#DK@AIcmqQuojPG)0fq7Ddy<6>&_mUB26n!5%&U+E+&kZKpvTyt~SFNUx= zY?!ELX?(6Z_Ao1UhG};^Z3=Fjl4#jVqM3O_47P#D*bxi6Z_O~@rQGBZ&*WUjUJ(3} zyc8&G0038UF}W^=$-(E%i(PxkGtBjomllmm(z|i9>OXqL*opb!@jhA|T&?GC1?m?n{K*C8`;&DV<^jtseB7k2n z2S#GO>U~Px+^fD0s(&KwCsdS7(?19J6U7coL8c`FLIKz#0n(0I^)aA6gU6sZf{geT ziYTk?XI41a*O%LCSv-cwHaT!)yBc22=W_UahA#uxo8{c%{mqy5a)7dDSt3vN=GFJf z6Eg0;o;ZuH3di~cC}Bq*;S-f17ELZ1{}t$nXHod9X&#gQ1FXmnX`SmaMV%0Q8mDge~8I1Z? zadOJa=u5JPSI`l!9SzwW*>#HR?@8aQz4jhyzozUo#715M)ek~6$3y=DdpNHhb(-&( zOiTFAI?czJU{eEE#EV#xdjrRu3iLoV>+E0p#{82n<5XU5+$R=K4Va4*KNgBLP5qLw zh*&;-II9u&PY(m1pWX;%`i$Y(H8M(V!1$x9G}L}9r`Q5LG@=^R(ML&Eiq8;VPi)^m zipOWHK*6zj(@gD1(e!s>EAuir)5MQ6)5OO!2ea{DU$6z@^I4f}l}OGnV7H3u{Nd~^ zA@awtBjSbp1~yPkEtqE?)emcdmBe$oLgW>uh<6LBk$!36Qu_?JMktp)L%dixr)-`S zR>;LaQ{M<)^DVel-wMiWOXPxF3qe1xKf(@y*?8?7s3!d)D8|TlGSe8jUB*Zyav02R zj=U~~JP|D#G^H5wzb{oe;Pg^bQKfuIo}_rO#bRI4kn?L*=+B2s3?@ha9>XTOIaMO= zzDrzEJd#}`s*6j9sYZ{>&`{(D+-gn$Y$iQVmiQ4IRO~MvW>=e73TFL2kz6vu-Y)x+ zf<@mcrkA8S)c%wLp5ZQ0S2EI}Hk(qC^xa~6$ps@+CvrGX-|>7Ve2Tk!>Vc<-l+tv^ zgn@|>JZ8OI6hK*hO0no0VyjED`t^HcAkomG0{R-S2RHt>51m|;I}!I2Q^cqGiKySg zEmq1wK$~wgQdxjkSTCWUxI?n<;F= zdx$358mJ##Yb&w!qdS2{dM&D?6H2n!rF6Evfvi+y--3i{@Jnf}9qU1lD&-9*{mAJk zu~{j{u?6~Mppou%GysnPtu)Cgl~SkV*MVE}HoCyjzA5-@ow#Vh&w z-ZXEJu2r}MdXRn#v{JWMHfQ$9RzkjpC~i6oD{b@%pOqd`xWm`xOQnx|olp)yNu_VW zQz^}#>`$d}e#x%}TIo&yR!=H@tduVmeh)O#yg&n*xH}Lq8R=ngBfYPbE+|1_L5Tx^ z1A;URHz&;sUKF&_{GeQ}T?$VGW8W>kUW-=bW4BN}RTwK!(oh(;RvYJ2GL1`E_ruqZ zzAlRU9yRJTfL<((TTjB5O3&hbE33Q=YcQ2w8Mi)zHH3~PEN-f$VRW=C?i*!VNyBMw z6n{cw;sqw1M$pcLm2aw`GwH*GRR!xTI-Iap!WvD(u8QaV9@bd8E@5qjl}V2ztPWV? zs4HQ82J2iLv*LLMa|NA8)pPsD&19J8)9nf8I9M0b+hXaBE20C+Wkf@AH+FkIovExB z=`eOtK229vJ^cV*0UfMRk@TARVR@*llvX``h+2j85dL&Z>yX(=#bAuywn}^zdy~^{ z;4kp#FFF42`Z4e6O|UBp4ZwQZWOuMF>BikL>aLuGAtq_bSM-4XRtIX#aO7V32D zB@69SXmXB&lHxQXXo%B`6&mA|E0hI1fMJ|;h*daeuwzVj7BI$dah5O(f5}7!2g~8Z+y&rgxt~OZ^V~bouB@4Z zXD@Rvb$7C;h32^5MiW(TDY;xazSZ60{9HBk70aL--N#uwH7f5qx5mTtpxeT8_`7Zw zpUwBUw;}7WJHRuDc?Ljndpg-{euhU@%ktEr@>I_@YNtw1n3t=j%lR#yG+xECZRvb* zl)vgZn=j|@dycbuxX1H$I^xOZ_1xy2#MkqQ-d0*qh2Ckrg-5;lyjhiK=68Fq1mEmU z=j&;Q^8VF(4RYW0I%zrI>+NLi{4iE%3!MPpsj_zQA--1H#nXM;fD?RPU^HLdu7P7W zpW|-gkbLqH-0r)Re}J@m_yPWB-vj&*_(Pb%ao^)OJ6rrtD(5c$b!=CBcxno6*21(g_=wgCK7Lrb!4>kS#ymVCcqH)0+%jK=BmBcP4m0QwZ~ zuW+cs3lv_VaGJsb+JngXl#(=>YAF+V4V@4hS52^QwOnwqe1#M3vWk7HmIO<1=9O=? z-iuMEFSh9BGcAHO^%F&F0&CZp#f589#8CX2*Yp<$oACV$zt1!c5G@F~wW+^Y)D#kz zHw_Y*O#_n(tCmz(in(iQEEQEXiy}2u3+Kh&Tysz}F0823sWSGQNHeg7vA?Y=V&0n4 znu^P+sw)YkdWmGQto8X^i(GxZxNSqGsiv^JW