houxiao
2017-03-25 4c62fe0c6d065b4052041305c95c478636d1c51f
bug fix

git-svn-id: http://192.168.1.226/svn/proxy@181 454eff88-639b-444f-9e54-f578c98de674
1个文件已修改
76 ■■■■ 已修改文件
ProxyConsole/proxyconsole-hc.cpp 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ProxyConsole/proxyconsole-hc.cpp
@@ -615,7 +615,7 @@
       if (hcnetsdk_user < 0)
       {
           printf("hcnetsdk_user < 0");
           exit(EXIT_FAILURE);
           exit(EXIT_FAILURE);//#todo if debug equipment(analizer), remove this
       }
        
       /*Install timer_handler as th siganl handler for SIGVTALRM */
@@ -653,7 +653,7 @@
   int length=0;
   char buff[102400];
  
   //puts("Step.1 ========>Server Thread is strarted......");
   puts("Step.1 ========>Server Thread is strarted......");
   unsigned char data[4096];  
  //=======================================equipment data================================
  int idx=0;  
@@ -693,7 +693,7 @@
            //    length-=3;
            //    if(length<=0) continue;
            //}
            if(buff[0]==0x68 && buff[1]==0x03 )
            {
@@ -809,7 +809,7 @@
void* MyEquipmentthread(void* arg)
 {
   int eidx = (int)arg;   
   //printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
   printf("Step.3 ===%d=====>RealTimeEvent Thread is strarted......\n",eidx);
   int length=0;
   char buff[102400];
@@ -824,12 +824,13 @@
        }
       else if(length>0)
       {
           std::cout << "buff:  " << buff<<std::endl;
           bool isDisalarm = false;
            if (strstr(buff, "ViqEventNotificationAlert") == NULL) // <urn
                continue;
            if (strstr(buff, "startTime") == NULL) // <urn
                isDisalarm = true;
            //std::cout << buff<<std::endl;
            
            int channel = -1;
            {
@@ -886,16 +887,16 @@
                            int lUserData = hcnetsdk_get_userid(ip);
                            if (camConfig != NULL && equipConfig != NULL && lUserData >= 0)
                            {
                                std::cout << "alarm begin k=" << k << std::endl;
                                std::cout << "......alarm begin k=" << k << std::endl;
                                if (equipConfig->m_type == ET_HCNET_DECODER_ALARMOUT && !isDisalarm)
                                    hcnetsdk_alarm_alarmout(lUserData, *camConfig);
                                else if (equipConfig->m_type == ET_HCNET_DECODER_LOGO)
                                    hcnetsdk_alarm_logo(lUserData, *camConfig, ip, channel, isDisalarm);
                                std::cout << "alarm end k=" << k << std::endl;
                                std::cout << "......alarm end k=" << k << std::endl;
                            }
                            else
                            {
                                //std::cout << "alarm lost k=" << k << std::endl;
                                std::cout << "alarm lost k=" << k << std::endl;
                            }
                        }
                    }
@@ -1356,7 +1357,7 @@
    return n;
}
//for real event
void MakeAuthorizedPacketReal(char* buff,int length, char* Method,char* uri,int Idx)
void MakeAuthorizedPacketReal_Digest(char* buff,int length, char* Method,char* uri,int Idx)
{
    char Device[150] ;
    char Realm_buf1[512] ;
@@ -1369,7 +1370,7 @@
    memset(domain_buf4,0,512);
    CharToByte((char*)buff, Device, length,Realm_buf1,nonce_buf2,auth_buf3,domain_buf4, len);
    const char* cnonce_buf="163acd0e58793a190f29ee879d4b224f";//"08a9d86c1b5e45963cf82f43dca59c51";
    const char* cnonce_buf="1oBAAAqkwXP9q9MorVCzgw5LNPc";//"08a9d86c1b5e45963cf82f43dca59c51";
    Realm_buf1[len[0]]=0;
    nonce_buf2[len[1]]=0;
    auth_buf3[len[2]]=0;
@@ -1418,7 +1419,32 @@
    byte_array[iidx]=0;
}
void MakeAuthorizedPacketReal_Basic(char* buff,int length, char* Method,char* uri,int Idx)
{
    /*
POST /PSIA/VIQ/System/sessions HTTP/1.1
Content-Length: 0
Host: 192.168.1.5:80
Connection: Keep-Alive
Authorization: Basic c3VwZXJ2aXNvcjpzdXBlcnZpc29y
    */
    
    int i = 0;
    sprintf(byte_array,
        "%s %s HTTP/1.1\r\n"
        "Content-Length: 0\r\n"
        "Host: %s:80\r\n"
        "Connection: Keep-Alive\r\n"
        "Authorization: Basic %s\r\n"
        "\r\n",
        Method,
        uri,
        equipments[Idx].ip,
        "c3VwZXJ2aXNvcjpzdXBlcnZpc29y" // base64(supervisor:supervisor)
    );
}
//// 功能:开始查看实时监控
//// 输入:分析器IP,用户,密码
//// 输出:0(成功), -1(初始化失败),-2(连接失败)
@@ -1460,6 +1486,7 @@
        sigset(SIGALRM, u_alarm_handler);//add 2016.11.22
        alarm(2);
        length=read(rsock_down[Idx],&buff,sizeof(buff));
        //printf("RESPONSE: %s\n",&buff);
        alarm(0);
        sigrelse(SIGALRM);    
        //printf("Myequipment connect ==================length =%d:\n",length);    
@@ -1471,14 +1498,23 @@
        if(memorycmp((unsigned char*)buff,length, "WWW-Authenticate:",17)>0 && bbbb==0)
        {
            // analyse reception
            MakeAuthorizedPacketReal(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent",Idx);
            zclock_sleep(100);
            write(rsock_down[Idx],byte_array,strlen(byte_array));
//            printf("%s\n",(char*)byte_array);
            MakeAuthorizedPacketReal_Basic(buff,length,"POST","/PSIA/VIQ/System/sessions/permanent",Idx);
            //for(int ii=0;ii<4;ii++)
            //{
                zclock_sleep(100);
                write(rsock_down[Idx],byte_array,strlen(byte_array));
            //}
            printf("%s\n",(char*)byte_array);
            bbbb=1;
            continue;
            continue;//#todo 20170325
            //break;
        }
        if(bbbb==1){
            //if (strstr((char*)buff,"Unauthorized") != NULL)
            //{
            //    bbbb=0;
            //}
            int sidx = stringcmp((char*)buff,"<urn:id>",8);
            if(sidx >=0){//<urn:ViqDateTimeInterval urn:version="1.0" xmlns:urn="urn:videoiq-com"><urn:startTime urn:version="1.0"><urn:date>2016-08-18T01:07:20.749</urn:date><urn:offset>0</urn:offset></urn:startTime><urn:endTime urn:version="1.0"><urn:date>2016-08-29T08:33:48.231</urn:date><urn:offset>0</urn:offset></urn:endTime></urn:ViqDateTimeInterval>
                int eidx = stringcmp((char*)buff,"</urn:id>",9);
@@ -1513,6 +1549,8 @@
    }
    char uri[200];
    sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]);
    //sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=5");
    printf("/PSIA/Custom/Event/notification/notificationStream?sessionId=%s\n",sessions[Idx]);
    length = sprintf(byte_array,"GET %s HTTP/1.1\r\nContent-Type: text/xml\r\nHost: %s\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n",uri,equipments[Idx].ip);         
    write(rsock_down[Idx],byte_array,strlen(byte_array));
    while(1){
@@ -1531,9 +1569,13 @@
        {
            char uri[200];
            sprintf(uri,"/PSIA/Custom/Event/notification/notificationStream?sessionId=%s",sessions[Idx]);
            MakeAuthorizedPacketReal(buff,length,"GET",uri,Idx);
            MakeAuthorizedPacketReal_Basic(buff,length,"GET",uri,Idx);
            //for(int ii=0;ii<4;ii++)
            //{
            zclock_sleep(100);
            write(rsock_down[Idx],byte_array,strlen(byte_array));
//            printf("%s\n",(char*)byte_array);
            //}
            printf("%s\n",(char*)byte_array);
            bbbb=3;            
            continue;
        }