1e0e9324cSopenharmony_ci/* 2e0e9324cSopenharmony_ci * Copyright (c) 2023 Shenzhen Kaihong Digital Industry Development Co., Ltd. 3e0e9324cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0e9324cSopenharmony_ci * you may not use this file except in compliance with the License. 5e0e9324cSopenharmony_ci * You may obtain a copy of the License at 6e0e9324cSopenharmony_ci * 7e0e9324cSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0e9324cSopenharmony_ci * 9e0e9324cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0e9324cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0e9324cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0e9324cSopenharmony_ci * See the License for the specific language governing permissions and 13e0e9324cSopenharmony_ci * limitations under the License. 14e0e9324cSopenharmony_ci */ 15e0e9324cSopenharmony_ci 16e0e9324cSopenharmony_ci#ifndef OHOS_SHARING_WFD_MESSAGE_H 17e0e9324cSopenharmony_ci#define OHOS_SHARING_WFD_MESSAGE_H 18e0e9324cSopenharmony_ci 19e0e9324cSopenharmony_ci#include <sstream> 20e0e9324cSopenharmony_ci#include "protocol/rtsp/include/rtsp_request.h" 21e0e9324cSopenharmony_ci#include "protocol/rtsp/include/rtsp_response.h" 22e0e9324cSopenharmony_ci#include "wfd_session_def.h" 23e0e9324cSopenharmony_ci 24e0e9324cSopenharmony_cinamespace OHOS { 25e0e9324cSopenharmony_cinamespace Sharing { 26e0e9324cSopenharmony_ci 27e0e9324cSopenharmony_cistruct WfdVideoFormatsInfo { 28e0e9324cSopenharmony_ci uint16_t native = 0; 29e0e9324cSopenharmony_ci uint16_t preferredDisplayMode = 0; 30e0e9324cSopenharmony_ci uint16_t profile = 0; 31e0e9324cSopenharmony_ci uint16_t level = 0; 32e0e9324cSopenharmony_ci uint32_t ceaMask = 0; 33e0e9324cSopenharmony_ci uint32_t veaMask = 0; 34e0e9324cSopenharmony_ci uint32_t hhMask = 0; 35e0e9324cSopenharmony_ci uint16_t latency = 0; 36e0e9324cSopenharmony_ci uint16_t minSlice = 0; 37e0e9324cSopenharmony_ci uint16_t sliceEncParam = 0; 38e0e9324cSopenharmony_ci uint16_t frameRateCtlSupport = 0; 39e0e9324cSopenharmony_ci}; 40e0e9324cSopenharmony_ci 41e0e9324cSopenharmony_cistruct WfdAudioCodec { 42e0e9324cSopenharmony_ci CodecId codecId; 43e0e9324cSopenharmony_ci AudioFormat format; 44e0e9324cSopenharmony_ci}; 45e0e9324cSopenharmony_ci 46e0e9324cSopenharmony_ci// WfdRtspM1Request 47e0e9324cSopenharmony_ciclass WfdRtspM1Request : public RtspRequestOptions { 48e0e9324cSopenharmony_cipublic: 49e0e9324cSopenharmony_ci explicit WfdRtspM1Request(int32_t cseq) : RtspRequestOptions(cseq, "*") { SetRequire(RTSP_METHOD_WFD); } 50e0e9324cSopenharmony_ci}; 51e0e9324cSopenharmony_ci 52e0e9324cSopenharmony_ciclass WfdRtspM1Response : public RtspResponseOptions { 53e0e9324cSopenharmony_cipublic: 54e0e9324cSopenharmony_ci WfdRtspM1Response(int32_t cseq, int32_t status); 55e0e9324cSopenharmony_ci}; 56e0e9324cSopenharmony_ci 57e0e9324cSopenharmony_ciclass WfdRtspM2Request : public RtspRequestOptions { 58e0e9324cSopenharmony_cipublic: 59e0e9324cSopenharmony_ci explicit WfdRtspM2Request(int32_t cseq) : RtspRequestOptions(cseq, "*") { SetRequire(RTSP_METHOD_WFD); } 60e0e9324cSopenharmony_ci}; 61e0e9324cSopenharmony_ci 62e0e9324cSopenharmony_ci// WfdRtspM2Response 63e0e9324cSopenharmony_ciclass WfdRtspM2Response : public RtspResponseOptions { 64e0e9324cSopenharmony_cipublic: 65e0e9324cSopenharmony_ci WfdRtspM2Response(int32_t cseq, int32_t status) : RtspResponseOptions(cseq, status) 66e0e9324cSopenharmony_ci { 67e0e9324cSopenharmony_ci std::stringstream ss; 68e0e9324cSopenharmony_ci ss << RTSP_METHOD_WFD << "," << RTSP_SP << RTSP_METHOD_SETUP << "," << RTSP_SP << RTSP_METHOD_TEARDOWN << "," 69e0e9324cSopenharmony_ci << RTSP_SP << RTSP_METHOD_PLAY << "," << RTSP_SP << RTSP_METHOD_PAUSE << "," << RTSP_SP 70e0e9324cSopenharmony_ci << RTSP_METHOD_GET_PARAMETER << "," << RTSP_SP << RTSP_METHOD_SET_PARAMETER; 71e0e9324cSopenharmony_ci SetPublicItems(ss.str()); 72e0e9324cSopenharmony_ci } 73e0e9324cSopenharmony_ci}; 74e0e9324cSopenharmony_ci 75e0e9324cSopenharmony_ci// WfdRtspM3Request 76e0e9324cSopenharmony_ciclass WfdRtspM3Request : public RtspRequestParameter { 77e0e9324cSopenharmony_cipublic: 78e0e9324cSopenharmony_ci WfdRtspM3Request(int32_t cseq, const std::string &url) : RtspRequestParameter(RTSP_METHOD_GET_PARAMETER, cseq, url) 79e0e9324cSopenharmony_ci { 80e0e9324cSopenharmony_ci AddBodyItem(WFD_PARAM_CONTENT_PROTECTION); 81e0e9324cSopenharmony_ci AddBodyItem(WFD_PARAM_VIDEO_FORMATS); 82e0e9324cSopenharmony_ci AddBodyItem(WFD_PARAM_AUDIO_CODECS); 83e0e9324cSopenharmony_ci AddBodyItem(WFD_PARAM_RTP_PORTS); 84e0e9324cSopenharmony_ci } 85e0e9324cSopenharmony_ci}; 86e0e9324cSopenharmony_ci 87e0e9324cSopenharmony_ciclass WfdRtspM3Response : public RtspResponse { 88e0e9324cSopenharmony_cipublic: 89e0e9324cSopenharmony_ci WfdRtspM3Response() = default; 90e0e9324cSopenharmony_ci ~WfdRtspM3Response() override = default; 91e0e9324cSopenharmony_ci WfdRtspM3Response(int32_t cseq, int32_t status) : RtspResponse(cseq, status) {} 92e0e9324cSopenharmony_ci 93e0e9324cSopenharmony_ci void SetClientRtpPorts(int32_t port); 94e0e9324cSopenharmony_ci void SetUibcCapability(const std::string &value = "none"); 95e0e9324cSopenharmony_ci void SetAudioCodecs(AudioFormat format = AUDIO_48000_16_2); 96e0e9324cSopenharmony_ci void SetCoupledSink(const std::string &value = "00 none"); 97e0e9324cSopenharmony_ci void SetContentProtection(const std::string &value = "none"); 98e0e9324cSopenharmony_ci void SetVideoFormats(VideoFormat format = VIDEO_1920X1080_30); 99e0e9324cSopenharmony_ci void SetStandbyResumeCapability(const std::string &value = "none"); 100e0e9324cSopenharmony_ci void SetCustomParam(const std::string &key, const std::string &value = "none"); 101e0e9324cSopenharmony_ci 102e0e9324cSopenharmony_ci int32_t GetClientRtpPorts(); 103e0e9324cSopenharmony_ci std::string GetUibcCapability(); 104e0e9324cSopenharmony_ci AudioFormat GetAudioCodecs(WfdAudioCodec &codec); 105e0e9324cSopenharmony_ci std::string GetCoupledSink(); 106e0e9324cSopenharmony_ci std::string GetContentProtection(); 107e0e9324cSopenharmony_ci VideoFormat GetVideoFormats(); 108e0e9324cSopenharmony_ci std::string GetStandbyResumeCapability(); 109e0e9324cSopenharmony_ci std::string GetCustomParam(const std::string &key); 110e0e9324cSopenharmony_ci VideoFormat GetVideoFormatsByCea(int index); 111e0e9324cSopenharmony_ci std::string Stringify() override; 112e0e9324cSopenharmony_ci 113e0e9324cSopenharmony_ci RtspError Parse(const std::string &response) override; 114e0e9324cSopenharmony_ci WfdVideoFormatsInfo GetWfdVideoFormatsInfo() { return vWfdVideoFormatsInfo_[0]; } 115e0e9324cSopenharmony_ci 116e0e9324cSopenharmony_ciprivate: 117e0e9324cSopenharmony_ci std::list<std::pair<std::string, std::string>> params_; 118e0e9324cSopenharmony_ci std::vector<WfdVideoFormatsInfo> vWfdVideoFormatsInfo_; 119e0e9324cSopenharmony_ci}; 120e0e9324cSopenharmony_ci 121e0e9324cSopenharmony_ciclass WfdRtspM4Request : public RtspRequestParameter { 122e0e9324cSopenharmony_cipublic: 123e0e9324cSopenharmony_ci WfdRtspM4Request() = default; 124e0e9324cSopenharmony_ci ~WfdRtspM4Request() override = default; 125e0e9324cSopenharmony_ci WfdRtspM4Request(int32_t cseq, const std::string &url) : RtspRequestParameter(RTSP_METHOD_SET_PARAMETER, cseq, url) 126e0e9324cSopenharmony_ci { 127e0e9324cSopenharmony_ci } 128e0e9324cSopenharmony_ci 129e0e9324cSopenharmony_ci void SetClientRtpPorts(int32_t port); 130e0e9324cSopenharmony_ci void SetAudioCodecs(WfdAudioCodec &codec); 131e0e9324cSopenharmony_ci void SetPresentationUrl(const std::string &ip); 132e0e9324cSopenharmony_ci void SetVideoFormats(const WfdVideoFormatsInfo &wfdVideoFormatsInfo, VideoFormat format = VIDEO_1920X1080_30); 133e0e9324cSopenharmony_ci 134e0e9324cSopenharmony_ci int32_t GetRtpPort(); 135e0e9324cSopenharmony_ci 136e0e9324cSopenharmony_ci std::string GetPresentationUrl(); 137e0e9324cSopenharmony_ci std::string GetParameterValue(const std::string ¶m); 138e0e9324cSopenharmony_ci 139e0e9324cSopenharmony_ci RtspError Parse(const std::string &request) override; 140e0e9324cSopenharmony_ci 141e0e9324cSopenharmony_ciprivate: 142e0e9324cSopenharmony_ci std::list<std::pair<std::string, std::string>> params_; 143e0e9324cSopenharmony_ci}; 144e0e9324cSopenharmony_ci 145e0e9324cSopenharmony_ciusing WfdRtspM4Response = RtspResponse; 146e0e9324cSopenharmony_ci 147e0e9324cSopenharmony_ci// WfdRtspM5Request 148e0e9324cSopenharmony_ciclass WfdRtspM5Request : public RtspRequestParameter { 149e0e9324cSopenharmony_cipublic: 150e0e9324cSopenharmony_ci WfdRtspM5Request() = default; 151e0e9324cSopenharmony_ci explicit WfdRtspM5Request(int32_t cseq) : RtspRequestParameter(RTSP_METHOD_SET_PARAMETER, 152e0e9324cSopenharmony_ci cseq, WFD_RTSP_URL_DEFAULT) {} 153e0e9324cSopenharmony_ci 154e0e9324cSopenharmony_ci void SetTriggerMethod(const std::string &method); 155e0e9324cSopenharmony_ci std::string GetTriggerMethod(); 156e0e9324cSopenharmony_ci}; 157e0e9324cSopenharmony_ci 158e0e9324cSopenharmony_ciusing WfdRtspM5Response = RtspResponse; 159e0e9324cSopenharmony_ciusing WfdRtspM6Request = RtspRequestSetup; 160e0e9324cSopenharmony_ci 161e0e9324cSopenharmony_ci// WfdRtspM6Response 162e0e9324cSopenharmony_ciclass WfdRtspM6Response : public RtspResponse { 163e0e9324cSopenharmony_cipublic: 164e0e9324cSopenharmony_ci WfdRtspM6Response() = default; 165e0e9324cSopenharmony_ci WfdRtspM6Response(int32_t cseq, int32_t status, std::string sessionID, int32_t timeOut) : RtspResponse(cseq, status) 166e0e9324cSopenharmony_ci { 167e0e9324cSopenharmony_ci SetSession(sessionID); 168e0e9324cSopenharmony_ci SetTimeout(timeOut); 169e0e9324cSopenharmony_ci } 170e0e9324cSopenharmony_ci std::string StringifyEx(); 171e0e9324cSopenharmony_ci int32_t GetClientPort(); 172e0e9324cSopenharmony_ci int32_t GetServerPort(); 173e0e9324cSopenharmony_ci void SetClientPort(int port); 174e0e9324cSopenharmony_ci void SetServerPort(int port); 175e0e9324cSopenharmony_ci 176e0e9324cSopenharmony_ciprivate: 177e0e9324cSopenharmony_ci int32_t clientPort_ = 0; 178e0e9324cSopenharmony_ci int32_t serverPort_ = 0; 179e0e9324cSopenharmony_ci}; 180e0e9324cSopenharmony_ci 181e0e9324cSopenharmony_ciusing WfdRtspM7Request = RtspRequestPlay; 182e0e9324cSopenharmony_ciusing WfdRtspM8Request = RtspRequestTeardown; 183e0e9324cSopenharmony_ci 184e0e9324cSopenharmony_ciclass WfdRtspIDRRequest : public RtspRequestParameter { 185e0e9324cSopenharmony_cipublic: 186e0e9324cSopenharmony_ci WfdRtspIDRRequest() = default; 187e0e9324cSopenharmony_ci explicit WfdRtspIDRRequest(int32_t cseq, const std::string &url) 188e0e9324cSopenharmony_ci : RtspRequestParameter(RTSP_METHOD_SET_PARAMETER, cseq, url) 189e0e9324cSopenharmony_ci { 190e0e9324cSopenharmony_ci AddBodyItem(WFD_PARAM_IDR_REQUEST); 191e0e9324cSopenharmony_ci } 192e0e9324cSopenharmony_ci}; 193e0e9324cSopenharmony_ci 194e0e9324cSopenharmony_ci// WfdRtspM7Response 195e0e9324cSopenharmony_ciclass WfdRtspM7Response : public RtspResponse { 196e0e9324cSopenharmony_cipublic: 197e0e9324cSopenharmony_ci WfdRtspM7Response() = default; 198e0e9324cSopenharmony_ci WfdRtspM7Response(int32_t cseq, int32_t status, std::string sessionID) : RtspResponse(cseq, status) 199e0e9324cSopenharmony_ci { 200e0e9324cSopenharmony_ci SetSession(sessionID); 201e0e9324cSopenharmony_ci } 202e0e9324cSopenharmony_ci std::string StringifyEx(); 203e0e9324cSopenharmony_ci}; 204e0e9324cSopenharmony_ci 205e0e9324cSopenharmony_ciusing WfdRtspM8Response = RtspResponse; 206e0e9324cSopenharmony_ci 207e0e9324cSopenharmony_ciclass WfdRtspM16Request : public RtspRequestParameter { 208e0e9324cSopenharmony_cipublic: 209e0e9324cSopenharmony_ci WfdRtspM16Request(int32_t cseq, const std::string &url, std::string sessionID) 210e0e9324cSopenharmony_ci : RtspRequestParameter(RTSP_METHOD_GET_PARAMETER, cseq, url) 211e0e9324cSopenharmony_ci { 212e0e9324cSopenharmony_ci SetSession(sessionID); 213e0e9324cSopenharmony_ci } 214e0e9324cSopenharmony_ci}; 215e0e9324cSopenharmony_ci 216e0e9324cSopenharmony_ciusing WfdRtspM16Response = RtspResponse; 217e0e9324cSopenharmony_ci 218e0e9324cSopenharmony_ci} // namespace Sharing 219e0e9324cSopenharmony_ci} // namespace OHOS 220e0e9324cSopenharmony_ci#endif 221