/* * Copyright (c) 2023 Fancy Code. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "TcpModule.h" #include "ILog.h" #include "ITcpClient.h" #include "ITcpServer.h" #include "TcpModuleMakePtr.h" #include #include #include #include static bool TcpServerObjectCheck(void *object) { if (nullptr == object) { LogError("nullptr object!\n"); return false; } if (*((const char **)(((char *)object) - sizeof(ITcpServerHeader))) != GetTcpServerModuleName()) { LogError("Illegal object!\n"); return false; } return true; } static bool TcpClientObjectCheck(void *object) { if (nullptr == object) { LogError("nullptr object!\n"); return false; } if (*((const char **)(((char *)object) - sizeof(ITcpClientHeader))) != GetTcpClientModuleName()) { LogError("Illegal object!\n"); return false; } return true; } void *CreateTcpServer(const TcpServerParam param) { std::shared_ptr *server = TcpModuleMakePtr::GetInstance()->CreateTcpServer(param); if (nullptr != *server) { (*server)->Init(); } return server; } void FreeTcpServer(void *object) { if (TcpServerObjectCheck(object) == true) { (*(std::shared_ptr *)object)->UnInit(); (*(std::shared_ptr *)object).reset(); free(((char *)object) - sizeof(ITcpServerHeader)); // TODO: bug? } } ssize_t AcceptClientWrite(void *object, const void *buf, const size_t bufLenght) { if (TcpClientAcceptObjectCheck(object) == true) { return (*(std::shared_ptr *)object)->Write(buf, bufLenght); } return TCP_MODULE_WRITE_ERROR; } void AcceptClientClose(void *object) { if (TcpClientAcceptObjectCheck(object) == true) { return (*(std::shared_ptr *)object)->Close(); } } void *CreateTcpClient(const TcpClientParam param) { std::shared_ptr *client = TcpModuleMakePtr::GetInstance()->CreateTcpClient(param); if (nullptr != *client) { (*client)->Init(); } return client; } void FreeTcpClient(void *object) { if (TcpClientObjectCheck(object) == true) { (*(std::shared_ptr *)object)->UnInit(); (*(std::shared_ptr *)object).reset(); free(((char *)object) - sizeof(ITcpClientHeader)); } } ssize_t TcpClientWrite(void *object, const void *buf, const size_t bufLenght) { if (TcpClientObjectCheck(object) == true) { return (*(std::shared_ptr *)object)->Write(buf, bufLenght); } return -1; }