Ejemplo n.º 1
0
        public static StringValueParameter Create(string k, object v)
        {
            Debug.Assert(!String.IsNullOrEmpty(k) && v != null);

            StringValueParameter retVal = new StringValueParameter();

            retVal.key   = k;
            retVal.value = v.ToString();
            return(retVal);
        }
        protected void SetStringValue <T>(string key, T value)
        {
            foreach (StringValueParameter valueField in stringValues)
            {
                if (valueField.key == key)
                {
                    valueField.value = value.ToString();
                    return;
                }
            }

            stringValues.Add(StringValueParameter.Create(key, value));
        }
        protected void SetStringArrayValue <T>(string key, T[] valueArray)
        {
            int i = 0;

            while (i < stringValues.Count)
            {
                if (stringValues[i].key.Equals(key))
                {
                    stringValues.RemoveAt(i);
                }
                else
                {
                    ++i;
                }
            }

            foreach (T value in valueArray)
            {
                stringValues.Add(StringValueParameter.Create(key, value.ToString()));
            }
        }
Ejemplo n.º 4
0
        /// <summary>Parses an UploadHandler's payload for content-type = "multipart/form-data".</summary>
        public static void ParseMultipartFormData(byte[] data,
                                                  out List <API.StringValueParameter> stringFields,
                                                  out List <API.BinaryDataParameter> binaryFields)
        {
            stringFields = null;
            binaryFields = null;

            // early out
            if (data == null || data.Length == 0)
            {
                return;
            }

            // get dataString and delimiter
            string dataString   = System.Text.Encoding.UTF8.GetString(data);
            string lineEnd      = "\r\n";
            int    lineEndIndex = -1;

            lineEndIndex = dataString.IndexOf(lineEnd, 1);
            if (lineEndIndex < 0)
            {
                return;
            }

            string delimiter = dataString.Substring(0, lineEndIndex).Trim();

            string[] sections = dataString.Split(new string[] { delimiter }, System.StringSplitOptions.RemoveEmptyEntries);
            stringFields = new List <API.StringValueParameter>();
            binaryFields = new List <API.BinaryDataParameter>();

            foreach (string s in sections)
            {
                string searchString      = null;
                int    searchIndex       = 0;
                int    elementStartIndex = 0;
                int    elementEndIndex   = 0;

                // Content-Type
                searchString = "Content-Type: ";
                searchIndex  = s.IndexOf(searchString);
                if (searchIndex < 0)
                {
                    continue;
                }

                elementStartIndex = searchIndex + searchString.Length;
                elementEndIndex   = s.IndexOf(lineEnd, elementStartIndex);

                string contentType = s.Substring(elementStartIndex, elementEndIndex - elementStartIndex);

                // process text
                if (contentType.Contains(@"text/plain"))
                {
                    var newStringParam = new API.StringValueParameter();

                    // get key
                    searchString = "name=\"";
                    searchIndex  = s.IndexOf(searchString);

                    if (searchIndex < 0)
                    {
                        newStringParam.key = "KEY_NOT_FOUND";
                    }
                    else
                    {
                        elementStartIndex = searchIndex + searchString.Length;
                        elementEndIndex   = s.IndexOf("\"", elementStartIndex);

                        newStringParam.key = s.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
                    }

                    // get value
                    searchString = lineEnd + lineEnd;
                    searchIndex  = s.IndexOf(searchString);

                    if (searchIndex < 0)
                    {
                        newStringParam.value = "VALUE_NOT_FOUND";
                    }
                    else
                    {
                        elementStartIndex    = searchIndex + searchString.Length;
                        newStringParam.value = s.Substring(elementStartIndex).Trim();
                    }
                }
                // process literally anything else
                else
                {
                    var newBinaryParam = new API.BinaryDataParameter()
                    {
                        mimeType = contentType,
                    };

                    // get key
                    searchString = "name=\"";
                    searchIndex  = s.IndexOf(searchString);

                    if (searchIndex < 0)
                    {
                        newBinaryParam.key = "KEY_NOT_FOUND";
                    }
                    else
                    {
                        elementStartIndex = searchIndex + searchString.Length;
                        elementEndIndex   = s.IndexOf("\"", elementStartIndex);

                        newBinaryParam.key = s.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
                    }

                    // get fileName
                    searchString = "filename=\"";
                    searchIndex  = s.IndexOf(searchString);

                    if (searchIndex < 0)
                    {
                        newBinaryParam.fileName = "FILENAME_NOT_FOUND";
                    }
                    else
                    {
                        elementStartIndex = searchIndex + searchString.Length;
                        elementEndIndex   = s.IndexOf("\"", elementStartIndex);

                        newBinaryParam.fileName = s.Substring(elementStartIndex, elementEndIndex - elementStartIndex);
                    }

                    // get contents
                    searchString = lineEnd + lineEnd;
                    searchIndex  = s.IndexOf(searchString);

                    if (searchIndex < 0)
                    {
                        newBinaryParam.contents = null;
                    }
                    else
                    {
                        elementStartIndex = searchIndex + searchString.Length;

                        int byteCount = (s.Length - elementStartIndex - lineEnd.Length);
                        newBinaryParam.contents = System.Text.Encoding.UTF8.GetBytes(s.Substring(elementStartIndex, byteCount));
                    }

                    binaryFields.Add(newBinaryParam);
                }
            }
        }