本文整理汇总了C++中HttpMessage::getBody方法的典型用法代码示例。如果您正苦于以下问题:C++ HttpMessage::getBody方法的具体用法?C++ HttpMessage::getBody怎么用?C++ HttpMessage::getBody使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HttpMessage
的用法示例。
在下文中一共展示了HttpMessage::getBody方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: testSdp
void testSdp()
{
const char* sip = "INVITE 14 SIP/2.0\nContent-Type:application/sdp\n\n"
"v=0\nm=audio 49170 RTP/AVP 0\nc=IN IP4 224.2.17.12/127";
HttpMessage *msg = new HttpMessage(sip);
SdpBody *sdp = (SdpBody *)msg->getBody();
CPPUNIT_ASSERT_MESSAGE("Null sdp buffer", sdp != NULL);
int mediaCount = sdp->getMediaSetCount();
CPPUNIT_ASSERT_EQUAL_MESSAGE("incorrect media count", 1, mediaCount);
const char* referenceSdp =
"v=0\r\nm=audio 49170 RTP/AVP 0\r\nc=IN IP4 224.2.17.12/127\r\n";
const char* sdpBytes = NULL;
ssize_t sdpByteLength = 0;
sdp->getBytes(&sdpBytes, &sdpByteLength);
for(ssize_t iii = 0; iii < sdpByteLength; iii++)
{
if(referenceSdp[iii] != sdpBytes[iii])
{
printf("index[%zd]: expected: %d got: %d\n",
iii, referenceSdp[iii], sdpBytes[iii]);
}
}
CPPUNIT_ASSERT_MESSAGE("Null sdp serialized content", sdpBytes != NULL);
CPPUNIT_ASSERT_MESSAGE("SDP does not match expected content",
strcmp(referenceSdp, sdpBytes) == 0);
HttpMessage* msgCopy = new HttpMessage(*msg);
CPPUNIT_ASSERT_MESSAGE("NULL message copy", msgCopy != NULL);
SdpBody *sdpCopy = (SdpBody *)msgCopy->getBody();
CPPUNIT_ASSERT_MESSAGE("NULL SDP copy", sdpCopy != NULL);
const char* sdpCopyBytes = NULL;
ssize_t sdpCopyLen = 0;
sdpCopy->getBytes(&sdpCopyBytes, &sdpCopyLen);
//printf("SDP copy length: %d\n%s\n", sdpCopyLen, sdpCopyBytes);
CPPUNIT_ASSERT_MESSAGE("Null sdp copy serialized content", sdpCopyBytes != NULL);
CPPUNIT_ASSERT_MESSAGE("SDP does not match expected content",
strcmp(referenceSdp, sdpCopyBytes) == 0);
}
示例2: run
int ACDAudio::run(void* pArg)
{
Os::Logger::instance().log(FAC_ACD, gACD_DEBUG, "ACDAudio::run - starting get from: %s", mUriString.data());
HttpMessage *pGetRequest = new HttpMessage;
pGetRequest->get(mUri, HTTP_GET_TIMEOUT);
UtlString status;
pGetRequest->getResponseStatusText(&status);
if (status == "OK") {
UtlString audioData;
ssize_t audioLength;
const HttpBody* pResponseBody = pGetRequest->getBody();
pResponseBody->getBytes(&audioData, &audioLength);
Os::Logger::instance().log(FAC_ACD, gACD_DEBUG, "ACDAudio::run - received %zd bytes from: %s\n",
audioLength, mUriString.data());
// Now save the downloaded audio to a local file
size_t writeLength;
OsFile audioFile(mAudioPath);
if (audioFile.open(OsFile::CREATE) != OS_SUCCESS) {
Os::Logger::instance().log(FAC_ACD, PRI_ERR, "ACDAudio::run - "
"Unable to create audio file: %s", mAudioPath.data());
}
else {
audioFile.write(audioData, audioLength, writeLength);
audioFile.close();
}
}
else {
Os::Logger::instance().log(FAC_ACD, PRI_ERR, "ACDAudio::run - failed get from: %s", mUriString.data());
}
delete pGetRequest;
return 0;
}
示例3: strstr
void
SipRedirectorMPT::processForm(const HttpRequestContext& requestContext,
const HttpMessage& request,
HttpMessage*& response)
{
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm entered", mLogName.data());
UtlString* user;
// Process the request.
// Get the body of the request.
const HttpBody* request_body = request.getBody();
// Get the value from the form.
// This is quite a chore, because getMultipartBytes gets the entire
// multipart section, including the trailing delimiter, rather than just
// the body, which is what we need.
const char* value;
int length;
request_body->getMultipartBytes(0, &value, &length);
#if 0
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm A *** seeing '%.*s'", mLogName.data(), length, value);
#endif
// Advance 'value' over the first \r\n\r\n, which ends the headers.
const char* s = strstr(value, "\r\n\r\n");
if (s)
{
s += 4; // Allow for length of \r\n\r\n.
length -= s - value;
value = s;
}
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm B *** seeing '%.*s'", mLogName.data(), length, value);
#if 0
// Search backward for the last \r, excepting the one in the second-to-last
// position, which marks the end of the contents.
if (length >= 3)
{
for (s = value + length - 3;
!(s == value || *s == '\r');
s--)
{
/* empty */
}
length = s - value;
}
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm seeing '%.*s'", mLogName.data(), length, value);
#endif
// Add the mappings.
const char* error_msg;
int error_location;
UtlBoolean success =
MPTredirector->addMappings(value, length, user, error_msg,
error_location);
// Construct the response.
response = new HttpMessage();
// Send 200 OK reply.
response->setResponseFirstHeaderLine(HTTP_PROTOCOL_VERSION,
HTTP_OK_CODE,
HTTP_OK_TEXT);
// Construct the HTML.
char buffer1[100];
#if 0
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm *** domain '%s'", mLogName.data(),
MPTredirector->mDomainName.data());
#endif
if (success)
{
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm success user '%s'", mLogName.data(),
user->data());
sprintf(buffer1, "<code>sip:<font size=\"+1\">%s</font>@%s:65070</code> redirects to:<br />",
user->data(), MPTredirector->mDomainName.data());
}
else
{
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm failure error_msg '%s', error_location %d", mLogName.data(),
error_msg, error_location);
strcpy(buffer1, "<i>Error:</i>");
}
// Transcribe the input value into buffer2.
char buffer2[FORM_SIZE];
char* p;
int i;
if (success)
{
// An impossible location.
error_location = -1;
}
for (p = buffer2, i = 0;
;
//.........这里部分代码省略.........
示例4: execute
bool XmlRpcRequest::execute(XmlRpcResponse& response)
{
bool result = false;
// End of constructing the XML-RPC body
mpRequestBody->append(END_PARAMS END_METHOD_CALL);
if (OsSysLog::willLog(FAC_XMLRPC, PRI_INFO))
{
UtlString logString;
ssize_t logLength;
mpRequestBody->getBytes(&logString, &logLength);
if (logString.length() > XmlRpcBody::MAX_LOG)
{
logString.remove(XmlRpcBody::MAX_LOG);
logString.append("\n...");
}
UtlString urlString;
mUrl.toString(urlString);
OsSysLog::add(FAC_XMLRPC, PRI_INFO,
"XmlRpcRequest::execute XML-RPC to '%s' request =\n%s",
urlString.data(),
logString.data());
}
mpHttpRequest->setContentLength(mpRequestBody->getLength());
mpHttpRequest->setBody(mpRequestBody);
mpRequestBody = NULL; // the HttpMessage now owns the request body
// Create an empty response object and sent the built up request
// to the XML-RPC server
HttpMessage httpResponse;
int statusCode = httpResponse.get(mUrl,*mpHttpRequest,XML_RPC_TIMEOUT,true /* persist conn */ );
if (statusCode/100 == 2)
{
UtlString bodyString;
ssize_t bodyLength;
httpResponse.getBody()->getBytes(&bodyString, &bodyLength);
UtlString logString;
if (bodyString.length() > XmlRpcBody::MAX_LOG)
{
logString.append(bodyString, 0, XmlRpcBody::MAX_LOG);
logString.append("\n...");
}
else
{
logString = bodyString;
}
if (response.parseXmlRpcResponse(bodyString))
{
result = true;
OsSysLog::add(FAC_XMLRPC, PRI_INFO,
"XmlRpcRequest::execute XML-RPC received valid response = \n%s",
logString.data());
}
else
{
OsSysLog::add(FAC_XMLRPC, PRI_ERR,
"XmlRpcRequest::execute XML-RPC received fault response = \n%s",
logString.data());
}
}
else if (statusCode == -1)
{
response.setFault(XmlRpcResponse::ConnectionFailure, CONNECTION_FAILURE_FAULT_STRING);
OsSysLog::add(FAC_XMLRPC, PRI_ERR,
"XmlRpcRequest::execute http connection failed");
}
else // some non-2xx HTTP response
{
UtlString statusText;
httpResponse.getResponseStatusText(&statusText);
response.setFault(XmlRpcResponse::HttpFailure, statusText.data());
OsSysLog::add(FAC_XMLRPC, PRI_INFO,
"XmlRpcRequest::execute http request failed; status = %d %s",
statusCode, statusText.data());
}
return result;
}
示例5: string_get
void
SipRedirectorGateway::processForm(const HttpRequestContext& requestContext,
const HttpMessage& request,
HttpMessage*& response)
{
UtlString string_get("get");
UtlString string_set("set");
UtlString string_prefix("prefix");
UtlString string_destination("destination");
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm entered", mLogName.data());
UtlString* user;
// Process the request.
// Get the body of the request.
const HttpBody* request_body = request.getBody();
OsSysLog::add(FAC_SIP, PRI_DEBUG,
"%s::processForm A *** request body is '%s'",
mLogName.data(), request_body->getBytes());
// Get the values from the form.
if (request_body->isMultipart())
{
// Extract the values from the form data.
UtlHashMap values;
int c = request_body->getMultipartCount();
for (int i = 0; i < c; i++)
{
UtlString* name = new UtlString;
if (request_body->getMultipart(i)->getPartHeaderValue("name", *name))
{
const char* v;
int l;
request_body->getMultipartBytes(i, &v, &l);
// Strip leading and trailing whitespace from values.
UtlString* value = new UtlString(v, l);
value->strip(UtlString::both);
OsSysLog::add(FAC_SIP, PRI_CRIT,
"%s::processForm "
"form value '%s' = '%s'",
mLogName.data(), name->data(), value->data());
// 'name' and 'value' are now owned by 'values'.
values.insertKeyAndValue(name, value);
}
else
{
// 'name' is not owned by 'values' and we have to delete it.
delete name;
}
}
if (values.findValue(&string_get))
{
// This is a "get gateway" request.
// Insert the HTML into the response.
HttpBody* response_body = new HttpBody(form, -1, CONTENT_TYPE_TEXT_HTML);
response->setBody(response_body);
}
else if (values.findValue(&string_set))
{
// This is a "set gateway" request.
// Validate the routing prefix.
UtlString* prefix =
dynamic_cast <UtlString*> (values.findValue(&string_prefix));
if (prefixIsValid(*prefix))
{
// Validate the destination.
UtlString* destination =
dynamic_cast <UtlString*>
(values.findValue(&string_destination));
if (destination_is_valid(destination))
{
OsSysLog::add(FAC_SIP, PRI_CRIT,
"%s::processForm "
"add mapping '%s' -> '%s'",
mLogName.data(), prefix->data(), destination->data());
mMapLock.acquire();
// Insert the mapping.
mMapUserToContacts.insertKeyAndValue(prefix, destination);
mMapContactsToUser.insertKeyAndValue(destination, prefix);
mMapLock.release();
writeMappings();
}
}
// Insert the HTML into the response.
HttpBody* response_body = new HttpBody(form, -1, CONTENT_TYPE_TEXT_HTML);
response->setBody(response_body);
}
else
{
// Incomprehensible request.
// Insert the HTML into the response.
//.........这里部分代码省略.........
示例6: processRequest
void HttpServer::processRequest(const HttpMessage& request,
HttpMessage*& response,
OsConnectionSocket* connection
)
{
UtlString method;
response = NULL;
if(true) // used to be authorization check, but I don't want to change all indenting
{
request.getRequestMethod(&method);
method.toUpper();
UtlString uri;
request.getRequestUri(&uri);
UtlString uriFileName(uri);
ssize_t fileNameEnd = -1;
if(method.compareTo(HTTP_GET_METHOD) == 0)
{
fileNameEnd = uriFileName.first('?');
if(fileNameEnd > 0)
{
uriFileName.remove(fileNameEnd);
}
}
UtlString mappedUriFileName;
if (uriFileName.contains(".."))
{
OsSysLog::add(FAC_SIP, PRI_ERR, "HttpServer::processRequest "
"Disallowing URI: '%s' because it contains '..'",
uriFileName.data());
// Disallow relative path names going up for security reasons
mappedUriFileName.append("/");
}
else
{
OsSysLog::add(FAC_SIP, PRI_INFO, "HttpServer::processRequest "
"%s '%s'", method.data(), uriFileName.data());
// Map the file name
mapUri(mUriMaps, uriFileName.data(), mappedUriFileName);
}
// Build the request context
HttpRequestContext requestContext(method.data(),
uri.data(),
mappedUriFileName.data(),
NULL,
NULL, // was userid
connection
);
if(requestContext.methodIs(HTTP_POST_METHOD))
{
//Need to get the CGI/form variables from the body.
const HttpBody* body = request.getBody();
if(body && !body->isMultipart())
{
requestContext.extractPostCgiVariables(*body);
}
}
RequestProcessor* requestProcessorPtr = NULL;
HttpService* pService = NULL;
if( ( requestContext.methodIs(HTTP_GET_METHOD)
|| requestContext.methodIs(HTTP_POST_METHOD)
)
&& findRequestProcessor(uriFileName.data(), requestProcessorPtr))
{
// There is a request processor for this URI
requestProcessorPtr(requestContext, request, response);
}
else if ( ( requestContext.methodIs(HTTP_GET_METHOD)
|| requestContext.methodIs(HTTP_POST_METHOD)
|| requestContext.methodIs(HTTP_PUT_METHOD)
|| requestContext.methodIs(HTTP_DELETE_METHOD)
)
&& findHttpService(uriFileName.data(), pService))
{
pService->processRequest(requestContext, request, response);
}
else
{
processNotSupportedRequest(requestContext, request, response);
}
}
}
示例7: testMessage
/**
* Test header, message, body, message contructor
*/
void testMessage()
{
// TODO break this up into several tests. Too intertwined
const char* name = "Content-Type";
const char* value = "text/plain";
const char* httpTopLine = "GET /index.html HTTP/1.0";
const char* valueRef = NULL;
const char* n2 = "yyy";
const char* v2 = "yyy-value";
const char* v2a = "yyy-value2";
UtlString messageBytes;
UtlString messageBytes2;
ssize_t messageLen = 0;
ssize_t messageLen2 = 0;
const char* body = "<HTML>\n<H3>Hello\n<BR>\n</HTML>\n";
const HttpBody *bodyRef;
ssize_t bodyLength = 0;
UtlString headerLinePart;
HttpMessage *msg;
HttpMessage *msg2;
msg = new HttpMessage();
// H E A D E R
int fieldCount = msg->getCountHeaderFields();
CPPUNIT_ASSERT_EQUAL_MESSAGE("field count should be zero",
0, fieldCount);
msg->addHeaderField(name, value);
fieldCount = msg->getCountHeaderFields();
CPPUNIT_ASSERT_EQUAL_MESSAGE("field count should be zero", 1,
fieldCount);
valueRef = msg->getHeaderValue(0);
CPPUNIT_ASSERT_MESSAGE("NULL field value", valueRef != NULL);
ASSERT_STR_EQUAL_MESSAGE("incorrect field value", value,
valueRef);
msg->setFirstHeaderLine(httpTopLine);
valueRef = msg->getFirstHeaderLine();
ASSERT_STR_EQUAL_MESSAGE("incorrect top header line value",
valueRef, httpTopLine);
valueRef = msg->getHeaderValue(0, name);
CPPUNIT_ASSERT_MESSAGE("NULL field value", valueRef != NULL);
ASSERT_STR_EQUAL_MESSAGE("incorrect field value", value,
valueRef);
msg->addHeaderField(n2, v2);
fieldCount = msg->getCountHeaderFields();
CPPUNIT_ASSERT_EQUAL_MESSAGE("field count should be 2", 2,
fieldCount);
valueRef = msg->getHeaderValue(0, n2);
CPPUNIT_ASSERT_MESSAGE("NULL field value", valueRef != NULL);
ASSERT_STR_EQUAL_MESSAGE("incorrect field value", v2,
valueRef);
msg->addHeaderField(n2, v2a);
fieldCount = msg->getCountHeaderFields();
CPPUNIT_ASSERT_EQUAL_MESSAGE("field count should be 3", 3,
fieldCount);
valueRef = msg->getHeaderValue(1, n2);
CPPUNIT_ASSERT_MESSAGE("NULL field value", valueRef != NULL);
ASSERT_STR_EQUAL_MESSAGE("incorrect field value", v2a,
valueRef);
// B O D Y
HttpBody *httpBody = new HttpBody(body, strlen(body));
msg->setBody(httpBody);
bodyRef = msg->getBody();
CPPUNIT_ASSERT_MESSAGE("bad body pointer", httpBody == bodyRef);
bodyRef->getBytes(&valueRef, &bodyLength);
CPPUNIT_ASSERT_MESSAGE("bad body pointer", valueRef != NULL);
CPPUNIT_ASSERT_EQUAL_MESSAGE("incorrect body len", (ssize_t)strlen(body),
bodyLength);
ASSERT_STR_EQUAL_MESSAGE("incorrect body value", body, valueRef);
const char* expectedLinePart[] = {
"GET", "/index.html", "HTTP/1.0"
};
size_t n = sizeof(expectedLinePart) / sizeof(expectedLinePart[0]);
for (size_t i = 0; i < n; i++)
{
msg->getFirstHeaderLinePart(i, &headerLinePart);
CPPUNIT_ASSERT_MESSAGE("NULL header line part pointer",
!headerLinePart.isNull());
ASSERT_STR_EQUAL_MESSAGE("incorrect hdr line", expectedLinePart[i],
headerLinePart.data());
headerLinePart.remove(0);
}
msg->getBytes(&messageBytes, &messageLen);
CPPUNIT_ASSERT_MESSAGE("NULL body pointer", !messageBytes.isNull());
//.........这里部分代码省略.........
示例8: processRequest
void XmlRpcDispatch::processRequest(const HttpRequestContext& requestContext,
const HttpMessage& request,
HttpMessage*& response )
{
# ifdef TEST_HTTP
ssize_t len;
UtlString httpString;
request.getBytes(&httpString , &len);
OsSysLog::add(FAC_XMLRPC, PRI_DEBUG,
"XmlRpcDispatch::processRequest HttpEvent = \n%s",
httpString.data());
# endif
// Create a response
response = new HttpMessage();
response->setResponseFirstHeaderLine(HTTP_PROTOCOL_VERSION_1_1,
HTTP_OK_CODE,
HTTP_OK_TEXT);
UtlString bodyString;
ssize_t bodyLength;
const HttpBody* requestBody = request.getBody();
requestBody->getBytes(&bodyString, &bodyLength);
XmlRpcMethod::ExecutionStatus status;
UtlString methodName("<unparsed>");
XmlRpcResponse responseBody;
XmlRpcMethodContainer* methodContainer = NULL;
UtlSList params;
UtlString logString;
if (bodyString.length() > XmlRpcBody::MAX_LOG)
{
logString.append(bodyString, 0, XmlRpcBody::MAX_LOG);
logString.append("\n...");
}
else
{
logString = bodyString;
}
OsSysLog::add(FAC_XMLRPC, PRI_INFO,
"XmlRpcDispatch::processRequest requestBody = \n%s",
logString.data());
if (parseXmlRpcRequest(bodyString, methodContainer, params, responseBody))
{
if (methodContainer)
{
methodContainer->getName(methodName);
responseBody.setMethod(methodName);
XmlRpcMethod::Get* methodGet;
void* userData;
methodContainer->getData(methodGet, userData);
XmlRpcMethod* method = methodGet();
OsSysLog::add(FAC_XMLRPC, PRI_DEBUG,
"XmlRpcDispatch::processRequest calling method '%s'",
methodName.data()
);
method->execute(requestContext,
params,
userData,
responseBody,
status
);
// Delete the instance of the method
delete method;
// Clean up the memory allocated in params
XmlRpcBody::deallocateContainedValues(¶ms);
// if the method wants authentication, build the standard response
// for anything else, it's already built one.
if (XmlRpcMethod::REQUIRE_AUTHENTICATION == status)
{
// Create an authentication challenge response
responseBody.setFault(AUTHENTICATION_REQUIRED_FAULT_CODE,
AUTHENTICATION_REQUIRED_FAULT_STRING);
}
}
else
{
// could not find a registered method - logged and response built in parseXmlRpcRequest
status = XmlRpcMethod::FAILED;
}
}
else
{
// Parsing the request failed - it will have logged a specific error a
// and created an appropriate response body
status = XmlRpcMethod::FAILED;
}
// Send the response back
responseBody.getBody()->getBytes(&bodyString, &bodyLength);
logString.remove(0);
if (bodyString.length() > XmlRpcBody::MAX_LOG)
//.........这里部分代码省略.........