界面与品牌 - 默认 UI 语言固定为英文,不再跟随系统区域设置自动切换(frontend/OBSApp.cpp),用户仍可在设置中手动切换 - 程序图标更换为 CAIIC logo:exe 图标 obs-studio.ico 及界面/托盘/About 图标 obs.png - About 窗口精简为 logo + 名称 + 版本号,移除项目介绍、赞助名单、Authors/License 标签页 - 版本号定为 1.0.0(构建参数 OBS_VERSION_OVERRIDE=1.0.0) 分辨率支持 - 移除首次启动将画布强制限制为 1920x1080 的逻辑,默认使用显示器原生分辨率 - 设置-视频 与自动配置向导新增 3840x2160 / 2560x1440 预设 - 自动配置向导性能测试上限放宽至 4K60(软硬件编码数据率上限及起始分辨率钳制) 插件 - 集成 obs-shaderfilter 2.6.0(绿幕抠图/自定义着色器滤镜),并适配新版 libobs 的 gs_image_file_ex API - 补齐缺失的源码:obs-browser、obs-websocket、libdshowcapture(含 external/capture-device-support) 工程 - 新增 .gitignore,排除 deploy/ 发布目录与构建日志
72 lines
2.5 KiB
C++
72 lines
2.5 KiB
C++
/******************************************************************************
|
|
Copyright (C) 2014 by John R. Bradley <jrb@turrettech.com>
|
|
Copyright (C) 2023 by Lain Bailey <lain@obsproject.com>
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
******************************************************************************/
|
|
|
|
#include "browser-scheme.hpp"
|
|
#include "ip-string.hpp"
|
|
#include "wide-string.hpp"
|
|
#include <include/wrapper/cef_stream_resource_handler.h>
|
|
|
|
CefRefPtr<CefResourceHandler> BrowserSchemeHandlerFactory::Create(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame>,
|
|
const CefString &, CefRefPtr<CefRequest> request)
|
|
{
|
|
if (!browser || !request)
|
|
return nullptr;
|
|
|
|
CefURLParts parts;
|
|
CefParseURL(request->GetURL(), parts);
|
|
|
|
std::string path = CefString(&parts.path);
|
|
|
|
path = CefURIDecode(path, true, cef_uri_unescape_rule_t::UU_SPACES);
|
|
path = CefURIDecode(path, true, cef_uri_unescape_rule_t::UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS);
|
|
|
|
std::string fileExtension = path.substr(path.find_last_of(".") + 1);
|
|
|
|
for (char &ch : fileExtension)
|
|
ch = (char)tolower(ch);
|
|
if (fileExtension.compare("woff2") == 0)
|
|
fileExtension = "woff";
|
|
|
|
std::string filePath = path.substr(1);
|
|
|
|
std::string checkString = path.substr(path.find_first_not_of("/"));
|
|
checkString = checkString.substr(0, checkString.find_first_of("/"));
|
|
|
|
// An IP address should never be a valid path for CreateForFile normally, but in some cases an OS
|
|
// can resolve one as such. As an extra safeguard, we prevent any IP addresses in the path.
|
|
if (checkForIpv4String(checkString)) {
|
|
return nullptr;
|
|
}
|
|
|
|
if (checkForIpv6String(checkString)) {
|
|
return nullptr;
|
|
}
|
|
|
|
CefRefPtr<CefStreamReader> stream = CefStreamReader::CreateForFile(filePath);
|
|
if (!stream) {
|
|
return nullptr;
|
|
}
|
|
|
|
CefString mimeType = CefGetMimeType(fileExtension);
|
|
if (mimeType.empty()) {
|
|
mimeType = "application/octet-stream";
|
|
}
|
|
|
|
return new CefStreamResourceHandler(mimeType, stream);
|
|
}
|