1bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber/* 2bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * Copyright 2012, The Android Open Source Project 3bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * 4bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * you may not use this file except in compliance with the License. 6bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * You may obtain a copy of the License at 7bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * 8bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * 10bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * Unless required by applicable law or agreed to in writing, software 11bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * See the License for the specific language governing permissions and 14bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber * limitations under the License. 15bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber */ 16bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 17bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber#include <media/stagefright/foundation/ABase.h> 18bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber#include <media/stagefright/foundation/AString.h> 19bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber#include <utils/KeyedVector.h> 20bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber#include <utils/RefBase.h> 21bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 22bb197f84c4119651e5face418285688ddaf08ea3Andreas Hubernamespace android { 23bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 24d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// Encapsulates an "HTTP/RTSP style" response, i.e. a status line, 25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// key/value pairs making up the headers and an optional body/content. 26bb197f84c4119651e5face418285688ddaf08ea3Andreas Huberstruct ParsedMessage : public RefBase { 27bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber static sp<ParsedMessage> Parse( 28bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber const char *data, size_t size, bool noMoreData, size_t *length); 29bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 30bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber bool findString(const char *name, AString *value) const; 31bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber bool findInt32(const char *name, int32_t *value) const; 32bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 33bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber const char *getContent() const; 34bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 35bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber void getRequestField(size_t index, AString *field) const; 36bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber bool getStatusCode(int32_t *statusCode) const; 37bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 38bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber AString debugString() const; 39bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 40bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber static bool GetAttribute(const char *s, const char *key, AString *value); 41bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 42bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber static bool GetInt32Attribute( 43bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber const char *s, const char *key, int32_t *value); 44bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 45bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 46bb197f84c4119651e5face418285688ddaf08ea3Andreas Huberprotected: 47bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber virtual ~ParsedMessage(); 48bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 49bb197f84c4119651e5face418285688ddaf08ea3Andreas Huberprivate: 50bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber KeyedVector<AString, AString> mDict; 51bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber AString mContent; 52bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 53bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber ParsedMessage(); 54bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 55bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber ssize_t parse(const char *data, size_t size, bool noMoreData); 56bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 57bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ParsedMessage); 58bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber}; 59bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber 60bb197f84c4119651e5face418285688ddaf08ea3Andreas Huber} // namespace android 61