任务:
[步骤]将设备设备成土耳其语保存,在局域网内ip登陆
[结果] 无法显示视频
[期望] 能正常连接显示视频
首先明白工作原理:
首先查看web/js知道网页只支持六种语言:英语、中文、中文-香港、希伯来语、波斯语、俄语。从上面代码中看出当切换到,土耳其语( TURKISH)时会向网页发送相对应的土耳其语的资源。但是又没有土耳其语的资源,所以会出现IP登录之后无视频现象。
BUG #4225 设备设置土耳其语,局域网IP登陆无视频
[步骤]将设备设备成土耳其语保存,在局域网内ip登陆
[结果] 无法显示视频
[期望] 能正常连接显示视频
首先明白工作原理:
网页端为客户端,设备为服务器。设备在显示器切换语言,保存到环境变量。浏览器登录时向设备发送连接请求(TCP),登录成功之后向设备发送请求,设备接收请求并交给CGI接口函数处理,app再把处理结果发送给网页。比如:客户端登录成功之后向设备发送rpermission请求,这个请求中包含远程配置和远程回放,设备接收这个请求并交给cgi_gw.c处理,处理结果是把网页上所需的配置都发送给网页,如网页布局图片、语言资源、各种图片等等。
app目录下面有关cgi的文件都是处理网页的请求;web目录下面都是发送请求和处理回应信息。
找到问题:
现在可能出现的问题在两个地方:CGI处理请求(语言设置)和web端处理回应
1、CGI处理语言设置的函数:
int CGI_jscript(HTTPD_SESSION_t* session)
{
char cmd[32];
const char* const query_string = AVAL_STRDUP(session->request_line.uri_query_string);
AVal av_cmd = AVC("0");
http_read_query_string(query_string, "c", &av_cmd);
AV2STR(av_cmd, cmd);
Sysenv* g_sysenv = g_pstSysEnv;
char html_buf[16*1024];
if(strcmp(cmd, "lang") == 0)
{
WORLDWIDE_LANGUAGE curr_lang = WORLDWIDE_ENGLISH;
char* curr_lang_str = NULL;
g_sysenv = PSysenvStruct(NULL, NULL, NULL);
curr_lang = g_sysenv->GetLang(g_sysenv);
switch(curr_lang)
{
case WORLDWIDE_ENGLISH:
case WORLDWIDE_CHINESE_MAINLAND:
case WORLDWIDE_CHINESE_TAIWAN:
case WORLDWIDE_PERSIAN:
case WORLDWIDE_HEBREW:
case WORLDWIDE_RUSSIAN:
case WORLDWIDE_TURKISH:
curr_lang_str = WORLDWIDE_LANGUAGE_STRING[curr_lang];
break;
default:
curr_lang_str = WORLDWIDE_LANGUAGE_STRING[WORLDWIDE_ENGLISH];
break;
}
sprintf(html_buf,
"HTTP/1.1 302 Found\r\nLocation: /js/lang_%s.js\r\nContent-Length: 0\r\n\r\n",
curr_lang_str + strlen("WORLDWIDE_"));
Writen(session->sock, html_buf, strlen(html_buf));
}
free(query_string);
return 0;
}
首先查看web/js知道网页只支持六种语言:英语、中文、中文-香港、希伯来语、波斯语、俄语。从上面代码中看出当切换到,土耳其语( TURKISH)时会向网页发送相对应的土耳其语的资源。但是又没有土耳其语的资源,所以会出现IP登录之后无视频现象。
有两种解决方案:
1、在JS目录先添加土耳其语的资源
2、在上面的代码中注释掉case WORLDWIDE_TURKISH