Example #1
0
        public void receiveResponse(std::istream stream, HttpResponse response)
        {
            string httpVersion;

            readWord(stream, httpVersion);

            string status;
            char   c;

            stream.get(c);
            while (stream.good() && c != '\r')
            { //Till the end
                status += c;
                stream.get(c);
            }

            GlobalMembers.throwIfNotGood(stream);

            if (c == '\r')
            {
                stream.get(c);
                if (c != '\n')
                {
                    throw new System.Exception("Parser error: '\\n' symbol is expected");
                }
            }

            response.setStatus(parseResponseStatusFromString(status));

            string name;
            string value;

            while (readHeader(stream, name, value))
            {
                response.addHeader(name, value);
                name  = "";
                value = "";
            }

            response.addHeader(name, value);
            var  headers = response.getHeaders();
            uint length  = 0;
            var  it      = headers.find("content-length");

//C++ TO C# CONVERTER TODO TASK: Iterators are only converted within the context of 'while' and 'for' loops:
            if (it != headers.end())
            {
//C++ TO C# CONVERTER TODO TASK: Iterators are only converted within the context of 'while' and 'for' loops:
                length = Convert.ToUInt32(it.second);
            }

            string body;

            if (length != null)
            {
                readBody(stream, body, new uint(length));
            }

            response.setBody(body);
        }
Example #2
0
        public override void load(std::istream @is)
        {
            m_sync.load(@is);

            StdInputStream inputStream = new StdInputStream(@is);

            CryptoNote.BinaryInputStreamSerializer s = new CryptoNote.BinaryInputStreamSerializer(inputStream);
            uint version = 0;

            s.functorMethod(version, "version");

            if (version > GlobalMembers.TRANSFERS_STORAGE_ARCHIVE_VERSION)
            {
                throw new System.Exception("TransfersSyncronizer version mismatch");
            }


//C++ TO C# CONVERTER TODO TASK: C# does not allow declaring types within methods:
//	struct ConsumerState
//	{
//	  PublicKey viewKey;
//	  string state;
//	  ClassicVector<System.Tuple<AccountPublicAddress, string>> subscriptionStates;
//	};

            List <ConsumerState> updatedStates = new List <ConsumerState>();

            try
            {
                ulong subscriptionCount = 0;
                s.beginArray(ref subscriptionCount, "consumers");

                while (subscriptionCount-- != 0)
                {
                    s.beginObject("");
                    PublicKey viewKey = new PublicKey();
                    s.functorMethod(viewKey, "view_key");

                    string blob;
                    s.functorMethod(blob, "state");

                    var subIter = m_consumers.find(viewKey);
//C++ TO C# CONVERTER TODO TASK: Iterators are only converted within the context of 'while' and 'for' loops:
                    if (subIter != m_consumers.end())
                    {
//C++ TO C# CONVERTER TODO TASK: Iterators are only converted within the context of 'while' and 'for' loops:
                        var consumerState = m_sync.getConsumerState(subIter.second.get());
                        Debug.Assert(consumerState);

                        {
                            // store previous state
                            var prevConsumerState = GlobalMembers.getObjectState(*consumerState);
                            // load consumer state
                            GlobalMembers.setObjectState(*consumerState, blob);
                            updatedStates.Add(ConsumerState({ viewKey, std::move(prevConsumerState) }));
                        }
Example #3
0
        private void readBody(std::istream stream, string body, uint bodyLen)
        {
            uint read = 0;

            while (stream.good() && read < bodyLen)
            {
                body += stream.get();
                ++read;
            }

            GlobalMembers.throwIfNotGood(stream);
        }
Example #4
0
        private void readHeaders(std::istream stream, SortedDictionary <string, string> headers)
        {
            string name;
            string value;

            while (readHeader(stream, name, value))
            {
                headers[name] = value; //use insert
                name          = "";
                value         = "";
            }

            headers[name] = value; //use insert
        }
Example #5
0
        public void receiveRequest(std::istream stream, HttpRequest request)
        {
            readWord(stream, request.method);
            readWord(stream, request.url);

            string httpVersion;

            readWord(stream, httpVersion);

            readHeaders(stream, request.headers);

            string body;
            uint   bodyLen = getBodyLen(request.headers);

            if (bodyLen != null)
            {
                readBody(stream, request.body, new uint(bodyLen));
            }
        }
Example #6
0
        private void readWord(std::istream stream, string word)
        {
            char c;

            stream.get(c);
            while (stream.good() && c != ' ' && c != '\r')
            {
                word += c;
                stream.get(c);
            }

            GlobalMembers.throwIfNotGood(stream);

            if (c == '\r')
            {
                stream.get(c);
                if (c != '\n')
                {
                    throw std::system_error(GlobalMembers.make_error_code(CryptoNote.error.HttpParserErrorCodes.UNEXPECTED_SYMBOL));
                }
            }
        }
Example #7
0
        private bool readHeader(std::istream stream, string name, string value)
        {
            char c;
            bool isName = true;

            stream.get(c);
            while (stream.good() && c != '\r')
            {
                if (c == ':')
                {
                    if (stream.peek() == ' ')
                    {
                        stream.get(c);
                    }

                    if (string.IsNullOrEmpty(name))
                    {
                        throw std::system_error(GlobalMembers.make_error_code(CryptoNote.error.HttpParserErrorCodes.EMPTY_HEADER));
                    }

                    if (isName)
                    {
                        isName = false;
                        stream.get(c);
                        continue;
                    }
                }

                if (isName)
                {
                    name += c;
                    stream.get(c);
                }
                else
                {
                    value += c;
                    stream.get(c);
                }
            }

            GlobalMembers.throwIfNotGood(stream);

            stream.get(c);
            if (c != '\n')
            {
                throw std::system_error(GlobalMembers.make_error_code(CryptoNote.error.HttpParserErrorCodes.UNEXPECTED_SYMBOL));
            }

            std::transform(name.GetEnumerator(), name.end(), name.GetEnumerator(), global::tolower);

            c = stream.peek();
            if (c == '\r')
            {
                stream.get(c).get(c);
                if (c != '\n')
                {
                    throw std::system_error(GlobalMembers.make_error_code(CryptoNote.error.HttpParserErrorCodes.UNEXPECTED_SYMBOL));
                }

                return(false); //no more headers
            }

            return(true);
        }
Example #8
0
 public JsonInputStreamSerializer(std::istream stream) : base.functorMethod(getJsonValueFromStreamHelper(stream))