// maybe call one at a time - because of potential size issues?? (where to throttle this - client param?)
        internal static List <HiMessageFile> GetHiMessages(string facilityID)
        {
            List <HiMessageFile> hiMessageList = new List <HiMessageFile>();

            try
            {
                if (ValidateRequestParameter(facilityID, 8, false))
                {
                    // Get a list of all uncollected message files for the passed facility
                    hiMessageList = Gp2GpTransfer.GetUncollectedMessages(facilityID);

                    // iterate through list adding the file to each object
                    foreach (HiMessageFile mf in hiMessageList)
                    {
                        // add contents (don't delete file at this stage)
                        mf.fileText = mf.GetMessageFromDisk(mf.messageFileName);
                        // use Client to send ok message on receipt and then update DB and delete file
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Write("ERROR: " + ex.ToString(), LogLevel.ExceptionOnly);
                throw;
            }

            return(hiMessageList);
        }
        internal static string PutMessageCollectedStatus(string gp2gpTransferID)
        {
            try
            {
                int dbKey = int.Parse(gp2gpTransferID);

                // get message file name
                HiMessageFile mf = new HiMessageFile();
                mf.messageFileName = Gp2GpTransfer.GetMessageFileName(dbKey);

                if (string.IsNullOrEmpty(mf.messageFileName))
                {
                    Log.Write("ERROR: unable to identify Message File for ID = " + dbKey.ToString(), LogLevel.ExceptionOnly);
                }
                else
                {
                    // delete message file from disk (if this can't be done, it's still been received - will to be reviewed by SysOp)
                    if (!mf.DeleteMessageFromDisk(mf.messageFileName))
                    {
                        Log.Write("ERROR: unable to delete collected file: " + mf.messageFileName, LogLevel.ExceptionOnly);
                    }

                    // update Collected Flag in DB (even if it can't be deleted - as it has been collected)
                    Gp2GpTransfer.UpdateMessageCollectedStatus(dbKey);
                }
            }
            catch (Exception ex)
            {
                Log.Write("ERROR: " + ex.ToString(), LogLevel.ExceptionOnly);
                throw;
            }

            return("OK");
        }
        internal static bool PostHpiMessage(string fileName, string messageHeader, string replyToMessageID, string encryptedMessage)
        {
            try
            {
                // instantiate message file object and populated properties from header
                HiMessageFile mf = new HiMessageFile(messageHeader);
                mf.replyToMessageId = replyToMessageID;

                // message will be empty if this is a notification (hashed PID will be in replyToMessageID)
                if (!string.IsNullOrEmpty(encryptedMessage))
                {
                    // save file to disk and populate message file name and size properties
                    mf.messageFileName = mf.SaveMessageToDisk(fileName, encryptedMessage);
                    mf.fileSize        = mf.GetFileSize(mf.messageFileName);
                }

                // record in Patients First DB - Gp2GpTransfer table
                Gp2GpTransfer.AddGp2GpTransfer(mf);
            }
            catch (Exception ex)
            {
                Log.Write("ERROR: " + ex.ToString(), LogLevel.ExceptionOnly);
                throw;
            }

            return(true);
        }