123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- /*
- * Copyright (c) 2021-2022 Alibaba Group. All rights reserved.
- * License-Identifier: Apache-2.0
- *
- * 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.
- *
- */
- #ifndef _PROCESS_LINKER_H_
- #define _PROCESS_LINKER_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define PLINK_VERSION_MAJOR 0
- #define PLINK_VERSION_MINOR 1
- #define PLINK_VERSION_REVISION 1
- /* Maximum data descriptors in one packet */
- #define PLINK_MAX_DATA_DESCS 10
- /* Close all the connections from client. */
- /* Can be used as the second parameter of PLINK_close when the instance is created as SERVER */
- #define PLINK_CLOSE_ALL -1
- /* invalid file descriptor */
- #define PLINK_INVALID_FD -1
- #define DATA_HEADER_SIZE (sizeof(PlinkDescHdr))
- #define DATA_SIZE(type) (sizeof(type) - DATA_HEADER_SIZE)
- typedef void *PlinkHandle;
- typedef void PlinkDescriptor;
- typedef int PlinkChannelID;
- typedef enum _PlinkStatus
- {
- PLINK_STATUS_OK = 0,
- PLINK_STATUS_MORE_DATA = 1, /* have more data to parse in the receive buffer */
- PLINK_STATUS_TIMEOUT = 2, /* wait timeout, which means no data received within the time */
- PLINK_STATUS_NO_DATA = 3, /* no data recieved */
- PLINK_STATUS_ERROR = -1, /* general error */
- PLINK_STATUS_WRONG_PARAMS = -2, /* wrong parameters */
- PLINK_STATUS_NO_MEMORY = -3, /* not enough memory */
- } PlinkStatus;
- /* plink mode */
- typedef enum _PlinkMode
- {
- PLINK_MODE_SERVER = 0, /* run plink as server; server should be launched before client */
- PLINK_MODE_CLIENT, /* run plink as client which can connect to server */
- PLINK_MODE_MAX
- } PlinkMode;
- typedef union _PlinkVersion
- {
- struct process_linker
- {
- unsigned char major;
- unsigned char minor;
- unsigned char revision;
- unsigned char step;
- } v;
- unsigned int version;
- } PlinkVersion;
- typedef struct _PlinkDescHdr
- {
- unsigned int size; /* data size, excluding this header */
- int type; /* type of this data descriptor */
- int id; /* buffer id if it's buffer descriptor. Only values greater than 0 are valid */
- } PlinkDescHdr;
- /* data packet can be sent/received in one send/recv call */
- typedef struct _PlinkPacket
- {
- int fd; /* file descriptor. If PLINK_INVALID_FD, it's invalid */
- unsigned int timestamp; /* timestamp of this packet, the time for rendering */
- int num; /* number of valid data descriptor entries in list[] */
- PlinkDescriptor *list[PLINK_MAX_DATA_DESCS]; /* list of pointers which point to data descriptor. */
- } PlinkPacket;
- /**
- * \brief Create a plink instance.
- *
- * Create a plink object with the specified name as server or client.
- * When mode is PLINK_MODE_SERVER, a file of the specified name will be created.
- *
- * \param plink Point to the pointer of plink instance.
- * \param name Socket file name.
- * \param mode plink mode, server or client.
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_getVersion(PlinkVersion *version);
- /**
- * \brief Create a plink instance.
- *
- * Create a plink object with the specified name as server or client.
- * When mode is PLINK_MODE_SERVER, a file of the specified name will be created.
- *
- * \param plink Point to the pointer of plink instance.
- * \param name Socket file name.
- * \param mode plink mode, server or client.
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_create(PlinkHandle *plink, const char *name, PlinkMode mode);
- /**
- * \brief Create a connection between server and client
- *
- * Server calls this function to wait for connection and accept.
- * Client calls this function to connect to server.
- *
- * \param plink Pointer of plink instance.
- * \param channel id of the new connection. Valid for server only. Should be 0 for client
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_connect(PlinkHandle plink, PlinkChannelID *channel);
- /**
- * \brief Create a connection between server and client with timeout
- *
- * Server calls this function to wait for connection and accept with timeout.
- * Client calls this function to connect to server with timeout.
- *
- * \param plink Pointer of plink instance.
- * \param channel id of the new connection. Valid for server only. Should be 0 for client
- * \param timeout_ms timeout in unit of milliseconds.
- * \return PLINK_STATUS_OK successful,
- * \return PLINK_STATUS_TIMEOUT if no data received within timeout_ms,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_connect_ex(PlinkHandle plink, PlinkChannelID *channel, int timeout_ms);
- /**
- * \brief Send a packet
- *
- * Send a packet through the channel.
- *
- * \param plink Pointer of plink instance.
- * \param channel The channel to send this packet. Valid for server only. Should be 0 for client
- * \param pkt Point to the packet to be sent.
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_send(PlinkHandle plink, PlinkChannelID channel, PlinkPacket *pkt);
- /**
- * \brief Wait for data from channel
- *
- * This function returns once there is data received from the channel.
- *
- * \param plink Pointer of plink instance.
- * \param channel The channel to receive data. Valid for server only. Should be 0 for client
- * \param timeout_ms timeout in unit of milliseconds.
- * \return PLINK_STATUS_OK successful,
- * \return PLINK_STATUS_TIMEOUT if no data received within timeout_ms,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_wait(PlinkHandle plink, PlinkChannelID channel, int timeout_ms);
- /**
- * \brief Receive data
- *
- * Receive data from the channel.
- * Data descriptors of the packet are stored in the internal buffer,
- * and may be overwritten in the next PLINK_recv call.
- *
- * \param plink Pointer of plink instance.
- * \param channel The channel to receive data. Valid for server only. Should be 0 for client
- * \param pkt Point to the received packet.
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_recv(PlinkHandle plink, PlinkChannelID channel, PlinkPacket *pkt);
- /**
- * \brief Receive data with timeout
- *
- * Receive data from the channel with timeout.
- * Data descriptors of the packet are stored in the internal buffer,
- * and may be overwritten in the next PLINK_recv call.
- *
- * \param plink Pointer of plink instance.
- * \param channel The channel to receive data. Valid for server only. Should be 0 for client
- * \param pkt Point to the received packet.
- * \param timeout_ms timeout in unit of milliseconds.
- * \return PLINK_STATUS_OK successful,
- * \return PLINK_STATUS_TIMEOUT if no data received within timeout_ms,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_recv_ex(PlinkHandle plink, PlinkChannelID channel, PlinkPacket *pkt, int timeout_ms);
- /**
- * \brief Close connections
- *
- * Close connections. Server can set channel to PLINK_CLOSE_ALL to close all connections.
- *
- * \param plink Pointer of plink instance.
- * \param channel The connection to be closed. Valid for server only. Should be 0 for client
- * \return PLINK_STATUS_OK successful,
- * \return other unsuccessful.
- */
- PlinkStatus PLINK_close(PlinkHandle plink, PlinkChannelID channel);
- #ifdef __cplusplus
- }
- #endif
- #endif /* !_PROCESS_LINKER_H_ */
|