1060ff233Sopenharmony_ci/* 2060ff233Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3060ff233Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4060ff233Sopenharmony_ci * you may not use this file except in compliance with the License. 5060ff233Sopenharmony_ci * You may obtain a copy of the License at 6060ff233Sopenharmony_ci * 7060ff233Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8060ff233Sopenharmony_ci * 9060ff233Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10060ff233Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11060ff233Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12060ff233Sopenharmony_ci * See the License for the specific language governing permissions and 13060ff233Sopenharmony_ci * limitations under the License. 14060ff233Sopenharmony_ci */ 15060ff233Sopenharmony_ci 16060ff233Sopenharmony_ci#include "trans_client_stub.h" 17060ff233Sopenharmony_ci 18060ff233Sopenharmony_ci#include "client_trans_channel_callback.h" 19060ff233Sopenharmony_ci#include "ipc_skeleton.h" 20060ff233Sopenharmony_ci#include "softbus_errcode.h" 21060ff233Sopenharmony_ci#include "softbus_server_ipc_interface_code.h" 22060ff233Sopenharmony_ci#include "trans_log.h" 23060ff233Sopenharmony_ci 24060ff233Sopenharmony_ciint32_t ClientOnChannelOpened(IpcIo *data, IpcIo *reply) 25060ff233Sopenharmony_ci{ 26060ff233Sopenharmony_ci TRANS_CHECK_AND_RETURN_RET_LOGE(reply != NULL, SOFTBUS_INVALID_PARAM, TRANS_CTRL, "invalid param"); 27060ff233Sopenharmony_ci size_t size = 0; 28060ff233Sopenharmony_ci ChannelInfo channel = {0}; 29060ff233Sopenharmony_ci const char *sessionName = (const char *)ReadString(data, &size); 30060ff233Sopenharmony_ci ReadInt32(data, &(channel.channelId)); 31060ff233Sopenharmony_ci ReadInt32(data, &(channel.channelType)); 32060ff233Sopenharmony_ci ReadBool(data, &(channel.isServer)); 33060ff233Sopenharmony_ci ReadBool(data, &(channel.isEnabled)); 34060ff233Sopenharmony_ci ReadBool(data, &(channel.isEncrypt)); 35060ff233Sopenharmony_ci ReadInt32(data, &(channel.peerUid)); 36060ff233Sopenharmony_ci ReadInt32(data, &(channel.peerPid)); 37060ff233Sopenharmony_ci channel.groupId = (char *)ReadString(data, &size); 38060ff233Sopenharmony_ci ReadUint32(data, &(channel.keyLen)); 39060ff233Sopenharmony_ci channel.sessionKey = (char *)ReadBuffer(data, channel.keyLen); 40060ff233Sopenharmony_ci channel.peerSessionName = (char *)ReadString(data, &size); 41060ff233Sopenharmony_ci channel.peerDeviceId = (char *)ReadString(data, &size); 42060ff233Sopenharmony_ci if (channel.groupId == NULL || channel.sessionKey == NULL || channel.peerSessionName == NULL || 43060ff233Sopenharmony_ci channel.peerDeviceId == NULL) { 44060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "pointer null error."); 45060ff233Sopenharmony_ci return SOFTBUS_ERR; 46060ff233Sopenharmony_ci } 47060ff233Sopenharmony_ci if (channel.channelType == CHANNEL_TYPE_TCP_DIRECT) { 48060ff233Sopenharmony_ci channel.myIp = (char *)ReadString(data, &size); 49060ff233Sopenharmony_ci TRANS_CHECK_AND_RETURN_RET_LOGE(channel.myIp != NULL, SOFTBUS_IPC_ERR, TRANS_CTRL, "pointer null error"); 50060ff233Sopenharmony_ci channel.fd = ReadFileDescriptor(data); 51060ff233Sopenharmony_ci } 52060ff233Sopenharmony_ci ReadInt32(data, &(channel.businessType)); 53060ff233Sopenharmony_ci if (channel.channelType == CHANNEL_TYPE_UDP) { 54060ff233Sopenharmony_ci channel.myIp = (char *)ReadString(data, &size); 55060ff233Sopenharmony_ci ReadInt32(data, &(channel.streamType)); 56060ff233Sopenharmony_ci ReadBool(data, &(channel.isUdpFile)); 57060ff233Sopenharmony_ci if (channel.isServer) { 58060ff233Sopenharmony_ci int32_t udpPort = TransOnChannelOpened(sessionName, &channel); 59060ff233Sopenharmony_ci WriteInt32(reply, udpPort); 60060ff233Sopenharmony_ci return SOFTBUS_ERR; 61060ff233Sopenharmony_ci } 62060ff233Sopenharmony_ci ReadInt32(data, &(channel.peerPort)); 63060ff233Sopenharmony_ci channel.peerIp = (char *)ReadString(data, &size); 64060ff233Sopenharmony_ci } 65060ff233Sopenharmony_ci int ret = TransOnChannelOpened(sessionName, &channel); 66060ff233Sopenharmony_ci if (ret < 0) { 67060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "TransOnChannelOpened fail, errcode=%{public}d.", ret); 68060ff233Sopenharmony_ci } 69060ff233Sopenharmony_ci return SOFTBUS_OK; 70060ff233Sopenharmony_ci} 71060ff233Sopenharmony_ci 72060ff233Sopenharmony_ciint32_t ClientOnChannelOpenfailed(IpcIo *data, IpcIo *reply) 73060ff233Sopenharmony_ci{ 74060ff233Sopenharmony_ci if (data == NULL) { 75060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "invalid param."); 76060ff233Sopenharmony_ci return SOFTBUS_INVALID_PARAM; 77060ff233Sopenharmony_ci } 78060ff233Sopenharmony_ci int32_t channelId = 0; 79060ff233Sopenharmony_ci int32_t channelType = 0; 80060ff233Sopenharmony_ci int32_t errCode = SOFTBUS_OK; 81060ff233Sopenharmony_ci ReadInt32(data, &channelId); 82060ff233Sopenharmony_ci ReadInt32(data, &channelType); 83060ff233Sopenharmony_ci ReadInt32(data, &errCode); 84060ff233Sopenharmony_ci (void)TransOnChannelOpenFailed(channelId, channelType, errCode); 85060ff233Sopenharmony_ci return SOFTBUS_OK; 86060ff233Sopenharmony_ci} 87060ff233Sopenharmony_ci 88060ff233Sopenharmony_ciint32_t ClientOnChannelClosed(IpcIo *data, IpcIo *reply) 89060ff233Sopenharmony_ci{ 90060ff233Sopenharmony_ci if (data == NULL) { 91060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "invalid param."); 92060ff233Sopenharmony_ci return SOFTBUS_INVALID_PARAM; 93060ff233Sopenharmony_ci } 94060ff233Sopenharmony_ci int32_t channelId = 0; 95060ff233Sopenharmony_ci int32_t channelType = 0; 96060ff233Sopenharmony_ci int32_t messageType = 0; 97060ff233Sopenharmony_ci ReadInt32(data, &channelId); 98060ff233Sopenharmony_ci ReadInt32(data, &channelType); 99060ff233Sopenharmony_ci ReadInt32(data, &messageType); 100060ff233Sopenharmony_ci (void)TransOnChannelClosed(channelId, channelType, messageType, SHUTDOWN_REASON_PEER); 101060ff233Sopenharmony_ci return SOFTBUS_OK; 102060ff233Sopenharmony_ci} 103060ff233Sopenharmony_ci 104060ff233Sopenharmony_ciint32_t ClientOnChannelMsgreceived(IpcIo *data, IpcIo *reply) 105060ff233Sopenharmony_ci{ 106060ff233Sopenharmony_ci if (data == NULL) { 107060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "invalid param."); 108060ff233Sopenharmony_ci return SOFTBUS_INVALID_PARAM; 109060ff233Sopenharmony_ci } 110060ff233Sopenharmony_ci int32_t channelId = 0; 111060ff233Sopenharmony_ci int32_t channelType = 0; 112060ff233Sopenharmony_ci int32_t type = 0; 113060ff233Sopenharmony_ci ReadInt32(data, &channelId); 114060ff233Sopenharmony_ci ReadInt32(data, &channelType); 115060ff233Sopenharmony_ci ReadInt32(data, &type); 116060ff233Sopenharmony_ci uint32_t dataLen = 0; 117060ff233Sopenharmony_ci ReadUint32(data, &dataLen); 118060ff233Sopenharmony_ci const uint8_t *data2 = ReadBuffer(data, dataLen); 119060ff233Sopenharmony_ci (void)TransOnChannelMsgReceived(channelId, channelType, data2, dataLen, type); 120060ff233Sopenharmony_ci return SOFTBUS_OK; 121060ff233Sopenharmony_ci} 122060ff233Sopenharmony_ci 123060ff233Sopenharmony_ciint32_t ClientSetChannelInfo(IpcIo *data, IpcIo *reply) 124060ff233Sopenharmony_ci{ 125060ff233Sopenharmony_ci if (data == NULL) { 126060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "invalid param."); 127060ff233Sopenharmony_ci return SOFTBUS_INVALID_PARAM; 128060ff233Sopenharmony_ci } 129060ff233Sopenharmony_ci (void)reply; 130060ff233Sopenharmony_ci size_t size = 0; 131060ff233Sopenharmony_ci const char *sessionName = (const char *)ReadString(data, &size); 132060ff233Sopenharmony_ci int32_t sessionId = 0; 133060ff233Sopenharmony_ci int32_t channelId = 0; 134060ff233Sopenharmony_ci int32_t channelType = 0; 135060ff233Sopenharmony_ci ReadInt32(data, &sessionId); 136060ff233Sopenharmony_ci ReadInt32(data, &channelId); 137060ff233Sopenharmony_ci ReadInt32(data, &channelType); 138060ff233Sopenharmony_ci (void)TransSetChannelInfo(sessionName, sessionId, channelId, channelType); 139060ff233Sopenharmony_ci return SOFTBUS_OK; 140060ff233Sopenharmony_ci} 141060ff233Sopenharmony_ci 142060ff233Sopenharmony_ciint32_t ClientOnChannelBind(IpcIo *data, IpcIo *reply) 143060ff233Sopenharmony_ci{ 144060ff233Sopenharmony_ci if (data == NULL) { 145060ff233Sopenharmony_ci TRANS_LOGE(TRANS_CTRL, "invalid param."); 146060ff233Sopenharmony_ci return SOFTBUS_INVALID_PARAM; 147060ff233Sopenharmony_ci } 148060ff233Sopenharmony_ci (void)reply; 149060ff233Sopenharmony_ci int32_t channelId = 0; 150060ff233Sopenharmony_ci int32_t channelType = 0; 151060ff233Sopenharmony_ci ReadInt32(data, &channelId); 152060ff233Sopenharmony_ci ReadInt32(data, &channelType); 153060ff233Sopenharmony_ci int32_t ret = TransOnChannelBind(channelId, channelType); 154060ff233Sopenharmony_ci if (ret != SOFTBUS_OK) { 155060ff233Sopenharmony_ci COMM_LOGE(COMM_SDK, "OnChannelBindInner failed! ret=%{public}d, channelId=%{public}d.", ret, channelId); 156060ff233Sopenharmony_ci } 157060ff233Sopenharmony_ci return ret; 158060ff233Sopenharmony_ci}