当前位置: 首页>>代码示例>>C++>>正文


C++ WebRequest::getProtocol方法代码示例

本文整理汇总了C++中WebRequest::getProtocol方法的典型用法代码示例。如果您正苦于以下问题:C++ WebRequest::getProtocol方法的具体用法?C++ WebRequest::getProtocol怎么用?C++ WebRequest::getProtocol使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WebRequest的用法示例。


在下文中一共展示了WebRequest::getProtocol方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: _connectionLoop

void WebConnection::_connectionLoop() {
    
    uint32_t buffersize = 0;
    unsigned char* buffer = NULL;
    uint32_t readpos = 0;
    
    for (;;) {
        
        if (READ_SIZE + readpos > buffersize) {
            buffersize += READ_SIZE;
            buffer = (unsigned char*)realloc(buffer, buffersize);
        }
        
        int32_t read = _socket->Receive(&buffer[readpos], READ_SIZE);
        
        if (read <= 0)
            break;
        
        readpos += read;
        
        unsigned char* contentStart;
        unsigned char* headerStart = buffer;
        if ((contentStart = (unsigned char*)memmem(buffer, readpos, "\r\n\r\n", 4)) != NULL) { // Find request end
            contentStart += 4;
            
            uint32_t headerLength = _convertNewLines(buffer, contentStart - headerStart);
            
            log_data(LOG_INFO, (char*)buffer, headerLength - 1);
            
            char* cmd = (char*) headerStart;
            char* path = NULL;
            char* protocol = NULL;
            while (headerStart[0] != '\n') {
                if (headerStart[0] == ' ') {
                    if (path == NULL)
                        path = (char*)&headerStart[1];
                    else if (protocol == NULL)
                        protocol = (char*)&headerStart[1];
                    headerStart[0] = '\0';
                }
                headerStart++;
                headerLength--;
            }
            
            headerStart[0] = '\0';
            
            headerStart++;
            headerLength--;
            
            WebRequest* request = new WebRequest(cmd, path, protocol);
            request->getHeaders()->_parseHeaders((char*)headerStart, contentStart - headerStart);
            
            const char* contentLengthStr;
            unsigned char* content = NULL;
            uint32_t contentLength = 0;
            if ((contentLengthStr = request->getHeaders()->valueForName("Content-Length")) != NULL && (contentLength = atoi(contentLengthStr)) > 0) {
                
                content = (unsigned char*) malloc(contentLength);
                uint32_t contentReadPos = readpos - (contentStart - buffer);
                memcpy(content, contentStart, contentReadPos);
                
                while (contentReadPos < contentLength) {
                    
                    int32_t contentRead = _socket->Receive(&content[contentReadPos], contentLength - contentReadPos);
                    
                    if (contentRead < 0) {
                        log(LOG_ERROR, "Connection read error");
                        break;
                    }
                    
                    contentReadPos += contentRead;
                    
                }
                
                log(LOG_INFO, "(Content of length: %d bytes)\n", contentLength);
                
            }
            
            assert(_processRequestCallback != NULL);
            
            if (contentLength > 0 && content != NULL)
                request->_setContent(content, contentLength);
                
            _processRequestCallback(this, request, _callbackCtx);
            
            assert(request->_response->_statusCode < 1000);
            
            if (request->_response->_statusCode == 404 && request->_response->_headers->_headerCount == 0)
                request->_response->_headers->addValue("Content-Length", "0");
            
            if (request->_response->_contentLength > 0)
                request->_response->_headers->addValue("Content-Length", "%d", request->_response->_contentLength);
            
            uint32_t protocolLen = strlen(request->getProtocol());
            uint32_t statusCodeLen = 3;
            uint32_t statusMessageLen = strlen(request->_response->_statusMessage);
            
            uint32_t statusLineLen = protocolLen + 1 + statusCodeLen + 1 + statusMessageLen + 2;
            
            uint32_t headersLen = request->_response->_headers->getTotalLength();
//.........这里部分代码省略.........
开发者ID:appliko,项目名称:AirFloat,代码行数:101,代码来源:WebConnection.cpp


注:本文中的WebRequest::getProtocol方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。