当前位置: 首页 > news >正文

手机网站模板案例网站优化关键词

手机网站模板案例,网站优化关键词,宣传片拍摄多少钱,浙江杭州疫情最新消息本文章借鉴: 尊重原作者创作,我只是学习。基于GBT28181:SIP协议组件开发-----------第五篇SIP注册流程eXosip2实现(二) - 程序人生qq1269122125 - 博客园 (cnblogs.com)https://www.cnblogs.com/qq1269122125/p/3966794.htmlRMG类 .h class…

本文章借鉴:

尊重原作者创作,我只是学习。基于GBT28181:SIP协议组件开发-----------第五篇SIP注册流程eXosip2实现(二) - 程序人生qq1269122125 - 博客园 (cnblogs.com)https://www.cnblogs.com/qq1269122125/p/3966794.htmlRMG类 .h

class RMg
{
public:
    RMg();
    ~RMg();
    //RMg(string m_UAIP,string m_UACODE,string m_UAPORT,string m_NAME,string m_PWD);
    int ServerInit();
    int SendRegister(int& registerId,CSipFromToHeader& from, CSipFromToHeader& request_line, CContracHeader& contact,
        const string& username, const string& pwd, const int expires, int iType);
    static void Register(string m_UAIP, string m_UACODE, string m_UAPORT, string m_NAME, string m_PWD);
    static void RefreshRegister();
    static void UnRegister(string m_UAIP, string m_UACODE, string m_UAPORT, string m_NAME, string m_PWD);
    void parserRegisterInfo(osip_message_t* request, int iReqId, sipRegisterInfo& regInfo);
    void sendRegisterAnswer(sipRegisterInfo& info);
    void OnRegister(eXosip_event_t* osipEvent);
    static void BeginServer();
private:
};

RMG.cpp

RMg::RMg()
{
}

RMg::~RMg()
{
}


int RMg::ServerInit()
{
    
    int result = OSIP_SUCCESS;
    if (OSIP_SUCCESS != (result = eXosip_init()))
    {
        return -1;
    }
    if (OSIP_SUCCESS != eXosip_listen_addr(IPPROTO_UDP, NULL, UACPORTINT, AF_INET, 0))
    {
        eXosip_quit();
        return -1;
    }
    if (OSIP_SUCCESS != eXosip_set_option(EXOSIP_OPT_SET_IPV4_FOR_GATEWAY, LISTEN_ADDR))
    {
        return -1;
    }
    return OSIP_SUCCESS;
}

int RMg::SendRegister(int& registerId,CSipFromToHeader& from, CSipFromToHeader& request_line, CContracHeader& contact,
    const string& username, const string& pwd, const int expires, int iType)
{
    cout << "registerId :" << registerId << endl;
    cout << "request_line :" << request_line.GetFormatHeader() << endl;
    cout << "from :" << from.GetFormatHeader() << endl;
    cout << "contact :" << contact.GetConFormatHeader()<< endl;
    cout << "userName :" << username << endl;
    cout << "pwd :" << pwd << endl;
    cout << "expires :" << expires << endl;
    static osip_message_t* regMsg = 0;
    int ret = 0;
    eXosip_add_authentication_info(username.c_str(), username.c_str(), pwd.c_str(), "MD5", NULL);
    eXosip_lock();
    cout << "in success" << endl;
    if (0 == registerId)
    {
        registerId = eXosip_register_build_initial_register(from.GetFormatHeader().c_str(), request_line.GetFormatHeader().c_str(), contact.
            GetConFormatHeader().c_str(), expires, &regMsg);
        if (registerId <= 0)
        {
            cout << "initial field" << endl;
            return -1;
        }
    }
    else
    {
        ret = eXosip_register_build_register(registerId, expires, &regMsg);
        if (ret != OSIP_SUCCESS)
        {
            cout << "build field" << endl;
            return ret;
        }
        if (expires == 0)
        {
            osip_contact_t* scontact = NULL;
            char tmp[128];

            osip_message_get_contact(regMsg, 0, &scontact);

            osip_list_remove(&regMsg->contacts, 0);
            osip_message_set_contact(regMsg, tmp);
            osip_message_set_header(regMsg, "logout-reason", "logout");
        }
    }
    ret = eXosip_register_send_register(registerId, regMsg);
    if (ret != OSIP_SUCCESS)
    {
        cout << "send field" << endl;
        registerId = 0;
        return -2;
    }
    cout << "send success" << endl;
    eXosip_unlock();
    return ret;
}

void RMg::Register(string m_UAIP, string m_UACODE, string m_UAPORT, string m_NAME, string m_PWD)
{
    RMg test1;
    if (iCurrentStatus == 1)
    {
        return;
    }
    CSipFromToHeader request_line;
    request_line.SetHeader(m_UACODE, m_UAIP, m_UAPORT);
    CSipFromToHeader stfrom;
    stfrom.SetHeader(UACCODE, LISTEN_ADDR, UACPORT);
    CContracHeader stContact;
    stContact.SetContracHeader(UACCODE, LISTEN_ADDR, UACPORT);
    int registerId = 0;
    if (0 > test1.SendRegister(registerId,stfrom, request_line, stContact, m_NAME, m_PWD, 3000, 0))
    {
        cout << "Send field" << endl;
        return;
    }
    cout << "Send success" << endl;
    iCurrentStatus = 1;
    iHandle = registerId;
    eXosip_event_t* osipEventPtr = NULL;
    while (true)
    {
        osipEventPtr = ::eXosip_event_wait(0, 200);
        {
            eXosip_lock();
            //一般处理401/407采用库默认处理
            eXosip_default_action(osipEventPtr);
            eXosip_unlock();
        }
        if (NULL == osipEventPtr)
        {
            continue;
        }
        else
        {
            break;
        }
    }

}

void RMg::RefreshRegister()
{
    RMg test1;
    if (iCurrentStatus == 0)
    {
        return;
    }
    CSipFromToHeader request_line;
    request_line.SetHeader(UASCODE, UAS_ADDR, UAS_PORT);
    CSipFromToHeader stfrom;
    stfrom.SetHeader(UACCODE, UAS_ADDR, UAS_PORT);
    CContracHeader stContact;
    stContact.SetContracHeader(UACCODE, LISTEN_ADDR, UACPORT);
    if (0 > test1.SendRegister(iHandle,stfrom, request_line, stContact, UACCODE, UACPWD, 3000, 1))
    {
        return;
    }
}

void RMg::UnRegister(string m_UAIP, string m_UACODE, string m_UAPORT, string m_NAME, string m_PWD)
{
    RMg test1;
    if (iCurrentStatus == 1)
    {
        return;
    }
    CSipFromToHeader request_line;
    request_line.SetHeader(m_UACODE, m_UAIP, m_UAPORT);
    CSipFromToHeader stfrom;
    stfrom.SetHeader(UACCODE, UAS_ADDR, UAS_PORT);
    CContracHeader stContact;
    stContact.SetContracHeader(UACCODE, LISTEN_ADDR, UACPORT);
    int registerId = 0;
    if (0 > test1.SendRegister(registerId,stfrom, request_line, stContact, m_NAME, m_PWD, 0, 2))
    {
        return;
    }
    iCurrentStatus = 0;
    iHandle = -1;
    eXosip_event_t* osipEventPtr = NULL;
    while (true)
    {
        osipEventPtr = ::eXosip_event_wait(0, 200);
        {
            eXosip_lock();
            //一般处理401/407采用库默认处理
            eXosip_default_action(osipEventPtr);
            eXosip_unlock();
        }
        if (NULL == osipEventPtr)
        {
            continue;
        }
        else
        {
            break;
        }
    }
}

void  RMg::parserRegisterInfo(osip_message_t* request, int iReqId, sipRegisterInfo& regInfo)
{
    std::stringstream stream;
    regInfo.baseInfo.method = request->sip_method;
    regInfo.baseInfo.from.SetHeader(request->from->url->username,request->from->url->host, request->from->url->port);
    regInfo.baseInfo.proxy.SetHeader(request->to->url->username,request->to->url->host, request->to->url->port);
    //获取expires
    osip_header_t * header = NULL;
    {
        osip_message_header_get_byname(request, "expires",0, &header);
        if (NULL != header && NULL != header->hvalue)
        {
            regInfo.baseInfo.expires = atoi(header->hvalue);
        }
     }
    //contact 字段
    osip_contact_t * contact = NULL;
    osip_message_get_contact(request, 0, &contact);
    if (NULL != contact)
    {
         regInfo.baseInfo.contact.SetContacHeader(contact->url->username,contact->url->host, contact->url->port,
             regInfo.baseInfo.expires);
    }
    //注册返回 由发送方维护的请求ID 接收方接收后原样返回即可
    regInfo.baseInfo.sipRequestId = iReqId;
    //CALL_ID
    {
        stream.str("");
        stream << request->call_id->number;
        regInfo.baseInfo.callId = stream.str();
    }
    //解析content消息
    osip_body_t * body = NULL;
    osip_message_get_body(request, 0, &body);
    if (body != NULL)
    {
        stream.str("");
        stream << body->body;
        regInfo.baseInfo.content = stream.str();
    }
        //鉴权信息
    osip_authorization_t * authentication = NULL;
    {
        osip_message_get_authorization(request, 0, &authentication);
        if (NULL == authentication)
        {
             regInfo.isAuthNull = true;
        }
        else
        {
             regInfo.isAuthNull = false;
             stream.str("");
             stream << authentication->username;
             regInfo.authInfo.userName = stream.str();
             stream.str("");
             stream << authentication->algorithm;
             regInfo.authInfo.algorithm = stream.str();
             stream.str("");
             stream << authentication->realm;
             regInfo.authInfo.digestRealm = stream.str();
             stream.str("");
             stream << authentication->nonce;
             regInfo.authInfo.nonce = stream.str();
             stream.str("");
             stream << authentication->response;
             regInfo.authInfo.response = stream.str();
             stream.str("");
             stream << authentication->uri;
             regInfo.authInfo.uri = stream.str();
        }
    }
    authentication = NULL;
}

void RMg::sendRegisterAnswer(sipRegisterInfo& info)
{
    osip_message_t* answer = NULL;
    int iStatus;
    if (info.isAuthNull)
       {
          iStatus = 401;
      }
    else
    {
            iStatus = 200;
      }eXosip_lock();
       {
       int result = eXosip_message_build_answer(info.baseInfo.sipRequestId,
       iStatus, &answer);
       if (iStatus == 401)
       {
        //由SIP库生成认证方法和认证参数发送客户端
        std::stringstream stream;
        string nonce = NONCE;
        string algorithm = ALGORITHTHM;
        stream << "Digest realm=\"" << info.baseInfo.from.GetRealName()
        << "\",nonce=\"" << nonce
        << "\",algorithm=" << algorithm;
        osip_message_set_header(answer, "WWW-Authenticate",stream.str().c_str());
        cout << "=======================================================""=========" << endl;
        cout << "发送401报文" << endl;
        cout << "========================================================""========" << endl;
        }
        else if (iStatus == 200)
        {
            osip_message_set_header(answer, "Contact",info.baseInfo.contact.GetContacFormatHeader(true).c_str());
            cout << "=========================================================""=======" << endl;
            cout << "发送200报文" << endl;
            cout << "==========================================================""======" << endl;
            //string_t b = "<sip: 100110000101000000@192.168.31.18:5061>;expires=600";
            //osip_message_set_header(answer, "Contact", b.c_str());
            }
        else
            {
            //Do nothing
            }
            
            if (OSIP_SUCCESS != result)
            {
                eXosip_message_send_answer(info.baseInfo.sipRequestId, 400, NULL);
            }
        else
            {
            //发送消息体
                eXosip_message_send_answer(info.baseInfo.sipRequestId, iStatus,
                                answer);
            }
        if (0 == info.baseInfo.expires)
            {
                eXosip_register_remove(info.baseInfo.sipRequestId);
            }
    }eXosip_unlock();
}

void RMg::OnRegister(eXosip_event_t* osipEvent)
{
    sipRegisterInfo regInfo;
    parserRegisterInfo(osipEvent->request, osipEvent->tid, regInfo);
    //发送应答报文
    sendRegisterAnswer(regInfo);
}

void RMg::BeginServer()
{
    RMg svr;
    eXosip_event_t* osipEventPtr = NULL;

    while (true)
    {
        osipEventPtr = eXosip_event_wait(0, 200);
        if (NULL == osipEventPtr)
        {
            cout << "svr begin" << endl;
            continue;
        }
        switch (osipEventPtr->type)
        {
            //需要继续验证REGISTER是什么类型
        case EXOSIP_REGISTRATION_NEW:
            svr.OnRegister(osipEventPtr);
            break;
        case EXOSIP_MESSAGE_NEW:
        {
            if (!strncmp(osipEventPtr->request->sip_method, "REGISTER", strlen("REGISTER")))
            {
                svr.OnRegister(osipEventPtr);
            }
            else if (!strncmp(osipEventPtr->request->sip_method, "MESSAGE", strlen("MESSAGE")))
            {
                //
            }
            break;
        default:
            break;
        }
        eXosip_event_free(osipEventPtr);
        osipEventPtr = NULL;
        }
    }
}

http://www.wangmingla.cn/news/136761.html

相关文章:

  • 物流网站的建设实训新闻稿
  • 深圳苍松大厦 网站建设今日热点新闻事件
  • 长春做网站seo搜索词排行榜
  • 网站到期了google搜索引擎入口 镜像
  • 长春做网站推广郑州抖音seo
  • 做网站注意哪些网站模板怎么建站
  • 为新公司取名免费seo排名快速刷
  • 创建一个公司要多少钱seo推广公司排名
  • 怎么做幼儿园网站下载百度网盘app最新版
  • 做新闻网站危险吗国内做seo最好公司
  • 商城和营销型网站建设关键词seo资源
  • ps做网站效果图都是按几倍做window优化大师
  • 做男女之间的事情的网站如何建立独立网站
  • 做网站用哪里的服务器比较好怎么让网站被百度收录
  • 南京网站开发xuan南京乐识搜索热度和搜索人气
  • 创建一个公司要多少钱信息如何优化上百度首页
  • 1920网站banner背景关键词排名优化公司
  • 高端医疗网站建设sem是什么意思啊
  • 做外贸 需要做网站吗网站运营推广
  • 网页加速器安卓网站优化要做哪些
  • 可以建设网站的软件怎么样免费做网站
  • 网站功能建设杭州全网推广
  • 郑州做网站找谁关键词是怎么排名的
  • 保险代理做的比较好的网站怎样在百度上做广告推广
  • 网站建设标书模版百度推广官网入口
  • 代码做网站的软件seo搜索优化排名
  • 滨州网站建设公司报价网站seo收录
  • 做网站就上微赞网山西网页制作
  • 服务器维修seo管理工具
  • 黄石做网站的百度推广用户注册