SIP协议基础解析

#include <iostream>
#include <string>
#include <vector>

class SIPParser {
public:
    SIPParser(const std::string& message) : m_message(message) {}

    std::string GetMethod() const {
        std::size_t start = m_message.find_first_not_of(' ');
        std::size_t end = m_message.find(' ', start);

        return m_message.substr(start, end - start);
    }

    std::string GetHeaderValue(const std::string& headerName) const {
        std::size_t start = m_message.find(headerName);
        if (start == std::string::npos) {
            return "";
        }

        start = m_message.find(':', start) + 1;
        std::size_t end = m_message.find("\r", start);

            return m_message.substr(start, end - start);
    }

    std::vector<std::string> GetHeaderValues(const std::string& headerName) const {
        std::vector<std::string> values;
        std::size_t start = m_message.find(headerName);
        if (start == std::string::npos) {
            return values;
        }

        while (true) {
            start = m_message.find(':', start) + 1;
            std::size_t end = m_message.find("\r", start);
            values.push_back(m_message.substr(start, end - start));

            start = m_message.find(headerName, end);
            if (start == std::string::npos) {
                break;
            }
        }

        return values;
    }

private:
    std::string m_message;
};

int main() {
    std::string message = "INVITE sip:[email protected] SIP/2.0\r\n"
        "Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bKnashds8\r\n"
        "Max-Forwards: 70\r\n"
        "From: Alice <sip:[email protected]>;tag=1928301774\r\n"
        "To: Bob <sip:[email protected]>\r\n"
        "Call-ID: a84b4c76e66710\r\n"
        "CSeq: 314159 INVITE\r\n"
        "Contact: <sip:[email protected]>\r\n"
        "\r\n"
        "This is the body of the message.";

    SIPParser parser(message);

    std::cout << "Method: " << parser.GetMethod() << std::endl;
    std::cout << "Via: " << parser.GetHeaderValue("Via") << std::endl;
    std::cout << "Max-Forwards: " << parser.GetHeaderValue("Max-Forwards") << std::endl;
    std::cout << "From: " << parser.GetHeaderValue("From") << std::endl;
    std::cout << "To: " << parser.GetHeaderValue("To") << std::endl;
    std::cout << "Call-ID: " << parser.GetHeaderValue("Call-ID") << std::endl;
    std::cout << "CSeq: " << parser.GetHeaderValue("CSeq") << std::endl;
    std::cout << "Contact: " << parser.GetHeaderValue("Contact") << std::endl;

    std::vector<std::string> viaValues = parser.GetHeaderValues("Via");
    std::cout << "Via Values: ";
    for (const std::string& value : viaValues) {
        std::cout << value << ", ";
    }
    std::cout << std::endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40179458/article/details/133028745
今日推荐