コード例 #1
0
        /// <summary>
        /// Converts this frame to a basic one with a data set
        /// </summary>
        /// <param name="data">The basic data to convert to</param>
        /// <returns>The data value</returns>
        public DataValue ConvertToBasic(byte[] data)
        {
            DataValue ret       = null;
            bool      doConvert = true;

            // If already basic, don't convert the entire frame
            if (IsBasic)
            {
                ByteArrayDataValue dv = SelectSingleNode("/Data") as ByteArrayDataValue;

                if (dv != null)
                {
                    dv.Value  = data;
                    ret       = dv;
                    doConvert = false;
                }
            }

            // Not basic or we failed
            if (doConvert)
            {
                DataKey root = new DataKey("Root");
                root.Class        = new Guid(DataNodeClasses.BINARY_NODE_CLASS);
                root.FormatString = "$Data";

                root.SetLinks(this, null);
                ret = root.AddValue("Data", data);

                Root = root;
            }

            OnModified();

            return(ret);
        }
コード例 #2
0
ファイル: basicstreamparser.cs プロジェクト: michyer/canape
    // Populate a datakey with data from a stream
    public void FromReader(DataReader reader, DataKey root, Logger logger)
    {
        // Read up to five bytes and reverse them
        byte[] data = reader.ReadBytes(5, false).Reverse().ToArray();

        logger.LogInfo("Read {0} bytes from stream", data.Length);

        // Add to key
        root.AddValue("data", data);
    }
コード例 #3
0
ファイル: HTTPCookieParser.cs プロジェクト: michyer/canape
        private void AddCookie(string cookie, DataKey root, Logger logger)
        {
            string[] kv = cookie.Split(new [] {'='}, 2, StringSplitOptions.RemoveEmptyEntries);

            string k = kv[0].Trim();
            string v = "";

            if(kv.Length > 1)
            {
                v = kv[1].Trim();
            }

            if(!String.IsNullOrEmpty(k))
            {
                root.AddValue(k, v);
            }
        }
コード例 #4
0
        /// <summary>
        /// Convert the frame to a string value
        /// </summary>
        /// <param name="value">The string value</param>
        /// <param name="encoding">The encoding for the string</param>
        /// <returns>The data value</returns>
        public DataValue FromDataString(string value, Encoding encoding)
        {
            DataValue ret       = null;
            bool      doConvert = true;

            // If already basic, don't convert the entire frame
            if (IsDataString)
            {
                StringDataValue dv = SelectSingleNode("/Data") as StringDataValue;

                if (dv != null)
                {
                    dv.Value = value;
                    // Only set encoding if different
                    if (encoding != null)
                    {
                        dv.StringEncoding = encoding;
                    }
                    ret       = dv;
                    doConvert = false;
                }
            }

            // Not basic or we failed
            if (doConvert)
            {
                DataKey root = new DataKey("Root");
                root.Class        = new Guid(DataNodeClasses.STRING_NODE_CLASS);
                root.FormatString = "$Data";

                root.SetLinks(this, null);
                ret = root.AddValue("Data", value, encoding ?? BinaryEncoding.Instance);

                Root = root;
            }

            OnModified();

            return(ret);
        }
コード例 #5
0
ファイル: basicarrayparser.cs プロジェクト: michyer/canape
    // Called to parse the array into a data key
    public void FromArray(byte[] data, DataKey root, Logger logger)
    {
        logger.LogInfo("Received array of length {0}", data.Length);

        root.AddValue("data", data.Reverse().ToArray());
    }
コード例 #6
0
ファイル: FullHttpProxyServer.cs プロジェクト: michyer/canape
            public override DataFrame Read()
            {
                try
                {
                    if(_request == null)
                    {
                        _request = HttpParser.ReadRequestHeader(new DataReader(_stm), false, _logger);

                        lock (_requestQueue)
                        {
                            _requestQueue.Enqueue(_request);
                        }

                        ProcessProxyRequestHeaders(_request);
                    }

                    if (_chunks == null)
                    {
                        _chunks = _request.ReadChunks(_config).GetEnumerator();

                        // If we can't move to the first chunk (headers) there is a serious issue
                        if (!_chunks.MoveNext())
                        {
                            throw new EndOfStreamException();
                        }
                    }

                    HttpRequestDataChunk chunk = _chunks.Current;

                    if (!_chunks.MoveNext())
                    {
                        _request = null;
                        _chunks = null;
                    }

                    DataKey root = new DataKey("Root");
                    root.AddValue(new DynamicDataValue(DATA_NAME, chunk));
                    return new DataFrame(root);
                }
                catch (EndOfStreamException)
                {
                    return null;
                }
            }
コード例 #7
0
ファイル: FullHttpProxyServer.cs プロジェクト: michyer/canape
 private DataFrame CreateFrame(HttpDataChunk response)
 {
     DataKey root = new DataKey("Root");
     root.AddValue(new DynamicDataValue(DATA_NAME, response));
     return new DataFrame(root);
 }